gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[reclaim-ui] 321/459: I18n


From: gnunet
Subject: [reclaim-ui] 321/459: I18n
Date: Fri, 11 Jun 2021 23:26:53 +0200

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository reclaim-ui.

commit 9c491ad5d2bfea30d09b0af6a4561ef322e912fe
Author: annawimbauer <anna.wimbauer@gmx.de>
AuthorDate: Mon Oct 5 14:04:18 2020 +0000

    I18n
---
 package.json                                       |   2 +
 src/app/app.component.html                         |   2 +-
 src/app/app.component.ts                           |  11 ++
 .../authorization-request.component.html           |  28 ++---
 .../authorization-request.component.ts             |  15 ++-
 .../edit-authorizations.component.html             |  18 +--
 .../edit-authorizations.component.ts               |  13 ++-
 .../edit-credentials.component.html                |  58 +++++-----
 .../edit-credentials/edit-credentials.component.ts |  15 ++-
 src/app/edit-identity/edit-identity.component.html |  61 +++++-----
 src/app/edit-identity/edit-identity.component.ts   |  11 ++
 src/app/identity-list/identity-list.component.html |  46 ++++----
 src/app/identity-list/identity-list.component.ts   |  17 ++-
 src/app/new-identity/new-identity.component.html   |  12 +-
 src/app/new-identity/new-identity.component.ts     |  11 ++
 src/polyfills.ts                                   |   4 +
 yarn.lock                                          | 123 ++++++++++++++++++++-
 17 files changed, 320 insertions(+), 127 deletions(-)

diff --git a/package.json b/package.json
index 5c8ae06..257c23b 100644
--- a/package.json
+++ b/package.json
@@ -19,9 +19,11 @@
     "@angular/compiler": "^10.0",
     "@angular/core": "^10.0",
     "@angular/forms": "^10.0",
+    "@angular/localize": "^10.1.3",
     "@angular/platform-browser": "^10.0",
     "@angular/platform-browser-dynamic": "^10.0",
     "@angular/router": "^10.0",
+    "@types/chrome": "^0.0.124",
     "@types/jsonwebtoken": "^8.5.0",
     "angular-oauth2-oidc": "^10.0.0",
     "bootstrap": "^4.4.1",
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 10bb6fa..7bb4ac3 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -2,5 +2,5 @@
 <router-outlet></router-outlet>
 <div style="margin: 1em" (click)="toggleExperimental()">
   <i [className]="isExperimental() ? 'fa fa-toggle-on' : 'fa 
fa-toggle-off'"></i>
-  Exerimental features <b *ngIf="isExperimental()">enabled</b><span 
*ngIf="!isExperimental()">disabled</span>
+  <b 
*ngIf="isExperimental()">{{getMessage("app_html@experimentalEnabled")}}</b><span
 
*ngIf="!isExperimental()">{{getMessage("app_html@experimentalDisabled")}}</span>
 </div>
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index a3b7a5a..0631678 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -22,4 +22,15 @@ export class AppComponent {
     this.configService.get().experiments = 
!this.configService.get().experiments;
   }
 
+  //Internationalization
+  getMessage(key, sub?){
+    var usrAgent = navigator.userAgent;
+    if (usrAgent.indexOf("Firefox") > -1){
+      return browser.i18n.getMessage(key, sub);
+    }
+    else if (usrAgent.indexOf("Chrome") > -1){
+      return chrome.i18n.getMessage(key, sub);
+    }
+  }
+
 }
diff --git a/src/app/authorization-request/authorization-request.component.html 
b/src/app/authorization-request/authorization-request.component.html
index d8fb8a4..f565d8e 100644
--- a/src/app/authorization-request/authorization-request.component.html
+++ b/src/app/authorization-request/authorization-request.component.html
@@ -1,23 +1,22 @@
 <div style="text-align: center;">
   <i class="fa fa-2x fa-openid"></i> 
-  <b class="fa-2x"> Personal information request </b>
+  <b class="fa-2x" > {{getMessage("authorization_request_html@personalInfo")}} 
</b>
   <br/>
   <span *ngIf="isClientVerified() === undefined">
     <i class="fa fa-2x fa-circle-o-notch fa-spin fa-fw"></i> 
-    <b class="fa-2x"> Verifying request, please stand by...</b>
+    <b class="fa-2x" > 
{{getMessage("authorization_request_html@verifyRequest")}}</b>
   </span>
   <br/>
 </div>
 <div class="card" *ngIf="isClientVerified()" style="margin-left:30%; 
width:40%;">
-  <div class="card-body">
+  <div class="card-body" >
     <strong>{{ oidcService.clientName }}</strong>
-    asks you to share personal information.<br/>
-    Choose an identity to let it access the following information:
+    {{getMessage("authorization_request_html@chooseId")}}
     <ul>
       <li *ngFor="let attribute of 
getRequestedStandardScopesWithDescription()"><strong>{{attribute}}</strong></li>
     </ul>
     <div *ngIf="getRequestedNonStandardClaims().length > 0">
-      as well as the following additional attributes:
+      {{getMessage("authorization_request_html@attributes")}}
       <ul>
         <li *ngFor="let attribute of 
getRequestedNonStandardClaims()"><strong>{{attribute}}</strong></li>
       </ul>
@@ -26,32 +25,29 @@
   <!-- Sharing disclaimer -->
   <div class="alert alert-warning alert-dismissible fade show mb-1" 
role="alert">
     <i class="fa fa-exclamation-triangle mr-2"></i>
-    <strong>Be careful when sharing personal data with third parties!</strong>
-    If you do not want to share information from any of your identities with
-    <i>{{ oidcService.clientName }}</i>, you may decline the request.
-    You may also permanently remove or edit information from an identity before
-    sharing.
+    
<strong>{{getMessage("authorization_request_html@personalDataWarning1")}}</strong>
+    {{getMessage("authorization_request_html@personalDataWarning2", 
oidcService.clientName)}}
   </div>
   <div style="margin: 1em;">
     <button class="btn btn-danger m-1 mt-4" *ngIf="isClientVerified()" 
(click)="cancelRequest()" style="margin-bottom: -4%;">
-      <span class="fa fa-ban"></span> Decline
+      <span class="fa fa-ban"></span> {{getMessage("Decline")}}
     </button>
     <button class="btn btn-primary m-1 mt-4" [routerLink]="['/']" 
*ngIf="isClientVerified()">
-      <span class="fa fa-arrow-circle-right"></span> Select identity...
+      <span class="fa fa-arrow-circle-right"></span> 
{{getMessage("authorization_request_html@selectId")}}
     </button>
   </div>
 </div>
 <div *ngIf="isClientVerified() !== undefined && !isClientVerified()" 
style="text-align: center;">
   <div class="alert alert-danger show" role="alert">
-    <b>Authorization failed.</b><br/>
+    <b >{{getMessage("authorization_request_html@authFailed")}}</b><br/>
     <button class="btn btn-primary mt-4" *ngIf="!isClientVerified()" 
(click)="retryVerify();">
-      <span class="fa fa-openid"></span> Retry
+      <span class="fa fa-openid"></span> 
{{getMessage("authorization_request_html@retry")}}
     </button>
   </div>
 </div>
 <div *ngIf="isClientVerified() === undefined" style="text-align: center;">
   <button class="btn btn-danger mt-4" *ngIf="isClientVerified() === undefined" 
(click)="cancelRequest()">
-    <span class="fa fa-ban"></span> Cancel verification request
+    <span class="fa fa-ban"></span> 
{{getMessage("authorization_request_html@cancelRequest")}}
   </button>
 </div>
 
diff --git a/src/app/authorization-request/authorization-request.component.ts 
b/src/app/authorization-request/authorization-request.component.ts
index 1b5bfe4..2172b2d 100644
--- a/src/app/authorization-request/authorization-request.component.ts
+++ b/src/app/authorization-request/authorization-request.component.ts
@@ -9,6 +9,8 @@ import { OpenIdService } from '../open-id.service';
 })
 export class AuthorizationRequestComponent implements OnInit {
 
+  browser: typeof browser;
+
   constructor(private oidcService: OpenIdService,
               private router: Router) { }
 
@@ -30,7 +32,7 @@ export class AuthorizationRequestComponent implements OnInit {
 
   cancelRequest() {
     this.oidcService.cancelAuthorization().subscribe(() => {
-      console.log('Request cancelled');
+      
console.log(this.getMessage("authorization_request_ts@requestCancelled"));
       this.router.navigate(['/']);
       //Manually reset this component
     });
@@ -40,5 +42,16 @@ export class AuthorizationRequestComponent implements OnInit 
{
     this.oidcService.getClientName();
   }
 
+  //Internationalization
+  getMessage(key, sub?){
+    var usrAgent = navigator.userAgent;
+    if (usrAgent.indexOf("Firefox") > -1){
+      return browser.i18n.getMessage(key, sub);
+    }
+    else if (usrAgent.indexOf("Chrome") > -1){
+      return chrome.i18n.getMessage(key, sub);
+    }
+  }
+
 
 }
diff --git a/src/app/edit-authorizations/edit-authorizations.component.html 
b/src/app/edit-authorizations/edit-authorizations.component.html
index ddb918d..21c3b90 100644
--- a/src/app/edit-authorizations/edit-authorizations.component.html
+++ b/src/app/edit-authorizations/edit-authorizations.component.html
@@ -1,8 +1,8 @@
 <!-- Identity edit screen -->
 <div class="m-2 card">
   <div class="card-avatar card-img-top">
-    <div class="card-avatar-character text-dark">
-      Manage authorizations for <i>{{ identity.name }}</i>
+    <div class="card-avatar-character text-dark" >
+      {{getMessage("edit_authorizations_html@manageAuths")}} <i>{{ 
identity.name }}</i>
     </div>
   </div>
   <div class="card-body">
@@ -13,12 +13,12 @@
           <tr>
             <th scope="col">
               <h6 class="card-subtitle mb-2">
-                Authorized Entity:
+                {{getMessage("edit_authorizations_html@authEntity")}}
               </h6>
             </th>
             <th scope="col">
               <h6 class="card-subtitle mb-2">
-                Shared attributes:
+                {{getMessage("edit_authorizations_html@sharedAttributes")}}
               </h6>
             </th>
             <th scope="col"></th>
@@ -38,15 +38,15 @@
             </td>
             <td>
               <button class="btn btn-primary" *ngIf="showConfirmRevoke != 
ticket" (click)="confirmRevoke(ticket)">
-                <span class="fa fa-unlink"></span> Revoke
+                <span class="fa fa-unlink"></span> {{getMessage("Revoke")}}
               </button>
               <div class="alert alert-danger fade show" 
*ngIf="showConfirmRevoke == ticket">
-                Do you really want to revoke this authorization?<br/><br/>
+                
{{getMessage("edit_authorizations_html@revokeVerifikation")}}<br/><br/>
                 <button class="btn btn-primary m-2" 
(click)="revokeTicket(ticket)">
-                  <span class="fa fa-check"></span> Yes
+                  <span class="fa fa-check"></span> {{getMessage("Yes")}}
                 </button>
                 <button class="btn btn-primary m-2" 
(click)="hideConfirmRevoke()">
-                  <span class="fa fa-close"></span> No
+                  <span class="fa fa-close"></span> {{getMessage("No")}}
                 </button>
               </div>
             </td>
@@ -57,7 +57,7 @@
     <!-- Edit card buttons -->
     <div>
       <button class="btn btn-primary" [routerLink]="['/edit-identity', 
identity.name]">
-        <span class="fa fa-back"></span> Back to {{identity.name}}
+        <span class="fa fa-back"></span> 
{{getMessage("edit_authorizations_html@BackTo", identity.name)}}
       </button>
     </div>
   </div>
diff --git a/src/app/edit-authorizations/edit-authorizations.component.ts 
b/src/app/edit-authorizations/edit-authorizations.component.ts
index 79b2efe..35984ef 100644
--- a/src/app/edit-authorizations/edit-authorizations.component.ts
+++ b/src/app/edit-authorizations/edit-authorizations.component.ts
@@ -54,7 +54,7 @@ export class EditAuthorizationsComponent implements OnInit {
 
   getAudienceName(ticket) {
     if (undefined === this.audienceNames[ticket.audience]) {
-      return 'Unknown';
+      return this.getMessage("edit_authorizations_ts@unknown");
     }
     return this.audienceNames[ticket.audience];
   }
@@ -140,5 +140,16 @@ export class EditAuthorizationsComponent implements OnInit 
{
     });
   }
 
+  //Internationalization
+  getMessage(key, sub?){
+    var usrAgent = navigator.userAgent;
+    if (usrAgent.indexOf("Firefox") > -1){
+      return browser.i18n.getMessage(key, sub);
+    }
+    else if (usrAgent.indexOf("Chrome") > -1){
+      return chrome.i18n.getMessage(key, sub);
+    }
+  }
+
 
 }
diff --git a/src/app/edit-credentials/edit-credentials.component.html 
b/src/app/edit-credentials/edit-credentials.component.html
index 0bf7189..9572ca0 100644
--- a/src/app/edit-credentials/edit-credentials.component.html
+++ b/src/app/edit-credentials/edit-credentials.component.html
@@ -1,13 +1,13 @@
 <!-- Identity edit screen -->
 <div class="m-2 card">
   <div class="card-avatar card-img-top">
-    <div class="card-avatar-character text-dark">
-      Third party credentials for <i>{{ identity.name }}</i>
+    <div class="card-avatar-character text-dark" >
+      {{getMessage("edit_credentials_html@credentialsFor")}} <i>{{ 
identity.name }}</i>
     </div>
   </div>
   <!-- Credential management -->
   <div class="card-body">
-    <h3>Link account:</h3>
+    <h3 >{{getMessage("edit_credentials_html@linkAccount")}}</h3>
     <!--IdProvider-Discovery-->
     <div>
       <!--Email not found Warning-->
@@ -16,53 +16,50 @@
         <span class="fa fa-warning"></span> {{errorMassage}}
       </div>
       <!--Issuer Discovery Warning-->
-      <div *ngIf="!isValidEmailforDiscovery()" class="alert alert-primary 
alert-dismissible fade show" role="alert">
-        <span class="fa fa-warning"></span> This account is not compatible 
with re:claimID.
+      <div *ngIf="!isValidEmailforDiscovery()" class="alert alert-primary 
alert-dismissible fade show" role="alert" >
+        <span class="fa fa-warning"></span> 
{{getMessage("edit_credentials_html@notCompatible")}}
       </div>
       <div *ngIf="!newIdProviderDiscovered() && !loggedIn()"
-        class="alert alert-secondary alert-dismissible fade show my-2" 
role="alert">
-        <span class="fa fa-info"> </span>  <b class="ml-2">INFO</b><br/>
-        It is possible to link your external
-        accounts with a re:claimID identity. To do so, enter you email address
-        below and click "Check compatibility". <br/><i>NOTE:</i> Not all 
external accounts
-        support linking to re:claimID identities.<br/>
+        class="alert alert-secondary alert-dismissible fade show my-2" 
role="alert" >
+        <span class="fa fa-info"> </span>  <b 
class="ml-2">{{getMessage("edit_credentials_html@info")}}</b><br/>
+        {{getMessage("edit_credentials_html@linkAccountInfo")}}
       </div>
       <div *ngIf="!newIdProviderDiscovered()" class="my-2 col-lg-4">
         <input placeholder="user@example.com" [(ngModel)]="webfingerEmail">
-        <button *ngIf="!newIdProviderDiscovered()" class="btn btn-primary 
fhg-link" (click)="discoverIdProvider()">
-          <span class="fa fa-search"></span> Check compatibility
+        <button *ngIf="!newIdProviderDiscovered()" class="btn btn-primary 
fhg-link" (click)="discoverIdProvider()" >
+          <span class="fa fa-search"></span> 
{{getMessage("edit_credentials_html@checkCompatability")}}
         </button>
       </div>
       <!--Description-->
       <!--Link account-->
       <div *ngIf="newIdProviderDiscovered() && !loggedIn()" class="mb-3 px-2">
-          <div class="mx-n2">Available claims to request:</div>
+          <div class="mx-n2" 
>{{getMessage("edit_credentials_html@availableClaims")}}</div>
           <div *ngFor="let scope of scopes" class="mx-2">
             <i class="fa text-primary" [class.fa-toggle-off]="!scope.chosen" 
[class.fa-toggle-on]="scope.chosen" 
[class.text-muted]="necessaryScope(scope.scope)" 
(click)="!necessaryScope(scope.scope) && scope.chosen = !scope.chosen"></i>
             <span class="ml-1" 
[class.text-muted]="necessaryScope(scope.scope)">{{scope.scope}}</span>
             <!--<input type="checkbox" class="form-check-input" id="scopes" 
[disabled]="necessaryScope(scope.scope)" [(ngModel)]="scope.chosen">-->
             <!--<label class="form-check-label" 
for="scope.chosen">{{scope.scope}}</label>-->
           </div>
-        <button class="btn btn-primary mb-1 mt-2 fhg-link" 
(click)="loginFhgAccount()">
-          <span class="fa fa-link"></span> Link
+        <button class="btn btn-primary mb-1 mt-2 fhg-link" 
(click)="loginFhgAccount()" >
+          <span class="fa fa-link"></span> 
{{getMessage("edit_credentials_html@link")}}
         </button>
-        <button class="btn btn-primary mb-1 fhg-link" 
(click)="cancelLinking()">
-          <span class="fa fa-close"></span> Cancel
+        <button class="btn btn-primary mb-1 fhg-link" 
(click)="cancelLinking()" >
+          <span class="fa fa-close"></span> {{getMessage("Cancel")}}
         </button>
       </div>
     </div>
     <hr />
 
-    <h3>Credentials:</h3>
+    <h3 >{{getMessage("edit_credentials_html@credentials")}}</h3>
     <!-- Credential creation warning -->
     <div
       *ngIf="loggedIn() && !credentialNameValid(newCredential) || 
!credentialTypeValid(newCredential) || !credentialValueValid(newCredential)"
-      class="alert alert-primary alert-dismissible fade show" role="alert">
-      <span class="fa fa-warning"></span> Note:
+      class="alert alert-primary alert-dismissible fade show" role="alert" >
+      <span class="fa fa-warning"></span> 
{{getMessage("edit_credentials_html@note")}}
       <ul>
-        <li>Only use alphanumeric credential names.</li>
-        <li>You cannot define the same name twice.</li>
-        <li>Types and values may not be empty!</li>
+        <li>{{getMessage("edit_credentials_html@note1")}}</li>
+        <li>{{getMessage("edit_credentials_html@note2")}}</li>
+        <li>{{getMessage("edit_credentials_html@note3")}}</li>
       </ul>
     </div>
 
@@ -70,11 +67,10 @@
     <table class="table pb-1" style="">
       <thead>
         <tr>
-          <th>Name</th>
-          <th>Type</th>
-          <th>Expires</th>
-          <!--<th>Issuer</th>-->
-          <th>Issuer</th>
+          <th >{{getMessage("edit_credentials_html@name")}}</th>
+          <th >{{getMessage("edit_credentials_html@type")}}</th>
+          <th >{{getMessage("edit_credentials_html@expires")}}</th>
+          <th >{{getMessage("edit_credentials_html@issuer")}}</th>
         </tr>
       </thead>
       <tbody>
@@ -102,7 +98,7 @@
             </button>
           </td>
           <td>
-            <div *ngIf="!isCredentialValid(credential)"> <span 
style="color:#f00"> Expired </span> <span
+            <div *ngIf="!isCredentialValid(credential)"> <span 
style="color:#f00" > {{getMessage("edit_credentials_html@expired")}} </span> 
<span
                 class="fa fa-times"></span> </div>
           </td>
         </tr>
@@ -135,7 +131,7 @@
     <!-- Edit card buttons -->
     <div>
       <button class="btn btn-primary" (click)="goBack()" 
[disabled]="!canGoBack()">
-        <span class="fa fa-save"></span> Back
+        <span class="fa fa-save"></span> {{getMessage("Back")}}
       </button>
     </div>
   </div>
diff --git a/src/app/edit-credentials/edit-credentials.component.ts 
b/src/app/edit-credentials/edit-credentials.component.ts
index 39b32d6..ced66ad 100644
--- a/src/app/edit-credentials/edit-credentials.component.ts
+++ b/src/app/edit-credentials/edit-credentials.component.ts
@@ -269,10 +269,10 @@ export class EditCredentialsComponent implements OnInit {
     },
     error => {
       if (error.status == 404){
-        this.errorMassage = 'No account found with this email'
+        this.errorMassage = this.getMessage("edit_credentials_ts@noAccount");
       }
       else{
-        this.errorMassage = 'An Error has occured - This may have been caused 
by a wrong e-mail address'
+        this.errorMassage = 
this.getMessage("edit_credentials_ts@errorWrongAddress");
       }
       this.emailNotFoundAlertClosed = false;
         setTimeout(() => this.emailNotFoundAlertClosed = true, 20000);
@@ -355,5 +355,16 @@ export class EditCredentialsComponent implements OnInit {
     this.scopes = [];
   }
 
+  //Internationalization
+  getMessage(key, sub?){
+    var usrAgent = navigator.userAgent;
+    if (usrAgent.indexOf("Firefox") > -1){
+      return browser.i18n.getMessage(key, sub);
+    }
+    else if (usrAgent.indexOf("Chrome") > -1){
+      return chrome.i18n.getMessage(key, sub);
+    }
+  }
+
 
 }
diff --git a/src/app/edit-identity/edit-identity.component.html 
b/src/app/edit-identity/edit-identity.component.html
index 3445684..33c0a0e 100644
--- a/src/app/edit-identity/edit-identity.component.html
+++ b/src/app/edit-identity/edit-identity.component.html
@@ -12,10 +12,9 @@
   <!-- Attribute table -->
   <div class="card-body">
     <div>
-      <h3 class="card-subtitle mb-2">Basic user information <span 
(click)="showGeneralInfo = !showGeneralInfo" class="fa 
fa-question-circle"></span></h3>
-      <div class="alert alert-secondary fade show" *ngIf="showGeneralInfo">
-        The attributes below correspond to the standard scopes of the OpenID 
Connect
-        specification: ``profile'', ``email'', ``phone'' and ``address''.
+      <h3 class="card-subtitle mb-2"> 
{{getMessage("edit_identity_html@basicInfo")}} <span (click)="showGeneralInfo = 
!showGeneralInfo" class="fa fa-question-circle"></span></h3>
+      <div class="alert alert-secondary fade show" *ngIf="showGeneralInfo" >
+        {{getMessage("edit_identity_html@standardScopes")}}
       </div>
 
       <div class="table pb-1">
@@ -30,7 +29,7 @@
             </div>
             <div class="col-sm">
               <input *ngIf="!isClaimCred(claim)" placeholder="Value" 
[(ngModel)]="claim.value">
-              <span *ngIf="isClaimCred(claim)" >{{ getCredValue(claim) }} 
issued by <i>{{ getIssuer(claim) }}</i> as attribute for ``{{ claim.value 
}}''</span>
+              <span *ngIf="isClaimCred(claim)"  
>{{getMessage("edit_identity_html@claimAsAttribute", [getCredValue(claim), 
getIssuer(claim), claim.value])}}</span>
             </div>
             <div class="col-sm">
               <button class="btn btn-primary" (click)="deleteAttribute(claim)" 
*ngIf="!isClaimCred(claim)">
@@ -71,7 +70,7 @@
                 <i *ngIf="isClaimRequested(claim)" class="fa 
fa-openid"></i><b> {{ getDescription(claim) }}</b></div></div>
             <div class="col-sm">
               <input *ngIf="!isClaimCred(claim)" placeholder="Value" 
[(ngModel)]="claim.value">
-              <span *ngIf="isClaimCred(claim)" >{{ getCredValue(claim) }} 
issued by <i>{{ getIssuer(claim) }}</i> as attribute for ``{{ claim.value 
}}''</span>
+              <span *ngIf="isClaimCred(claim)" 
>{{getMessage("edit_identity_html@claimAsAttribute", [getCredValue(claim), 
getIssuer(claim), claim.value])}}</span>
             </div>
             <div class="col-sm">
               <button class="btn btn-primary" (click)="deleteAttribute(claim)" 
*ngIf="!isClaimCred(claim)">
@@ -114,7 +113,7 @@
                 <i *ngIf="isClaimRequested(claim)" class="fa 
fa-openid"></i><b> {{ getDescription(claim) }}</b></div></div>
             <div class="col-sm">
               <input *ngIf="!isClaimCred(claim)" placeholder="Value" 
[(ngModel)]="claim.value">
-              <span *ngIf="isClaimCred(claim)" >{{ getCredValue(claim) }} 
issued by <i>{{ getIssuer(claim) }}</i> as attribute for ``{{ claim.value 
}}''</span>
+              <span *ngIf="isClaimCred(claim)" 
>{{getMessage("edit_identity_html@claimAsAttribute", [getCredValue(claim), 
getIssuer(claim), claim.value])}}</span>
             </div>
             <div class="col-sm">
               <button class="btn btn-primary" (click)="deleteAttribute(claim)" 
*ngIf="!isClaimCred(claim)">
@@ -156,7 +155,7 @@
                 <i *ngIf="isClaimRequested(claim)" class="fa 
fa-openid"></i><b> {{ getDescription(claim) }}</b></div></div>
             <div class="col-sm">
               <input *ngIf="!isClaimCred(claim)" placeholder="Value" 
[(ngModel)]="claim.value">
-              <span *ngIf="isClaimCred(claim)" >{{ getCredValue(claim) }} 
issued by <i>{{ getIssuer(claim) }}</i> as attribute for ``{{ claim.value 
}}''</span>
+              <span *ngIf="isClaimCred(claim)" 
>{{getMessage("edit_identity_html@claimAsAttribute", [getCredValue(claim), 
getIssuer(claim), claim.value])}}</span>
             </div>
             <div class="col-sm">
               <button class="btn btn-primary" (click)="deleteAttribute(claim)" 
*ngIf="!isClaimCred(claim)">
@@ -176,14 +175,14 @@
                 <i *ngIf="isClaimRequested(claim)" class="fa 
fa-openid"></i><b> {{ getDescription(claim) }}</b></div></div>
             <div class="col-sm">
               <select *ngIf="isExperimental()" class="custom-select" 
(change)="claim.flag=$event.target.value; ">
-                <option value="0">Plain</option>
-                <option value="1">Credential</option>
+                <option value="0">{{ getMessage("edit_identity_html@plain") 
}}</option>
+                <option value="1">{{ 
getMessage("edit_identity_html@credential") }}</option>
               </select>
 
               <input *ngIf="claim.flag == '0'" placeholder="Value" 
[(ngModel)]="claim.value">
               <select *ngIf="claim.flag == '1'" class="custom-select"
-                (change)="claim.credential=$event.target.value; ">
-                <option value="">Select credential source</option>
+                (change)="claim.credential=$event.target.value; " >
+                <option value="">{{ 
getMessage("edit_identity_html@selectSource") }}</option>
                 <option *ngFor="let cred of credentials" value={{cred.id}}>
                 {{cred.name}}
                 </option>
@@ -191,7 +190,7 @@
 
               <select class="custom-select"
                 *ngIf="(claim.credential !== '') && (claim.flag == '1')" 
(change)="claim.value=$event.target.value">
-                <option value="">Select claim</option>
+                <option value="">{{ 
getMessage("edit_identity_html@selectClaim") }}</option>
                 <option *ngFor="let att of credentialValuesForClaim(claim)" 
value={{att.name}}>
                 {{att.value}} <i>({{att.name}})</i>
                 </option>
@@ -207,9 +206,9 @@
       </div>
 
 
-      <h3 class="card-subtitle mb-2">Additional information <span 
(click)="showExtraInfo = !showExtraInfo" class="fa 
fa-question-circle"></span></h3>
-      <div class="alert alert-secondary fade show" *ngIf="showExtraInfo">
-        Non-standard claims which are not explicitly covered in the OpenID 
Connect core specification.
+      <h3 class="card-subtitle mb-2" >{{ 
getMessage("edit_identity_html@additionalInfo") }}<span (click)="showExtraInfo 
= !showExtraInfo" class="fa fa-question-circle"></span></h3>
+      <div class="alert alert-secondary fade show" *ngIf="showExtraInfo" >
+        {{ getMessage("edit_identity_html@non_standardClaims") }}
       </div>
 
       <!-- Missing "non-standard" claims that are requested -->
@@ -223,14 +222,14 @@
             <div class="col-sm">
               <input *ngIf="!isClaimCredentialRequested(missing)" 
placeholder="Value" [(ngModel)]="missing.value">
               <select *ngIf="isClaimCredentialRequested(missing)" 
class="custom-select" (change)="missing.credential=$event.target.value; ">
-                <option value="">Select credential source</option>
+                <option value="">{{ 
getMessage("edit_identity_html@selectSource") }}</option>
                 <option *ngFor="let cred of credentials" value={{cred.id}}>
                   {{cred.name}}
                 </option>
               </select>
 
               <select *ngIf="isClaimCredentialRequested(missing) && 
missing.credential !== ''" class="custom-select" 
(change)="missing.value=$event.target.value">
-                <option value="">Select claim</option>
+                <option value="">{{ 
getMessage("edit_identity_html@selectClaim") }}</option>
                 <option *ngFor="let claim of credentialValuesForCred(missing)" 
value={{claim.name}}>
                   {{claim.value}} <i>({{claim.name}})</i>
                 </option>
@@ -253,7 +252,7 @@
             </div>
             <div class="col-sm">
               <input *ngIf="!isClaimCred(attribute)" placeholder="Value" 
[(ngModel)]="attribute.value">
-              <span *ngIf="isClaimCred(attribute)" >{{ getCredValue(attribute) 
}} issued by <i>{{ getIssuer(attribute) }}</i> as attribute for ``{{ 
attribute.value }}''</span>
+              <span *ngIf="isClaimCred(attribute)" 
>{{getMessage("edit_identity_html@claimAsAttribute", [getCredValue(claim), 
getIssuer(claim), claim.value])}}</span>
             </div>
             <div class="col-sm">
               <button class="btn btn-primary" 
(click)="deleteAttribute(attribute)" *ngIf="!isClaimCred(attribute)">
@@ -272,13 +271,13 @@
             <div class="col-sm">
 
               <select *ngIf="isExperimental()" class="custom-select" 
(change)="newAttribute.flag=$event.target.value; ">
-                <option value="0">Plain</option>
-                <option value="1">Credential</option>
+                <option value="0">{{ getMessage("edit_identity_html@plain") 
}}</option>
+                <option value="1">{{ 
getMessage("edit_identity_html@credential") }}</option>
               </select>
               <input *ngIf="newAttribute.flag == '0'" placeholder="Value" 
[class.text-danger]="!attributeValueValid(newAttribute)" 
[(ngModel)]="newAttribute.value">
               <select *ngIf="newAttribute.flag == '1'" class="custom-select"
-                (change)="newAttribute.credential=$event.target.value; ">
-                <option value="">Select credential source</option>
+                (change)="newAttribute.credential=$event.target.value; " >
+                <option value="">{{ 
getMessage("edit_identity_html@selectSource") }}</option>
                 <option *ngFor="let cred of credentials" value={{cred.id}}>
                 {{cred.name}}
                 </option>
@@ -286,7 +285,7 @@
 
               <select class="custom-select"
                 *ngIf="newAttribute.credential !== '' && newAttribute.flag == 
'1'" (change)="newAttribute.value=$event.target.value">
-                <option value="">Select claim</option>
+                <option value="" >{{ 
getMessage("edit_identity_html@selectClaim") }}</option>
                 <option *ngFor="let claim of 
credentialValuesForClaim(newAttribute)" value={{claim.name}}>
                 {{claim.value}} <i>({{claim.name}})</i>
                 </option>
@@ -302,11 +301,11 @@
     </div>
     <!-- Attribute creation warning -->
     <div *ngIf="!attributeNameValid(newAttribute) || 
!attributeValueValid(newAttribute)" class="alert alert-primary 
alert-dismissible fade show" role="alert">
-      <span class="fa fa-warning"></span> Note:
+      <span class="fa fa-warning"></span> {{ 
getMessage("edit_identity_html@note") }}
       <ul>
-        <li>Only use alphanumeric attribute names.</li>
-        <li>You cannot define the same name twice.</li>
-        <li>Attribute values may not be empty!</li>
+        <li>{{ getMessage("edit_identity_html@note1") }}</li>
+        <li>{{ getMessage("edit_identity_html@note2") }}</li>
+        <li>{{ getMessage("edit_identity_html@note3") }}</li>
       </ul>
     </div>
 
@@ -315,15 +314,15 @@
     <!-- Edit card buttons -->
     <div>
       <button class="btn btn-primary" (click)="saveIdentity()" 
[disabled]="!canSaveIdentity()">
-        <span class="fa fa-save"></span> Save and Back
+        <span class="fa fa-save"></span> {{ getMessage("SaveAndBack") }}
       </button>
       <button *ngIf="!inOpenIdFlow()" class="btn btn-primary" 
[routerLink]="['/edit-authorizations', identity.name]" [style.float]="'right'">
         <span class="fa fa-openid"></span>
-        Manage authorizations
+        {{ getMessage("edit_identity_html@manageAuths") }}
       </button>
       <button *ngIf="!inOpenIdFlow() && isExperimental()" class="btn 
btn-primary" [routerLink]="['/edit-credentials', identity.name]" 
[style.float]="'right'">
         <span class="fa fa-openid"></span>
-        Manage credentials
+        {{ getMessage("edit_identity_html@manageCreds") }}
       </button>
     </div>
   </div>
diff --git a/src/app/edit-identity/edit-identity.component.ts 
b/src/app/edit-identity/edit-identity.component.ts
index c1f065b..035acfa 100644
--- a/src/app/edit-identity/edit-identity.component.ts
+++ b/src/app/edit-identity/edit-identity.component.ts
@@ -535,4 +535,15 @@ export class EditIdentityComponent implements OnInit {
     return this.configService.get().experiments;
   }
 
+  //Internationalization
+  getMessage(key, sub?){
+    var usrAgent = navigator.userAgent;
+    if (usrAgent.indexOf("Firefox") > -1){
+      return browser.i18n.getMessage(key, sub);
+    }
+    else if (usrAgent.indexOf("Chrome") > -1){
+      return chrome.i18n.getMessage(key, sub);
+    }
+  }
+
 }
diff --git a/src/app/identity-list/identity-list.component.html 
b/src/app/identity-list/identity-list.component.html
index c4f2e49..79160e8 100644
--- a/src/app/identity-list/identity-list.component.html
+++ b/src/app/identity-list/identity-list.component.html
@@ -3,7 +3,7 @@
   <div class="logo"><img src="assets/reclaim_icon.png"/></div>
   <hr>
   <div style="text-align: center; font-size: 18px;">
-    <strong> Unable to connect to GNUnet. <br/> Maybe it is not running? 
</strong>
+    <strong> {{ getMessage("identity_list_html@unableToConnect") }} </strong>
   </div>
 </oid-modal>
 
@@ -15,8 +15,8 @@
     <div class="search-wrapper">
     <input class="form-control mr-sm-2" type="search" [(ngModel)]="searchTerm" 
name="searchTerm" placeholder="Search identities" style="border-radius: 2em;">
     </div>
-    <button class="btn btn-primary" [routerLink]="['/new-identity']">
-      <span class="fa fa-user-plus"></span> New identity
+    <button class="btn btn-primary" [routerLink]="['/new-identity']" >
+      <span class="fa fa-user-plus"></span> {{ 
getMessage("identity_list_html@newId") }}
     </button>
   </div>
   <br/>
@@ -25,7 +25,7 @@
 <!-- Cancel authorization -->
 <div style="margin-bottom: 1em; text-align: center;" *ngIf="inOpenIdFlow()">
     <button *ngIf="inOpenIdFlow()" class="btn btn-danger mt-2" 
(click)="cancelRequest()">
-      <span class="fa fa-ban"></span> Decline authorization request
+      <span class="fa fa-ban"></span> {{ 
getMessage("identity_list_html@declineRequest") }}
     </button>
 </div>
 
@@ -33,7 +33,7 @@
 <div *ngFor="let err of errorInfos" class="alert alert-danger show" 
role="alert">
   <b>ERROR</b>
   <button class="btn btn-primary ml-4" 
(click)="errorInfos.splice(errorInfos.indexOf(err,0), 1)">
-    <span>Dismiss</span>
+    <span>{{ getMessage("identity_list_html@dismiss") }}</span>
   </button>
   <br/>
   {{err}}
@@ -41,16 +41,16 @@
 
 <!-- No identities present -->
 <div *ngIf="isConnected() && 0 == identities.length" style="text-align: 
center;" class="alert alert-secondary alert-dismissible fade show" role="alert">
-  You don't have any identities yet.<br/><br/>
+  {{ getMessage("identity_list_html@noId") }}<br/><br/>
   <button class="btn btn-primary" [routerLink]="['/new-identity']">
-    <span class="fa fa-plus"></span> Add your first identity!
+    <span class="fa fa-plus"></span> {{ 
getMessage("identity_list_html@addFirstId") }}
   </button>
 </div>
 
 <!-- Identity cards -->
 <!-- No match -->
 <div *ngIf="canSearch()">
-  <div *ngIf="(identities | search: searchTerm).length == 0" 
style="text-align: center;" class="alert alert-secondary alert-dismissible fade 
show" role="alert">No matching identities.</div>
+  <div *ngIf="(identities | search: searchTerm).length == 0" 
style="text-align: center;" class="alert alert-secondary alert-dismissible fade 
show" role="alert">{{ getMessage("identity_list_html@noMatchingIds") }}</div>
 </div>
 <!-- Cards -->
 <div class="card-columns p-2 mr-5 ml-5" [ngStyle]="{'column-count': '1'}" 
style="display: flex; flex-direction:column; align-items:center">
@@ -69,33 +69,33 @@
     </div>
     <!-- Identity deletion confirmation -->
     <div class="alert alert-danger fade show" [hidden]="showConfirmDelete != 
identity">
-      Do you really want to delete this identity?<br/><br/>
+      {{ getMessage("identity_list_html@verifyDelete") }}<br/><br/>
       <button class="btn btn-primary" (click)="deleteIdentity(identity)">
-        <span class="fa fa-trash"></span> Delete
+        <span class="fa fa-trash"></span> {{ getMessage("Delete") }}
       </button>
       <button class="btn btn-primary" (click)="hideConfirmDelete()">
-        <span class="fa fa-close"></span> Cancel
+        <span class="fa fa-close"></span> {{ getMessage("Cancel") }}
       </button>
     </div>
     <!-- Maybe add some info to identities? - dialog -->
-    <div class="alert alert-secondary fade show" 
[hidden]="hasAttributes(identity)">
-      This identity has no attributes. Maybe try <a class="buttonlink" 
[routerLink]="['/edit-identity', identity.name]">adding some?</a>
+    <div class="alert alert-secondary fade show" 
[hidden]="hasAttributes(identity)" >
+      {{ getMessage("identity_list_html@noAttributes1") }} <a 
class="buttonlink" [routerLink]="['/edit-identity', identity.name]">{{ 
getMessage("identity_list_html@noAttributes2") }}</a>
     </div>
     <div [hidden]="!isAnyRequestedClaimMissing(identity)"
       class="alert alert-warning alert-dismissible fade show"
       [class.alert-warning]="!isAnyRequiredClaimMissing(identity)"
       [class.alert-danger]="isAnyRequiredClaimMissing(identity)"
-      role="alert">
-      <span class="fa fa-openid"></span> This identity is missing some 
requested information:
+      role="alert" >
+      <span class="fa fa-openid"></span> {{ 
getMessage("identity_list_html@missingInformation") }}
       <ul>
         <li *ngIf="isProfileRequested() && isProfileMissing(identity)"><b>{{ 
getProfileDescription() }}</b></li>
         <li *ngIf="isEmailRequested() && isEmailMissing(identity)"><b>{{ 
getEmailDescription() }}</b></li>
         <li *ngIf="isPhoneRequested() && isPhoneMissing(identity)"><b>{{ 
getPhoneDescription() }}</b></li>
         <li *ngIf="isAddressRequested() && isAddressMissing(identity)"><b>{{ 
getAddressDescription() }}</b></li>
-        <li *ngFor="let attr of 
getMissingClaims(identity)"><b>{{attr.name}}</b><i *ngIf="!isOptional(attr)"> 
(required)</i></li>
+        <li *ngFor="let attr of 
getMissingClaims(identity)"><b>{{attr.name}}</b><i *ngIf="!isOptional(attr)"> 
({{ getMessage("identity_list_html@required") }})</i></li>
       </ul>
       <button class="btn btn-primary" [routerLink]="['/edit-identity', 
identity.name]">
-        <span class="fa fa-edit"></span> Edit identity
+        <span class="fa fa-edit"></span> {{ 
getMessage("identity_list_html@editId") }}
       </button>
     </div>
 
@@ -121,14 +121,14 @@
           </div>
           <div *ngIf="(openIdentity != identity) && 
hasLotsOfAttributes(identity)" class="ml-4">
             <div>
-              <i>... and {{ attributes[identity.pubkey].length - 5 }} more 
attributes</i><br/>
+              <i>{{ getMessage("identity_list_html@moreAttributes", 
attributes[identity.pubkey].length - 5) }}</i><br/>
             </div>
           </div>
         </div>
         </div>
         <button class="btn btn-primary mt-3" (click)="openIdentity = identity" 
*ngIf="(openIdentity != identity) && hasLotsOfAttributes(identity)">
           <i class="fa fa-expand"></i>
-            Show all attributes
+          {{ getMessage("identity_list_html@showAll") }}
         </button>
       </div>
     </div>
@@ -136,8 +136,8 @@
       <button [disabled]="!isClientVerified() || 
isAnyRequiredClaimMissing(identity)"
         (click)="loginIdentity(identity)"
         class="btn btn-primary mr-1 openid-login">
-        <span *ngIf="isClientVerified()">Share information marked with <i 
class="fa fa-openid text-primary"></i> from this identity.</span>
-        <span *ngIf="!isClientVerified()"><i class="fa 
fa-exclamation-circle"></i> Sharing disabled</span>
+        <span *ngIf="isClientVerified()" >{{ 
getMessage("identity_list_html@shareInfo1") }} <i class="fa fa-openid 
text-primary"></i> {{ getMessage("identity_list_html@shareInfo2") }}</span>
+        <span *ngIf="!isClientVerified()" ><i class="fa 
fa-exclamation-circle"></i> {{ getMessage("identity_list_html@sharingDisabled") 
}}</span>
       </button>
     </div>
   </div>
@@ -148,12 +148,12 @@
       <div class="card-avatar-character text-dark">
         <!--<div class="icon m-1 text-uppercase" 
[style.background-color]="intToRGB(identity.pubkey)">{{ 
identity.name[0]}}</div>-->
         <i class="fa fa-user-circle"></i>
-        <span class="m-1" style="display: inline-block"><i> New 
Identity</i></span>
+        <span class="m-1" style="display: inline-block" ><i>{{ 
getMessage("identity_list_html@newId") }}</i></span>
       </div>
     </div>
     <div class="card-body">
       <div style="text-align:center" class="mb-4">
-        <i>Click to add a new identity.</i>
+        <i>{{ getMessage("identity_list_html@addId") }}</i>
       </div>
       <div style="text-align:center">
         <img src="assets/reclaim_icon.png" style="width: 5em;opacity: 0.3;">
diff --git a/src/app/identity-list/identity-list.component.ts 
b/src/app/identity-list/identity-list.component.ts
index 5b48d98..0e0a596 100644
--- a/src/app/identity-list/identity-list.component.ts
+++ b/src/app/identity-list/identity-list.component.ts
@@ -126,7 +126,7 @@ export class IdentityListComponent implements OnInit {
       }
     },
     err => {
-      this.errorInfos.push("Error retrieving references for ``" + 
identity.name + "''");
+      this.errorInfos.push(this.getMessage("identity_list_ts@errorReferences", 
identity.name));
       console.log(err);
     });
   }
@@ -156,7 +156,7 @@ export class IdentityListComponent implements OnInit {
       this.updateMissingClaims(identity);
     },
     err => {
-      this.errorInfos.push("Error retrieving attributes for ``" + 
identity.name + "''");
+      this.errorInfos.push(this.getMessage("identity_list_ts@errorAttributes", 
identity.name));
       console.log(err);
     });
   }
@@ -168,7 +168,7 @@ export class IdentityListComponent implements OnInit {
         this.updateIdentities();
       },
       err => {
-        this.errorInfos.push("Failed deleting identity ``" + identity.name + 
"''");
+        
this.errorInfos.push(this.getMessage("identity_list_ts@errorDeletingId", 
identity.name));
         console.log(err);
       });
   }
@@ -479,4 +479,15 @@ export class IdentityListComponent implements OnInit {
   isSharingInfoOpened(identity): boolean {
     return this.showSharingInfo == identity;
   }
+
+  //Internationalization
+  getMessage(key, sub?){
+    var usrAgent = navigator.userAgent;
+    if (usrAgent.indexOf("Firefox") > -1){
+      return browser.i18n.getMessage(key, sub);
+    }
+    else if (usrAgent.indexOf("Chrome") > -1){
+      return chrome.i18n.getMessage(key, sub);
+    }
+  }
 }
diff --git a/src/app/new-identity/new-identity.component.html 
b/src/app/new-identity/new-identity.component.html
index 83a8805..9922eaa 100644
--- a/src/app/new-identity/new-identity.component.html
+++ b/src/app/new-identity/new-identity.component.html
@@ -3,30 +3,30 @@
   <div class="m-2 card" style="text-align:center; width:100%; max-width: 
50em;">
     <div class="card-avatar card-img-top">
       <div class="card-avatar-character text-dark">
-        New identity        
+        {{getMessage("new_identity_html@newId")}}     
       </div>
     </div>
     <!-- Invalid input -->
     <div *ngIf="'' !== newIdentity.name && !canSave() && !isDuplicate()" 
class="alert alert-danger alert-dismissible fade show" role="alert">
-      Only Alphanumeric input. No spaces or special characters allowed.
+      {{getMessage("new_identity_html@inputSpecification")}}   
     </div>
     <!--Identity already exists -->  
     <div *ngIf="isDuplicate()" class="alert alert-warning alert-dismissible 
fade show" role="alert"> 
-      An identity with this username already exists.
+      {{getMessage("new_identity_html@usernameDuplicate")}}   
     </div>
     <!-- Input text -->
     <div *ngIf="'' === newIdentity.name || canSave()" class="alert 
alert-secondary alert-dismissible fade show" role="alert">
-      Enter a username for your new identity
+      {{getMessage("new_identity_html@enterUsername")}}
     </div>
     <div class="card-body">
       <input [class.text-danger]="'' !== newIdentity.name && !canSave()" 
style="text-align: center; border: 1px solid #111;" 
(keyup.enter)="saveIdentity()" pattern="^[a-zA-Z0-9-]+" placeholder="Username" 
title="Only Alphanumeric input. No spaces or special characters allowed." 
class="mr-2" [(ngModel)]="newIdentity.name" autofocus>
       <br/>
       <br/>
       <button [disabled]="!canSave()" [style.inactive]="!canSave()"  class="-1 
btn btn-primary" (click)="saveIdentity()">
-        <span class="fa fa-save"></span> Save
+        <span class="fa fa-save"></span> {{getMessage("Save")}} 
       </button>
       <button class="m-1 btn btn-danger" (click)="cancelAddIdentity()">
-        <span class="fa fa-close"></span> Cancel
+        <span class="fa fa-close"></span> {{getMessage("Cancel")}} 
       </button>
     </div>
   </div>
diff --git a/src/app/new-identity/new-identity.component.ts 
b/src/app/new-identity/new-identity.component.ts
index bf1a87e..6c26f7b 100644
--- a/src/app/new-identity/new-identity.component.ts
+++ b/src/app/new-identity/new-identity.component.ts
@@ -80,4 +80,15 @@ export class NewIdentityComponent implements OnInit {
     });
   }
 
+  //Internationalization
+  getMessage(key, sub?){
+    var usrAgent = navigator.userAgent;
+    if (usrAgent.indexOf("Firefox") > -1){
+      return browser.i18n.getMessage(key, sub);
+    }
+    else if (usrAgent.indexOf("Chrome") > -1){
+      return chrome.i18n.getMessage(key, sub);
+    }
+  }
+
 }
diff --git a/src/polyfills.ts b/src/polyfills.ts
index 5b598b8..eeae731 100644
--- a/src/polyfills.ts
+++ b/src/polyfills.ts
@@ -1,3 +1,7 @@
+/***************************************************************************************************
+ * Load `$localize` onto the global scope - used if i18n tags appear in 
Angular templates.
+ */
+import '@angular/localize/init';
 
 
 
diff --git a/yarn.lock b/yarn.lock
index bc876e8..aae8453 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -215,6 +215,15 @@
   resolved 
"https://registry.yarnpkg.com/@angular/language-service/-/language-service-9.1.12.tgz#c61392c0615654810cf99ee7ff46335bd0f2660b";
   integrity 
sha512-0qfIAn5fP5lD+JW6il5HBHGS89rv+idRv5aooDkHqBhuBo4V2VuB1wNy5eP49GZbHKMW1xPAzv1MqeMdk+zwQA==
 
+"@angular/localize@^10.1.3":
+  version "10.1.3"
+  resolved 
"https://registry.yarnpkg.com/@angular/localize/-/localize-10.1.3.tgz#791bf79f8d14872c87f88be6bce4de718cded1e9";
+  integrity 
sha512-OJTCUTd7qF3JoqCM7+lNTNUErzHpm5TvGObFthXvP2V+u1ipsFeqTffzqEv7SrZ5+PkabRUditUrPOVAkFIlyw==
+  dependencies:
+    "@babel/core" "7.8.3"
+    glob "7.1.2"
+    yargs "15.3.0"
+
 "@angular/platform-browser-dynamic@^10.0":
   version "10.0.3"
   resolved 
"https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.3.tgz#bbfd231c10d50a1a834ce48bec425ba889e1a783";
@@ -252,6 +261,27 @@
     invariant "^2.2.4"
     semver "^5.5.0"
 
+"@babel/core@7.8.3":
+  version "7.8.3"
+  resolved 
"https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941";
+  integrity 
sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@babel/generator" "^7.8.3"
+    "@babel/helpers" "^7.8.3"
+    "@babel/parser" "^7.8.3"
+    "@babel/template" "^7.8.3"
+    "@babel/traverse" "^7.8.3"
+    "@babel/types" "^7.8.3"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.1"
+    json5 "^2.1.0"
+    lodash "^4.17.13"
+    resolve "^1.3.2"
+    semver "^5.4.1"
+    source-map "^0.5.0"
+
 "@babel/core@7.9.6":
   version "7.9.6"
   resolved 
"https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376";
@@ -316,6 +346,15 @@
     lodash "^4.17.13"
     source-map "^0.5.0"
 
+"@babel/generator@^7.11.5", "@babel/generator@^7.8.3":
+  version "7.11.6"
+  resolved 
"https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620";
+  integrity 
sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==
+  dependencies:
+    "@babel/types" "^7.11.5"
+    jsesc "^2.5.1"
+    source-map "^0.5.0"
+
 "@babel/helper-annotate-as-pure@^7.10.4":
   version "7.10.4"
   resolved 
"https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3";
@@ -473,6 +512,13 @@
   dependencies:
     "@babel/types" "^7.10.4"
 
+"@babel/helper-split-export-declaration@^7.11.0":
+  version "7.11.0"
+  resolved 
"https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f";
+  integrity 
sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
+  dependencies:
+    "@babel/types" "^7.11.0"
+
 "@babel/helper-validator-identifier@^7.10.4":
   version "7.10.4"
   resolved 
"https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2";
@@ -488,7 +534,7 @@
     "@babel/traverse" "^7.10.4"
     "@babel/types" "^7.10.4"
 
-"@babel/helpers@^7.10.4", "@babel/helpers@^7.9.6":
+"@babel/helpers@^7.10.4", "@babel/helpers@^7.8.3", "@babel/helpers@^7.9.6":
   version "7.10.4"
   resolved 
"https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044";
   integrity 
sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==
@@ -511,6 +557,11 @@
   resolved 
"https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64";
   integrity 
sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==
 
+"@babel/parser@^7.11.5", "@babel/parser@^7.8.3":
+  version "7.11.5"
+  resolved 
"https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037";
+  integrity 
sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==
+
 "@babel/plugin-proposal-async-generator-functions@^7.8.3":
   version "7.10.4"
   resolved 
"https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6";
@@ -1002,7 +1053,7 @@
     "@babel/parser" "^7.8.6"
     "@babel/types" "^7.8.6"
 
-"@babel/template@^7.10.4", "@babel/template@^7.8.6":
+"@babel/template@^7.10.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6":
   version "7.10.4"
   resolved 
"https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278";
   integrity 
sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
@@ -1026,6 +1077,21 @@
     globals "^11.1.0"
     lodash "^4.17.13"
 
+"@babel/traverse@^7.8.3":
+  version "7.11.5"
+  resolved 
"https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3";
+  integrity 
sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==
+  dependencies:
+    "@babel/code-frame" "^7.10.4"
+    "@babel/generator" "^7.11.5"
+    "@babel/helper-function-name" "^7.10.4"
+    "@babel/helper-split-export-declaration" "^7.11.0"
+    "@babel/parser" "^7.11.5"
+    "@babel/types" "^7.11.5"
+    debug "^4.1.0"
+    globals "^11.1.0"
+    lodash "^4.17.19"
+
 "@babel/types@^7.10.4", "@babel/types@^7.4.4", "@babel/types@^7.8.6", 
"@babel/types@^7.9.6":
   version "7.10.4"
   resolved 
"https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee";
@@ -1035,6 +1101,15 @@
     lodash "^4.17.13"
     to-fast-properties "^2.0.0"
 
+"@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.8.3":
+  version "7.11.5"
+  resolved 
"https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d";
+  integrity 
sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.10.4"
+    lodash "^4.17.19"
+    to-fast-properties "^2.0.0"
+
 "@istanbuljs/schema@^0.1.2":
   version "0.1.2"
   resolved 
"https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd";
@@ -1112,11 +1187,31 @@
     semver "7.3.2"
     semver-intersect "1.4.0"
 
+"@types/chrome@^0.0.124":
+  version "0.0.124"
+  resolved 
"https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.124.tgz#1cdb8e1c1ddb04b15844f5a71b9907f73bbb84a2";
+  integrity 
sha512-0UmDQ6A9gaahvztKryIonSTyUMEhuhKNyyJAnBB7ZJN/YXP7YRkL4onPFSTxnIbXcMnYsQFo8TxsGP8jY2mdEw==
+  dependencies:
+    "@types/filesystem" "*"
+    "@types/har-format" "*"
+
 "@types/color-name@^1.1.1":
   version "1.1.1"
   resolved 
"https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0";
   integrity 
sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
 
+"@types/filesystem@*":
+  version "0.0.29"
+  resolved 
"https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.29.tgz#ee3748eb5be140dcf980c3bd35f11aec5f7a3748";
+  integrity 
sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw==
+  dependencies:
+    "@types/filewriter" "*"
+
+"@types/filewriter@*":
+  version "0.0.28"
+  resolved 
"https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.28.tgz#c054e8af4d9dd75db4e63abc76f885168714d4b3";
+  integrity sha1-wFTor02d11205jq8dviFFocU1LM=
+
 "@types/glob@^7.1.1":
   version "7.1.3"
   resolved 
"https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183";
@@ -1125,6 +1220,11 @@
     "@types/minimatch" "*"
     "@types/node" "*"
 
+"@types/har-format@*":
+  version "1.2.4"
+  resolved 
"https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.4.tgz#3275842095abb60d14b47fa798cc9ff708dab6d4";
+  integrity 
sha512-iUxzm1meBm3stxUMzRqgOVHjj4Kgpgu5w9fm4X7kPRfSgVRzythsucEN7/jtOo8SQzm+HfcxWWzJS0mJDH/3DQ==
+
 "@types/json-schema@^7.0.4":
   version "7.0.5"
   resolved 
"https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd";
@@ -3876,6 +3976,18 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, 
glob-parent@^5.1.1, glob-parent@~5.1.0:
   dependencies:
     is-glob "^4.0.1"
 
+glob@7.1.2:
+  version "7.1.2"
+  resolved 
"https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15";
+  integrity 
sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
 glob@7.1.6, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4:
   version "7.1.6"
   resolved 
"https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6";
@@ -4779,7 +4891,7 @@ json5@^1.0.1:
   dependencies:
     minimist "^1.2.0"
 
-json5@^2.1.2:
+json5@^2.1.0, json5@^2.1.2:
   version "2.1.3"
   resolved 
"https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43";
   integrity 
sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
@@ -4971,6 +5083,11 @@ lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, 
lodash@^4.17.15:
   resolved 
"https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b";
   integrity 
sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
 
+lodash@^4.17.19:
+  version "4.17.20"
+  resolved 
"https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52";
+  integrity 
sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+
 log-symbols@^3.0.0:
   version "3.0.0"
   resolved 
"https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4";

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]