From 41850c9f14baa5330919c6dabf161b1aaeda7376 Mon Sep 17 00:00:00 2001
From: Sebastian <sebasjm@gmail.com>
Date: Wed, 23 Feb 2022 15:18:37 -0300
Subject: add i18n where was missing

---
 packages/taler-wallet-webextension/src/walletEntryPoint.tsx | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

(limited to 'packages/taler-wallet-webextension/src/walletEntryPoint.tsx')

diff --git a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
index 16912b2a7..b0ff0d186 100644
--- a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
+++ b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
@@ -17,10 +17,10 @@
 /**
  * Main entry point for extension pages.
  *
- * @author Florian Dold <dold@taler.net>
+ * @author sebasjm <dold@taler.net>
  */
 
-import { i18n, setupI18n } from "@gnu-taler/taler-util";
+import { i18n, setupI18n, Translate } from "@gnu-taler/taler-util";
 import { createHashHistory } from "history";
 import { Fragment, h, render, VNode } from "preact";
 import Router, { route, Route } from "preact-router";
@@ -78,7 +78,7 @@ if (document.readyState === "loading") {
 
 function Application(): VNode {
   const [globalNotification, setGlobalNotification] = useState<
-    string | undefined
+    VNode | undefined
   >(undefined);
   const hash_history = createHashHistory();
   function clearNotification(): void {
@@ -169,7 +169,9 @@ function Application(): VNode {
                   onSuccess={(currency: string) => {
                     route(Pages.balance_history.replace(":currency", currency));
                     setGlobalNotification(
-                      "All done, your transaction is in progress",
+                      <Translate>
+                        All done, your transaction is in progress
+                      </Translate>,
                     );
                   }}
                 />
-- 
cgit v1.2.3


From 8c3e57293422d670b93c2f2a19cfc47f3aecc7b1 Mon Sep 17 00:00:00 2001
From: Sebastian <sebasjm@gmail.com>
Date: Wed, 23 Feb 2022 15:44:14 -0300
Subject: we are force to use i18n.Translate, otherwise pogen won't find the
 tag

---
 .../src/NavigationBar.tsx                          |  12 +--
 .../src/components/BankDetailsByPaytoType.tsx      |  35 +++++--
 .../src/components/DebugCheckbox.tsx               |  10 +-
 .../src/components/Diagnostics.tsx                 |  20 ++--
 .../src/components/EditableText.tsx                |   6 +-
 .../src/components/Loading.tsx                     |   4 +-
 .../src/components/SelectList.tsx                  |   4 +-
 .../src/components/TransactionItem.tsx             |   6 +-
 .../taler-wallet-webextension/src/cta/Deposit.tsx  |  40 ++++----
 packages/taler-wallet-webextension/src/cta/Pay.tsx |  70 ++++++-------
 .../taler-wallet-webextension/src/cta/Refund.tsx   |  22 ++--
 .../src/cta/TermsOfServiceSection.tsx              |  34 +++++--
 packages/taler-wallet-webextension/src/cta/Tip.tsx |  18 ++--
 .../taler-wallet-webextension/src/cta/Withdraw.tsx |  36 ++++---
 .../src/cta/reset-required.tsx                     |  24 +++--
 .../src/cta/return-coins.tsx                       |   4 +-
 .../taler-wallet-webextension/src/i18n/strings.ts  |   2 +
 .../src/popup/BalancePage.tsx                      |  10 +-
 .../src/popup/DeveloperPage.tsx                    |  44 ++++----
 .../src/popup/NoBalanceHelp.tsx                    |  10 +-
 .../src/popup/TalerActionFound.tsx                 |  36 +++----
 .../src/popupEntryPoint.tsx                        |   6 +-
 .../src/wallet/AddNewActionView.tsx                |  18 ++--
 .../src/wallet/BackupPage.tsx                      |  18 ++--
 .../src/wallet/CreateManualWithdraw.tsx            |  28 ++---
 .../src/wallet/DepositPage.tsx                     |  26 ++---
 .../src/wallet/ExchangeAddConfirm.tsx              |  14 +--
 .../src/wallet/ExchangeSetUrl.tsx                  |  32 +++---
 .../src/wallet/History.tsx                         |  14 ++-
 .../src/wallet/ManualWithdrawPage.tsx              |   6 +-
 .../src/wallet/ProviderAddPage.tsx                 |  48 +++++----
 .../src/wallet/ProviderDetailPage.tsx              |  58 ++++++-----
 .../src/wallet/ReserveCreated.tsx                  |  27 +++--
 .../src/wallet/Settings.tsx                        |  34 +++----
 .../src/wallet/Transaction.tsx                     | 113 +++++++++++----------
 .../src/wallet/Welcome.tsx                         |  25 +++--
 .../src/walletEntryPoint.tsx                       |   6 +-
 37 files changed, 496 insertions(+), 424 deletions(-)

(limited to 'packages/taler-wallet-webextension/src/walletEntryPoint.tsx')

diff --git a/packages/taler-wallet-webextension/src/NavigationBar.tsx b/packages/taler-wallet-webextension/src/NavigationBar.tsx
index f0fc3da28..f72d54ef1 100644
--- a/packages/taler-wallet-webextension/src/NavigationBar.tsx
+++ b/packages/taler-wallet-webextension/src/NavigationBar.tsx
@@ -67,10 +67,10 @@ export function PopupNavBar({ path = "" }: { path?: string }): VNode {
   return (
     <NavigationHeader>
       <a href="/balance" class={path.startsWith("/balance") ? "active" : ""}>
-        <Translate>Balance</Translate>
+        <i18n.Translate>Balance</i18n.Translate>
       </a>
       <a href="/backup" class={path.startsWith("/backup") ? "active" : ""}>
-        <Translate>Backup</Translate>
+        <i18n.Translate>Backup</i18n.Translate>
       </a>
       <a />
       <a href={innerUrl} target="_blank" rel="noreferrer">
@@ -85,15 +85,15 @@ export function WalletNavBar({ path = "" }: { path?: string }): VNode {
     <NavigationHeaderHolder>
       <NavigationHeader>
         <a href="/balance" class={path.startsWith("/balance") ? "active" : ""}>
-          <Translate>Balance</Translate>
+          <i18n.Translate>Balance</i18n.Translate>
         </a>
         <a href="/backup" class={path.startsWith("/backup") ? "active" : ""}>
-          <Translate>Backup</Translate>
+          <i18n.Translate>Backup</i18n.Translate>
         </a>
 
         <JustInDevMode>
           <a href="/dev" class={path.startsWith("/dev") ? "active" : ""}>
-            <Translate>Dev</Translate>
+            <i18n.Translate>Dev</i18n.Translate>
           </a>
         </JustInDevMode>
 
@@ -102,7 +102,7 @@ export function WalletNavBar({ path = "" }: { path?: string }): VNode {
           href="/settings"
           class={path.startsWith("/settings") ? "active" : ""}
         >
-          <Translate>Settings</Translate>
+          <i18n.Translate>Settings</i18n.Translate>
         </a>
       </NavigationHeader>
     </NavigationHeaderHolder>
diff --git a/packages/taler-wallet-webextension/src/components/BankDetailsByPaytoType.tsx b/packages/taler-wallet-webextension/src/components/BankDetailsByPaytoType.tsx
index 205413007..e9a32ebf7 100644
--- a/packages/taler-wallet-webextension/src/components/BankDetailsByPaytoType.tsx
+++ b/packages/taler-wallet-webextension/src/components/BankDetailsByPaytoType.tsx
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { PaytoUri, Translate } from "@gnu-taler/taler-util";
+import { PaytoUri, i18n } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { useEffect, useState } from "preact/hooks";
 import { CopiedIcon, CopyIcon } from "../svg";
@@ -34,23 +34,42 @@ export function BankDetailsByPaytoType({
   amount,
 }: BankDetailsProps): VNode {
   const firstPart = !payto ? undefined : !payto.isKnown ? (
-    <Row name={<Translate>Account</Translate>} value={payto.targetPath} />
+    <Row
+      name={<i18n.Translate>Account</i18n.Translate>}
+      value={payto.targetPath}
+    />
   ) : payto.targetType === "x-taler-bank" ? (
     <Fragment>
-      <Row name={<Translate>Bank host</Translate>} value={payto.host} />
-      <Row name={<Translate>Bank account</Translate>} value={payto.account} />
+      <Row
+        name={<i18n.Translate>Bank host</i18n.Translate>}
+        value={payto.host}
+      />
+      <Row
+        name={<i18n.Translate>Bank account</i18n.Translate>}
+        value={payto.account}
+      />
     </Fragment>
   ) : payto.targetType === "iban" ? (
-    <Row name={<Translate>IBAN</Translate>} value={payto.iban} />
+    <Row name={<i18n.Translate>IBAN</i18n.Translate>} value={payto.iban} />
   ) : undefined;
   return (
     <div style={{ textAlign: "left" }}>
       <p>Bank transfer details</p>
       <table>
         {firstPart}
-        <Row name={<Translate>Exchange</Translate>} value={exchangeBaseUrl} />
-        <Row name={<Translate>Chosen amount</Translate>} value={amount} />
-        <Row name={<Translate>Subject</Translate>} value={subject} literal />
+        <Row
+          name={<i18n.Translate>Exchange</i18n.Translate>}
+          value={exchangeBaseUrl}
+        />
+        <Row
+          name={<i18n.Translate>Chosen amount</i18n.Translate>}
+          value={amount}
+        />
+        <Row
+          name={<i18n.Translate>Subject</i18n.Translate>}
+          value={subject}
+          literal
+        />
       </table>
     </div>
   );
diff --git a/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx b/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
index 522fbce98..b5ad7cda7 100644
--- a/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
+++ b/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
@@ -14,7 +14,7 @@
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { Translate } from "@gnu-taler/taler-util";
+import { i18n } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 
 export function DebugCheckbox({
@@ -37,7 +37,9 @@ export function DebugCheckbox({
         htmlFor="checkbox-perm"
         style={{ marginLeft: "0.5em", fontWeight: "bold" }}
       >
-        <Translate>Automatically open wallet based on page content</Translate>
+        <i18n.Translate>
+          Automatically open wallet based on page content
+        </i18n.Translate>
       </label>
       <span
         style={{
@@ -48,10 +50,10 @@ export function DebugCheckbox({
         }}
       >
         (
-        <Translate>
+        <i18n.Translate>
           Enabling this option below will make using the wallet faster, but
           requires more permissions from your browser.
-        </Translate>
+        </i18n.Translate>
         )
       </span>
     </div>
diff --git a/packages/taler-wallet-webextension/src/components/Diagnostics.tsx b/packages/taler-wallet-webextension/src/components/Diagnostics.tsx
index 04b6abb55..b136ebc24 100644
--- a/packages/taler-wallet-webextension/src/components/Diagnostics.tsx
+++ b/packages/taler-wallet-webextension/src/components/Diagnostics.tsx
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { Translate, WalletDiagnostics } from "@gnu-taler/taler-util";
+import { i18n, WalletDiagnostics } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { PageLink } from "../renderHtml";
 
@@ -27,9 +27,9 @@ export function Diagnostics({ timedOut, diagnostics }: Props): VNode {
   if (timedOut) {
     return (
       <p>
-        <Translate>
+        <i18n.Translate>
           Diagnostics timed out. Could not talk to the wallet backend.
-        </Translate>
+        </i18n.Translate>
       </p>
     );
   }
@@ -48,7 +48,7 @@ export function Diagnostics({ timedOut, diagnostics }: Props): VNode {
         }}
       >
         <p>
-          <Translate>Problems detected:</Translate>
+          <i18n.Translate>Problems detected:</i18n.Translate>
         </p>
         <ol>
           {diagnostics.errors.map((errMsg) => (
@@ -57,23 +57,23 @@ export function Diagnostics({ timedOut, diagnostics }: Props): VNode {
         </ol>
         {diagnostics.firefoxIdbProblem ? (
           <p>
-            <Translate>
+            <i18n.Translate>
               Please check in your <code>about:config</code> settings that you
               have IndexedDB enabled (check the preference name{" "}
               <code>dom.indexedDB.enabled</code>).
-            </Translate>
+            </i18n.Translate>
           </p>
         ) : null}
         {diagnostics.dbOutdated ? (
           <p>
-            <Translate>
+            <i18n.Translate>
               Your wallet database is outdated. Currently automatic migration is
               not supported. Please go{" "}
               <PageLink pageName="/reset-required">
-                <Translate>here</Translate>
+                <i18n.Translate>here</i18n.Translate>
               </PageLink>{" "}
               to reset the wallet database.
-            </Translate>
+            </i18n.Translate>
           </p>
         ) : null}
       </div>
@@ -82,7 +82,7 @@ export function Diagnostics({ timedOut, diagnostics }: Props): VNode {
 
   return (
     <p>
-      <Translate>Running diagnostics</Translate> ...
+      <i18n.Translate>Running diagnostics</i18n.Translate> ...
     </p>
   );
 }
diff --git a/packages/taler-wallet-webextension/src/components/EditableText.tsx b/packages/taler-wallet-webextension/src/components/EditableText.tsx
index c5d6e397e..8d45cae90 100644
--- a/packages/taler-wallet-webextension/src/components/EditableText.tsx
+++ b/packages/taler-wallet-webextension/src/components/EditableText.tsx
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { Translate } from "@gnu-taler/taler-util";
+import { i18n } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 import { useRef, useState } from "preact/hooks";
 
@@ -41,7 +41,7 @@ export function EditableText({
         <div style={{ display: "flex", justifyContent: "space-between" }}>
           <p>{value}</p>
           <button onClick={() => setEditing(true)}>
-            <Translate>Edit</Translate>
+            <i18n.Translate>Edit</i18n.Translate>
           </button>
         </div>
       );
@@ -57,7 +57,7 @@ export function EditableText({
                 onChange(ref.current.value).then(() => setEditing(false));
             }}
           >
-            <Translate>Confirm</Translate>
+            <i18n.Translate>Confirm</i18n.Translate>
           </button>
         </div>
       );
diff --git a/packages/taler-wallet-webextension/src/components/Loading.tsx b/packages/taler-wallet-webextension/src/components/Loading.tsx
index ff6d21376..7504034a0 100644
--- a/packages/taler-wallet-webextension/src/components/Loading.tsx
+++ b/packages/taler-wallet-webextension/src/components/Loading.tsx
@@ -13,13 +13,13 @@
  You should have received a copy of the GNU General Public License along with
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-import { Translate } from "@gnu-taler/taler-util";
+import { i18n } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 
 export function Loading(): VNode {
   return (
     <div>
-      <Translate>Loading</Translate>...
+      <i18n.Translate>Loading</i18n.Translate>...
     </div>
   );
 }
diff --git a/packages/taler-wallet-webextension/src/components/SelectList.tsx b/packages/taler-wallet-webextension/src/components/SelectList.tsx
index a5f182d77..676fd672f 100644
--- a/packages/taler-wallet-webextension/src/components/SelectList.tsx
+++ b/packages/taler-wallet-webextension/src/components/SelectList.tsx
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { Translate } from "@gnu-taler/taler-util";
+import { i18n } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { NiceSelect } from "./styled";
 
@@ -59,7 +59,7 @@ export function SelectList({
           {value === undefined ||
             (canBeNull && (
               <option selected disabled>
-                <Translate>Select one option</Translate>
+                <i18n.Translate>Select one option</i18n.Translate>
               </option>
               // ) : (
               //   <option selected>{list[value]}</option>
diff --git a/packages/taler-wallet-webextension/src/components/TransactionItem.tsx b/packages/taler-wallet-webextension/src/components/TransactionItem.tsx
index 5c8897006..abcca9c26 100644
--- a/packages/taler-wallet-webextension/src/components/TransactionItem.tsx
+++ b/packages/taler-wallet-webextension/src/components/TransactionItem.tsx
@@ -21,7 +21,7 @@ import {
   Timestamp,
   Transaction,
   TransactionType,
-  Translate,
+  i18n,
 } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 import imageBank from "../../static/img/ri-bank-line.svg";
@@ -134,7 +134,7 @@ function TransactionLayout(props: TransactionLayoutProps): VNode {
         </LargeText>
         {props.pending && (
           <LightText style={{ marginTop: 5, marginBottom: 5 }}>
-            <Translate>Waiting for confirmation</Translate>
+            <i18n.Translate>Waiting for confirmation</i18n.Translate>
           </LightText>
         )}
         <SmallLightText style={{ marginTop: 5 }}>
@@ -198,7 +198,7 @@ function TransactionAmount(props: TransactionAmountProps): VNode {
       </ExtraLargeText>
       {props.pending && (
         <div>
-          <Translate>PENDING</Translate>
+          <i18n.Translate>PENDING</i18n.Translate>
         </div>
       )}
     </Column>
diff --git a/packages/taler-wallet-webextension/src/cta/Deposit.tsx b/packages/taler-wallet-webextension/src/cta/Deposit.tsx
index 5adc641f4..82d898d77 100644
--- a/packages/taler-wallet-webextension/src/cta/Deposit.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Deposit.tsx
@@ -111,7 +111,7 @@ export function DepositPage({ talerPayUri, goBack }: Props): VNode {
   if (!talerPayUri) {
     return (
       <span>
-        <Translate>missing pay uri</Translate>
+        <i18n.Translate>missing pay uri</i18n.Translate>
       </span>
     );
   }
@@ -122,14 +122,14 @@ export function DepositPage({ talerPayUri, goBack }: Props): VNode {
         <WalletAction>
           <LogoHeader />
           <h2>
-            <Translate>Digital cash payment</Translate>
+            <i18n.Translate>Digital cash payment</i18n.Translate>
           </h2>
           <section>
             <ErrorTalerOperation
               title={
-                <Translate>
+                <i18n.Translate>
                   Could not get the payment information for this order
-                </Translate>
+                </i18n.Translate>
               }
               error={payErrMsg?.operationError}
             />
@@ -142,13 +142,13 @@ export function DepositPage({ talerPayUri, goBack }: Props): VNode {
         <WalletAction>
           <LogoHeader />
           <h2>
-            <Translate>Digital cash payment</Translate>
+            <i18n.Translate>Digital cash payment</i18n.Translate>
           </h2>
           <section>
             <p>
-              <Translate>
+              <i18n.Translate>
                 Could not get the payment information for this order
-              </Translate>
+              </i18n.Translate>
             </p>
             <ErrorBox>{payErrMsg}</ErrorBox>
           </section>
@@ -157,7 +157,7 @@ export function DepositPage({ talerPayUri, goBack }: Props): VNode {
     }
     return (
       <span>
-        <Translate>Loading payment information</Translate> ...
+        <i18n.Translate>Loading payment information</i18n.Translate> ...
       </span>
     );
   }
@@ -205,28 +205,28 @@ export function PaymentRequestView({
       <LogoHeader />
 
       <h2>
-        <Translate>Digital cash deposit</Translate>
+        <i18n.Translate>Digital cash deposit</i18n.Translate>
       </h2>
       {payStatus.status === PreparePayResultType.AlreadyConfirmed &&
         (payStatus.paid ? (
           <SuccessBox>
-            <Translate>Already paid</Translate>
+            <i18n.Translate>Already paid</i18n.Translate>
           </SuccessBox>
         ) : (
           <WarningBox>
-            <Translate>Already claimed</Translate>
+            <i18n.Translate>Already claimed</i18n.Translate>
           </WarningBox>
         ))}
       {payResult && payResult.type === ConfirmPayResultType.Done && (
         <SuccessBox>
           <h3>
-            <Translate>Payment complete</Translate>
+            <i18n.Translate>Payment complete</i18n.Translate>
           </h3>
           <p>
             {!payResult.contractTerms.fulfillment_message ? (
-              <Translate>
+              <i18n.Translate>
                 You will now be sent back to the merchant you came from.
-              </Translate>
+              </i18n.Translate>
             ) : (
               payResult.contractTerms.fulfillment_message
             )}
@@ -238,7 +238,7 @@ export function PaymentRequestView({
           Amounts.isNonZero(totalFees) && (
             <Part
               big
-              title={<Translate>Total to pay</Translate>}
+              title={<i18n.Translate>Total to pay</i18n.Translate>}
               text={amountToPretty(
                 Amounts.parseOrThrow(payStatus.amountEffective),
               )}
@@ -247,7 +247,7 @@ export function PaymentRequestView({
           )}
         <Part
           big
-          title={<Translate>Purchase amount</Translate>}
+          title={<i18n.Translate>Purchase amount</i18n.Translate>}
           text={amountToPretty(Amounts.parseOrThrow(payStatus.amountRaw))}
           kind="neutral"
         />
@@ -255,25 +255,25 @@ export function PaymentRequestView({
           <Fragment>
             <Part
               big
-              title={<Translate>Fee</Translate>}
+              title={<i18n.Translate>Fee</i18n.Translate>}
               text={amountToPretty(totalFees)}
               kind="negative"
             />
           </Fragment>
         )}
         <Part
-          title={<Translate>Merchant</Translate>}
+          title={<i18n.Translate>Merchant</i18n.Translate>}
           text={contractTerms.merchant.name}
           kind="neutral"
         />
         <Part
-          title={<Translate>Purchase</Translate>}
+          title={<i18n.Translate>Purchase</i18n.Translate>}
           text={contractTerms.summary}
           kind="neutral"
         />
         {contractTerms.order_id && (
           <Part
-            title={<Translate>Receipt</Translate>}
+            title={<i18n.Translate>Receipt</i18n.Translate>}
             text={`#${contractTerms.order_id}`}
             kind="neutral"
           />
diff --git a/packages/taler-wallet-webextension/src/cta/Pay.tsx b/packages/taler-wallet-webextension/src/cta/Pay.tsx
index 7ed0d072f..4fe44dcff 100644
--- a/packages/taler-wallet-webextension/src/cta/Pay.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Pay.tsx
@@ -110,7 +110,7 @@ export function PayPage({
   if (hook.hasError) {
     return (
       <LoadingError
-        title={<Translate>Could not load pay status</Translate>}
+        title={<i18n.Translate>Could not load pay status</i18n.Translate>}
         error={hook}
       />
     );
@@ -187,9 +187,9 @@ export function PaymentRequestView({
     return (
       <ErrorMessage
         title={
-          <Translate>
+          <i18n.Translate>
             Could not load contract terms from merchant or wallet backend.
-          </Translate>
+          </i18n.Translate>
         }
       />
     );
@@ -214,20 +214,20 @@ export function PaymentRequestView({
       <section>
         <LinkSuccess upperCased onClick={() => setShowQR((qr) => !qr)}>
           {!showQR ? (
-            <Translate>Pay with a mobile phone</Translate>
+            <i18n.Translate>Pay with a mobile phone</i18n.Translate>
           ) : (
-            <Translate>Hide QR</Translate>
+            <i18n.Translate>Hide QR</i18n.Translate>
           )}
         </LinkSuccess>
         {showQR && (
           <div>
             <QR text={privateUri} />
-            <Translate>
+            <i18n.Translate>
               Scan the QR code or
               <a href={privateUri}>
-                <Translate>click here</Translate>
+                <i18n.Translate>click here</i18n.Translate>
               </a>
-            </Translate>
+            </i18n.Translate>
           </div>
         )}
       </section>
@@ -241,7 +241,7 @@ export function PaymentRequestView({
           <section>
             <div>
               <p>
-                <Translate>Processing</Translate>...
+                <i18n.Translate>Processing</i18n.Translate>...
               </p>
             </div>
           </section>
@@ -254,9 +254,9 @@ export function PaymentRequestView({
         <Fragment>
           <section>
             <ButtonSuccess upperCased onClick={onClick}>
-              <Translate>
+              <i18n.Translate>
                 Pay {amountToString(payStatus.amountEffective)}
-              </Translate>
+              </i18n.Translate>
             </ButtonSuccess>
           </section>
           <Alternative />
@@ -269,22 +269,22 @@ export function PaymentRequestView({
           <section>
             {balance ? (
               <WarningBox>
-                <Translate>
+                <i18n.Translate>
                   Your balance of {amountToString(balance)} is not enough to pay
                   for this purchase
-                </Translate>
+                </i18n.Translate>
               </WarningBox>
             ) : (
               <WarningBox>
-                <Translate>
+                <i18n.Translate>
                   Your balance is not enough to pay for this purchase.
-                </Translate>
+                </i18n.Translate>
               </WarningBox>
             )}
           </section>
           <section>
             <ButtonSuccess upperCased onClick={goToWalletManualWithdraw}>
-              <Translate>Withdraw digital cash</Translate>
+              <i18n.Translate>Withdraw digital cash</i18n.Translate>
             </ButtonSuccess>
           </section>
           <Alternative />
@@ -297,7 +297,7 @@ export function PaymentRequestView({
           <section>
             {payStatus.paid && contractTerms.fulfillment_message && (
               <Part
-                title={<Translate>Merchant message</Translate>}
+                title={<i18n.Translate>Merchant message</i18n.Translate>}
                 text={contractTerms.fulfillment_message}
                 kind="neutral"
               />
@@ -315,43 +315,43 @@ export function PaymentRequestView({
       <LogoHeader />
 
       <h2>
-        <Translate>Digital cash payment</Translate>
+        <i18n.Translate>Digital cash payment</i18n.Translate>
       </h2>
       {payStatus.status === PreparePayResultType.AlreadyConfirmed &&
         (payStatus.paid ? (
           payStatus.contractTerms.fulfillment_url ? (
             <SuccessBox>
-              <Translate>
+              <i18n.Translate>
                 Already paid, you are going to be redirected to{" "}
                 <a href={payStatus.contractTerms.fulfillment_url}>
                   {payStatus.contractTerms.fulfillment_url}
                 </a>
-              </Translate>
+              </i18n.Translate>
             </SuccessBox>
           ) : (
             <SuccessBox>
-              <Translate>Already paid</Translate>
+              <i18n.Translate>Already paid</i18n.Translate>
             </SuccessBox>
           )
         ) : (
           <WarningBox>
-            <Translate>Already claimed</Translate>
+            <i18n.Translate>Already claimed</i18n.Translate>
           </WarningBox>
         ))}
       {payResult && payResult.type === ConfirmPayResultType.Done && (
         <SuccessBox>
           <h3>
-            <Translate>Payment complete</Translate>
+            <i18n.Translate>Payment complete</i18n.Translate>
           </h3>
           <p>
             {!payResult.contractTerms.fulfillment_message ? (
               payResult.contractTerms.fulfillment_url ? (
-                <Translate>
+                <i18n.Translate>
                   You are going to be redirected to $
                   {payResult.contractTerms.fulfillment_url}
-                </Translate>
+                </i18n.Translate>
               ) : (
-                <Translate>You can close this page.</Translate>
+                <i18n.Translate>You can close this page.</i18n.Translate>
               )
             ) : (
               payResult.contractTerms.fulfillment_message
@@ -364,14 +364,14 @@ export function PaymentRequestView({
           Amounts.isNonZero(totalFees) && (
             <Part
               big
-              title={<Translate>Total to pay</Translate>}
+              title={<i18n.Translate>Total to pay</i18n.Translate>}
               text={amountToString(payStatus.amountEffective)}
               kind="negative"
             />
           )}
         <Part
           big
-          title={<Translate>Purchase amount</Translate>}
+          title={<i18n.Translate>Purchase amount</i18n.Translate>}
           text={amountToString(payStatus.amountRaw)}
           kind="neutral"
         />
@@ -379,25 +379,25 @@ export function PaymentRequestView({
           <Fragment>
             <Part
               big
-              title={<Translate>Fee</Translate>}
+              title={<i18n.Translate>Fee</i18n.Translate>}
               text={amountToString(totalFees)}
               kind="negative"
             />
           </Fragment>
         )}
         <Part
-          title={<Translate>Merchant</Translate>}
+          title={<i18n.Translate>Merchant</i18n.Translate>}
           text={contractTerms.merchant.name}
           kind="neutral"
         />
         <Part
-          title={<Translate>Purchase</Translate>}
+          title={<i18n.Translate>Purchase</i18n.Translate>}
           text={contractTerms.summary}
           kind="neutral"
         />
         {contractTerms.order_id && (
           <Part
-            title={<Translate>Receipt</Translate>}
+            title={<i18n.Translate>Receipt</i18n.Translate>}
             text={`#${contractTerms.order_id}`}
             kind="neutral"
           />
@@ -415,7 +415,7 @@ function ProductList({ products }: { products: Product[] }): VNode {
   return (
     <Fragment>
       <SmallLightText style={{ margin: ".5em" }}>
-        <Translate>List of products</Translate>
+        <i18n.Translate>List of products</i18n.Translate>
       </SmallLightText>
       <dl>
         {products.map((p, i) => {
@@ -457,7 +457,7 @@ function ProductList({ products }: { products: Product[] }): VNode {
                   {p.quantity ?? 1} x {p.description}
                 </dt>
                 <dd>
-                  <Translate>Total</Translate>
+                  <i18n.Translate>Total</i18n.Translate>
                   {` `}
                   {p.price ? (
                     `${Amounts.stringifyValue(
@@ -467,7 +467,7 @@ function ProductList({ products }: { products: Product[] }): VNode {
                       ).amount,
                     )} ${p}`
                   ) : (
-                    <Translate>free</Translate>
+                    <i18n.Translate>free</i18n.Translate>
                   )}
                 </dd>
               </div>
diff --git a/packages/taler-wallet-webextension/src/cta/Refund.tsx b/packages/taler-wallet-webextension/src/cta/Refund.tsx
index ec32cc37a..8ce008bcd 100644
--- a/packages/taler-wallet-webextension/src/cta/Refund.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Refund.tsx
@@ -20,7 +20,7 @@
  * @author sebasjm
  */
 
-import { Amounts, ApplyRefundResponse, Translate } from "@gnu-taler/taler-util";
+import { Amounts, ApplyRefundResponse, i18n } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 import { useEffect, useState } from "preact/hooks";
 import { AmountView } from "../renderHtml";
@@ -38,27 +38,29 @@ export function View({ applyResult }: ViewProps): VNode {
       <h1>GNU Taler Wallet</h1>
       <article class="fade">
         <h2>
-          <Translate>Refund Status</Translate>
+          <i18n.Translate>Refund Status</i18n.Translate>
         </h2>
         <p>
-          <Translate>
+          <i18n.Translate>
             The product <em>{applyResult.info.summary}</em> has received a total
             effective refund of{" "}
-          </Translate>
+          </i18n.Translate>
           <AmountView amount={applyResult.amountRefundGranted} />.
         </p>
         {applyResult.pendingAtExchange ? (
           <p>
-            <Translate>Refund processing is still in progress.</Translate>
+            <i18n.Translate>
+              Refund processing is still in progress.
+            </i18n.Translate>
           </p>
         ) : null}
         {!Amounts.isZero(applyResult.amountRefundGone) ? (
           <p>
-            <Translate>
+            <i18n.Translate>
               The refund amount of{" "}
               <AmountView amount={applyResult.amountRefundGone} /> could not be
               applied.
-            </Translate>
+            </i18n.Translate>
           </p>
         ) : null}
       </article>
@@ -92,7 +94,7 @@ export function RefundPage({ talerRefundUri }: Props): VNode {
   if (!talerRefundUri) {
     return (
       <span>
-        <Translate>missing taler refund uri</Translate>
+        <i18n.Translate>missing taler refund uri</i18n.Translate>
       </span>
     );
   }
@@ -100,7 +102,7 @@ export function RefundPage({ talerRefundUri }: Props): VNode {
   if (errMsg) {
     return (
       <span>
-        <Translate>Error: {errMsg}</Translate>
+        <i18n.Translate>Error: {errMsg}</i18n.Translate>
       </span>
     );
   }
@@ -108,7 +110,7 @@ export function RefundPage({ talerRefundUri }: Props): VNode {
   if (!applyResult) {
     return (
       <span>
-        <Translate>Updating refund status</Translate>
+        <i18n.Translate>Updating refund status</i18n.Translate>
       </span>
     );
   }
diff --git a/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx b/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
index 00f7bd211..1244b7915 100644
--- a/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
+++ b/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
@@ -34,7 +34,9 @@ export function TermsOfServiceSection({
             {terms.status === "notfound" && (
               <section>
                 <WarningText>
-                  <Translate>Exchange doesn't have terms of service</Translate>
+                  <i18n.Translate>
+                    Exchange doesn't have terms of service
+                  </i18n.Translate>
                 </WarningText>
               </section>
             )}
@@ -46,21 +48,27 @@ export function TermsOfServiceSection({
           {terms.status === "notfound" && (
             <section>
               <WarningText>
-                <Translate>Exchange doesn't have terms of service</Translate>
+                <i18n.Translate>
+                  Exchange doesn't have terms of service
+                </i18n.Translate>
               </WarningText>
             </section>
           )}
           {terms.status === "new" && (
             <section>
               <ButtonSuccess upperCased onClick={() => onReview(true)}>
-                <Translate>Review exchange terms of service</Translate>
+                <i18n.Translate>
+                  Review exchange terms of service
+                </i18n.Translate>
               </ButtonSuccess>
             </section>
           )}
           {terms.status === "changed" && (
             <section>
               <ButtonWarning upperCased onClick={() => onReview(true)}>
-                <Translate>Review new version of terms of service</Translate>
+                <i18n.Translate>
+                  Review new version of terms of service
+                </i18n.Translate>
               </ButtonWarning>
             </section>
           )}
@@ -72,7 +80,7 @@ export function TermsOfServiceSection({
         {onReview && (
           <section>
             <LinkSuccess upperCased onClick={() => onReview(true)}>
-              <Translate>Show terms of service</Translate>
+              <i18n.Translate>Show terms of service</i18n.Translate>
             </LinkSuccess>
           </section>
         )}
@@ -81,7 +89,9 @@ export function TermsOfServiceSection({
             name="terms"
             enabled={reviewed}
             label={
-              <Translate>I accept the exchange terms of service</Translate>
+              <i18n.Translate>
+                I accept the exchange terms of service
+              </i18n.Translate>
             }
             onToggle={() => {
               onAccept(!reviewed);
@@ -97,9 +107,9 @@ export function TermsOfServiceSection({
       {terms.status !== "notfound" && !terms.content && (
         <section>
           <WarningBox>
-            <Translate>
+            <i18n.Translate>
               The exchange reply with a empty terms of service
-            </Translate>
+            </i18n.Translate>
           </WarningBox>
         </section>
       )}
@@ -120,7 +130,7 @@ export function TermsOfServiceSection({
           )}
           {terms.content.type === "pdf" && (
             <a href={terms.content.location.toString()} download="tos.pdf">
-              <Translate>Download Terms of Service</Translate>
+              <i18n.Translate>Download Terms of Service</i18n.Translate>
             </a>
           )}
         </section>
@@ -128,7 +138,7 @@ export function TermsOfServiceSection({
       {reviewed && onReview && (
         <section>
           <LinkSuccess upperCased onClick={() => onReview(false)}>
-            <Translate>Hide terms of service</Translate>
+            <i18n.Translate>Hide terms of service</i18n.Translate>
           </LinkSuccess>
         </section>
       )}
@@ -138,7 +148,9 @@ export function TermsOfServiceSection({
             name="terms"
             enabled={reviewed}
             label={
-              <Translate>I accept the exchange terms of service</Translate>
+              <i18n.Translate>
+                I accept the exchange terms of service
+              </i18n.Translate>
             }
             onToggle={() => {
               onAccept(!reviewed);
diff --git a/packages/taler-wallet-webextension/src/cta/Tip.tsx b/packages/taler-wallet-webextension/src/cta/Tip.tsx
index 9bb03b7ac..ff86ce8c7 100644
--- a/packages/taler-wallet-webextension/src/cta/Tip.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Tip.tsx
@@ -20,7 +20,7 @@
  * @author sebasjm <dold@taler.net>
  */
 
-import { PrepareTipResult, Translate } from "@gnu-taler/taler-util";
+import { PrepareTipResult, i18n } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 import { useEffect, useState } from "preact/hooks";
 import { Loading } from "../components/Loading";
@@ -46,28 +46,28 @@ export function View({
       <article class="fade">
         {prepareTipResult.accepted ? (
           <span>
-            <Translate>
+            <i18n.Translate>
               Tip from <code>{prepareTipResult.merchantBaseUrl}</code> accepted.
               Check your transactions list for more details.
-            </Translate>
+            </i18n.Translate>
           </span>
         ) : (
           <div>
             <p>
-              <Translate>
+              <i18n.Translate>
                 The merchant <code>{prepareTipResult.merchantBaseUrl}</code> is
                 offering you a tip of{" "}
                 <strong>
                   <AmountView amount={prepareTipResult.tipAmountEffective} />
                 </strong>{" "}
                 via the exchange <code>{prepareTipResult.exchangeBaseUrl}</code>
-              </Translate>
+              </i18n.Translate>
             </p>
             <button onClick={onAccept}>
-              <Translate>Accept tip</Translate>
+              <i18n.Translate>Accept tip</i18n.Translate>
             </button>
             <button onClick={onIgnore}>
-              <Translate>Ignore</Translate>
+              <i18n.Translate>Ignore</i18n.Translate>
             </button>
           </div>
         )}
@@ -108,7 +108,7 @@ export function TipPage({ talerTipUri }: Props): VNode {
   if (!talerTipUri) {
     return (
       <span>
-        <Translate>missing tip uri</Translate>
+        <i18n.Translate>missing tip uri</i18n.Translate>
       </span>
     );
   }
@@ -116,7 +116,7 @@ export function TipPage({ talerTipUri }: Props): VNode {
   if (tipIgnored) {
     return (
       <span>
-        <Translate>You've ignored the tip.</Translate>
+        <i18n.Translate>You've ignored the tip.</i18n.Translate>
       </span>
     );
   }
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
index 7d36a6084..7c9745ddc 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
@@ -119,13 +119,15 @@ export function View({
     <WalletAction>
       <LogoHeader />
       <h2>
-        <Translate>Digital cash withdrawal</Translate>
+        <i18n.Translate>Digital cash withdrawal</i18n.Translate>
       </h2>
 
       {withdrawError && (
         <ErrorTalerOperation
           title={
-            <Translate>Could not finish the withdrawal operation</Translate>
+            <i18n.Translate>
+              Could not finish the withdrawal operation
+            </i18n.Translate>
           }
           error={withdrawError.operationError}
         />
@@ -133,19 +135,19 @@ export function View({
 
       <section>
         <Part
-          title={<Translate>Total to withdraw</Translate>}
+          title={<i18n.Translate>Total to withdraw</i18n.Translate>}
           text={amountToString(Amounts.sub(amount, withdrawalFee).amount)}
           kind="positive"
         />
         {Amounts.isNonZero(withdrawalFee) && (
           <Fragment>
             <Part
-              title={<Translate>Chosen amount</Translate>}
+              title={<i18n.Translate>Chosen amount</i18n.Translate>}
               text={amountToString(amount)}
               kind="neutral"
             />
             <Part
-              title={<Translate>Exchange fee</Translate>}
+              title={<i18n.Translate>Exchange fee</i18n.Translate>}
               text={amountToString(withdrawalFee)}
               kind="negative"
             />
@@ -153,7 +155,7 @@ export function View({
         )}
         {exchangeBaseUrl && (
           <Part
-            title={<Translate>Exchange</Translate>}
+            title={<i18n.Translate>Exchange</i18n.Translate>}
             text={exchangeBaseUrl}
             kind="neutral"
             big
@@ -166,7 +168,7 @@ export function View({
             <Fragment>
               <div>
                 <SelectList
-                  label={<Translate>Known exchanges</Translate>}
+                  label={<i18n.Translate>Known exchanges</i18n.Translate>}
                   list={exchanges}
                   value={nextExchange}
                   name="switchingExchange"
@@ -183,15 +185,15 @@ export function View({
                 }}
               >
                 {nextExchange === undefined ? (
-                  <Translate>Cancel exchange selection</Translate>
+                  <i18n.Translate>Cancel exchange selection</i18n.Translate>
                 ) : (
-                  <Translate>Confirm exchange selection</Translate>
+                  <i18n.Translate>Confirm exchange selection</i18n.Translate>
                 )}
               </LinkSuccess>
             </Fragment>
           ) : (
             <LinkSuccess upperCased onClick={() => setSwitchingExchange(true)}>
-              <Translate>Switch exchange</Translate>
+              <i18n.Translate>Switch exchange</i18n.Translate>
             </LinkSuccess>
           )}
         </section>
@@ -210,7 +212,7 @@ export function View({
             disabled={!exchangeBaseUrl || confirmDisabled}
             onClick={doWithdrawAndCheckError}
           >
-            <Translate>Confirm withdrawal</Translate>
+            <i18n.Translate>Confirm withdrawal</i18n.Translate>
           </ButtonSuccess>
         )}
         {terms.status === "notfound" && (
@@ -219,7 +221,7 @@ export function View({
             disabled={!exchangeBaseUrl}
             onClick={doWithdrawAndCheckError}
           >
-            <Translate>Withdraw anyway</Translate>
+            <i18n.Translate>Withdraw anyway</i18n.Translate>
           </ButtonWarning>
         )}
       </section>
@@ -282,7 +284,9 @@ export function WithdrawPageWithParsedURI({
   if (detailsHook.hasError) {
     return (
       <LoadingError
-        title={<Translate>Could not load the withdrawal details</Translate>}
+        title={
+          <i18n.Translate>Could not load the withdrawal details</i18n.Translate>
+        }
         error={detailsHook}
       />
     );
@@ -337,7 +341,7 @@ export function WithdrawPage({ talerWithdrawUri }: Props): VNode {
   if (!talerWithdrawUri) {
     return (
       <span>
-        <Translate>missing withdraw uri</Translate>
+        <i18n.Translate>missing withdraw uri</i18n.Translate>
       </span>
     );
   }
@@ -347,7 +351,9 @@ export function WithdrawPage({ talerWithdrawUri }: Props): VNode {
   if (uriInfoHook.hasError) {
     return (
       <LoadingError
-        title={<Translate>Could not get the info from the URI</Translate>}
+        title={
+          <i18n.Translate>Could not get the info from the URI</i18n.Translate>
+        }
         error={uriInfoHook}
       />
     );
diff --git a/packages/taler-wallet-webextension/src/cta/reset-required.tsx b/packages/taler-wallet-webextension/src/cta/reset-required.tsx
index e8c5a0dff..350c32d76 100644
--- a/packages/taler-wallet-webextension/src/cta/reset-required.tsx
+++ b/packages/taler-wallet-webextension/src/cta/reset-required.tsx
@@ -20,7 +20,7 @@
  * @author sebasjm
  */
 
-import { Translate } from "@gnu-taler/taler-util";
+import { i18n } from "@gnu-taler/taler-util";
 import { Component, h, VNode } from "preact";
 import * as wxApi from "../wxApi";
 
@@ -51,19 +51,19 @@ class ResetNotification extends Component<any, State> {
       return (
         <div>
           <h1>
-            <Translate>Manual Reset Required</Translate>
+            <i18n.Translate>Manual Reset Required</i18n.Translate>
           </h1>
           <p>
-            <Translate>
+            <i18n.Translate>
               The wallet&apos;s database in your browser is incompatible with
               the currently installed wallet. Please reset manually.
-            </Translate>
+            </i18n.Translate>
           </p>
           <p>
-            <Translate>
+            <i18n.Translate>
               Once the database format has stabilized, we will provide automatic
               upgrades.
-            </Translate>
+            </i18n.Translate>
           </p>
           <input
             id="check"
@@ -74,7 +74,9 @@ class ResetNotification extends Component<any, State> {
             }}
           />{" "}
           <label htmlFor="check">
-            <Translate>I understand that I will lose all my data</Translate>
+            <i18n.Translate>
+              I understand that I will lose all my data
+            </i18n.Translate>
           </label>
           <br />
           <button
@@ -82,7 +84,7 @@ class ResetNotification extends Component<any, State> {
             disabled={!this.state.checked}
             onClick={() => wxApi.resetDb()}
           >
-            <Translate>Reset</Translate>
+            <i18n.Translate>Reset</i18n.Translate>
           </button>
         </div>
       );
@@ -90,12 +92,12 @@ class ResetNotification extends Component<any, State> {
     return (
       <div>
         <h1>
-          <Translate>Everything is fine!</Translate>
+          <i18n.Translate>Everything is fine!</i18n.Translate>
         </h1>
         <p>
-          <Translate>
+          <i18n.Translate>
             A reset is not required anymore, you can close this page.
-          </Translate>
+          </i18n.Translate>
         </p>
       </div>
     );
diff --git a/packages/taler-wallet-webextension/src/cta/return-coins.tsx b/packages/taler-wallet-webextension/src/cta/return-coins.tsx
index 22b373899..1d688fa06 100644
--- a/packages/taler-wallet-webextension/src/cta/return-coins.tsx
+++ b/packages/taler-wallet-webextension/src/cta/return-coins.tsx
@@ -14,7 +14,7 @@
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { Translate } from "@gnu-taler/taler-util";
+import { i18n } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 /**
  * Return coins to own bank account.
@@ -28,7 +28,7 @@ import { h, VNode } from "preact";
 export function createReturnCoinsPage(): VNode {
   return (
     <span>
-      <Translate>Not implemented yet.</Translate>
+      <i18n.Translate>Not implemented yet.</i18n.Translate>
     </span>
   );
 }
diff --git a/packages/taler-wallet-webextension/src/i18n/strings.ts b/packages/taler-wallet-webextension/src/i18n/strings.ts
index 1e02a1b9e..5593f529a 100644
--- a/packages/taler-wallet-webextension/src/i18n/strings.ts
+++ b/packages/taler-wallet-webextension/src/i18n/strings.ts
@@ -1,3 +1,5 @@
+export const strings: any = {}
+
 strings['de'] = {
   "domain": "messages",
   "locale_data": {
diff --git a/packages/taler-wallet-webextension/src/popup/BalancePage.tsx b/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
index f81929b21..46fe027c9 100644
--- a/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
+++ b/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
@@ -14,7 +14,7 @@
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { Amounts, Balance, Translate } from "@gnu-taler/taler-util";
+import { Amounts, Balance, i18n } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { BalanceTable } from "../components/BalanceTable";
@@ -49,7 +49,7 @@ export function BalancePage({
   if (state.hasError) {
     return (
       <LoadingError
-        title={<Translate>Could not load balance page</Translate>}
+        title={<i18n.Translate>Could not load balance page</i18n.Translate>}
         error={state}
       />
     );
@@ -104,18 +104,18 @@ export function BalanceView({
       </section>
       <footer style={{ justifyContent: "space-between" }}>
         <ButtonPrimary onClick={goToWalletManualWithdraw}>
-          <Translate>Withdraw</Translate>
+          <i18n.Translate>Withdraw</i18n.Translate>
         </ButtonPrimary>
         {currencyWithNonZeroAmount.length > 0 && (
           <MultiActionButton
-            label={(s) => <Translate>Deposit {s}</Translate>}
+            label={(s) => <i18n.Translate>Deposit {s}</i18n.Translate>}
             actions={currencyWithNonZeroAmount}
             onClick={(c) => goToWalletDeposit(c)}
           />
         )}
         <JustInDevMode>
           <ButtonBoxPrimary onClick={goToAddAction}>
-            <Translate>Enter URI</Translate>
+            <i18n.Translate>Enter URI</i18n.Translate>
           </ButtonBoxPrimary>
         </JustInDevMode>
       </footer>
diff --git a/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx b/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx
index b3da48a93..228c3cdfd 100644
--- a/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx
+++ b/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx
@@ -151,14 +151,14 @@ export function View({
   return (
     <div>
       <p>
-        <Translate>Debug tools</Translate>:
+        <i18n.Translate>Debug tools</i18n.Translate>:
       </p>
       <button onClick={confirmReset}>
-        <Translate>reset</Translate>
+        <i18n.Translate>reset</i18n.Translate>
       </button>
       <br />
       <button onClick={() => fileRef?.current?.click()}>
-        <Translate>import database</Translate>
+        <i18n.Translate>import database</i18n.Translate>
       </button>
       <input
         ref={fileRef}
@@ -179,11 +179,11 @@ export function View({
       />
       <br />
       <button onClick={onExportDatabase}>
-        <Translate>export database</Translate>
+        <i18n.Translate>export database</i18n.Translate>
       </button>
       {downloadedDatabase && (
         <div>
-          <Translate>
+          <i18n.Translate>
             Database exported at
             <Time
               timestamp={{ t_ms: downloadedDatabase.time.getTime() }}
@@ -198,15 +198,15 @@ export function View({
                 "yyyy/MM/dd_HH:mm",
               )}.json`}
             >
-              <Translate>click here</Translate>
+              <i18n.Translate>click here</i18n.Translate>
             </a>
             to download
-          </Translate>
+          </i18n.Translate>
         </div>
       )}
       <br />
       <p>
-        <Translate>Coins</Translate>:
+        <i18n.Translate>Coins</i18n.Translate>:
       </p>
       {Object.keys(money_by_exchange).map((ex) => {
         const allcoins = money_by_exchange[ex];
@@ -233,7 +233,7 @@ export function View({
       {operations && operations.length > 0 && (
         <Fragment>
           <p>
-            <Translate>Pending operations</Translate>
+            <i18n.Translate>Pending operations</i18n.Translate>
           </p>
           <dl>
             {operations.reverse().map((o) => {
@@ -272,7 +272,7 @@ function ShowAllCoins({
       </p>
       <p>
         <b>
-          <Translate>usable coins</Translate>
+          <i18n.Translate>usable coins</i18n.Translate>
         </b>
       </p>
       {collapsedUnspent ? (
@@ -281,19 +281,19 @@ function ShowAllCoins({
         <table onClick={() => setCollapsedUnspent(true)}>
           <tr>
             <td>
-              <Translate>id</Translate>
+              <i18n.Translate>id</i18n.Translate>
             </td>
             <td>
-              <Translate>denom</Translate>
+              <i18n.Translate>denom</i18n.Translate>
             </td>
             <td>
-              <Translate>value</Translate>
+              <i18n.Translate>value</i18n.Translate>
             </td>
             <td>
-              <Translate>status</Translate>
+              <i18n.Translate>status</i18n.Translate>
             </td>
             <td>
-              <Translate>from refresh?</Translate>
+              <i18n.Translate>from refresh?</i18n.Translate>
             </td>
           </tr>
           {coins.usable.map((c) => {
@@ -310,29 +310,29 @@ function ShowAllCoins({
         </table>
       )}
       <p>
-        <Translate>spent coins</Translate>
+        <i18n.Translate>spent coins</i18n.Translate>
       </p>
       {collapsedSpent ? (
         <div onClick={() => setCollapsedSpent(false)}>
-          <Translate>click to show</Translate>
+          <i18n.Translate>click to show</i18n.Translate>
         </div>
       ) : (
         <table onClick={() => setCollapsedSpent(true)}>
           <tr>
             <td>
-              <Translate>id</Translate>
+              <i18n.Translate>id</i18n.Translate>
             </td>
             <td>
-              <Translate>denom</Translate>
+              <i18n.Translate>denom</i18n.Translate>
             </td>
             <td>
-              <Translate>value</Translate>
+              <i18n.Translate>value</i18n.Translate>
             </td>
             <td>
-              <Translate>status</Translate>
+              <i18n.Translate>status</i18n.Translate>
             </td>
             <td>
-              <Translate>from refresh?</Translate>
+              <i18n.Translate>from refresh?</i18n.Translate>
             </td>
           </tr>
           {coins.spent.map((c) => {
diff --git a/packages/taler-wallet-webextension/src/popup/NoBalanceHelp.tsx b/packages/taler-wallet-webextension/src/popup/NoBalanceHelp.tsx
index 6e2bf1e63..b8b21b24c 100644
--- a/packages/taler-wallet-webextension/src/popup/NoBalanceHelp.tsx
+++ b/packages/taler-wallet-webextension/src/popup/NoBalanceHelp.tsx
@@ -1,4 +1,4 @@
-import { Translate } from "@gnu-taler/taler-util";
+import { i18n } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 import { ButtonBoxWarning, WarningBox } from "../components/styled";
 
@@ -11,16 +11,16 @@ export function NoBalanceHelp({
     <WarningBox>
       <p>
         <b>
-          <Translate>You have no balance to show.</Translate>
+          <i18n.Translate>You have no balance to show.</i18n.Translate>
         </b>
         <br />
-        <Translate>
+        <i18n.Translate>
           To withdraw money you can start from your bank site or click the
           "withdraw" button to use a known exchange.
-        </Translate>
+        </i18n.Translate>
       </p>
       <ButtonBoxWarning onClick={() => goToWalletManualWithdraw()}>
-        <Translate>Withdraw</Translate>
+        <i18n.Translate>Withdraw</i18n.Translate>
       </ButtonBoxWarning>
     </WarningBox>
   );
diff --git a/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx b/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
index a69352c9f..6410ae40e 100644
--- a/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
+++ b/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
@@ -19,11 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import {
-  classifyTalerUri,
-  TalerUriType,
-  Translate,
-} from "@gnu-taler/taler-util";
+import { classifyTalerUri, TalerUriType, i18n } from "@gnu-taler/taler-util";
 import { Fragment, h } from "preact";
 import { ButtonPrimary, ButtonSuccess } from "../components/styled";
 import { actionForTalerUri } from "../utils/index";
@@ -57,54 +53,58 @@ export function TalerActionFound({ url, onDismiss }: Props) {
     <Fragment>
       <section>
         <h1>
-          <Translate>Taler Action</Translate>
+          <i18n.Translate>Taler Action</i18n.Translate>
         </h1>
         {uriType === TalerUriType.TalerPay && (
           <div>
             <p>
-              <Translate>This page has pay action.</Translate>
+              <i18n.Translate>This page has pay action.</i18n.Translate>
             </p>
             <ButtonSuccess
               onClick={() => {
                 navigateTo(actionForTalerUri(uriType, url));
               }}
             >
-              <Translate>Open pay page</Translate>
+              <i18n.Translate>Open pay page</i18n.Translate>
             </ButtonSuccess>
           </div>
         )}
         {uriType === TalerUriType.TalerWithdraw && (
           <div>
             <p>
-              <Translate>This page has a withdrawal action.</Translate>
+              <i18n.Translate>
+                This page has a withdrawal action.
+              </i18n.Translate>
             </p>
             <ButtonSuccess
               onClick={() => {
                 navigateTo(actionForTalerUri(uriType, url));
               }}
             >
-              <Translate>Open withdraw page</Translate>
+              <i18n.Translate>Open withdraw page</i18n.Translate>
             </ButtonSuccess>
           </div>
         )}
         {uriType === TalerUriType.TalerTip && (
           <div>
             <p>
-              <Translate>This page has a tip action.</Translate>
+              <i18n.Translate>This page has a tip action.</i18n.Translate>
             </p>
             <ButtonSuccess
               onClick={() => {
                 navigateTo(actionForTalerUri(uriType, url));
               }}
             >
-              <Translate>Open tip page</Translate>
+              <i18n.Translate>Open tip page</i18n.Translate>
             </ButtonSuccess>
           </div>
         )}
         {uriType === TalerUriType.TalerNotifyReserve && (
           <div>
             <p>
-              <Translate>This page has a notify reserve action.</Translate>
+              <i18n.Translate>
+                This page has a notify reserve action.
+              </i18n.Translate>
             </p>
             <ButtonSuccess
               onClick={() => {
@@ -118,21 +118,23 @@ export function TalerActionFound({ url, onDismiss }: Props) {
         {uriType === TalerUriType.TalerRefund && (
           <div>
             <p>
-              <Translate>This page has a refund action.</Translate>
+              <i18n.Translate>This page has a refund action.</i18n.Translate>
             </p>
             <ButtonSuccess
               onClick={() => {
                 navigateTo(actionForTalerUri(uriType, url));
               }}
             >
-              <Translate>Open refund page</Translate>
+              <i18n.Translate>Open refund page</i18n.Translate>
             </ButtonSuccess>
           </div>
         )}
         {uriType === TalerUriType.Unknown && (
           <div>
             <p>
-              <Translate>This page has a malformed taler uri.</Translate>
+              <i18n.Translate>
+                This page has a malformed taler uri.
+              </i18n.Translate>
             </p>
             <p>{url}</p>
           </div>
@@ -142,7 +144,7 @@ export function TalerActionFound({ url, onDismiss }: Props) {
         <div />
         <ButtonPrimary onClick={() => onDismiss()}>
           {" "}
-          <Translate>Dismiss</Translate>{" "}
+          <i18n.Translate>Dismiss</i18n.Translate>{" "}
         </ButtonPrimary>
       </footer>
     </Fragment>
diff --git a/packages/taler-wallet-webextension/src/popupEntryPoint.tsx b/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
index 6e270f676..e37ea9ccb 100644
--- a/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
+++ b/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
@@ -20,7 +20,7 @@
  * @author sebasjm <dold@taler.net>
  */
 
-import { setupI18n, Translate } from "@gnu-taler/taler-util";
+import { setupI18n, i18n } from "@gnu-taler/taler-util";
 import { createHashHistory } from "history";
 import { Fragment, h, render, VNode } from "preact";
 import Router, { route, Route } from "preact-router";
@@ -181,9 +181,9 @@ function RedirectToWalletPage(): VNode {
   });
   return (
     <span>
-      <Translate>
+      <i18n.Translate>
         this popup is being closed and you are being redirected to {page}
-      </Translate>
+      </i18n.Translate>
     </span>
   );
 }
diff --git a/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx b/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
index d47803212..229fab7be 100644
--- a/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
@@ -1,8 +1,4 @@
-import {
-  classifyTalerUri,
-  TalerUriType,
-  Translate,
-} from "@gnu-taler/taler-util";
+import { classifyTalerUri, TalerUriType, i18n } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { Button, ButtonSuccess, InputWithLabel } from "../components/styled";
@@ -15,15 +11,15 @@ export interface Props {
 function buttonLabelByTalerType(type: TalerUriType): VNode {
   switch (type) {
     case TalerUriType.TalerNotifyReserve:
-      return <Translate>Open reserve page</Translate>;
+      return <i18n.Translate>Open reserve page</i18n.Translate>;
     case TalerUriType.TalerPay:
-      return <Translate>Open pay page</Translate>;
+      return <i18n.Translate>Open pay page</i18n.Translate>;
     case TalerUriType.TalerRefund:
-      return <Translate>Open refund page</Translate>;
+      return <i18n.Translate>Open refund page</i18n.Translate>;
     case TalerUriType.TalerTip:
-      return <Translate>Open tip page</Translate>;
+      return <i18n.Translate>Open tip page</i18n.Translate>;
     case TalerUriType.TalerWithdraw:
-      return <Translate>Open withdraw page</Translate>;
+      return <i18n.Translate>Open withdraw page</i18n.Translate>;
   }
   return <Fragment />;
 }
@@ -52,7 +48,7 @@ export function AddNewActionView({ onCancel }: Props): VNode {
       </section>
       <footer>
         <Button onClick={onCancel}>
-          <Translate>Back</Translate>
+          <i18n.Translate>Back</i18n.Translate>
         </Button>
         {uriType !== TalerUriType.Unknown && (
           <ButtonSuccess
diff --git a/packages/taler-wallet-webextension/src/wallet/BackupPage.tsx b/packages/taler-wallet-webextension/src/wallet/BackupPage.tsx
index 73fff6e85..a5821d48b 100644
--- a/packages/taler-wallet-webextension/src/wallet/BackupPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/BackupPage.tsx
@@ -72,7 +72,7 @@ export function BackupPage({ onAddProvider }: Props): VNode {
   if (status.hasError) {
     return (
       <LoadingError
-        title={<Translate>Could not load backup providers</Translate>}
+        title={<i18n.Translate>Could not load backup providers</i18n.Translate>}
         error={status}
       />
     );
@@ -126,10 +126,10 @@ export function BackupView({
         {!providers.length && (
           <Centered style={{ marginTop: 100 }}>
             <BoldLight>
-              <Translate>No backup providers configured</Translate>
+              <i18n.Translate>No backup providers configured</i18n.Translate>
             </BoldLight>
             <ButtonSuccess onClick={onAddProvider}>
-              <Translate>Add provider</Translate>
+              <i18n.Translate>Add provider</i18n.Translate>
             </ButtonSuccess>
           </Centered>
         )}
@@ -140,13 +140,13 @@ export function BackupView({
           <div>
             <ButtonPrimary onClick={onSyncAll}>
               {providers.length > 1 ? (
-                <Translate>Sync all backups</Translate>
+                <i18n.Translate>Sync all backups</i18n.Translate>
               ) : (
-                <Translate>Sync now</Translate>
+                <i18n.Translate>Sync now</i18n.Translate>
               )}
             </ButtonPrimary>
             <ButtonSuccess onClick={onAddProvider}>
-              <Translate>Add provider</Translate>
+              <i18n.Translate>Add provider</i18n.Translate>
             </ButtonSuccess>
           </div>
         </footer>
@@ -184,12 +184,12 @@ function BackupLayout(props: TransactionLayoutProps): VNode {
 
         {dateStr && (
           <SmallText style={{ marginTop: 5 }}>
-            <Translate>Last synced</Translate>: {dateStr}
+            <i18n.Translate>Last synced</i18n.Translate>: {dateStr}
           </SmallText>
         )}
         {!dateStr && (
           <SmallLightText style={{ marginTop: 5 }}>
-            <Translate>Not synced</Translate>
+            <i18n.Translate>Not synced</i18n.Translate>
           </SmallLightText>
         )}
       </div>
@@ -208,7 +208,7 @@ function ExpirationText({ until }: { until: Timestamp }): VNode {
   return (
     <Fragment>
       <CenteredText>
-        <Translate>Expires in</Translate>
+        <i18n.Translate>Expires in</i18n.Translate>
       </CenteredText>
       <CenteredBoldText {...{ color: colorByTimeToExpire(until) }}>
         {" "}
diff --git a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
index b0eddeda5..96644be28 100644
--- a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
@@ -100,21 +100,21 @@ export function CreateManualWithdraw({
     return (
       <section>
         <h2>
-          <Translate>Manual Withdrawal</Translate>
+          <i18n.Translate>Manual Withdrawal</i18n.Translate>
         </h2>
         <LightText>
-          <Translate>
+          <i18n.Translate>
             Choose a exchange from where the coins will be withdrawn. The
             exchange will send the coins to this wallet after receiving a wire
             transfer with the correct subject.
-          </Translate>
+          </i18n.Translate>
         </LightText>
         <Centered style={{ marginTop: 100 }}>
           <BoldLight>
-            <Translate>No exchange configured</Translate>
+            <i18n.Translate>No exchange configured</i18n.Translate>
           </BoldLight>
           <ButtonSuccess onClick={onAddExchange}>
-            <Translate>Add exchange</Translate>
+            <i18n.Translate>Add exchange</i18n.Translate>
           </ButtonSuccess>
         </Centered>
       </section>
@@ -126,24 +126,24 @@ export function CreateManualWithdraw({
       <section>
         {error && (
           <ErrorMessage
-            title={<Translate>Can't create the reserve</Translate>}
+            title={<i18n.Translate>Can't create the reserve</i18n.Translate>}
             description={error}
           />
         )}
         <h2>
-          <Translate>Manual Withdrawal</Translate>
+          <i18n.Translate>Manual Withdrawal</i18n.Translate>
         </h2>
         <LightText>
-          <Translate>
+          <i18n.Translate>
             Choose a exchange from where the coins will be withdrawn. The
             exchange will send the coins to this wallet after receiving a wire
             transfer with the correct subject.
-          </Translate>
+          </i18n.Translate>
         </LightText>
         <p>
           <Input>
             <SelectList
-              label={<Translate>Currency</Translate>}
+              label={<i18n.Translate>Currency</i18n.Translate>}
               list={currencyMap}
               name="currency"
               value={currency}
@@ -152,7 +152,7 @@ export function CreateManualWithdraw({
           </Input>
           <Input>
             <SelectList
-              label={<Translate>Exchange</Translate>}
+              label={<i18n.Translate>Exchange</i18n.Translate>}
               list={exchangeMap}
               name="currency"
               value={exchange}
@@ -161,13 +161,13 @@ export function CreateManualWithdraw({
           </Input>
           <div style={{ display: "flex", justifyContent: "space-between" }}>
             <LinkPrimary onClick={onAddExchange} style={{ marginLeft: "auto" }}>
-              <Translate>Add Exchange</Translate>
+              <i18n.Translate>Add Exchange</i18n.Translate>
             </LinkPrimary>
           </div>
           {currency && (
             <InputWithLabel invalid={!!amount && !parsedAmount}>
               <label>
-                <Translate>Amount</Translate>
+                <i18n.Translate>Amount</i18n.Translate>
               </label>
               <div>
                 <span>{currency}</span>
@@ -187,7 +187,7 @@ export function CreateManualWithdraw({
           disabled={!parsedAmount || !exchange}
           onClick={() => onCreate(exchange, parsedAmount!)}
         >
-          <Translate>Start withdrawal</Translate>
+          <i18n.Translate>Start withdrawal</i18n.Translate>
         </ButtonPrimary>
       </footer>
     </Fragment>
diff --git a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
index 7a5e02d3b..d1d618e9f 100644
--- a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
@@ -19,7 +19,7 @@ import {
   Amounts,
   AmountString,
   PaytoUri,
-  Translate,
+  i18n,
 } from "@gnu-taler/taler-util";
 import { DepositFee } from "@gnu-taler/taler-wallet-core/src/operations/deposits";
 import { Fragment, h, VNode } from "preact";
@@ -135,7 +135,7 @@ export function View({
   if (!balance) {
     return (
       <div>
-        <Translate>no balance</Translate>
+        <i18n.Translate>no balance</i18n.Translate>
       </div>
     );
   }
@@ -143,10 +143,12 @@ export function View({
     return (
       <WarningBox>
         <p>
-          <Translate>There is no known bank account to send money to</Translate>
+          <i18n.Translate>
+            There is no known bank account to send money to
+          </i18n.Translate>
         </p>
         <ButtonBoxWarning>
-          <Translate>Withdraw</Translate>
+          <i18n.Translate>Withdraw</i18n.Translate>
         </ButtonBoxWarning>
       </WarningBox>
     );
@@ -172,12 +174,12 @@ export function View({
   return (
     <Fragment>
       <h2>
-        <Translate>Send {currency} to your account</Translate>
+        <i18n.Translate>Send {currency} to your account</i18n.Translate>
       </h2>
       <section>
         <Input>
           <SelectList
-            label={<Translate>Bank account IBAN number</Translate>}
+            label={<i18n.Translate>Bank account IBAN number</i18n.Translate>}
             list={accountMap}
             name="account"
             value={String(accountIdx)}
@@ -186,7 +188,7 @@ export function View({
         </Input>
         <InputWithLabel invalid={!!error}>
           <label>
-            <Translate>Amount</Translate>
+            <i18n.Translate>Amount</i18n.Translate>
           </label>
           <div>
             <span>{currency}</span>
@@ -210,7 +212,7 @@ export function View({
           <Fragment>
             <InputWithLabel>
               <label>
-                <Translate>Deposit fee</Translate>
+                <i18n.Translate>Deposit fee</i18n.Translate>
               </label>
               <div>
                 <span>{currency}</span>
@@ -224,7 +226,7 @@ export function View({
 
             <InputWithLabel>
               <label>
-                <Translate>Total deposit</Translate>
+                <i18n.Translate>Total deposit</i18n.Translate>
               </label>
               <div>
                 <span>{currency}</span>
@@ -242,13 +244,13 @@ export function View({
         <div />
         {unableToDeposit ? (
           <ButtonPrimary disabled>
-            <Translate>Deposit</Translate>
+            <i18n.Translate>Deposit</i18n.Translate>
           </ButtonPrimary>
         ) : (
           <ButtonPrimary onClick={() => onSend(accountURI, amountStr)}>
-            <Translate>
+            <i18n.Translate>
               Deposit {Amounts.stringifyValue(totalToDeposit)} {currency}
-            </Translate>
+            </i18n.Translate>
           </ButtonPrimary>
         )}
       </footer>
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
index 06d8abd2b..1ffca827b 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
@@ -85,10 +85,10 @@ export function View({
     <Fragment>
       <section>
         <h1>
-          <Translate>Review terms of service</Translate>
+          <i18n.Translate>Review terms of service</i18n.Translate>
         </h1>
         <div>
-          <Translate>Exchange URL</Translate>:
+          <i18n.Translate>Exchange URL</i18n.Translate>:
           <a href={url} target="_blank" rel="noreferrer">
             {url}
           </a>
@@ -109,28 +109,28 @@ export function View({
 
       <footer>
         <Button onClick={onCancel}>
-          <Translate>Cancel</Translate>
+          <i18n.Translate>Cancel</i18n.Translate>
         </Button>
         {!terms && (
           <Button disabled>
-            <Translate>Loading terms..</Translate>
+            <i18n.Translate>Loading terms..</i18n.Translate>
           </Button>
         )}
         {terms && (
           <Fragment>
             {needsReview && !reviewed && (
               <ButtonSuccess disabled upperCased onClick={onConfirm}>
-                <Translate>Add exchange</Translate>
+                <i18n.Translate>Add exchange</i18n.Translate>
               </ButtonSuccess>
             )}
             {(terms.status === "accepted" || (needsReview && reviewed)) && (
               <ButtonSuccess upperCased onClick={onConfirm}>
-                <Translate>Add exchange</Translate>
+                <i18n.Translate>Add exchange</i18n.Translate>
               </ButtonSuccess>
             )}
             {terms.status === "notfound" && (
               <ButtonWarning upperCased onClick={onConfirm}>
-                <Translate>Add exchange anyway</Translate>
+                <i18n.Translate>Add exchange anyway</i18n.Translate>
               </ButtonWarning>
             )}
           </Fragment>
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
index 909afc4b7..7199ce90c 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
@@ -93,42 +93,46 @@ export function ExchangeSetUrlPage({
       <section>
         {!expectedCurrency ? (
           <h1>
-            <Translate>Add new exchange</Translate>
+            <i18n.Translate>Add new exchange</i18n.Translate>
           </h1>
         ) : (
           <h2>
-            <Translate>Add exchange for {expectedCurrency}</Translate>
+            <i18n.Translate>Add exchange for {expectedCurrency}</i18n.Translate>
           </h2>
         )}
         {!result && (
           <LightText>
-            <Translate>Enter the URL of an exchange you trust.</Translate>
+            <i18n.Translate>
+              Enter the URL of an exchange you trust.
+            </i18n.Translate>
           </LightText>
         )}
         {result && (
           <LightText>
-            <Translate>
+            <i18n.Translate>
               An exchange has been found! Review the information and click next
-            </Translate>
+            </i18n.Translate>
           </LightText>
         )}
         {result && expectedCurrency && expectedCurrency !== result.currency && (
           <WarningBox>
-            <Translate>
+            <i18n.Translate>
               This exchange doesn't match the expected currency
               <b>{expectedCurrency}</b>
-            </Translate>
+            </i18n.Translate>
           </WarningBox>
         )}
         {error && (
           <ErrorMessage
-            title={<Translate>Unable to verify this exchange</Translate>}
+            title={
+              <i18n.Translate>Unable to verify this exchange</i18n.Translate>
+            }
             description={error}
           />
         )}
         {confirmationError && (
           <ErrorMessage
-            title={<Translate>Unable to add this exchange</Translate>}
+            title={<i18n.Translate>Unable to add this exchange</i18n.Translate>}
             description={confirmationError}
           />
         )}
@@ -144,20 +148,20 @@ export function ExchangeSetUrlPage({
           </Input>
           {loading && (
             <div>
-              <Translate>loading</Translate>...
+              <i18n.Translate>loading</i18n.Translate>...
             </div>
           )}
           {result && !loading && (
             <Fragment>
               <Input>
                 <label>
-                  <Translate>Version</Translate>
+                  <i18n.Translate>Version</i18n.Translate>
                 </label>
                 <input type="text" disabled value={result.version} />
               </Input>
               <Input>
                 <label>
-                  <Translate>Currency</Translate>
+                  <i18n.Translate>Currency</i18n.Translate>
                 </label>
                 <input type="text" disabled value={result.currency} />
               </Input>
@@ -167,7 +171,7 @@ export function ExchangeSetUrlPage({
       </section>
       <footer>
         <Button onClick={onCancel}>
-          <Translate>Cancel</Translate>
+          <i18n.Translate>Cancel</i18n.Translate>
         </Button>
         <ButtonPrimary
           disabled={
@@ -183,7 +187,7 @@ export function ExchangeSetUrlPage({
             );
           }}
         >
-          <Translate>Next</Translate>
+          <i18n.Translate>Next</i18n.Translate>
         </ButtonPrimary>
       </footer>
     </Fragment>
diff --git a/packages/taler-wallet-webextension/src/wallet/History.tsx b/packages/taler-wallet-webextension/src/wallet/History.tsx
index a3e8ecc67..e0a1c588e 100644
--- a/packages/taler-wallet-webextension/src/wallet/History.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/History.tsx
@@ -19,7 +19,7 @@ import {
   Balance,
   NotificationType,
   Transaction,
-  Translate,
+  i18n,
 } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -67,7 +67,11 @@ export function HistoryPage({
   if (transactionQuery.hasError) {
     return (
       <LoadingError
-        title={<Translate>Could not load the list of transactions</Translate>}
+        title={
+          <i18n.Translate>
+            Could not load the list of transactions
+          </i18n.Translate>
+        }
         error={transactionQuery}
       />
     );
@@ -194,14 +198,14 @@ export function HistoryView({
               style={{ marginLeft: 0, marginTop: 8 }}
               onClick={() => goToWalletManualWithdraw(selectedCurrency)}
             >
-              <Translate>Withdraw</Translate>
+              <i18n.Translate>Withdraw</i18n.Translate>
             </ButtonPrimary>
             {currencyAmount && Amounts.isNonZero(currencyAmount) && (
               <ButtonBoxPrimary
                 style={{ marginLeft: 0, marginTop: 8 }}
                 onClick={() => goToWalletDeposit(selectedCurrency)}
               >
-                <Translate>Deposit</Translate>
+                <i18n.Translate>Deposit</i18n.Translate>
               </ButtonBoxPrimary>
             )}
           </div>
@@ -209,7 +213,7 @@ export function HistoryView({
       </section>
       {datesWithTransaction.length === 0 ? (
         <section>
-          <Translate>There is no history for this currency</Translate>
+          <i18n.Translate>There is no history for this currency</i18n.Translate>
         </section>
       ) : (
         <section>
diff --git a/packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx b/packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx
index 8eca733d4..d9a1544a7 100644
--- a/packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx
@@ -19,7 +19,7 @@ import {
   AmountJson,
   Amounts,
   NotificationType,
-  Translate,
+  i18n,
 } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -97,7 +97,9 @@ export function ManualWithdrawPage({ currency, onCancel }: Props): VNode {
     return (
       <LoadingError
         title={
-          <Translate>Could not load the list of known exchanges</Translate>
+          <i18n.Translate>
+            Could not load the list of known exchanges
+          </i18n.Translate>
         }
         error={state}
       />
diff --git a/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx b/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
index 55e2b62fb..6bb5b6836 100644
--- a/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
@@ -115,21 +115,27 @@ export function SetUrlView({
     <Fragment>
       <section>
         <h1>
-          <Translate>Add backup provider</Translate>
+          <i18n.Translate>Add backup provider</i18n.Translate>
         </h1>
         {error && (
           <ErrorMessage
-            title={<Translate>Could not get provider information</Translate>}
+            title={
+              <i18n.Translate>
+                Could not get provider information
+              </i18n.Translate>
+            }
             description={error}
           />
         )}
         <LightText>
-          <Translate>Backup providers may charge for their service</Translate>
+          <i18n.Translate>
+            Backup providers may charge for their service
+          </i18n.Translate>
         </LightText>
         <p>
           <Input invalid={urlError}>
             <label>
-              <Translate>URL</Translate>
+              <i18n.Translate>URL</i18n.Translate>
             </label>
             <input
               type="text"
@@ -140,7 +146,7 @@ export function SetUrlView({
           </Input>
           <Input>
             <label>
-              <Translate>Name</Translate>
+              <i18n.Translate>Name</i18n.Translate>
             </label>
             <input
               type="text"
@@ -153,7 +159,7 @@ export function SetUrlView({
       </section>
       <footer>
         <Button onClick={onCancel}>
-          &lt; <Translate>Back</Translate>
+          &lt; <i18n.Translate>Back</i18n.Translate>
         </Button>
         <ButtonPrimary
           disabled={!value && !urlError}
@@ -164,7 +170,7 @@ export function SetUrlView({
             );
           }}
         >
-          <Translate>Next</Translate>
+          <i18n.Translate>Next</i18n.Translate>
         </ButtonPrimary>
       </footer>
     </Fragment>
@@ -189,40 +195,42 @@ export function ConfirmProviderView({
     <Fragment>
       <section>
         <h1>
-          <Translate>Review terms of service</Translate>
+          <i18n.Translate>Review terms of service</i18n.Translate>
         </h1>
         <div>
-          <Translate>Provider URL</Translate>:{" "}
+          <i18n.Translate>Provider URL</i18n.Translate>:{" "}
           <a href={url} target="_blank">
             {url}
           </a>
         </div>
         <SmallLightText>
-          <Translate>
+          <i18n.Translate>
             Please review and accept this provider's terms of service
-          </Translate>
+          </i18n.Translate>
         </SmallLightText>
         <h2>
-          1. <Translate>Pricing</Translate>
+          1. <i18n.Translate>Pricing</i18n.Translate>
         </h2>
         <p>
           {Amounts.isZero(provider.annual_fee) ? (
-            <Translate>free of charge</Translate>
+            <i18n.Translate>free of charge</i18n.Translate>
           ) : (
-            <Translate>{provider.annual_fee} per year of service</Translate>
+            <i18n.Translate>
+              {provider.annual_fee} per year of service
+            </i18n.Translate>
           )}
         </p>
         <h2>
-          2. <Translate>Storage</Translate>
+          2. <i18n.Translate>Storage</i18n.Translate>
         </h2>
         <p>
-          <Translate>
+          <i18n.Translate>
             {provider.storage_limit_in_megabytes} megabytes of storage per year
             of service
-          </Translate>
+          </i18n.Translate>
         </p>
         <Checkbox
-          label={<Translate>Accept terms of service</Translate>}
+          label={<i18n.Translate>Accept terms of service</i18n.Translate>}
           name="terms"
           onToggle={() => setAccepted((old) => !old)}
           enabled={accepted}
@@ -230,10 +238,10 @@ export function ConfirmProviderView({
       </section>
       <footer>
         <Button onClick={onCancel}>
-          &lt; <Translate>Back</Translate>
+          &lt; <i18n.Translate>Back</i18n.Translate>
         </Button>
         <ButtonPrimary disabled={!accepted} onClick={onConfirm}>
-          <Translate>Add provider</Translate>
+          <i18n.Translate>Add provider</i18n.Translate>
         </ButtonPrimary>
       </footer>
     </Fragment>
diff --git a/packages/taler-wallet-webextension/src/wallet/ProviderDetailPage.tsx b/packages/taler-wallet-webextension/src/wallet/ProviderDetailPage.tsx
index beeedcda7..65049d6b6 100644
--- a/packages/taler-wallet-webextension/src/wallet/ProviderDetailPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ProviderDetailPage.tsx
@@ -14,7 +14,7 @@
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 */
 
-import { Translate } from "@gnu-taler/taler-util";
+import { i18n } from "@gnu-taler/taler-util";
 import {
   ProviderInfo,
   ProviderPaymentStatus,
@@ -60,9 +60,9 @@ export function ProviderDetailPage({ pid: providerURL, onBack }: Props): VNode {
     return (
       <LoadingError
         title={
-          <Translate>
+          <i18n.Translate>
             There was an error loading the provider detail for "{providerURL}"
-          </Translate>
+          </i18n.Translate>
         }
         error={state}
       />
@@ -105,12 +105,14 @@ export function ProviderView({
       <Fragment>
         <section>
           <p>
-            <Translate>There is not known provider with url "{url}".</Translate>
+            <i18n.Translate>
+              There is not known provider with url "{url}".
+            </i18n.Translate>
           </p>
         </section>
         <footer>
           <Button onClick={onBack}>
-            &lt; <Translate>Back</Translate>
+            &lt; <i18n.Translate>Back</i18n.Translate>
           </Button>
           <div />
         </footer>
@@ -136,54 +138,54 @@ export function ProviderView({
       <section>
         <p>
           <b>
-            <Translate>Last backup</Translate>:
+            <i18n.Translate>Last backup</i18n.Translate>:
           </b>{" "}
           <Time timestamp={lb} format="dd MMMM yyyy" />
         </p>
         <ButtonPrimary onClick={onSync}>
-          <Translate>Back up</Translate>
+          <i18n.Translate>Back up</i18n.Translate>
         </ButtonPrimary>
         {info.terms && (
           <Fragment>
             <p>
               <b>
-                <Translate>Provider fee</Translate>:
+                <i18n.Translate>Provider fee</i18n.Translate>:
               </b>{" "}
               {info.terms && info.terms.annualFee}{" "}
-              <Translate>per year</Translate>
+              <i18n.Translate>per year</i18n.Translate>
             </p>
           </Fragment>
         )}
         <p>{descriptionByStatus(info.paymentStatus)}</p>
         <ButtonPrimary disabled onClick={onExtend}>
-          <Translate>Extend</Translate>
+          <i18n.Translate>Extend</i18n.Translate>
         </ButtonPrimary>
 
         {info.paymentStatus.type === ProviderPaymentType.TermsChanged && (
           <div>
             <p>
-              <Translate>
+              <i18n.Translate>
                 terms has changed, extending the service will imply accepting
                 the new terms of service
-              </Translate>
+              </i18n.Translate>
             </p>
             <table>
               <thead>
                 <tr>
                   <td>&nbsp;</td>
                   <td>
-                    <Translate>old</Translate>
+                    <i18n.Translate>old</i18n.Translate>
                   </td>
                   <td> -&gt;</td>
                   <td>
-                    <Translate>new</Translate>
+                    <i18n.Translate>new</i18n.Translate>
                   </td>
                 </tr>
               </thead>
               <tbody>
                 <tr>
                   <td>
-                    <Translate>fee</Translate>
+                    <i18n.Translate>fee</i18n.Translate>
                   </td>
                   <td>{info.paymentStatus.oldTerms.annualFee}</td>
                   <td>-&gt;</td>
@@ -191,7 +193,7 @@ export function ProviderView({
                 </tr>
                 <tr>
                   <td>
-                    <Translate>storage</Translate>
+                    <i18n.Translate>storage</i18n.Translate>
                   </td>
                   <td>{info.paymentStatus.oldTerms.storageLimitInMegabytes}</td>
                   <td>-&gt;</td>
@@ -204,11 +206,11 @@ export function ProviderView({
       </section>
       <footer>
         <Button onClick={onBack}>
-          &lt; <Translate>back</Translate>
+          &lt; <i18n.Translate>back</i18n.Translate>
         </Button>
         <div>
           <ButtonDestructive onClick={onDelete}>
-            <Translate>Remove provider</Translate>
+            <i18n.Translate>Remove provider</i18n.Translate>
           </ButtonDestructive>
         </div>
       </footer>
@@ -220,7 +222,9 @@ function Error({ info }: { info: ProviderInfo }): VNode {
   if (info.lastError) {
     return (
       <ErrorMessage
-        title={<Translate>This provider has reported an error</Translate>}
+        title={
+          <i18n.Translate>This provider has reported an error</i18n.Translate>
+        }
         description={info.lastError.hint}
       />
     );
@@ -232,26 +236,28 @@ function Error({ info }: { info: ProviderInfo }): VNode {
           <ErrorMessage
             title={
               <Fragment>
-                <Translate>
+                <i18n.Translate>
                   There is conflict with another backup from{" "}
                   <b>{info.backupProblem.otherDeviceId}</b>
-                </Translate>
+                </i18n.Translate>
               </Fragment>
             }
           />
         );
       case "backup-unreadable":
         return (
-          <ErrorMessage title={<Translate>Backup is not readable</Translate>} />
+          <ErrorMessage
+            title={<i18n.Translate>Backup is not readable</i18n.Translate>}
+          />
         );
       default:
         return (
           <ErrorMessage
             title={
               <Fragment>
-                <Translate>
+                <i18n.Translate>
                   Unknown backup problem: {JSON.stringify(info.backupProblem)}
-                </Translate>
+                </i18n.Translate>
               </Fragment>
             }
           />
@@ -268,14 +274,14 @@ function descriptionByStatus(status: ProviderPaymentStatus): VNode {
       if (status.paidUntil.t_ms === "never") {
         return (
           <span>
-            <Translate>service paid</Translate>
+            <i18n.Translate>service paid</i18n.Translate>
           </span>
         );
       }
       return (
         <Fragment>
           <b>
-            <Translate>Backup valid until</Translate>:
+            <i18n.Translate>Backup valid until</i18n.Translate>:
           </b>{" "}
           <Time timestamp={status.paidUntil} format="dd MMM yyyy" />
         </Fragment>
diff --git a/packages/taler-wallet-webextension/src/wallet/ReserveCreated.tsx b/packages/taler-wallet-webextension/src/wallet/ReserveCreated.tsx
index 7de719fc6..2c0e2fd31 100644
--- a/packages/taler-wallet-webextension/src/wallet/ReserveCreated.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ReserveCreated.tsx
@@ -1,9 +1,4 @@
-import {
-  AmountJson,
-  Amounts,
-  parsePaytoUri,
-  Translate,
-} from "@gnu-taler/taler-util";
+import { AmountJson, parsePaytoUri, i18n } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { BankDetailsByPaytoType } from "../components/BankDetailsByPaytoType";
 import { QR } from "../components/QR";
@@ -29,7 +24,9 @@ export function ReserveCreated({
   if (!paytoURI) {
     return (
       <div>
-        <Translate>could not parse payto uri from exchange {payto}</Translate>
+        <i18n.Translate>
+          could not parse payto uri from exchange {payto}
+        </i18n.Translate>
       </div>
     );
   }
@@ -37,13 +34,13 @@ export function ReserveCreated({
     <Fragment>
       <section>
         <h1>
-          <Translate>Exchange is ready for withdrawal</Translate>
+          <i18n.Translate>Exchange is ready for withdrawal</i18n.Translate>
         </h1>
         <p>
-          <Translate>
+          <i18n.Translate>
             To complete the process you need to wire
             <b>{amountToString(amount)}</b> to the exchange bank account
-          </Translate>
+          </i18n.Translate>
         </p>
         <BankDetailsByPaytoType
           amount={amountToString(amount)}
@@ -53,27 +50,27 @@ export function ReserveCreated({
         />
         <p>
           <WarningBox>
-            <Translate>
+            <i18n.Translate>
               Make sure to use the correct subject, otherwise the money will not
               arrive in this wallet.
-            </Translate>
+            </i18n.Translate>
           </WarningBox>
         </p>
       </section>
       <section>
         <p>
-          <Translate>
+          <i18n.Translate>
             Alternative, you can also scan this QR code or open
             <a href={payto}>this link</a> if you have a banking app installed
             that supports RFC 8905
-          </Translate>
+          </i18n.Translate>
         </p>
         <QR text={payto} />
       </section>
       <footer>
         <div />
         <ButtonDestructive onClick={onCancel}>
-          <Translate>Cancel withdrawal</Translate>
+          <i18n.Translate>Cancel withdrawal</i18n.Translate>
         </ButtonDestructive>
       </footer>
     </Fragment>
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.tsx b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
index bac884247..3bb3fa865 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
@@ -81,31 +81,31 @@ export function SettingsView({
     <Fragment>
       <section>
         <h2>
-          <Translate>Permissions</Translate>
+          <i18n.Translate>Permissions</i18n.Translate>
         </h2>
         <Checkbox
           label={
-            <Translate>
+            <i18n.Translate>
               Automatically open wallet based on page content
-            </Translate>
+            </i18n.Translate>
           }
           name="perm"
           description={
-            <Translate>
+            <i18n.Translate>
               Enabling this option below will make using the wallet faster, but
               requires more permissions from your browser.
-            </Translate>
+            </i18n.Translate>
           }
           enabled={permissionsEnabled}
           onToggle={togglePermissions}
         />
 
         <h2>
-          <Translate>Known exchanges</Translate>
+          <i18n.Translate>Known exchanges</i18n.Translate>
         </h2>
         {!knownExchanges || !knownExchanges.length ? (
           <div>
-            <Translate>No exchange yet</Translate>
+            <i18n.Translate>No exchange yet</i18n.Translate>
           </div>
         ) : (
           <Fragment>
@@ -113,13 +113,13 @@ export function SettingsView({
               <thead>
                 <tr>
                   <th>
-                    <Translate>Currency</Translate>
+                    <i18n.Translate>Currency</i18n.Translate>
                   </th>
                   <th>
-                    <Translate>URL</Translate>
+                    <i18n.Translate>URL</i18n.Translate>
                   </th>
                   <th>
-                    <Translate>Term of Service</Translate>
+                    <i18n.Translate>Term of Service</i18n.Translate>
                   </th>
                 </tr>
               </thead>
@@ -135,20 +135,20 @@ export function SettingsView({
                       case "accepted":
                         return (
                           <SuccessText>
-                            <Translate>ok</Translate>
+                            <i18n.Translate>ok</i18n.Translate>
                           </SuccessText>
                         );
                       case "changed":
                         return (
                           <WarningText>
-                            <Translate>changed</Translate>
+                            <i18n.Translate>changed</i18n.Translate>
                           </WarningText>
                         );
                       case "new":
                       case "notfound":
                         return (
                           <DestructiveText>
-                            <Translate>not accepted</Translate>
+                            <i18n.Translate>not accepted</i18n.Translate>
                           </DestructiveText>
                         );
                     }
@@ -172,18 +172,18 @@ export function SettingsView({
         <div style={{ display: "flex", justifyContent: "space-between" }}>
           <div />
           <LinkPrimary href={Pages.settings_exchange_add}>
-            <Translate>Add an exchange</Translate>
+            <i18n.Translate>Add an exchange</i18n.Translate>
           </LinkPrimary>
         </div>
 
         <h2>Config</h2>
         <Checkbox
-          label={<Translate>Developer mode</Translate>}
+          label={<i18n.Translate>Developer mode</i18n.Translate>}
           name="devMode"
           description={
-            <Translate>
+            <i18n.Translate>
               (More options and information useful for debugging)
-            </Translate>
+            </i18n.Translate>
           }
           enabled={developerMode}
           onToggle={toggleDeveloperMode}
diff --git a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
index a43e9b4a0..cae70d60d 100644
--- a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx
@@ -22,7 +22,6 @@ import {
   parsePaytoUri,
   Transaction,
   TransactionType,
-  Translate,
   WithdrawalType,
 } from "@gnu-taler/taler-util";
 import { differenceInSeconds } from "date-fns";
@@ -77,7 +76,9 @@ export function TransactionPage({ tid, goToWalletHistory }: Props): VNode {
     return (
       <LoadingError
         title={
-          <Translate>Could not load the transaction information</Translate>
+          <i18n.Translate>
+            Could not load the transaction information
+          </i18n.Translate>
         }
         error={state}
       />
@@ -142,15 +143,15 @@ export function TransactionView({
         <section style={{ padding: 8, textAlign: "center" }}>
           <ErrorTalerOperation
             title={
-              <Translate>
+              <i18n.Translate>
                 There was an error trying to complete the transaction
-              </Translate>
+              </i18n.Translate>
             }
             error={transaction?.error}
           />
           {transaction.pending && (
             <WarningBox>
-              <Translate>This transaction is not completed</Translate>
+              <i18n.Translate>This transaction is not completed</i18n.Translate>
             </WarningBox>
           )}
         </section>
@@ -159,16 +160,16 @@ export function TransactionView({
         </section>
         <footer>
           <Button onClick={onBack}>
-            &lt; <Translate> Back </Translate>
+            &lt; <i18n.Translate> Back </i18n.Translate>
           </Button>
           <div>
             {showRetry ? (
               <ButtonPrimary onClick={onRetry}>
-                <Translate>Retry</Translate>
+                <i18n.Translate>Retry</i18n.Translate>
               </ButtonPrimary>
             ) : null}
             <ButtonDestructive onClick={doCheckBeforeForget}>
-              <Translate>Forget</Translate>
+              <i18n.Translate>Forget</i18n.Translate>
             </ButtonDestructive>
           </div>
         </footer>
@@ -193,28 +194,28 @@ export function TransactionView({
           <Overlay>
             <CenteredDialog>
               <header>
-                <Translate>Caution!</Translate>
+                <i18n.Translate>Caution!</i18n.Translate>
               </header>
               <section>
-                <Translate>
+                <i18n.Translate>
                   If you have already wired money to the exchange you will loose
                   the chance to get the coins form it.
-                </Translate>
+                </i18n.Translate>
               </section>
               <footer>
                 <Button onClick={() => setConfirmBeforeForget(false)}>
-                  <Translate>Cancel</Translate>
+                  <i18n.Translate>Cancel</i18n.Translate>
                 </Button>
 
                 <ButtonDestructive onClick={onDelete}>
-                  <Translate>Confirm</Translate>
+                  <i18n.Translate>Confirm</i18n.Translate>
                 </ButtonDestructive>
               </footer>
             </CenteredDialog>
           </Overlay>
         ) : undefined}
         <h2>
-          <Translate>Withdrawal</Translate>
+          <i18n.Translate>Withdrawal</i18n.Translate>
         </h2>
         <Time timestamp={transaction.timestamp} format="dd MMMM yyyy, HH:mm" />
         {transaction.pending ? (
@@ -231,21 +232,21 @@ export function TransactionView({
               />
               <p>
                 <WarningBox>
-                  <Translate>
+                  <i18n.Translate>
                     Make sure to use the correct subject, otherwise the money
                     will not arrive in this wallet.
-                  </Translate>
+                  </i18n.Translate>
                 </WarningBox>
               </p>
               <Part
                 big
-                title={<Translate>Total withdrawn</Translate>}
+                title={<i18n.Translate>Total withdrawn</i18n.Translate>}
                 text={amountToString(transaction.amountEffective)}
                 kind="positive"
               />
               <Part
                 big
-                title={<Translate>Exchange fee</Translate>}
+                title={<i18n.Translate>Exchange fee</i18n.Translate>}
                 text={amountToString(fee)}
                 kind="negative"
               />
@@ -255,38 +256,40 @@ export function TransactionView({
               {!transaction.withdrawalDetails.confirmed &&
               transaction.withdrawalDetails.bankConfirmationUrl ? (
                 <InfoBox>
-                  <Translate>
+                  <i18n.Translate>
                     The bank is waiting for confirmation. Go to the
                     <a
                       href={transaction.withdrawalDetails.bankConfirmationUrl}
                       target="_blank"
                       rel="noreferrer"
                     >
-                      <Translate>bank site</Translate>
+                      <i18n.Translate>bank site</i18n.Translate>
                     </a>
-                  </Translate>
+                  </i18n.Translate>
                 </InfoBox>
               ) : undefined}
               {transaction.withdrawalDetails.confirmed && (
                 <InfoBox>
-                  <Translate>Waiting for the coins to arrive</Translate>
+                  <i18n.Translate>
+                    Waiting for the coins to arrive
+                  </i18n.Translate>
                 </InfoBox>
               )}
               <Part
                 big
-                title={<Translate>Total withdrawn</Translate>}
+                title={<i18n.Translate>Total withdrawn</i18n.Translate>}
                 text={amountToString(transaction.amountEffective)}
                 kind="positive"
               />
               <Part
                 big
-                title={<Translate>Chosen amount</Translate>}
+                title={<i18n.Translate>Chosen amount</i18n.Translate>}
                 text={amountToString(transaction.amountRaw)}
                 kind="neutral"
               />
               <Part
                 big
-                title={<Translate>Exchange fee</Translate>}
+                title={<i18n.Translate>Exchange fee</i18n.Translate>}
                 text={amountToString(fee)}
                 kind="negative"
               />
@@ -296,26 +299,26 @@ export function TransactionView({
           <Fragment>
             <Part
               big
-              title={<Translate>Total withdrawn</Translate>}
+              title={<i18n.Translate>Total withdrawn</i18n.Translate>}
               text={amountToString(transaction.amountEffective)}
               kind="positive"
             />
             <Part
               big
-              title={<Translate>Chosen amount</Translate>}
+              title={<i18n.Translate>Chosen amount</i18n.Translate>}
               text={amountToString(transaction.amountRaw)}
               kind="neutral"
             />
             <Part
               big
-              title={<Translate>Exchange fee</Translate>}
+              title={<i18n.Translate>Exchange fee</i18n.Translate>}
               text={amountToString(fee)}
               kind="negative"
             />
           </Fragment>
         )}
         <Part
-          title={<Translate>Exchange</Translate>}
+          title={<i18n.Translate>Exchange</i18n.Translate>}
           text={new URL(transaction.exchangeBaseUrl).hostname}
           kind="neutral"
         />
@@ -336,40 +339,40 @@ export function TransactionView({
     return (
       <TransactionTemplate>
         <h2>
-          <Translate>Payment</Translate>
+          <i18n.Translate>Payment</i18n.Translate>
         </h2>
         <Time timestamp={transaction.timestamp} format="dd MMMM yyyy, HH:mm" />
         <br />
         <Part
           big
-          title={<Translate>Total paid</Translate>}
+          title={<i18n.Translate>Total paid</i18n.Translate>}
           text={amountToString(transaction.amountEffective)}
           kind="negative"
         />
         <Part
           big
-          title={<Translate>Purchase amount</Translate>}
+          title={<i18n.Translate>Purchase amount</i18n.Translate>}
           text={amountToString(transaction.amountRaw)}
           kind="neutral"
         />
         <Part
           big
-          title={<Translate>Fee</Translate>}
+          title={<i18n.Translate>Fee</i18n.Translate>}
           text={amountToString(fee)}
           kind="negative"
         />
         <Part
-          title={<Translate>Merchant</Translate>}
+          title={<i18n.Translate>Merchant</i18n.Translate>}
           text={transaction.info.merchant.name}
           kind="neutral"
         />
         <Part
-          title={<Translate>Purchase</Translate>}
+          title={<i18n.Translate>Purchase</i18n.Translate>}
           text={transaction.info.summary}
           kind="neutral"
         />
         <Part
-          title={<Translate>Receipt</Translate>}
+          title={<i18n.Translate>Receipt</i18n.Translate>}
           text={`#${transaction.info.orderId}`}
           kind="neutral"
         />
@@ -407,25 +410,25 @@ export function TransactionView({
     return (
       <TransactionTemplate>
         <h2>
-          <Translate>Deposit</Translate>
+          <i18n.Translate>Deposit</i18n.Translate>
         </h2>
         <Time timestamp={transaction.timestamp} format="dd MMMM yyyy, HH:mm" />
         <br />
         <Part
           big
-          title={<Translate>Total send</Translate>}
+          title={<i18n.Translate>Total send</i18n.Translate>}
           text={amountToString(transaction.amountEffective)}
           kind="neutral"
         />
         <Part
           big
-          title={<Translate>Deposit amount</Translate>}
+          title={<i18n.Translate>Deposit amount</i18n.Translate>}
           text={amountToString(transaction.amountRaw)}
           kind="positive"
         />
         <Part
           big
-          title={<Translate>Fee</Translate>}
+          title={<i18n.Translate>Fee</i18n.Translate>}
           text={amountToString(fee)}
           kind="negative"
         />
@@ -441,25 +444,25 @@ export function TransactionView({
     return (
       <TransactionTemplate>
         <h2>
-          <Translate>Refresh</Translate>
+          <i18n.Translate>Refresh</i18n.Translate>
         </h2>
         <Time timestamp={transaction.timestamp} format="dd MMMM yyyy, HH:mm" />
         <br />
         <Part
           big
-          title={<Translate>Total refresh</Translate>}
+          title={<i18n.Translate>Total refresh</i18n.Translate>}
           text={amountToString(transaction.amountEffective)}
           kind="negative"
         />
         <Part
           big
-          title={<Translate>Refresh amount</Translate>}
+          title={<i18n.Translate>Refresh amount</i18n.Translate>}
           text={amountToString(transaction.amountRaw)}
           kind="neutral"
         />
         <Part
           big
-          title={<Translate>Fee</Translate>}
+          title={<i18n.Translate>Fee</i18n.Translate>}
           text={amountToString(fee)}
           kind="negative"
         />
@@ -475,25 +478,25 @@ export function TransactionView({
     return (
       <TransactionTemplate>
         <h2>
-          <Translate>Tip</Translate>
+          <i18n.Translate>Tip</i18n.Translate>
         </h2>
         <Time timestamp={transaction.timestamp} format="dd MMMM yyyy, HH:mm" />
         <br />
         <Part
           big
-          title={<Translate>Total tip</Translate>}
+          title={<i18n.Translate>Total tip</i18n.Translate>}
           text={amountToString(transaction.amountEffective)}
           kind="positive"
         />
         <Part
           big
-          title={<Translate>Received amount</Translate>}
+          title={<i18n.Translate>Received amount</i18n.Translate>}
           text={amountToString(transaction.amountRaw)}
           kind="neutral"
         />
         <Part
           big
-          title={<Translate>Fee</Translate>}
+          title={<i18n.Translate>Fee</i18n.Translate>}
           text={amountToString(fee)}
           kind="negative"
         />
@@ -509,40 +512,40 @@ export function TransactionView({
     return (
       <TransactionTemplate>
         <h2>
-          <Translate>Refund</Translate>
+          <i18n.Translate>Refund</i18n.Translate>
         </h2>
         <Time timestamp={transaction.timestamp} format="dd MMMM yyyy, HH:mm" />
         <br />
         <Part
           big
-          title={<Translate>Total refund</Translate>}
+          title={<i18n.Translate>Total refund</i18n.Translate>}
           text={amountToString(transaction.amountEffective)}
           kind="positive"
         />
         <Part
           big
-          title={<Translate>Refund amount</Translate>}
+          title={<i18n.Translate>Refund amount</i18n.Translate>}
           text={amountToString(transaction.amountRaw)}
           kind="neutral"
         />
         <Part
           big
-          title={<Translate>Fee</Translate>}
+          title={<i18n.Translate>Fee</i18n.Translate>}
           text={amountToString(fee)}
           kind="negative"
         />
         <Part
-          title={<Translate>Merchant</Translate>}
+          title={<i18n.Translate>Merchant</i18n.Translate>}
           text={transaction.info.merchant.name}
           kind="neutral"
         />
         <Part
-          title={<Translate>Purchase</Translate>}
+          title={<i18n.Translate>Purchase</i18n.Translate>}
           text={transaction.info.summary}
           kind="neutral"
         />
         <Part
-          title={<Translate>Receipt</Translate>}
+          title={<i18n.Translate>Receipt</i18n.Translate>}
           text={`#${transaction.info.orderId}`}
           kind="neutral"
         />
diff --git a/packages/taler-wallet-webextension/src/wallet/Welcome.tsx b/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
index a251c4254..37ad97afd 100644
--- a/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
@@ -20,7 +20,7 @@
  * @author sebasjm
  */
 
-import { Translate, WalletDiagnostics } from "@gnu-taler/taler-util";
+import { i18n, WalletDiagnostics } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { Checkbox } from "../components/Checkbox";
 import { Diagnostics } from "../components/Diagnostics";
@@ -55,40 +55,43 @@ export function View({
   return (
     <Fragment>
       <h1>
-        <Translate>Browser Extension Installed!</Translate>
+        <i18n.Translate>Browser Extension Installed!</i18n.Translate>
       </h1>
       <div>
         <p>
-          <Translate>Thank you for installing the wallet.</Translate>
+          <i18n.Translate>Thank you for installing the wallet.</i18n.Translate>
         </p>
         <Diagnostics diagnostics={diagnostics} timedOut={timedOut} />
         <h2>
-          <Translate>Permissions</Translate>
+          <i18n.Translate>Permissions</i18n.Translate>
         </h2>
         <Checkbox
           label={
-            <Translate>
+            <i18n.Translate>
               Automatically open wallet based on page content
-            </Translate>
+            </i18n.Translate>
           }
           name="perm"
           description={
-            <Translate>
+            <i18n.Translate>
               (Enabling this option below will make using the wallet faster, but
               requires more permissions from your browser.)
-            </Translate>
+            </i18n.Translate>
           }
           enabled={permissionsEnabled}
           onToggle={togglePermissions}
         />
         <h2>
-          <Translate>Next Steps</Translate>
+          <i18n.Translate>Next Steps</i18n.Translate>
         </h2>
         <a href="https://demo.taler.net/" style={{ display: "block" }}>
-          <Translate>Try the demo</Translate> »
+          <i18n.Translate>Try the demo</i18n.Translate> »
         </a>
         <a href="https://demo.taler.net/" style={{ display: "block" }}>
-          <Translate>Learn how to top up your wallet balance</Translate> »
+          <i18n.Translate>
+            Learn how to top up your wallet balance
+          </i18n.Translate>{" "}
+          »
         </a>
       </div>
     </Fragment>
diff --git a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
index b0ff0d186..9d8d92863 100644
--- a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
+++ b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
@@ -20,7 +20,7 @@
  * @author sebasjm <dold@taler.net>
  */
 
-import { i18n, setupI18n, Translate } from "@gnu-taler/taler-util";
+import { i18n, setupI18n } from "@gnu-taler/taler-util";
 import { createHashHistory } from "history";
 import { Fragment, h, render, VNode } from "preact";
 import Router, { route, Route } from "preact-router";
@@ -169,9 +169,9 @@ function Application(): VNode {
                   onSuccess={(currency: string) => {
                     route(Pages.balance_history.replace(":currency", currency));
                     setGlobalNotification(
-                      <Translate>
+                      <i18n.Translate>
                         All done, your transaction is in progress
-                      </Translate>,
+                      </i18n.Translate>,
                     );
                   }}
                 />
-- 
cgit v1.2.3


From 68b887344289902273f0e0591e1038182ca4da77 Mon Sep 17 00:00:00 2001
From: Sebastian <sebasjm@gmail.com>
Date: Thu, 24 Feb 2022 12:41:47 -0300
Subject: added ja lang and implemented transalation switch

---
 packages/pogen/src/po2ts.ts                        |    4 +-
 packages/taler-util/src/i18n.ts                    |    5 +-
 .../.storybook/preview.js                          |    4 +-
 packages/taler-wallet-webextension/package.json    |    3 +-
 .../src/context/translation.ts                     |   22 +-
 packages/taler-wallet-webextension/src/i18n/de.po  |   59 +-
 .../taler-wallet-webextension/src/i18n/en-US.po    |   63 +-
 packages/taler-wallet-webextension/src/i18n/es.po  |  150 ++-
 packages/taler-wallet-webextension/src/i18n/fr.po  |   59 +-
 packages/taler-wallet-webextension/src/i18n/it.po  |   59 +-
 packages/taler-wallet-webextension/src/i18n/ja.po  | 1367 ++++++++++++++++++++
 .../taler-wallet-webextension/src/i18n/strings.ts  | 1242 +++++++++++++++---
 packages/taler-wallet-webextension/src/i18n/sv.po  |   59 +-
 .../src/i18n/taler-wallet-webex.pot                |   59 +-
 packages/taler-wallet-webextension/src/i18n/tr.po  |   50 +-
 .../src/popup/BalancePage.tsx                      |    4 +-
 .../src/popup/TalerActionFound.tsx                 |    2 +-
 .../src/popupEntryPoint.tsx                        |  175 +--
 .../src/wallet/Settings.tsx                        |   34 +-
 .../src/walletEntryPoint.tsx                       |    5 +-
 20 files changed, 2983 insertions(+), 442 deletions(-)
 create mode 100644 packages/taler-wallet-webextension/src/i18n/ja.po

(limited to 'packages/taler-wallet-webextension/src/walletEntryPoint.tsx')

diff --git a/packages/pogen/src/po2ts.ts b/packages/pogen/src/po2ts.ts
index e11443f4f..7e831e6f8 100644
--- a/packages/pogen/src/po2ts.ts
+++ b/packages/pogen/src/po2ts.ts
@@ -34,7 +34,9 @@ export function po2ts(): void {
 
   console.log(files);
 
-  const chunks: string[] = [];
+  const chunks: string[] = [
+    "export const strings: any = {};\n\n"
+  ];
 
   for (const filename of files) {
     const m = filename.match(/([a-zA-Z0-9-_]+).po/);
diff --git a/packages/taler-util/src/i18n.ts b/packages/taler-util/src/i18n.ts
index 227798f48..be7cfe6a0 100644
--- a/packages/taler-util/src/i18n.ts
+++ b/packages/taler-util/src/i18n.ts
@@ -70,11 +70,14 @@ export function translate(
 /**
  * Internationalize a string template without serializing
  */
-export function Translate({ children, ...rest }: { children: any }): any {
+export function Translate({ children, debug, }: { children: any, debug?: boolean }): any {
   const c = [].concat(children);
   const s = stringifyArray(c);
   if (!s) return [];
   const translation: string = jed.ngettext(s, s, 1);
+  if (debug) {
+    console.log("looking for ", s, "got", translation)
+  }
   return replacePlaceholderWithValues(translation, c);
 }
 
diff --git a/packages/taler-wallet-webextension/.storybook/preview.js b/packages/taler-wallet-webextension/.storybook/preview.js
index 5156b556a..61484b665 100644
--- a/packages/taler-wallet-webextension/.storybook/preview.js
+++ b/packages/taler-wallet-webextension/.storybook/preview.js
@@ -32,7 +32,9 @@ export const globalTypes = {
       icon: 'globe',
       items: [
         { value: 'en', right: '🇺🇸', title: 'English' },
-        { value: 'de', right: '🇪🇸', title: 'German' },
+        { value: 'ja', right: '🇯🇵', title: 'Japanese' },
+        { value: 'es', right: '🇪🇸', title: 'Spanish' },
+        { value: 'de', right: '🇩🇪', title: 'German' },
       ],
     },
   },
diff --git a/packages/taler-wallet-webextension/package.json b/packages/taler-wallet-webextension/package.json
index 0672d79a6..76ba31706 100644
--- a/packages/taler-wallet-webextension/package.json
+++ b/packages/taler-wallet-webextension/package.json
@@ -17,7 +17,8 @@
     "pretty": "prettier --write src",
     "watch": "tsc --watch & rollup -w -c",
     "i18n:extract": "pogen extract",
-    "i18n:merge": "pogen merge"
+    "i18n:merge": "pogen merge",
+    "i18n:emit": "pogen emit"
   },
   "dependencies": {
     "@gnu-taler/taler-util": "workspace:*",
diff --git a/packages/taler-wallet-webextension/src/context/translation.ts b/packages/taler-wallet-webextension/src/context/translation.ts
index 105da9dcf..0f6aed23a 100644
--- a/packages/taler-wallet-webextension/src/context/translation.ts
+++ b/packages/taler-wallet-webextension/src/context/translation.ts
@@ -29,10 +29,24 @@ import { setupI18n } from "@gnu-taler/taler-util";
 
 interface Type {
   lang: string;
+  supportedLang: { [id in keyof typeof supportedLang]: string }
   changeLanguage: (l: string) => void;
 }
+
+const supportedLang = {
+  es: "Español [es]",
+  ja: "日本語 [ja]",
+  en: "English [en]",
+  fr: "Français [fr]",
+  de: "Deutsch [de]",
+  sv: "Svenska [sv]",
+  it: "Italiano [it]",
+};
+
+
 const initial = {
   lang: "en",
+  supportedLang,
   changeLanguage: () => {
     // do not change anything
   },
@@ -52,7 +66,11 @@ export const TranslationProvider = ({
   children,
   forceLang,
 }: Props): VNode => {
-  const [lang, changeLanguage] = useLang(initial);
+  const [lang, changeLanguage2] = useLang(initial);
+  function changeLanguage(s: string) {
+    console.log("trying to change lang to ", s, "current lang", lang)
+    changeLanguage2(s)
+  }
   useEffect(() => {
     if (forceLang) {
       changeLanguage(forceLang);
@@ -66,7 +84,7 @@ export const TranslationProvider = ({
   } else {
     setupI18n(lang, strings);
   }
-  return h(Context.Provider, { value: { lang, changeLanguage }, children });
+  return h(Context.Provider, { value: { lang, changeLanguage, supportedLang }, children });
 };
 
 export const useTranslationContext = (): Type => useContext(Context);
diff --git a/packages/taler-wallet-webextension/src/i18n/de.po b/packages/taler-wallet-webextension/src/i18n/de.po
index c4de7c8bb..46d8d056c 100644
--- a/packages/taler-wallet-webextension/src/i18n/de.po
+++ b/packages/taler-wallet-webextension/src/i18n/de.po
@@ -110,7 +110,7 @@ msgstr ""
 msgid "Deposit %1$s"
 msgstr ""
 
-#: src/popup/BalancePage.tsx:118
+#: src/popup/BalancePage.tsx:120
 #, c-format
 msgid "Enter URI"
 msgstr ""
@@ -251,6 +251,11 @@ msgstr ""
 msgid "This page has a notify reserve action."
 msgstr ""
 
+#: src/popup/TalerActionFound.tsx:114
+#, c-format
+msgid "Notify"
+msgstr ""
+
 #: src/popup/TalerActionFound.tsx:121
 #, c-format
 msgid "This page has a refund action."
@@ -598,7 +603,7 @@ msgstr ""
 msgid "Backup valid until"
 msgstr ""
 
-#: src/popupEntryPoint.tsx:184
+#: src/popupEntryPoint.tsx:187
 #, c-format
 msgid "this popup is being closed and you are being redirected to %1$s"
 msgstr ""
@@ -776,64 +781,74 @@ msgstr ""
 msgid "Cancel withdrawal"
 msgstr ""
 
-#: src/wallet/Settings.tsx:84
+#: src/wallet/Settings.tsx:89
 #, c-format
-msgid "Permissions"
+msgid "Display"
+msgstr ""
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
+msgstr ""
+
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
 msgstr ""
 
-#: src/wallet/Settings.tsx:87
+#: src/wallet/Settings.tsx:105
 #, c-format
 msgid "Automatically open wallet based on page content"
 msgstr ""
 
-#: src/wallet/Settings.tsx:93
+#: src/wallet/Settings.tsx:111
 #, c-format
 msgid ""
 "Enabling this option below will make using the wallet faster, but requires "
 "more permissions from your browser."
 msgstr ""
 
-#: src/wallet/Settings.tsx:104
+#: src/wallet/Settings.tsx:122
 #, c-format
-msgid "Known exchanges"
+msgid "Trust"
 msgstr ""
 
-#: src/wallet/Settings.tsx:108
+#: src/wallet/Settings.tsx:126
 #, c-format
 msgid "No exchange yet"
 msgstr ""
 
-#: src/wallet/Settings.tsx:122
+#: src/wallet/Settings.tsx:140
 #, c-format
 msgid "Term of Service"
 msgstr ""
 
-#: src/wallet/Settings.tsx:138
+#: src/wallet/Settings.tsx:156
 #, c-format
 msgid "ok"
 msgstr ""
 
-#: src/wallet/Settings.tsx:144
+#: src/wallet/Settings.tsx:162
 #, c-format
 msgid "changed"
 msgstr ""
 
-#: src/wallet/Settings.tsx:151
+#: src/wallet/Settings.tsx:169
 #, c-format
 msgid "not accepted"
 msgstr ""
 
-#: src/wallet/Settings.tsx:175
+#: src/wallet/Settings.tsx:193
 #, c-format
 msgid "Add an exchange"
 msgstr ""
 
-#: src/wallet/Settings.tsx:181
+#: src/wallet/Settings.tsx:199
 #, c-format
 msgid "Developer mode"
 msgstr ""
 
-#: src/wallet/Settings.tsx:183
+#: src/wallet/Settings.tsx:201
 #, c-format
 msgid "(More options and information useful for debugging)"
 msgstr ""
@@ -1005,6 +1020,11 @@ msgstr ""
 msgid "Thank you for installing the wallet."
 msgstr ""
 
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr ""
+
 #: src/wallet/Welcome.tsx:75
 #, c-format
 msgid ""
@@ -1217,6 +1237,11 @@ msgstr ""
 msgid "Total to withdraw"
 msgstr ""
 
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr ""
+
 #: src/cta/Withdraw.tsx:187
 #, c-format
 msgid "Cancel exchange selection"
@@ -1262,7 +1287,7 @@ msgstr ""
 msgid "Could not load the list of known exchanges"
 msgstr ""
 
-#: src/walletEntryPoint.tsx:171
+#: src/walletEntryPoint.tsx:172
 #, c-format
 msgid "All done, your transaction is in progress"
 msgstr ""
diff --git a/packages/taler-wallet-webextension/src/i18n/en-US.po b/packages/taler-wallet-webextension/src/i18n/en-US.po
index 2fccaeb9a..23140abbe 100644
--- a/packages/taler-wallet-webextension/src/i18n/en-US.po
+++ b/packages/taler-wallet-webextension/src/i18n/en-US.po
@@ -31,7 +31,7 @@ msgstr ""
 #: src/NavigationBar.tsx:70
 #, c-format
 msgid "Balance"
-msgstr "Credit"
+msgstr "Balance"
 
 #: src/NavigationBar.tsx:73
 #, c-format
@@ -110,7 +110,7 @@ msgstr ""
 msgid "Deposit %1$s"
 msgstr ""
 
-#: src/popup/BalancePage.tsx:118
+#: src/popup/BalancePage.tsx:120
 #, c-format
 msgid "Enter URI"
 msgstr ""
@@ -251,6 +251,11 @@ msgstr ""
 msgid "This page has a notify reserve action."
 msgstr ""
 
+#: src/popup/TalerActionFound.tsx:114
+#, c-format
+msgid "Notify"
+msgstr ""
+
 #: src/popup/TalerActionFound.tsx:121
 #, c-format
 msgid "This page has a refund action."
@@ -598,7 +603,7 @@ msgstr ""
 msgid "Backup valid until"
 msgstr ""
 
-#: src/popupEntryPoint.tsx:184
+#: src/popupEntryPoint.tsx:187
 #, c-format
 msgid "this popup is being closed and you are being redirected to %1$s"
 msgstr ""
@@ -654,7 +659,7 @@ msgstr ""
 #: src/wallet/DepositPage.tsx:138
 #, fuzzy, c-format
 msgid "no balance"
-msgstr "Credit"
+msgstr "no balance"
 
 #: src/wallet/DepositPage.tsx:146
 #, c-format
@@ -776,64 +781,74 @@ msgstr ""
 msgid "Cancel withdrawal"
 msgstr ""
 
-#: src/wallet/Settings.tsx:84
+#: src/wallet/Settings.tsx:89
 #, c-format
-msgid "Permissions"
+msgid "Display"
+msgstr ""
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
+msgstr ""
+
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
 msgstr ""
 
-#: src/wallet/Settings.tsx:87
+#: src/wallet/Settings.tsx:105
 #, c-format
 msgid "Automatically open wallet based on page content"
 msgstr ""
 
-#: src/wallet/Settings.tsx:93
+#: src/wallet/Settings.tsx:111
 #, c-format
 msgid ""
 "Enabling this option below will make using the wallet faster, but requires "
 "more permissions from your browser."
 msgstr ""
 
-#: src/wallet/Settings.tsx:104
+#: src/wallet/Settings.tsx:122
 #, c-format
-msgid "Known exchanges"
+msgid "Trust"
 msgstr ""
 
-#: src/wallet/Settings.tsx:108
+#: src/wallet/Settings.tsx:126
 #, c-format
 msgid "No exchange yet"
 msgstr ""
 
-#: src/wallet/Settings.tsx:122
+#: src/wallet/Settings.tsx:140
 #, c-format
 msgid "Term of Service"
 msgstr ""
 
-#: src/wallet/Settings.tsx:138
+#: src/wallet/Settings.tsx:156
 #, c-format
 msgid "ok"
 msgstr ""
 
-#: src/wallet/Settings.tsx:144
+#: src/wallet/Settings.tsx:162
 #, c-format
 msgid "changed"
 msgstr ""
 
-#: src/wallet/Settings.tsx:151
+#: src/wallet/Settings.tsx:169
 #, c-format
 msgid "not accepted"
 msgstr ""
 
-#: src/wallet/Settings.tsx:175
+#: src/wallet/Settings.tsx:193
 #, c-format
 msgid "Add an exchange"
 msgstr ""
 
-#: src/wallet/Settings.tsx:181
+#: src/wallet/Settings.tsx:199
 #, c-format
 msgid "Developer mode"
 msgstr ""
 
-#: src/wallet/Settings.tsx:183
+#: src/wallet/Settings.tsx:201
 #, c-format
 msgid "(More options and information useful for debugging)"
 msgstr ""
@@ -1005,6 +1020,11 @@ msgstr ""
 msgid "Thank you for installing the wallet."
 msgstr ""
 
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr ""
+
 #: src/wallet/Welcome.tsx:75
 #, c-format
 msgid ""
@@ -1217,6 +1237,11 @@ msgstr ""
 msgid "Total to withdraw"
 msgstr ""
 
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr ""
+
 #: src/cta/Withdraw.tsx:187
 #, c-format
 msgid "Cancel exchange selection"
@@ -1262,7 +1287,7 @@ msgstr ""
 msgid "Could not load the list of known exchanges"
 msgstr ""
 
-#: src/walletEntryPoint.tsx:171
+#: src/walletEntryPoint.tsx:172
 #, c-format
 msgid "All done, your transaction is in progress"
 msgstr ""
diff --git a/packages/taler-wallet-webextension/src/i18n/es.po b/packages/taler-wallet-webextension/src/i18n/es.po
index 0792d222a..1d374913f 100644
--- a/packages/taler-wallet-webextension/src/i18n/es.po
+++ b/packages/taler-wallet-webextension/src/i18n/es.po
@@ -19,9 +19,9 @@ msgstr ""
 "POT-Creation-Date: 2016-11-23 00:00+0100\n"
 "PO-Revision-Date: 2022-02-18 19:33+0000\n"
 "Last-Translator: Stefan <eintritt@hotmail.com>\n"
-"Language-Team: Italian <http://weblate.taler.net/projects/gnu-taler/"
-"webextensions/it/>\n"
-"Language: it\n"
+"Language-Team: Spanish <http://weblate.taler.net/projects/gnu-taler/"
+"webextensions/es/>\n"
+"Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -93,8 +93,9 @@ msgstr "No tienes balance para mostrar."
 msgid ""
 "To withdraw money you can start from your bank site or click the \"withdraw"
 "\" button to use a known exchange."
-msgstr "Para retirar dinero puedes empezar desde el sitio de tu banco o cliquear"
-" en el botón \"extraer\" para usar un exchange conocido"
+msgstr ""
+"Para retirar dinero puedes empezar desde el sitio de tu banco o cliquear en "
+"el botón \"extraer\" para usar un exchange conocido"
 
 #: src/popup/NoBalanceHelp.tsx:23
 #, c-format
@@ -111,7 +112,7 @@ msgstr "No se pudo cargar la página"
 msgid "Deposit %1$s"
 msgstr "Depositar %1$s"
 
-#: src/popup/BalancePage.tsx:118
+#: src/popup/BalancePage.tsx:120
 #, c-format
 msgid "Enter URI"
 msgstr "Ingresar URI"
@@ -131,16 +132,19 @@ msgstr "Problemas detectados:"
 msgid ""
 "Please check in your %1$s settings that you have IndexedDB enabled (check "
 "the preference name %2$s)."
-msgstr "Por favor revisa en tu configuración %1$s que tienes IndexedDB habilitado"
-" (el nombre de la preferencia %2$s)."
+msgstr ""
+"Por favor revisa en tu configuración %1$s que tienes IndexedDB habilitado "
+"(el nombre de la preferencia %2$s)."
 
 #: src/components/Diagnostics.tsx:69
 #, c-format
 msgid ""
 "Your wallet database is outdated. Currently automatic migration is not "
 "supported. Please go %1$s to reset the wallet database."
-msgstr "La base de datos de la billetera expiró. Por ahora la migración automática "
-"no está soportada. Por favor dirijasé a %1$s para reiniciar la base de datos de la billetera"
+msgstr ""
+"La base de datos de la billetera expiró. Por ahora la migración automática "
+"no está soportada. Por favor dirijasé a %1$s para reiniciar la base de datos "
+"de la billetera"
 
 #: src/components/Diagnostics.tsx:85
 #, c-format
@@ -227,8 +231,9 @@ msgstr "cliquear para mostrar"
 msgid ""
 "Do you want to IRREVOCABLY DESTROY everything inside your wallet and LOSE "
 "ALL YOUR COINS?"
-msgstr "Quieres DESTRUIR IRREVOCABLEMENTE todo dentro de tu billetera y PERDER"
-" TODAS TUS MONEDAS?"
+msgstr ""
+"Quieres DESTRUIR IRREVOCABLEMENTE todo dentro de tu billetera y PERDER TODAS "
+"TUS MONEDAS?"
 
 #: src/popup/TalerActionFound.tsx:56
 #, c-format
@@ -255,6 +260,11 @@ msgstr "Esta página tiene una acción de propina."
 msgid "This page has a notify reserve action."
 msgstr "Esta página tiene una acción de notificación de reserva."
 
+#: src/popup/TalerActionFound.tsx:114
+#, c-format
+msgid "Notify"
+msgstr "Notificar"
+
 #: src/popup/TalerActionFound.tsx:121
 #, c-format
 msgid "This page has a refund action."
@@ -398,7 +408,8 @@ msgstr "Ingresar la URL de un exchange que tu confíes."
 #: src/wallet/ExchangeSetUrl.tsx:112
 #, c-format
 msgid "An exchange has been found! Review the information and click next"
-msgstr "Un exchange ha sido encontrado! Revisa la información y cliquea en siguente"
+msgstr ""
+"Un exchange ha sido encontrado! Revisa la información y cliquea en siguente"
 
 #: src/wallet/ExchangeSetUrl.tsx:119
 #, c-format
@@ -540,7 +551,9 @@ msgstr "Extender"
 msgid ""
 "terms has changed, extending the service will imply accepting the new terms "
 "of service"
-msgstr "los terminos han cambiado, extender el servicio implicará aceptar los nuevos terminos de servicio"
+msgstr ""
+"los terminos han cambiado, extender el servicio implicará aceptar los nuevos "
+"terminos de servicio"
 
 #: src/wallet/ProviderDetailPage.tsx:177
 #, c-format
@@ -602,7 +615,7 @@ msgstr "servicio pagado"
 msgid "Backup valid until"
 msgstr "Backup valido hasta"
 
-#: src/popupEntryPoint.tsx:184
+#: src/popupEntryPoint.tsx:187
 #, c-format
 msgid "this popup is being closed and you are being redirected to %1$s"
 msgstr "Este popup se cerrará y estás siendo redirijido a %1$s"
@@ -623,9 +636,10 @@ msgid ""
 "Choose a exchange from where the coins will be withdrawn. The exchange will "
 "send the coins to this wallet after receiving a wire transfer with the "
 "correct subject."
-msgstr "Elija un exchange desde donde las monedas serán extraídas. El exchange "
-"enviará las monedas a esta billetera después de recibir una transferencia con "
-"el asunto correcto."
+msgstr ""
+"Elija un exchange desde donde las monedas serán extraídas. El exchange "
+"enviará las monedas a esta billetera después de recibir una transferencia "
+"con el asunto correcto."
 
 #: src/wallet/CreateManualWithdraw.tsx:114
 #, c-format
@@ -761,87 +775,103 @@ msgstr "El exchange está listo para la extracción"
 #, c-format
 msgid ""
 "To complete the process you need to wire %1$s to the exchange bank account"
-msgstr "Para completar el proceso necesitas enviar %1$s a la cuenta bancaria del exchange"
+msgstr ""
+"Para completar el proceso necesitas enviar %1$s a la cuenta bancaria del "
+"exchange"
 
 #: src/wallet/ReserveCreated.tsx:53
 #, c-format
 msgid ""
 "Make sure to use the correct subject, otherwise the money will not arrive in "
 "this wallet."
-msgstr "Asegurate de usar el asunto correcto, de otra manera el dinero no llegará a esta billetera"
+msgstr ""
+"Asegurate de usar el asunto correcto, de otra manera el dinero no llegará a "
+"esta billetera"
 
 #: src/wallet/ReserveCreated.tsx:62
 #, c-format
 msgid ""
 "Alternative, you can also scan this QR code or open %1$s if you have a "
 "banking app installed that supports RFC 8905"
-msgstr "Alternativamente, también puedes escanear el código QR o abrir %1$s si tienes"
-" una aplicación bancaria instalada que soporta RFC 8905"
+msgstr ""
+"Alternativamente, también puedes escanear el código QR o abrir %1$s si "
+"tienes una aplicación bancaria instalada que soporta RFC 8905"
 
 #: src/wallet/ReserveCreated.tsx:73
 #, c-format
 msgid "Cancel withdrawal"
 msgstr "Cancelar extracción"
 
-#: src/wallet/Settings.tsx:84
+#: src/wallet/Settings.tsx:89
 #, c-format
-msgid "Permissions"
-msgstr "Permisos"
+msgid "Display"
+msgstr "Pantalla"
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
+msgstr "Lenguage actual"
 
-#: src/wallet/Settings.tsx:87
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
+msgstr "Navegador"
+
+#: src/wallet/Settings.tsx:105
 #, c-format
 msgid "Automatically open wallet based on page content"
 msgstr "Abrir automáticamente la billetera basado en el contenido de la página"
 
-#: src/wallet/Settings.tsx:93
+#: src/wallet/Settings.tsx:111
 #, c-format
 msgid ""
 "Enabling this option below will make using the wallet faster, but requires "
 "more permissions from your browser."
-msgstr "Habilitar esta opción debajo hará el uso de la billetera mas rápido, pero "
+msgstr ""
+"Habilitar esta opción debajo hará el uso de la billetera mas rápido, pero "
 "requiere mas permisos de tu navegador"
 
-#: src/wallet/Settings.tsx:104
+#: src/wallet/Settings.tsx:122
 #, c-format
-msgid "Known exchanges"
-msgstr "Exchange conocidos"
+msgid "Trust"
+msgstr "Confianza"
 
-#: src/wallet/Settings.tsx:108
+#: src/wallet/Settings.tsx:126
 #, c-format
 msgid "No exchange yet"
 msgstr "No hay exchanges todavía"
 
-#: src/wallet/Settings.tsx:122
+#: src/wallet/Settings.tsx:140
 #, c-format
 msgid "Term of Service"
 msgstr "Terminos de servicio"
 
-#: src/wallet/Settings.tsx:138
+#: src/wallet/Settings.tsx:156
 #, c-format
 msgid "ok"
 msgstr "ok"
 
-#: src/wallet/Settings.tsx:144
+#: src/wallet/Settings.tsx:162
 #, c-format
 msgid "changed"
 msgstr "modificado"
 
-#: src/wallet/Settings.tsx:151
+#: src/wallet/Settings.tsx:169
 #, c-format
 msgid "not accepted"
 msgstr "no aceptado"
 
-#: src/wallet/Settings.tsx:175
+#: src/wallet/Settings.tsx:193
 #, c-format
 msgid "Add an exchange"
 msgstr "Agregar un exchange"
 
-#: src/wallet/Settings.tsx:181
+#: src/wallet/Settings.tsx:199
 #, c-format
 msgid "Developer mode"
 msgstr "Modo desarrollador"
 
-#: src/wallet/Settings.tsx:183
+#: src/wallet/Settings.tsx:201
 #, c-format
 msgid "(More options and information useful for debugging)"
 msgstr "(Mas información y opciones útiles para depuración)"
@@ -881,8 +911,9 @@ msgstr "Cuidado!"
 msgid ""
 "If you have already wired money to the exchange you will loose the chance to "
 "get the coins form it."
-msgstr "Si ya has transferido dinero al exchange perderas la oportunidad de "
-"recivir las monedas"
+msgstr ""
+"Si ya has transferido dinero al exchange perderas la oportunidad de recivir "
+"las monedas"
 
 #: src/wallet/Transaction.tsx:211
 #, c-format
@@ -962,17 +993,17 @@ msgstr "Monto a depositar"
 #: src/wallet/Transaction.tsx:447
 #, c-format
 msgid "Refresh"
-msgstr ""
+msgstr "Actualizar"
 
 #: src/wallet/Transaction.tsx:453
 #, c-format
 msgid "Total refresh"
-msgstr ""
+msgstr "Actualización total"
 
 #: src/wallet/Transaction.tsx:459
 #, c-format
 msgid "Refresh amount"
-msgstr ""
+msgstr "Monto de actualización"
 
 #: src/wallet/Transaction.tsx:481
 #, c-format
@@ -1014,12 +1045,18 @@ msgstr "Extensión del navegador instalada!"
 msgid "Thank you for installing the wallet."
 msgstr "Gracias por haber instalado la billetera."
 
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr "Permisos"
+
 #: src/wallet/Welcome.tsx:75
 #, c-format
 msgid ""
 "(Enabling this option below will make using the wallet faster, but requires "
 "more permissions from your browser.)"
-msgstr "(Habilitar esta opción debajo hará el uso de la billetera mas rápido, pero "
+msgstr ""
+"(Habilitar esta opción debajo hará el uso de la billetera mas rápido, pero "
 "requiere mas permisos de tu navegador)"
 
 #: src/wallet/Welcome.tsx:85
@@ -1045,7 +1082,8 @@ msgstr "No se pudo cargar el estado del pago"
 #: src/cta/Pay.tsx:189
 #, c-format
 msgid "Could not load contract terms from merchant or wallet backend."
-msgstr "No se pudo cargar los terminos de contrato del comerciante o de la billetera."
+msgstr ""
+"No se pudo cargar los terminos de contrato del comerciante o de la billetera."
 
 #: src/cta/Pay.tsx:216
 #, c-format
@@ -1185,12 +1223,15 @@ msgstr "Actualizando el estado de reembolso"
 #: src/cta/Tip.tsx:49
 #, c-format
 msgid "Tip from %1$s accepted. Check your transactions list for more details."
-msgstr "Propina de %1$s aceptada. Revisa tu lista de transacciones para mas detalle."
+msgstr ""
+"Propina de %1$s aceptada. Revisa tu lista de transacciones para mas detalle."
 
 #: src/cta/Tip.tsx:57
 #, c-format
 msgid "The merchant %1$s is offering you a tip of %2$s via the exchange %3$s"
-msgstr "El comerciante %1$s está ofreciendo una propina de %2$s usando el exchange %3$s"
+msgstr ""
+"El comerciante %1$s está ofreciendo una propina de %2$s usando el exchange "
+"%3$s"
 
 #: src/cta/Tip.tsx:67
 #, c-format
@@ -1227,6 +1268,11 @@ msgstr "No se pudo completar la operación de extracción"
 msgid "Total to withdraw"
 msgstr "Total a extraer"
 
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr "Exchange conocidos"
+
 #: src/cta/Withdraw.tsx:187
 #, c-format
 msgid "Cancel exchange selection"
@@ -1272,7 +1318,7 @@ msgstr "No se pudo obtener la información desde la URI"
 msgid "Could not load the list of known exchanges"
 msgstr "No se pudo cargar la lista de exchange conocidos"
 
-#: src/walletEntryPoint.tsx:171
+#: src/walletEntryPoint.tsx:172
 #, c-format
 msgid "All done, your transaction is in progress"
 msgstr "Todo completo, su transacción está en progreso"
@@ -1317,14 +1363,16 @@ msgstr "Reinicio Manual Necesario"
 msgid ""
 "The wallet&apos;s database in your browser is incompatible with the "
 "currently installed wallet. Please reset manually."
-msgstr "La base de datos de billetera en tu navegador es incompatible con la "
+msgstr ""
+"La base de datos de billetera en tu navegador es incompatible con la "
 "billetera instalada actualmente. Por favor reinicie manualmente"
 
 #: src/cta/reset-required.tsx:63
 #, c-format
 msgid ""
 "Once the database format has stabilized, we will provide automatic upgrades."
-msgstr "Una vez que el formato de la base de datos esté estabilizzado, proveeremos "
+msgstr ""
+"Una vez que el formato de la base de datos esté estabilizzado, proveeremos "
 "de actualizaciones automáticas"
 
 #: src/cta/reset-required.tsx:77
diff --git a/packages/taler-wallet-webextension/src/i18n/fr.po b/packages/taler-wallet-webextension/src/i18n/fr.po
index 8b8e564b1..ef439e4da 100644
--- a/packages/taler-wallet-webextension/src/i18n/fr.po
+++ b/packages/taler-wallet-webextension/src/i18n/fr.po
@@ -110,7 +110,7 @@ msgstr ""
 msgid "Deposit %1$s"
 msgstr ""
 
-#: src/popup/BalancePage.tsx:118
+#: src/popup/BalancePage.tsx:120
 #, c-format
 msgid "Enter URI"
 msgstr ""
@@ -251,6 +251,11 @@ msgstr ""
 msgid "This page has a notify reserve action."
 msgstr ""
 
+#: src/popup/TalerActionFound.tsx:114
+#, c-format
+msgid "Notify"
+msgstr ""
+
 #: src/popup/TalerActionFound.tsx:121
 #, c-format
 msgid "This page has a refund action."
@@ -598,7 +603,7 @@ msgstr ""
 msgid "Backup valid until"
 msgstr ""
 
-#: src/popupEntryPoint.tsx:184
+#: src/popupEntryPoint.tsx:187
 #, c-format
 msgid "this popup is being closed and you are being redirected to %1$s"
 msgstr ""
@@ -776,64 +781,74 @@ msgstr ""
 msgid "Cancel withdrawal"
 msgstr ""
 
-#: src/wallet/Settings.tsx:84
+#: src/wallet/Settings.tsx:89
 #, c-format
-msgid "Permissions"
+msgid "Display"
+msgstr ""
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
+msgstr ""
+
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
 msgstr ""
 
-#: src/wallet/Settings.tsx:87
+#: src/wallet/Settings.tsx:105
 #, c-format
 msgid "Automatically open wallet based on page content"
 msgstr ""
 
-#: src/wallet/Settings.tsx:93
+#: src/wallet/Settings.tsx:111
 #, c-format
 msgid ""
 "Enabling this option below will make using the wallet faster, but requires "
 "more permissions from your browser."
 msgstr ""
 
-#: src/wallet/Settings.tsx:104
+#: src/wallet/Settings.tsx:122
 #, c-format
-msgid "Known exchanges"
+msgid "Trust"
 msgstr ""
 
-#: src/wallet/Settings.tsx:108
+#: src/wallet/Settings.tsx:126
 #, c-format
 msgid "No exchange yet"
 msgstr ""
 
-#: src/wallet/Settings.tsx:122
+#: src/wallet/Settings.tsx:140
 #, c-format
 msgid "Term of Service"
 msgstr ""
 
-#: src/wallet/Settings.tsx:138
+#: src/wallet/Settings.tsx:156
 #, c-format
 msgid "ok"
 msgstr ""
 
-#: src/wallet/Settings.tsx:144
+#: src/wallet/Settings.tsx:162
 #, c-format
 msgid "changed"
 msgstr ""
 
-#: src/wallet/Settings.tsx:151
+#: src/wallet/Settings.tsx:169
 #, c-format
 msgid "not accepted"
 msgstr ""
 
-#: src/wallet/Settings.tsx:175
+#: src/wallet/Settings.tsx:193
 #, c-format
 msgid "Add an exchange"
 msgstr ""
 
-#: src/wallet/Settings.tsx:181
+#: src/wallet/Settings.tsx:199
 #, c-format
 msgid "Developer mode"
 msgstr ""
 
-#: src/wallet/Settings.tsx:183
+#: src/wallet/Settings.tsx:201
 #, c-format
 msgid "(More options and information useful for debugging)"
 msgstr ""
@@ -1005,6 +1020,11 @@ msgstr ""
 msgid "Thank you for installing the wallet."
 msgstr ""
 
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr ""
+
 #: src/wallet/Welcome.tsx:75
 #, c-format
 msgid ""
@@ -1217,6 +1237,11 @@ msgstr ""
 msgid "Total to withdraw"
 msgstr ""
 
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr ""
+
 #: src/cta/Withdraw.tsx:187
 #, c-format
 msgid "Cancel exchange selection"
@@ -1262,7 +1287,7 @@ msgstr ""
 msgid "Could not load the list of known exchanges"
 msgstr ""
 
-#: src/walletEntryPoint.tsx:171
+#: src/walletEntryPoint.tsx:172
 #, c-format
 msgid "All done, your transaction is in progress"
 msgstr ""
diff --git a/packages/taler-wallet-webextension/src/i18n/it.po b/packages/taler-wallet-webextension/src/i18n/it.po
index f9daaa31d..9e51b7fe2 100644
--- a/packages/taler-wallet-webextension/src/i18n/it.po
+++ b/packages/taler-wallet-webextension/src/i18n/it.po
@@ -110,7 +110,7 @@ msgstr ""
 msgid "Deposit %1$s"
 msgstr ""
 
-#: src/popup/BalancePage.tsx:118
+#: src/popup/BalancePage.tsx:120
 #, c-format
 msgid "Enter URI"
 msgstr ""
@@ -251,6 +251,11 @@ msgstr ""
 msgid "This page has a notify reserve action."
 msgstr ""
 
+#: src/popup/TalerActionFound.tsx:114
+#, c-format
+msgid "Notify"
+msgstr ""
+
 #: src/popup/TalerActionFound.tsx:121
 #, c-format
 msgid "This page has a refund action."
@@ -598,7 +603,7 @@ msgstr ""
 msgid "Backup valid until"
 msgstr ""
 
-#: src/popupEntryPoint.tsx:184
+#: src/popupEntryPoint.tsx:187
 #, c-format
 msgid "this popup is being closed and you are being redirected to %1$s"
 msgstr ""
@@ -776,64 +781,74 @@ msgstr ""
 msgid "Cancel withdrawal"
 msgstr ""
 
-#: src/wallet/Settings.tsx:84
+#: src/wallet/Settings.tsx:89
 #, c-format
-msgid "Permissions"
+msgid "Display"
+msgstr ""
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
+msgstr ""
+
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
 msgstr ""
 
-#: src/wallet/Settings.tsx:87
+#: src/wallet/Settings.tsx:105
 #, c-format
 msgid "Automatically open wallet based on page content"
 msgstr ""
 
-#: src/wallet/Settings.tsx:93
+#: src/wallet/Settings.tsx:111
 #, c-format
 msgid ""
 "Enabling this option below will make using the wallet faster, but requires "
 "more permissions from your browser."
 msgstr ""
 
-#: src/wallet/Settings.tsx:104
+#: src/wallet/Settings.tsx:122
 #, c-format
-msgid "Known exchanges"
+msgid "Trust"
 msgstr ""
 
-#: src/wallet/Settings.tsx:108
+#: src/wallet/Settings.tsx:126
 #, c-format
 msgid "No exchange yet"
 msgstr ""
 
-#: src/wallet/Settings.tsx:122
+#: src/wallet/Settings.tsx:140
 #, c-format
 msgid "Term of Service"
 msgstr ""
 
-#: src/wallet/Settings.tsx:138
+#: src/wallet/Settings.tsx:156
 #, c-format
 msgid "ok"
 msgstr ""
 
-#: src/wallet/Settings.tsx:144
+#: src/wallet/Settings.tsx:162
 #, c-format
 msgid "changed"
 msgstr ""
 
-#: src/wallet/Settings.tsx:151
+#: src/wallet/Settings.tsx:169
 #, c-format
 msgid "not accepted"
 msgstr ""
 
-#: src/wallet/Settings.tsx:175
+#: src/wallet/Settings.tsx:193
 #, c-format
 msgid "Add an exchange"
 msgstr ""
 
-#: src/wallet/Settings.tsx:181
+#: src/wallet/Settings.tsx:199
 #, c-format
 msgid "Developer mode"
 msgstr ""
 
-#: src/wallet/Settings.tsx:183
+#: src/wallet/Settings.tsx:201
 #, c-format
 msgid "(More options and information useful for debugging)"
 msgstr ""
@@ -1005,6 +1020,11 @@ msgstr ""
 msgid "Thank you for installing the wallet."
 msgstr ""
 
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr ""
+
 #: src/wallet/Welcome.tsx:75
 #, c-format
 msgid ""
@@ -1217,6 +1237,11 @@ msgstr ""
 msgid "Total to withdraw"
 msgstr ""
 
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr ""
+
 #: src/cta/Withdraw.tsx:187
 #, c-format
 msgid "Cancel exchange selection"
@@ -1262,7 +1287,7 @@ msgstr ""
 msgid "Could not load the list of known exchanges"
 msgstr ""
 
-#: src/walletEntryPoint.tsx:171
+#: src/walletEntryPoint.tsx:172
 #, c-format
 msgid "All done, your transaction is in progress"
 msgstr ""
diff --git a/packages/taler-wallet-webextension/src/i18n/ja.po b/packages/taler-wallet-webextension/src/i18n/ja.po
new file mode 100644
index 000000000..e7d0bdd84
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/i18n/ja.po
@@ -0,0 +1,1367 @@
+# This file is part of TALER
+# (C) 2016 GNUnet e.V.
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Taler Wallet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-11-23 00:00+0100\n"
+"PO-Revision-Date: 2022-02-18 17:20+0000\n"
+"Last-Translator: Stefan <eintritt@hotmail.com>\n"
+"Language-Team: Japanese <http://weblate.taler.net/projects/gnu-taler/"
+"webextensions/ja/>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.4.2\n"
+
+#: src/NavigationBar.tsx:70
+#, c-format
+msgid "Balance"
+msgstr "残高"
+
+#: src/NavigationBar.tsx:73
+#, c-format
+msgid "Backup"
+msgstr "バックアップ"
+
+#: src/NavigationBar.tsx:77
+#, c-format
+msgid "Settings"
+msgstr "設定"
+
+#: src/NavigationBar.tsx:96
+#, c-format
+msgid "Dev"
+msgstr ""
+
+#: src/components/Loading.tsx:22
+#, c-format
+msgid "Loading"
+msgstr ""
+
+#: src/wallet/AddNewActionView.tsx:14
+#, c-format
+msgid "Open reserve page"
+msgstr ""
+
+#: src/wallet/AddNewActionView.tsx:16
+#, c-format
+msgid "Open pay page"
+msgstr ""
+
+#: src/wallet/AddNewActionView.tsx:18
+#, c-format
+msgid "Open refund page"
+msgstr ""
+
+#: src/wallet/AddNewActionView.tsx:20
+#, c-format
+msgid "Open tip page"
+msgstr ""
+
+#: src/wallet/AddNewActionView.tsx:22
+#, fuzzy, c-format
+msgid "Open withdraw page"
+msgstr ""
+
+#: src/wallet/AddNewActionView.tsx:51
+#, c-format
+msgid "Back"
+msgstr ""
+
+#: src/popup/NoBalanceHelp.tsx:14
+#, fuzzy, c-format
+msgid "You have no balance to show."
+msgstr "表示するバランスがありません"
+
+#: src/popup/NoBalanceHelp.tsx:17
+#, c-format
+msgid ""
+"To withdraw money you can start from your bank site or click the \"withdraw"
+"\" button to use a known exchange."
+msgstr "お金を引き出すには、銀行のサイトから開始するか、[引き出し]ボタンをクリックして既知の取引所を使用します。"
+
+#: src/popup/NoBalanceHelp.tsx:23
+#, fuzzy, c-format
+msgid "Withdraw"
+msgstr "撤退"
+
+#: src/popup/BalancePage.tsx:52
+#, c-format
+msgid "Could not load balance page"
+msgstr ""
+
+#: src/popup/BalancePage.tsx:111
+#, c-format
+msgid "Deposit %1$s"
+msgstr ""
+
+#: src/popup/BalancePage.tsx:120
+#, c-format
+msgid "Enter URI"
+msgstr ""
+
+#: src/components/Diagnostics.tsx:30
+#, c-format
+msgid "Diagnostics timed out. Could not talk to the wallet backend."
+msgstr ""
+
+#: src/components/Diagnostics.tsx:51
+#, c-format
+msgid "Problems detected:"
+msgstr ""
+
+#: src/components/Diagnostics.tsx:60
+#, c-format
+msgid ""
+"Please check in your %1$s settings that you have IndexedDB enabled (check "
+"the preference name %2$s)."
+msgstr ""
+
+#: src/components/Diagnostics.tsx:69
+#, c-format
+msgid ""
+"Your wallet database is outdated. Currently automatic migration is not "
+"supported. Please go %1$s to reset the wallet database."
+msgstr ""
+
+#: src/components/Diagnostics.tsx:85
+#, c-format
+msgid "Running diagnostics"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:154
+#, fuzzy, c-format
+msgid "Debug tools"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:157
+#, c-format
+msgid "reset"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:161
+#, c-format
+msgid "import database"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:182
+#, c-format
+msgid "export database"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:186
+#, c-format
+msgid "Database exported at %1$s %2$s to download"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:209
+#, c-format
+msgid "Coins"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:236
+#, c-format
+msgid "Pending operations"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:275
+#, c-format
+msgid "usable coins"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:284
+#, c-format
+msgid "id"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:287
+#, c-format
+msgid "denom"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:290
+#, c-format
+msgid "value"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:293
+#, c-format
+msgid "status"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:296
+#, c-format
+msgid "from refresh?"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:313
+#, c-format
+msgid "spent coins"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:317
+#, c-format
+msgid "click to show"
+msgstr ""
+
+#: src/popup/DeveloperPage.tsx:377
+#, c-format
+msgid ""
+"Do you want to IRREVOCABLY DESTROY everything inside your wallet and LOSE "
+"ALL YOUR COINS?"
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:56
+#, c-format
+msgid "Taler Action"
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:61
+#, c-format
+msgid "This page has pay action."
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:75
+#, c-format
+msgid "This page has a withdrawal action."
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:91
+#, c-format
+msgid "This page has a tip action."
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:105
+#, c-format
+msgid "This page has a notify reserve action."
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:114
+#, c-format
+msgid "Notify"
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:121
+#, c-format
+msgid "This page has a refund action."
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:135
+#, c-format
+msgid "This page has a malformed taler uri."
+msgstr ""
+
+#: src/popup/TalerActionFound.tsx:147
+#, c-format
+msgid "Dismiss"
+msgstr ""
+
+#: src/wallet/BackupPage.tsx:75
+#, c-format
+msgid "Could not load backup providers"
+msgstr ""
+
+#: src/wallet/BackupPage.tsx:129
+#, c-format
+msgid "No backup providers configured"
+msgstr ""
+
+#: src/wallet/BackupPage.tsx:132
+#, c-format
+msgid "Add provider"
+msgstr ""
+
+#: src/wallet/BackupPage.tsx:142
+#, c-format
+msgid "Sync all backups"
+msgstr ""
+
+#: src/wallet/BackupPage.tsx:144
+#, c-format
+msgid "Sync now"
+msgstr ""
+
+#: src/wallet/BackupPage.tsx:187
+#, c-format
+msgid "Last synced"
+msgstr ""
+
+#: src/wallet/BackupPage.tsx:192
+#, c-format
+msgid "Not synced"
+msgstr ""
+
+#: src/wallet/BackupPage.tsx:211
+#, c-format
+msgid "Expires in"
+msgstr ""
+
+#: src/cta/TermsOfServiceSection.tsx:37
+#, c-format
+msgid "Exchange doesn't have terms of service"
+msgstr ""
+
+#: src/cta/TermsOfServiceSection.tsx:60
+#, c-format
+msgid "Review exchange terms of service"
+msgstr ""
+
+#: src/cta/TermsOfServiceSection.tsx:69
+#, c-format
+msgid "Review new version of terms of service"
+msgstr ""
+
+#: src/cta/TermsOfServiceSection.tsx:83
+#, c-format
+msgid "Show terms of service"
+msgstr ""
+
+#: src/cta/TermsOfServiceSection.tsx:91
+#, c-format
+msgid "I accept the exchange terms of service"
+msgstr ""
+
+#: src/cta/TermsOfServiceSection.tsx:110
+#, c-format
+msgid "The exchange reply with a empty terms of service"
+msgstr ""
+
+#: src/cta/TermsOfServiceSection.tsx:133
+#, c-format
+msgid "Download Terms of Service"
+msgstr ""
+
+#: src/cta/TermsOfServiceSection.tsx:141
+#, c-format
+msgid "Hide terms of service"
+msgstr ""
+
+#: src/wallet/ExchangeAddConfirm.tsx:88
+#, c-format
+msgid "Review terms of service"
+msgstr ""
+
+#: src/wallet/ExchangeAddConfirm.tsx:91
+#, c-format
+msgid "Exchange URL"
+msgstr ""
+
+#: src/wallet/ExchangeAddConfirm.tsx:112
+#, c-format
+msgid "Cancel"
+msgstr ""
+
+#: src/wallet/ExchangeAddConfirm.tsx:116
+#, c-format
+msgid "Loading terms.."
+msgstr ""
+
+#: src/wallet/ExchangeAddConfirm.tsx:123
+#, c-format
+msgid "Add exchange"
+msgstr ""
+
+#: src/wallet/ExchangeAddConfirm.tsx:133
+#, c-format
+msgid "Add exchange anyway"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:96
+#, c-format
+msgid "Add new exchange"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:100
+#, c-format
+msgid "Add exchange for %1$s"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:105
+#, c-format
+msgid "Enter the URL of an exchange you trust."
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:112
+#, c-format
+msgid "An exchange has been found! Review the information and click next"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:119
+#, c-format
+msgid "This exchange doesn't match the expected currency %1$s"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:127
+#, c-format
+msgid "Unable to verify this exchange"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:135
+#, c-format
+msgid "Unable to add this exchange"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:151
+#, c-format
+msgid "loading"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:158
+#, c-format
+msgid "Version"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:164
+#, c-format
+msgid "Currency"
+msgstr ""
+
+#: src/wallet/ExchangeSetUrl.tsx:190
+#, c-format
+msgid "Next"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:118
+#, c-format
+msgid "Add backup provider"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:122
+#, c-format
+msgid "Could not get provider information"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:131
+#, c-format
+msgid "Backup providers may charge for their service"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:138
+#, c-format
+msgid "URL"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:149
+#, c-format
+msgid "Name"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:201
+#, c-format
+msgid "Provider URL"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:207
+#, c-format
+msgid "Please review and accept this provider's terms of service"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:212
+#, c-format
+msgid "Pricing"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:215
+#, c-format
+msgid "free of charge"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:217
+#, c-format
+msgid "%1$s per year of service"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:224
+#, c-format
+msgid "Storage"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:227
+#, c-format
+msgid "%1$s megabytes of storage per year of service"
+msgstr ""
+
+#: src/wallet/ProviderAddPage.tsx:233
+#, c-format
+msgid "Accept terms of service"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:62
+#, c-format
+msgid "There was an error loading the provider detail for \"%1$s\""
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:108
+#, c-format
+msgid "There is not known provider with url \"%1$s\"."
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:141
+#, c-format
+msgid "Last backup"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:146
+#, c-format
+msgid "Back up"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:152
+#, c-format
+msgid "Provider fee"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:155
+#, c-format
+msgid "per year"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:161
+#, c-format
+msgid "Extend"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:167
+#, c-format
+msgid ""
+"terms has changed, extending the service will imply accepting the new terms "
+"of service"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:177
+#, c-format
+msgid "old"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:181
+#, c-format
+msgid "new"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:188
+#, c-format
+msgid "fee"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:196
+#, c-format
+msgid "storage"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:209
+#, c-format
+msgid "back"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:213
+#, c-format
+msgid "Remove provider"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:225
+#, c-format
+msgid "This provider has reported an error"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:239
+#, c-format
+msgid "There is conflict with another backup from %1$s"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:250
+#, c-format
+msgid "Backup is not readable"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:258
+#, c-format
+msgid "Unknown backup problem: %1$s"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:277
+#, c-format
+msgid "service paid"
+msgstr ""
+
+#: src/wallet/ProviderDetailPage.tsx:284
+#, c-format
+msgid "Backup valid until"
+msgstr ""
+
+#: src/popupEntryPoint.tsx:187
+#, c-format
+msgid "this popup is being closed and you are being redirected to %1$s"
+msgstr ""
+
+#: src/components/SelectList.tsx:62
+#, c-format
+msgid "Select one option"
+msgstr ""
+
+#: src/wallet/CreateManualWithdraw.tsx:103
+#, fuzzy, c-format
+msgid "Manual Withdrawal"
+msgstr ""
+
+#: src/wallet/CreateManualWithdraw.tsx:106
+#, c-format
+msgid ""
+"Choose a exchange from where the coins will be withdrawn. The exchange will "
+"send the coins to this wallet after receiving a wire transfer with the "
+"correct subject."
+msgstr ""
+
+#: src/wallet/CreateManualWithdraw.tsx:114
+#, c-format
+msgid "No exchange configured"
+msgstr ""
+
+#: src/wallet/CreateManualWithdraw.tsx:129
+#, c-format
+msgid "Can't create the reserve"
+msgstr ""
+
+#: src/wallet/CreateManualWithdraw.tsx:155
+#, c-format
+msgid "Exchange"
+msgstr ""
+
+#: src/wallet/CreateManualWithdraw.tsx:164
+#, c-format
+msgid "Add Exchange"
+msgstr ""
+
+#: src/wallet/CreateManualWithdraw.tsx:170
+#, c-format
+msgid "Amount"
+msgstr ""
+
+#: src/wallet/CreateManualWithdraw.tsx:190
+#, c-format
+msgid "Start withdrawal"
+msgstr ""
+
+#: src/wallet/DepositPage.tsx:138
+#, fuzzy, c-format
+msgid "no balance"
+msgstr ""
+
+#: src/wallet/DepositPage.tsx:146
+#, c-format
+msgid "There is no known bank account to send money to"
+msgstr ""
+
+#: src/wallet/DepositPage.tsx:177
+#, c-format
+msgid "Send %1$s to your account"
+msgstr ""
+
+#: src/wallet/DepositPage.tsx:182
+#, c-format
+msgid "Bank account IBAN number"
+msgstr ""
+
+#: src/wallet/DepositPage.tsx:215
+#, c-format
+msgid "Deposit fee"
+msgstr ""
+
+#: src/wallet/DepositPage.tsx:229
+#, c-format
+msgid "Total deposit"
+msgstr ""
+
+#: src/wallet/DepositPage.tsx:247
+#, c-format
+msgid "Deposit"
+msgstr ""
+
+#: src/wallet/DepositPage.tsx:251
+#, fuzzy, c-format
+msgid "Deposit %1$s %2$s"
+msgstr ""
+
+#: src/components/TransactionItem.tsx:137
+#, c-format
+msgid "Waiting for confirmation"
+msgstr ""
+
+#: src/components/TransactionItem.tsx:201
+#, c-format
+msgid "PENDING"
+msgstr ""
+
+#: src/wallet/History.tsx:70
+#, c-format
+msgid "Could not load the list of transactions"
+msgstr ""
+
+#: src/wallet/History.tsx:216
+#, c-format
+msgid "There is no history for this currency"
+msgstr ""
+
+#: src/components/BankDetailsByPaytoType.tsx:38
+#, c-format
+msgid "Account"
+msgstr ""
+
+#: src/components/BankDetailsByPaytoType.tsx:44
+#, c-format
+msgid "Bank host"
+msgstr ""
+
+#: src/components/BankDetailsByPaytoType.tsx:48
+#, c-format
+msgid "Bank account"
+msgstr ""
+
+#: src/components/BankDetailsByPaytoType.tsx:53
+#, c-format
+msgid "IBAN"
+msgstr ""
+
+#: src/components/BankDetailsByPaytoType.tsx:65
+#, c-format
+msgid "Chosen amount"
+msgstr ""
+
+#: src/components/BankDetailsByPaytoType.tsx:69
+#, c-format
+msgid "Subject"
+msgstr ""
+
+#: src/wallet/ReserveCreated.tsx:27
+#, c-format
+msgid "could not parse payto uri from exchange %1$s"
+msgstr ""
+
+#: src/wallet/ReserveCreated.tsx:37
+#, c-format
+msgid "Exchange is ready for withdrawal"
+msgstr ""
+
+#: src/wallet/ReserveCreated.tsx:40
+#, c-format
+msgid ""
+"To complete the process you need to wire %1$s to the exchange bank account"
+msgstr ""
+
+#: src/wallet/ReserveCreated.tsx:53
+#, c-format
+msgid ""
+"Make sure to use the correct subject, otherwise the money will not arrive in "
+"this wallet."
+msgstr ""
+
+#: src/wallet/ReserveCreated.tsx:62
+#, c-format
+msgid ""
+"Alternative, you can also scan this QR code or open %1$s if you have a "
+"banking app installed that supports RFC 8905"
+msgstr ""
+
+#: src/wallet/ReserveCreated.tsx:73
+#, c-format
+msgid "Cancel withdrawal"
+msgstr ""
+
+#: src/wallet/Settings.tsx:89
+#, c-format
+msgid "Display"
+msgstr ""
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
+msgstr ""
+
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
+msgstr ""
+
+#: src/wallet/Settings.tsx:105
+#, c-format
+msgid "Automatically open wallet based on page content"
+msgstr ""
+
+#: src/wallet/Settings.tsx:111
+#, c-format
+msgid ""
+"Enabling this option below will make using the wallet faster, but requires "
+"more permissions from your browser."
+msgstr ""
+
+#: src/wallet/Settings.tsx:122
+#, c-format
+msgid "Trust"
+msgstr ""
+
+#: src/wallet/Settings.tsx:126
+#, c-format
+msgid "No exchange yet"
+msgstr ""
+
+#: src/wallet/Settings.tsx:140
+#, c-format
+msgid "Term of Service"
+msgstr ""
+
+#: src/wallet/Settings.tsx:156
+#, c-format
+msgid "ok"
+msgstr ""
+
+#: src/wallet/Settings.tsx:162
+#, c-format
+msgid "changed"
+msgstr ""
+
+#: src/wallet/Settings.tsx:169
+#, c-format
+msgid "not accepted"
+msgstr ""
+
+#: src/wallet/Settings.tsx:193
+#, c-format
+msgid "Add an exchange"
+msgstr ""
+
+#: src/wallet/Settings.tsx:199
+#, c-format
+msgid "Developer mode"
+msgstr ""
+
+#: src/wallet/Settings.tsx:201
+#, c-format
+msgid "(More options and information useful for debugging)"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:78
+#, c-format
+msgid "Could not load the transaction information"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:145
+#, c-format
+msgid "There was an error trying to complete the transaction"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:154
+#, c-format
+msgid "This transaction is not completed"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:168
+#, c-format
+msgid "Retry"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:172
+#, c-format
+msgid "Forget"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:197
+#, c-format
+msgid "Caution!"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:200
+#, c-format
+msgid ""
+"If you have already wired money to the exchange you will loose the chance to "
+"get the coins form it."
+msgstr ""
+
+#: src/wallet/Transaction.tsx:211
+#, c-format
+msgid "Confirm"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:218
+#, fuzzy, c-format
+msgid "Withdrawal"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:243
+#, fuzzy, c-format
+msgid "Total withdrawn"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:249
+#, c-format
+msgid "Exchange fee"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:259
+#, c-format
+msgid "The bank is waiting for confirmation. Go to the %1$s"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:273
+#, c-format
+msgid "Waiting for the coins to arrive"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:342
+#, fuzzy, c-format
+msgid "Payment"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:348
+#, c-format
+msgid "Total paid"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:354
+#, c-format
+msgid "Purchase amount"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:360
+#, c-format
+msgid "Fee"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:365
+#, c-format
+msgid "Merchant"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:370
+#, c-format
+msgid "Purchase"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:375
+#, c-format
+msgid "Receipt"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:419
+#, c-format
+msgid "Total send"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:425
+#, c-format
+msgid "Deposit amount"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:447
+#, c-format
+msgid "Refresh"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:453
+#, c-format
+msgid "Total refresh"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:459
+#, c-format
+msgid "Refresh amount"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:481
+#, c-format
+msgid "Tip"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:487
+#, c-format
+msgid "Total tip"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:493
+#, c-format
+msgid "Received amount"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:515
+#, c-format
+msgid "Refund"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:521
+#, c-format
+msgid "Total refund"
+msgstr ""
+
+#: src/wallet/Transaction.tsx:527
+#, c-format
+msgid "Refund amount"
+msgstr ""
+
+#: src/wallet/Welcome.tsx:58
+#, c-format
+msgid "Browser Extension Installed!"
+msgstr ""
+
+#: src/wallet/Welcome.tsx:62
+#, c-format
+msgid "Thank you for installing the wallet."
+msgstr ""
+
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr ""
+
+#: src/wallet/Welcome.tsx:75
+#, c-format
+msgid ""
+"(Enabling this option below will make using the wallet faster, but requires "
+"more permissions from your browser.)"
+msgstr ""
+
+#: src/wallet/Welcome.tsx:85
+#, c-format
+msgid "Next Steps"
+msgstr ""
+
+#: src/wallet/Welcome.tsx:88
+#, c-format
+msgid "Try the demo"
+msgstr ""
+
+#: src/wallet/Welcome.tsx:91
+#, c-format
+msgid "Learn how to top up your wallet balance"
+msgstr ""
+
+#: src/cta/Pay.tsx:113
+#, c-format
+msgid "Could not load pay status"
+msgstr ""
+
+#: src/cta/Pay.tsx:189
+#, c-format
+msgid "Could not load contract terms from merchant or wallet backend."
+msgstr ""
+
+#: src/cta/Pay.tsx:216
+#, c-format
+msgid "Pay with a mobile phone"
+msgstr ""
+
+#: src/cta/Pay.tsx:218
+#, c-format
+msgid "Hide QR"
+msgstr ""
+
+#: src/cta/Pay.tsx:225
+#, c-format
+msgid "Scan the QR code or %1$s"
+msgstr ""
+
+#: src/cta/Pay.tsx:244
+#, c-format
+msgid "Processing"
+msgstr ""
+
+#: src/cta/Pay.tsx:257
+#, c-format
+msgid "Pay %1$s"
+msgstr ""
+
+#: src/cta/Pay.tsx:272
+#, c-format
+msgid "Your balance of %1$s is not enough to pay for this purchase"
+msgstr ""
+
+#: src/cta/Pay.tsx:279
+#, c-format
+msgid "Your balance is not enough to pay for this purchase."
+msgstr ""
+
+#: src/cta/Pay.tsx:287
+#, fuzzy, c-format
+msgid "Withdraw digital cash"
+msgstr ""
+
+#: src/cta/Pay.tsx:300
+#, c-format
+msgid "Merchant message"
+msgstr ""
+
+#: src/cta/Pay.tsx:318
+#, c-format
+msgid "Digital cash payment"
+msgstr ""
+
+#: src/cta/Pay.tsx:324
+#, c-format
+msgid "Already paid, you are going to be redirected to %1$s"
+msgstr ""
+
+#: src/cta/Pay.tsx:333
+#, c-format
+msgid "Already paid"
+msgstr ""
+
+#: src/cta/Pay.tsx:338
+#, c-format
+msgid "Already claimed"
+msgstr ""
+
+#: src/cta/Pay.tsx:344
+#, c-format
+msgid "Payment complete"
+msgstr ""
+
+#: src/cta/Pay.tsx:348
+#, c-format
+msgid "You are going to be redirected to $ %1$s"
+msgstr ""
+
+#: src/cta/Pay.tsx:353
+#, c-format
+msgid "You can close this page."
+msgstr ""
+
+#: src/cta/Pay.tsx:367
+#, c-format
+msgid "Total to pay"
+msgstr ""
+
+#: src/cta/Pay.tsx:418
+#, c-format
+msgid "List of products"
+msgstr ""
+
+#: src/cta/Pay.tsx:460
+#, c-format
+msgid "Total"
+msgstr ""
+
+#: src/cta/Pay.tsx:469
+#, c-format
+msgid "free"
+msgstr ""
+
+#: src/cta/Refund.tsx:41
+#, c-format
+msgid "Refund Status"
+msgstr ""
+
+#: src/cta/Refund.tsx:44
+#, c-format
+msgid "The product %1$s has received a total effective refund of"
+msgstr ""
+
+#: src/cta/Refund.tsx:52
+#, c-format
+msgid "Refund processing is still in progress."
+msgstr ""
+
+#: src/cta/Refund.tsx:59
+#, c-format
+msgid "The refund amount of %1$s could not be applied."
+msgstr ""
+
+#: src/cta/Refund.tsx:97
+#, c-format
+msgid "missing taler refund uri"
+msgstr ""
+
+#: src/cta/Refund.tsx:105
+#, c-format
+msgid "Error: %1$s"
+msgstr ""
+
+#: src/cta/Refund.tsx:113
+#, c-format
+msgid "Updating refund status"
+msgstr ""
+
+#: src/cta/Tip.tsx:49
+#, c-format
+msgid "Tip from %1$s accepted. Check your transactions list for more details."
+msgstr ""
+
+#: src/cta/Tip.tsx:57
+#, fuzzy, c-format
+msgid "The merchant %1$s is offering you a tip of %2$s via the exchange %3$s"
+msgstr ""
+
+#: src/cta/Tip.tsx:67
+#, c-format
+msgid "Accept tip"
+msgstr ""
+
+#: src/cta/Tip.tsx:70
+#, c-format
+msgid "Ignore"
+msgstr ""
+
+#: src/cta/Tip.tsx:111
+#, c-format
+msgid "missing tip uri"
+msgstr ""
+
+#: src/cta/Tip.tsx:119
+#, c-format
+msgid "You've ignored the tip."
+msgstr ""
+
+#: src/cta/Withdraw.tsx:122
+#, c-format
+msgid "Digital cash withdrawal"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:127
+#, c-format
+msgid "Could not finish the withdrawal operation"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:138
+#, c-format
+msgid "Total to withdraw"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:187
+#, c-format
+msgid "Cancel exchange selection"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:189
+#, c-format
+msgid "Confirm exchange selection"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:196
+#, c-format
+msgid "Switch exchange"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:215
+#, c-format
+msgid "Confirm withdrawal"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:224
+#, fuzzy, c-format
+msgid "Withdraw anyway"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:287
+#, c-format
+msgid "Could not load the withdrawal details"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:344
+#, c-format
+msgid "missing withdraw uri"
+msgstr ""
+
+#: src/cta/Withdraw.tsx:354
+#, c-format
+msgid "Could not get the info from the URI"
+msgstr ""
+
+#: src/wallet/ManualWithdrawPage.tsx:99
+#, c-format
+msgid "Could not load the list of known exchanges"
+msgstr ""
+
+#: src/walletEntryPoint.tsx:172
+#, c-format
+msgid "All done, your transaction is in progress"
+msgstr ""
+
+#: src/components/EditableText.tsx:44
+#, c-format
+msgid "Edit"
+msgstr ""
+
+#: src/cta/Deposit.tsx:114
+#, c-format
+msgid "missing pay uri"
+msgstr ""
+
+#: src/cta/Deposit.tsx:129
+#, c-format
+msgid "Could not get the payment information for this order"
+msgstr ""
+
+#: src/cta/Deposit.tsx:160
+#, c-format
+msgid "Loading payment information"
+msgstr ""
+
+#: src/cta/Deposit.tsx:208
+#, c-format
+msgid "Digital cash deposit"
+msgstr ""
+
+#: src/cta/Deposit.tsx:226
+#, c-format
+msgid "You will now be sent back to the merchant you came from."
+msgstr ""
+
+#: src/cta/reset-required.tsx:54
+#, c-format
+msgid "Manual Reset Required"
+msgstr ""
+
+#: src/cta/reset-required.tsx:57
+#, c-format
+msgid ""
+"The wallet&apos;s database in your browser is incompatible with the "
+"currently installed wallet. Please reset manually."
+msgstr ""
+
+#: src/cta/reset-required.tsx:63
+#, c-format
+msgid ""
+"Once the database format has stabilized, we will provide automatic upgrades."
+msgstr ""
+
+#: src/cta/reset-required.tsx:77
+#, c-format
+msgid "I understand that I will lose all my data"
+msgstr ""
+
+#: src/cta/reset-required.tsx:87
+#, c-format
+msgid "Reset"
+msgstr ""
+
+#: src/cta/reset-required.tsx:95
+#, c-format
+msgid "Everything is fine!"
+msgstr ""
+
+#: src/cta/reset-required.tsx:98
+#, c-format
+msgid "A reset is not required anymore, you can close this page."
+msgstr ""
+
+#: src/cta/return-coins.tsx:31
+#, c-format
+msgid "Not implemented yet."
+msgstr ""
+
diff --git a/packages/taler-wallet-webextension/src/i18n/strings.ts b/packages/taler-wallet-webextension/src/i18n/strings.ts
index 27888d210..73cca092a 100644
--- a/packages/taler-wallet-webextension/src/i18n/strings.ts
+++ b/packages/taler-wallet-webextension/src/i18n/strings.ts
@@ -1,3 +1,5 @@
+export const strings: any = {};
+
 strings['de'] = {
   "domain": "messages",
   "locale_data": {
@@ -136,6 +138,9 @@ strings['de'] = {
       "This page has a notify reserve action.": [
         ""
       ],
+      "Notify": [
+        ""
+      ],
       "This page has a refund action.": [
         ""
       ],
@@ -445,7 +450,13 @@ strings['de'] = {
       "Cancel withdrawal": [
         ""
       ],
-      "Permissions": [
+      "Display": [
+        ""
+      ],
+      "Current Language": [
+        ""
+      ],
+      "Navigator": [
         ""
       ],
       "Automatically open wallet based on page content": [
@@ -454,7 +465,7 @@ strings['de'] = {
       "Enabling this option below will make using the wallet faster, but requires more permissions from your browser.": [
         ""
       ],
-      "Known exchanges": [
+      "Trust": [
         ""
       ],
       "No exchange yet": [
@@ -580,6 +591,9 @@ strings['de'] = {
       "Thank you for installing the wallet.": [
         ""
       ],
+      "Permissions": [
+        ""
+      ],
       "(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)": [
         ""
       ],
@@ -706,6 +720,9 @@ strings['de'] = {
       "Total to withdraw": [
         ""
       ],
+      "Known exchanges": [
+        ""
+      ],
       "Cancel exchange selection": [
         ""
       ],
@@ -792,7 +809,7 @@ strings['en-US'] = {
         "lang": "en-US"
       },
       "Balance": [
-        "Credit"
+        "Balance"
       ],
       "Backup": [
         ""
@@ -920,6 +937,9 @@ strings['en-US'] = {
       "This page has a notify reserve action.": [
         ""
       ],
+      "Notify": [
+        ""
+      ],
       "This page has a refund action.": [
         ""
       ],
@@ -1158,7 +1178,7 @@ strings['en-US'] = {
         ""
       ],
       "no balance": [
-        "Credit"
+        "no balance"
       ],
       "There is no known bank account to send money to": [
         ""
@@ -1188,148 +1208,953 @@ strings['en-US'] = {
         ""
       ],
       "Could not load the list of transactions": [
-        ""
+        ""
+      ],
+      "There is no history for this currency": [
+        ""
+      ],
+      "Account": [
+        ""
+      ],
+      "Bank host": [
+        ""
+      ],
+      "Bank account": [
+        ""
+      ],
+      "IBAN": [
+        ""
+      ],
+      "Chosen amount": [
+        ""
+      ],
+      "Subject": [
+        ""
+      ],
+      "could not parse payto uri from exchange %1$s": [
+        ""
+      ],
+      "Exchange is ready for withdrawal": [
+        ""
+      ],
+      "To complete the process you need to wire %1$s to the exchange bank account": [
+        ""
+      ],
+      "Make sure to use the correct subject, otherwise the money will not arrive in this wallet.": [
+        ""
+      ],
+      "Alternative, you can also scan this QR code or open %1$s if you have a banking app installed that supports RFC 8905": [
+        ""
+      ],
+      "Cancel withdrawal": [
+        ""
+      ],
+      "Display": [
+        ""
+      ],
+      "Current Language": [
+        ""
+      ],
+      "Navigator": [
+        ""
+      ],
+      "Automatically open wallet based on page content": [
+        ""
+      ],
+      "Enabling this option below will make using the wallet faster, but requires more permissions from your browser.": [
+        ""
+      ],
+      "Trust": [
+        ""
+      ],
+      "No exchange yet": [
+        ""
+      ],
+      "Term of Service": [
+        ""
+      ],
+      "ok": [
+        ""
+      ],
+      "changed": [
+        ""
+      ],
+      "not accepted": [
+        ""
+      ],
+      "Add an exchange": [
+        ""
+      ],
+      "Developer mode": [
+        ""
+      ],
+      "(More options and information useful for debugging)": [
+        ""
+      ],
+      "Could not load the transaction information": [
+        ""
+      ],
+      "There was an error trying to complete the transaction": [
+        ""
+      ],
+      "This transaction is not completed": [
+        ""
+      ],
+      "Retry": [
+        ""
+      ],
+      "Forget": [
+        ""
+      ],
+      "Caution!": [
+        ""
+      ],
+      "If you have already wired money to the exchange you will loose the chance to get the coins form it.": [
+        ""
+      ],
+      "Confirm": [
+        "Accept"
+      ],
+      "Withdrawal": [
+        ""
+      ],
+      "Total withdrawn": [
+        ""
+      ],
+      "Exchange fee": [
+        ""
+      ],
+      "The bank is waiting for confirmation. Go to the %1$s": [
+        ""
+      ],
+      "Waiting for the coins to arrive": [
+        ""
+      ],
+      "Payment": [
+        ""
+      ],
+      "Total paid": [
+        ""
+      ],
+      "Purchase amount": [
+        ""
+      ],
+      "Fee": [
+        ""
+      ],
+      "Merchant": [
+        ""
+      ],
+      "Purchase": [
+        ""
+      ],
+      "Receipt": [
+        ""
+      ],
+      "Total send": [
+        ""
+      ],
+      "Deposit amount": [
+        ""
+      ],
+      "Refresh": [
+        ""
+      ],
+      "Total refresh": [
+        ""
+      ],
+      "Refresh amount": [
+        ""
+      ],
+      "Tip": [
+        ""
+      ],
+      "Total tip": [
+        ""
+      ],
+      "Received amount": [
+        ""
+      ],
+      "Refund": [
+        ""
+      ],
+      "Total refund": [
+        ""
+      ],
+      "Refund amount": [
+        ""
+      ],
+      "Browser Extension Installed!": [
+        ""
+      ],
+      "Thank you for installing the wallet.": [
+        ""
+      ],
+      "Permissions": [
+        ""
+      ],
+      "(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)": [
+        ""
+      ],
+      "Next Steps": [
+        ""
+      ],
+      "Try the demo": [
+        ""
+      ],
+      "Learn how to top up your wallet balance": [
+        ""
+      ],
+      "Could not load pay status": [
+        ""
+      ],
+      "Could not load contract terms from merchant or wallet backend.": [
+        ""
+      ],
+      "Pay with a mobile phone": [
+        ""
+      ],
+      "Hide QR": [
+        ""
+      ],
+      "Scan the QR code or %1$s": [
+        ""
+      ],
+      "Processing": [
+        ""
+      ],
+      "Pay %1$s": [
+        ""
+      ],
+      "Your balance of %1$s is not enough to pay for this purchase": [
+        ""
+      ],
+      "Your balance is not enough to pay for this purchase.": [
+        ""
+      ],
+      "Withdraw digital cash": [
+        ""
+      ],
+      "Merchant message": [
+        ""
+      ],
+      "Digital cash payment": [
+        ""
+      ],
+      "Already paid, you are going to be redirected to %1$s": [
+        ""
+      ],
+      "Already paid": [
+        ""
+      ],
+      "Already claimed": [
+        ""
+      ],
+      "Payment complete": [
+        ""
+      ],
+      "You are going to be redirected to $ %1$s": [
+        ""
+      ],
+      "You can close this page.": [
+        ""
+      ],
+      "Total to pay": [
+        ""
+      ],
+      "List of products": [
+        ""
+      ],
+      "Total": [
+        ""
+      ],
+      "free": [
+        ""
+      ],
+      "Refund Status": [
+        ""
+      ],
+      "The product %1$s has received a total effective refund of": [
+        ""
+      ],
+      "Refund processing is still in progress.": [
+        ""
+      ],
+      "The refund amount of %1$s could not be applied.": [
+        ""
+      ],
+      "missing taler refund uri": [
+        ""
+      ],
+      "Error: %1$s": [
+        ""
+      ],
+      "Updating refund status": [
+        ""
+      ],
+      "Tip from %1$s accepted. Check your transactions list for more details.": [
+        ""
+      ],
+      "The merchant %1$s is offering you a tip of %2$s via the exchange %3$s": [
+        ""
+      ],
+      "Accept tip": [
+        ""
+      ],
+      "Ignore": [
+        ""
+      ],
+      "missing tip uri": [
+        ""
+      ],
+      "You've ignored the tip.": [
+        ""
+      ],
+      "Digital cash withdrawal": [
+        ""
+      ],
+      "Could not finish the withdrawal operation": [
+        ""
+      ],
+      "Total to withdraw": [
+        ""
+      ],
+      "Known exchanges": [
+        ""
+      ],
+      "Cancel exchange selection": [
+        ""
+      ],
+      "Confirm exchange selection": [
+        ""
+      ],
+      "Switch exchange": [
+        ""
+      ],
+      "Confirm withdrawal": [
+        ""
+      ],
+      "Withdraw anyway": [
+        ""
+      ],
+      "Could not load the withdrawal details": [
+        ""
+      ],
+      "missing withdraw uri": [
+        ""
+      ],
+      "Could not get the info from the URI": [
+        ""
+      ],
+      "Could not load the list of known exchanges": [
+        ""
+      ],
+      "All done, your transaction is in progress": [
+        ""
+      ],
+      "Edit": [
+        ""
+      ],
+      "missing pay uri": [
+        ""
+      ],
+      "Could not get the payment information for this order": [
+        ""
+      ],
+      "Loading payment information": [
+        ""
+      ],
+      "Digital cash deposit": [
+        ""
+      ],
+      "You will now be sent back to the merchant you came from.": [
+        ""
+      ],
+      "Manual Reset Required": [
+        ""
+      ],
+      "The wallet&apos;s database in your browser is incompatible with the currently installed wallet. Please reset manually.": [
+        ""
+      ],
+      "Once the database format has stabilized, we will provide automatic upgrades.": [
+        ""
+      ],
+      "I understand that I will lose all my data": [
+        ""
+      ],
+      "Reset": [
+        ""
+      ],
+      "Everything is fine!": [
+        ""
+      ],
+      "A reset is not required anymore, you can close this page.": [
+        ""
+      ],
+      "Not implemented yet.": [
+        ""
+      ]
+    }
+  }
+};
+
+strings['es'] = {
+  "domain": "messages",
+  "locale_data": {
+    "messages": {
+      "": {
+        "domain": "messages",
+        "plural_forms": "nplurals=2; plural=n != 1;",
+        "lang": "es"
+      },
+      "Balance": [
+        "Balance"
+      ],
+      "Backup": [
+        ""
+      ],
+      "Settings": [
+        "Configuración"
+      ],
+      "Dev": [
+        "Dev"
+      ],
+      "Loading": [
+        "Cargando"
+      ],
+      "Open reserve page": [
+        "Abrir página de reserva"
+      ],
+      "Open pay page": [
+        "Abrir página de pago"
+      ],
+      "Open refund page": [
+        "Abrir página de devolución"
+      ],
+      "Open tip page": [
+        "Abrir página de propina"
+      ],
+      "Open withdraw page": [
+        "Abrir página de extracción"
+      ],
+      "Back": [
+        "Volver"
+      ],
+      "You have no balance to show.": [
+        "No tienes balance para mostrar."
+      ],
+      "To withdraw money you can start from your bank site or click the \"withdraw\" button to use a known exchange.": [
+        "Para retirar dinero puedes empezar desde el sitio de tu banco o cliquear en el botón \"extraer\" para usar un exchange conocido"
+      ],
+      "Withdraw": [
+        "Extraer"
+      ],
+      "Could not load balance page": [
+        "No se pudo cargar la página"
+      ],
+      "Deposit %1$s": [
+        "Depositar %1$s"
+      ],
+      "Enter URI": [
+        "Ingresar URI"
+      ],
+      "Diagnostics timed out. Could not talk to the wallet backend.": [
+        "El diagnóstico caducó. No nos pudimos comunicar con la billetera."
+      ],
+      "Problems detected:": [
+        "Problemas detectados:"
+      ],
+      "Please check in your %1$s settings that you have IndexedDB enabled (check the preference name %2$s).": [
+        "Por favor revisa en tu configuración %1$s que tienes IndexedDB habilitado (el nombre de la preferencia %2$s)."
+      ],
+      "Your wallet database is outdated. Currently automatic migration is not supported. Please go %1$s to reset the wallet database.": [
+        "La base de datos de la billetera expiró. Por ahora la migración automática no está soportada. Por favor dirijasé a %1$s para reiniciar la base de datos de la billetera"
+      ],
+      "Running diagnostics": [
+        "Ejecutando diagnósticos"
+      ],
+      "Debug tools": [
+        "Herramientas de desarrollo"
+      ],
+      "reset": [
+        "Reiniciar"
+      ],
+      "import database": [
+        "Importar base de datos"
+      ],
+      "export database": [
+        "Exportar base de datos"
+      ],
+      "Database exported at %1$s %2$s to download": [
+        "Base de datos exportada a %1$s %2$s para descargar"
+      ],
+      "Coins": [
+        "Monedas"
+      ],
+      "Pending operations": [
+        "Operaciones pendientes"
+      ],
+      "usable coins": [
+        "monedas usables"
+      ],
+      "id": [
+        "id"
+      ],
+      "denom": [
+        "denominación"
+      ],
+      "value": [
+        "valor"
+      ],
+      "status": [
+        "estado"
+      ],
+      "from refresh?": [
+        "desde refresco?"
+      ],
+      "spent coins": [
+        "monedas gastadas"
+      ],
+      "click to show": [
+        "cliquear para mostrar"
+      ],
+      "Do you want to IRREVOCABLY DESTROY everything inside your wallet and LOSE ALL YOUR COINS?": [
+        "Quieres DESTRUIR IRREVOCABLEMENTE todo dentro de tu billetera y PERDER TODAS TUS MONEDAS?"
+      ],
+      "Taler Action": [
+        "Acción Taler"
+      ],
+      "This page has pay action.": [
+        "Esta página tiene una acción."
+      ],
+      "This page has a withdrawal action.": [
+        "Esta página tiene una acción de extracción."
+      ],
+      "This page has a tip action.": [
+        "Esta página tiene una acción de propina."
+      ],
+      "This page has a notify reserve action.": [
+        "Esta página tiene una acción de notificación de reserva."
+      ],
+      "Notify": [
+        ""
+      ],
+      "This page has a refund action.": [
+        "Esta página tiene una acción de devolución"
+      ],
+      "This page has a malformed taler uri.": [
+        "Esta página tiene una URI de Taler malformada"
+      ],
+      "Dismiss": [
+        "Desechar"
+      ],
+      "Could not load backup providers": [
+        "No se pudo cargar los proveedores de backup"
+      ],
+      "No backup providers configured": [
+        "No hay proveedores de backup configurados"
+      ],
+      "Add provider": [
+        "Agregar proveedor"
+      ],
+      "Sync all backups": [
+        "Sincronizar todos los backups"
+      ],
+      "Sync now": [
+        "Syncronizar ahora"
+      ],
+      "Last synced": [
+        "Ultima vez sincronizado"
+      ],
+      "Not synced": [
+        "No sincronizado"
+      ],
+      "Expires in": [
+        "Expira en"
+      ],
+      "Exchange doesn't have terms of service": [
+        "Exchange no tiene terminos de service"
+      ],
+      "Review exchange terms of service": [
+        "Revizar terminos de servicio"
+      ],
+      "Review new version of terms of service": [
+        "Revisar los nuevos terminos de servicio"
+      ],
+      "Show terms of service": [
+        "Mostrar terminos de servicio"
+      ],
+      "I accept the exchange terms of service": [
+        "Acepto los terminos de servicio del exchange"
+      ],
+      "The exchange reply with a empty terms of service": [
+        "El exchange respondió con unos terminos de servicio vacíos"
+      ],
+      "Download Terms of Service": [
+        "Descargar los terminos de servicio"
+      ],
+      "Hide terms of service": [
+        "Escoder los terminos de servicio"
+      ],
+      "Review terms of service": [
+        "Revizar los terminos de servicio"
+      ],
+      "Exchange URL": [
+        "Exchange URL"
+      ],
+      "Cancel": [
+        "Cancelar"
+      ],
+      "Loading terms..": [
+        "Cargando terminos..."
+      ],
+      "Add exchange": [
+        "Agregar exchange"
+      ],
+      "Add exchange anyway": [
+        "Agregar exchange de todas maneras"
+      ],
+      "Add new exchange": [
+        "Agregar nuevo exchange"
+      ],
+      "Add exchange for %1$s": [
+        "Agregar exchange para %1$s"
+      ],
+      "Enter the URL of an exchange you trust.": [
+        "Ingresar la URL de un exchange que tu confíes."
+      ],
+      "An exchange has been found! Review the information and click next": [
+        "Un exchange ha sido encontrado! Revisa la información y cliquea en siguente"
+      ],
+      "This exchange doesn't match the expected currency %1$s": [
+        "Este exchange no es para la divisa %1$s"
+      ],
+      "Unable to verify this exchange": [
+        "No fue posible verificar este exchange"
+      ],
+      "Unable to add this exchange": [
+        "No fue posible agregar este exchange"
+      ],
+      "loading": [
+        "cargando"
+      ],
+      "Version": [
+        "Versión"
+      ],
+      "Currency": [
+        "Divisa"
+      ],
+      "Next": [
+        "Siguiente"
+      ],
+      "Add backup provider": [
+        "Agregar proveedor de backup"
+      ],
+      "Could not get provider information": [
+        "No se puedo conseguir la información del proveedor"
+      ],
+      "Backup providers may charge for their service": [
+        "Provedores de backup pueden pueden cobrarte por su servicio"
+      ],
+      "URL": [
+        "URL"
+      ],
+      "Name": [
+        "Nombre"
+      ],
+      "Provider URL": [
+        "URL del proveedor"
+      ],
+      "Please review and accept this provider's terms of service": [
+        "Por favor revisa y acepta los terminos de servicio del proveedor"
+      ],
+      "Pricing": [
+        "Precios"
+      ],
+      "free of charge": [
+        "Gratis"
+      ],
+      "%1$s per year of service": [
+        "%1$s por año de servicio"
+      ],
+      "Storage": [
+        "Alamcenamiento"
+      ],
+      "%1$s megabytes of storage per year of service": [
+        "%1$s megabytes de almacenamiento por año de servicio"
+      ],
+      "Accept terms of service": [
+        "Aceptar terminos de servicio"
+      ],
+      "There was an error loading the provider detail for \"%1$s\"": [
+        "Hubo un error cargando los detalles del proveedor para \"%1$s\""
+      ],
+      "There is not known provider with url \"%1$s\".": [
+        "No hay proveedor conocido con url \"%1$s\"."
+      ],
+      "Last backup": [
+        "Último backup"
+      ],
+      "Back up": [
+        "Backup"
+      ],
+      "Provider fee": [
+        "Tarifa del proveedor"
+      ],
+      "per year": [
+        "por año"
+      ],
+      "Extend": [
+        "Extender"
+      ],
+      "terms has changed, extending the service will imply accepting the new terms of service": [
+        "los terminos han cambiado, extender el servicio implicará aceptar los nuevos terminos de servicio"
+      ],
+      "old": [
+        "viejo"
+      ],
+      "new": [
+        "nuevo"
+      ],
+      "fee": [
+        "tarifa"
+      ],
+      "storage": [
+        "almacenamiento"
+      ],
+      "back": [
+        "volver"
+      ],
+      "Remove provider": [
+        "Eliminar proveedor"
+      ],
+      "This provider has reported an error": [
+        "Este proveedor ha reportado un error"
+      ],
+      "There is conflict with another backup from %1$s": [
+        "Hubo un conflicto con otro backup de %1$s"
+      ],
+      "Backup is not readable": [
+        "El backup no se puede leer"
+      ],
+      "Unknown backup problem: %1$s": [
+        "Problema de backup desconocido: %1$s"
+      ],
+      "service paid": [
+        "servicio pagado"
+      ],
+      "Backup valid until": [
+        "Backup valido hasta"
+      ],
+      "this popup is being closed and you are being redirected to %1$s": [
+        "Este popup se cerrará y estás siendo redirijido a %1$s"
+      ],
+      "Select one option": [
+        "Seleccione una opción"
+      ],
+      "Manual Withdrawal": [
+        "Extracción Manual"
+      ],
+      "Choose a exchange from where the coins will be withdrawn. The exchange will send the coins to this wallet after receiving a wire transfer with the correct subject.": [
+        "Elija un exchange desde donde las monedas serán extraídas. El exchange enviará las monedas a esta billetera después de recibir una transferencia con el asunto correcto."
+      ],
+      "No exchange configured": [
+        "Sin exchange configurado"
+      ],
+      "Can't create the reserve": [
+        "No se pudo create una reserva"
+      ],
+      "Exchange": [
+        "Exchange"
+      ],
+      "Add Exchange": [
+        "Agregar Exchange"
+      ],
+      "Amount": [
+        "Monto"
+      ],
+      "Start withdrawal": [
+        "Comenzar extracción"
+      ],
+      "no balance": [
+        "sin balance"
+      ],
+      "There is no known bank account to send money to": [
+        "No hay cuenta bancaria conocida donde enviar el dinero"
+      ],
+      "Send %1$s to your account": [
+        "Enviar %1$s a tu cuenta"
+      ],
+      "Bank account IBAN number": [
+        "Número IBAN de cuenta bancaria"
+      ],
+      "Deposit fee": [
+        "Taria de depósito"
+      ],
+      "Total deposit": [
+        "Deposito total"
+      ],
+      "Deposit": [
+        "Depósito"
+      ],
+      "Deposit %1$s %2$s": [
+        "Depositar %1$s %2$s"
+      ],
+      "Waiting for confirmation": [
+        "Esperando confirmación"
+      ],
+      "PENDING": [
+        "PENDIENTE"
+      ],
+      "Could not load the list of transactions": [
+        "No se pudo cargar la lista de transacciones"
       ],
       "There is no history for this currency": [
-        ""
+        "No hay historial para esta divisa"
       ],
       "Account": [
-        ""
+        "Cuenta"
       ],
       "Bank host": [
-        ""
+        "Host del banco"
       ],
       "Bank account": [
-        ""
+        "Cuenta del banco"
       ],
       "IBAN": [
-        ""
+        "IBAN"
       ],
       "Chosen amount": [
-        ""
+        "Elegir monto"
       ],
       "Subject": [
-        ""
+        "Asunto"
       ],
       "could not parse payto uri from exchange %1$s": [
-        ""
+        "No se pudo analizar la URI payto del exchange %1$s"
       ],
       "Exchange is ready for withdrawal": [
-        ""
+        "El exchange está listo para la extracción"
       ],
       "To complete the process you need to wire %1$s to the exchange bank account": [
-        ""
+        "Para completar el proceso necesitas enviar %1$s a la cuenta bancaria del exchange"
       ],
       "Make sure to use the correct subject, otherwise the money will not arrive in this wallet.": [
-        ""
+        "Asegurate de usar el asunto correcto, de otra manera el dinero no llegará a esta billetera"
       ],
       "Alternative, you can also scan this QR code or open %1$s if you have a banking app installed that supports RFC 8905": [
-        ""
+        "Alternativamente, también puedes escanear el código QR o abrir %1$s si tienes una aplicación bancaria instalada que soporta RFC 8905"
       ],
       "Cancel withdrawal": [
+        "Cancelar extracción"
+      ],
+      "Display": [
         ""
       ],
-      "Permissions": [
+      "Current Language": [
         ""
       ],
-      "Automatically open wallet based on page content": [
+      "Navigator": [
         ""
       ],
+      "Automatically open wallet based on page content": [
+        "Abrir automáticamente la billetera basado en el contenido de la página"
+      ],
       "Enabling this option below will make using the wallet faster, but requires more permissions from your browser.": [
-        ""
+        "Habilitar esta opción debajo hará el uso de la billetera mas rápido, pero requiere mas permisos de tu navegador"
       ],
-      "Known exchanges": [
+      "Trust": [
         ""
       ],
       "No exchange yet": [
-        ""
+        "No hay exchanges todavía"
       ],
       "Term of Service": [
-        ""
+        "Terminos de servicio"
       ],
       "ok": [
-        ""
+        "ok"
       ],
       "changed": [
-        ""
+        "modificado"
       ],
       "not accepted": [
-        ""
+        "no aceptado"
       ],
       "Add an exchange": [
-        ""
+        "Agregar un exchange"
       ],
       "Developer mode": [
-        ""
+        "Modo desarrollador"
       ],
       "(More options and information useful for debugging)": [
-        ""
+        "(Mas información y opciones útiles para depuración)"
       ],
       "Could not load the transaction information": [
-        ""
+        "No se pudo cargar información de la transacción"
       ],
       "There was an error trying to complete the transaction": [
-        ""
+        "Hubo un error intentando completar la transacción"
       ],
       "This transaction is not completed": [
-        ""
+        "Esta tansacción no está completa"
       ],
       "Retry": [
-        ""
+        "Reintentar"
       ],
       "Forget": [
-        ""
+        "Olvidar"
       ],
       "Caution!": [
-        ""
+        "Cuidado!"
       ],
       "If you have already wired money to the exchange you will loose the chance to get the coins form it.": [
-        ""
+        "Si ya has transferido dinero al exchange perderas la oportunidad de recivir las monedas"
       ],
       "Confirm": [
-        "Accept"
+        "Confirmar"
       ],
       "Withdrawal": [
-        ""
+        "Extracción"
       ],
       "Total withdrawn": [
-        ""
+        "Total extraido"
       ],
       "Exchange fee": [
-        ""
+        "Tarifa del exchange"
       ],
       "The bank is waiting for confirmation. Go to the %1$s": [
-        ""
+        "El banco espera la confirmación. Dirigete a %1$s"
       ],
       "Waiting for the coins to arrive": [
-        ""
+        "Esperando a que las monedas lleguen"
       ],
       "Payment": [
-        ""
+        "Pago"
       ],
       "Total paid": [
-        ""
+        "Total pagado"
       ],
       "Purchase amount": [
-        ""
+        "Monto de compra"
       ],
       "Fee": [
-        ""
+        "Tarifa"
       ],
       "Merchant": [
-        ""
+        "Comerciante"
       ],
       "Purchase": [
-        ""
+        "Compra"
       ],
       "Receipt": [
-        ""
+        "Recibo"
       ],
       "Total send": [
-        ""
+        "Total enviado"
       ],
       "Deposit amount": [
-        ""
+        "Monto a depositar"
       ],
       "Refresh": [
         ""
@@ -1341,290 +2166,296 @@ strings['en-US'] = {
         ""
       ],
       "Tip": [
-        ""
+        "Propina"
       ],
       "Total tip": [
-        ""
+        "Total de propina"
       ],
       "Received amount": [
-        ""
+        "Monto recibido"
       ],
       "Refund": [
-        ""
+        "Devolución"
       ],
       "Total refund": [
-        ""
+        "Devolución total"
       ],
       "Refund amount": [
-        ""
+        "Monto de devolución"
       ],
       "Browser Extension Installed!": [
-        ""
+        "Extensión del navegador instalada!"
       ],
       "Thank you for installing the wallet.": [
-        ""
+        "Gracias por haber instalado la billetera."
+      ],
+      "Permissions": [
+        "Permisos"
       ],
       "(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)": [
-        ""
+        "(Habilitar esta opción debajo hará el uso de la billetera mas rápido, pero requiere mas permisos de tu navegador)"
       ],
       "Next Steps": [
-        ""
+        "Próximos pasos"
       ],
       "Try the demo": [
-        ""
+        "Probar la demostración"
       ],
       "Learn how to top up your wallet balance": [
-        ""
+        "Aprender como llenar tu billetera"
       ],
       "Could not load pay status": [
-        ""
+        "No se pudo cargar el estado del pago"
       ],
       "Could not load contract terms from merchant or wallet backend.": [
-        ""
+        "No se pudo cargar los terminos de contrato del comerciante o de la billetera."
       ],
       "Pay with a mobile phone": [
-        ""
+        "Pagar con un teléfono móbil"
       ],
       "Hide QR": [
-        ""
+        "Esconder QR"
       ],
       "Scan the QR code or %1$s": [
-        ""
+        "Escanear el código QR o %1$s"
       ],
       "Processing": [
-        ""
+        "Procesando"
       ],
       "Pay %1$s": [
-        ""
+        "Pagar %1$s"
       ],
       "Your balance of %1$s is not enough to pay for this purchase": [
-        ""
+        "Tu balance de %1$s no es suficiente para pagar por esta compra"
       ],
       "Your balance is not enough to pay for this purchase.": [
-        ""
+        "Tu balance no es suficiente para pagar esta compra."
       ],
       "Withdraw digital cash": [
-        ""
+        "Extraer dinero digital"
       ],
       "Merchant message": [
-        ""
+        "Mensaje del comerciante"
       ],
       "Digital cash payment": [
-        ""
+        "Pago con dinero digital"
       ],
       "Already paid, you are going to be redirected to %1$s": [
-        ""
+        "Ya pagado, estás siendo dirigido a %1$s"
       ],
       "Already paid": [
-        ""
+        "Ya pagado"
       ],
       "Already claimed": [
-        ""
+        "Ya reclamado"
       ],
       "Payment complete": [
-        ""
+        "Pago completo"
       ],
       "You are going to be redirected to $ %1$s": [
-        ""
+        "Estas siendo redirigido a %1$s"
       ],
       "You can close this page.": [
-        ""
+        "Puedes cerrar esta página."
       ],
       "Total to pay": [
-        ""
+        "Total a pagar"
       ],
       "List of products": [
-        ""
+        "Lista de productos"
       ],
       "Total": [
-        ""
+        "Total"
       ],
       "free": [
-        ""
+        "Gratis"
       ],
       "Refund Status": [
-        ""
+        "Estado del reembolso"
       ],
       "The product %1$s has received a total effective refund of": [
-        ""
+        "El producto %1$s ha recibido un total efectivo de"
       ],
       "Refund processing is still in progress.": [
-        ""
+        "El proceso de reembolso está todavía en progreso"
       ],
       "The refund amount of %1$s could not be applied.": [
-        ""
+        "El monto del reembolso de %1$s no pudo ser aplicado."
       ],
       "missing taler refund uri": [
-        ""
+        "falta la URI Taler de reembolso"
       ],
       "Error: %1$s": [
-        ""
+        "Error: %1$s"
       ],
       "Updating refund status": [
-        ""
+        "Actualizando el estado de reembolso"
       ],
       "Tip from %1$s accepted. Check your transactions list for more details.": [
-        ""
+        "Propina de %1$s aceptada. Revisa tu lista de transacciones para mas detalle."
       ],
       "The merchant %1$s is offering you a tip of %2$s via the exchange %3$s": [
-        ""
+        "El comerciante %1$s está ofreciendo una propina de %2$s usando el exchange %3$s"
       ],
       "Accept tip": [
-        ""
+        "Aceptar propina"
       ],
       "Ignore": [
-        ""
+        "Ignorar"
       ],
       "missing tip uri": [
-        ""
+        "URI de propina faltante"
       ],
       "You've ignored the tip.": [
-        ""
+        "Has ignorado la propina"
       ],
       "Digital cash withdrawal": [
-        ""
+        "Extracción de dinero digital"
       ],
       "Could not finish the withdrawal operation": [
-        ""
+        "No se pudo completar la operación de extracción"
       ],
       "Total to withdraw": [
-        ""
+        "Total a extraer"
+      ],
+      "Known exchanges": [
+        "Exchange conocidos"
       ],
       "Cancel exchange selection": [
-        ""
+        "Cancelar selección de exchange"
       ],
       "Confirm exchange selection": [
-        ""
+        "Confirmar selección de exchange"
       ],
       "Switch exchange": [
-        ""
+        "Cambiar exchange"
       ],
       "Confirm withdrawal": [
-        ""
+        "Confirmar extracción"
       ],
       "Withdraw anyway": [
-        ""
+        "Extraer de todas maneras"
       ],
       "Could not load the withdrawal details": [
-        ""
+        "No se pudo cargar los detalles de extracción"
       ],
       "missing withdraw uri": [
-        ""
+        "URI de extracción faltante"
       ],
       "Could not get the info from the URI": [
-        ""
+        "No se pudo obtener la información desde la URI"
       ],
       "Could not load the list of known exchanges": [
-        ""
+        "No se pudo cargar la lista de exchange conocidos"
       ],
       "All done, your transaction is in progress": [
-        ""
+        "Todo completo, su transacción está en progreso"
       ],
       "Edit": [
-        ""
+        "Editar"
       ],
       "missing pay uri": [
-        ""
+        "URI de pago faltante"
       ],
       "Could not get the payment information for this order": [
-        ""
+        "No se pudo obtener la información de pago para esta orden"
       ],
       "Loading payment information": [
-        ""
+        "Cargado la información de pago"
       ],
       "Digital cash deposit": [
-        ""
+        "Deposito de dinero digital"
       ],
       "You will now be sent back to the merchant you came from.": [
-        ""
+        "Ahora serás enviado otra vez al sitio del comerciante"
       ],
       "Manual Reset Required": [
-        ""
+        "Reinicio Manual Necesario"
       ],
       "The wallet&apos;s database in your browser is incompatible with the currently installed wallet. Please reset manually.": [
-        ""
+        "La base de datos de billetera en tu navegador es incompatible con la billetera instalada actualmente. Por favor reinicie manualmente"
       ],
       "Once the database format has stabilized, we will provide automatic upgrades.": [
-        ""
+        "Una vez que el formato de la base de datos esté estabilizzado, proveeremos de actualizaciones automáticas"
       ],
       "I understand that I will lose all my data": [
-        ""
+        "Entiendo que perderé toda mi información"
       ],
       "Reset": [
-        ""
+        "Reiniciar"
       ],
       "Everything is fine!": [
-        ""
+        "Todo está bien!"
       ],
       "A reset is not required anymore, you can close this page.": [
-        ""
+        "Un reinicio ya no es necesario, puede cerrar esta página."
       ],
       "Not implemented yet.": [
-        ""
+        "Todavía no implementado"
       ]
     }
   }
 };
 
-strings['es'] = {
+strings['fr'] = {
   "domain": "messages",
   "locale_data": {
     "messages": {
       "": {
         "domain": "messages",
-        "plural_forms": "nplurals=2; plural=n != 1;",
-        "lang": "it"
+        "plural_forms": "nplurals=2; plural=(n!=1);",
+        "lang": "fr"
       },
       "Balance": [
-        "Balance"
+        ""
       ],
       "Backup": [
         ""
       ],
       "Settings": [
-        "Configuración"
+        ""
       ],
       "Dev": [
-        "Dev"
+        ""
       ],
       "Loading": [
-        "Cargando"
+        ""
       ],
       "Open reserve page": [
-        "Abrir página de reserva"
+        ""
       ],
       "Open pay page": [
-        "Abrir página de pago"
+        ""
       ],
       "Open refund page": [
-        "Abrir página de devolución"
+        ""
       ],
       "Open tip page": [
-        "Abrir página de propina"
+        ""
       ],
       "Open withdraw page": [
-        "Abrir página de extracción"
+        ""
       ],
       "Back": [
-        "Volver"
+        ""
       ],
       "You have no balance to show.": [
-        "No tienes balance para mostrar."
+        ""
       ],
       "To withdraw money you can start from your bank site or click the \"withdraw\" button to use a known exchange.": [
-        "Para retirar dinero puedes empezar desde el sitio de tu banco o cliquear en el botón \"extraer\" para usar un exchange conocido"
+        ""
       ],
       "Withdraw": [
-        "Extraer"
+        ""
       ],
       "Could not load balance page": [
-        "No se pudo cargar la página"
+        ""
       ],
       "Deposit %1$s": [
-        "Depositar %1$s"
+        ""
       ],
       "Enter URI": [
-        "Ingresar URI"
+        ""
       ],
       "Diagnostics timed out. Could not talk to the wallet backend.": [
         ""
@@ -1704,6 +2535,9 @@ strings['es'] = {
       "This page has a notify reserve action.": [
         ""
       ],
+      "Notify": [
+        ""
+      ],
       "This page has a refund action.": [
         ""
       ],
@@ -2013,7 +2847,13 @@ strings['es'] = {
       "Cancel withdrawal": [
         ""
       ],
-      "Permissions": [
+      "Display": [
+        ""
+      ],
+      "Current Language": [
+        ""
+      ],
+      "Navigator": [
         ""
       ],
       "Automatically open wallet based on page content": [
@@ -2022,7 +2862,7 @@ strings['es'] = {
       "Enabling this option below will make using the wallet faster, but requires more permissions from your browser.": [
         ""
       ],
-      "Known exchanges": [
+      "Trust": [
         ""
       ],
       "No exchange yet": [
@@ -2071,7 +2911,7 @@ strings['es'] = {
         ""
       ],
       "Confirm": [
-        "Confermare"
+        "Confirmer"
       ],
       "Withdrawal": [
         ""
@@ -2148,6 +2988,9 @@ strings['es'] = {
       "Thank you for installing the wallet.": [
         ""
       ],
+      "Permissions": [
+        ""
+      ],
       "(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)": [
         ""
       ],
@@ -2274,6 +3117,9 @@ strings['es'] = {
       "Total to withdraw": [
         ""
       ],
+      "Known exchanges": [
+        ""
+      ],
       "Cancel exchange selection": [
         ""
       ],
@@ -2350,14 +3196,14 @@ strings['es'] = {
   }
 };
 
-strings['fr'] = {
+strings['it'] = {
   "domain": "messages",
   "locale_data": {
     "messages": {
       "": {
         "domain": "messages",
-        "plural_forms": "nplurals=2; plural=(n!=1);",
-        "lang": "fr"
+        "plural_forms": "nplurals=2; plural=n != 1;",
+        "lang": "it"
       },
       "Balance": [
         ""
@@ -2488,6 +3334,9 @@ strings['fr'] = {
       "This page has a notify reserve action.": [
         ""
       ],
+      "Notify": [
+        ""
+      ],
       "This page has a refund action.": [
         ""
       ],
@@ -2797,7 +3646,13 @@ strings['fr'] = {
       "Cancel withdrawal": [
         ""
       ],
-      "Permissions": [
+      "Display": [
+        ""
+      ],
+      "Current Language": [
+        ""
+      ],
+      "Navigator": [
         ""
       ],
       "Automatically open wallet based on page content": [
@@ -2806,7 +3661,7 @@ strings['fr'] = {
       "Enabling this option below will make using the wallet faster, but requires more permissions from your browser.": [
         ""
       ],
-      "Known exchanges": [
+      "Trust": [
         ""
       ],
       "No exchange yet": [
@@ -2855,7 +3710,7 @@ strings['fr'] = {
         ""
       ],
       "Confirm": [
-        "Confirmer"
+        "Confermare"
       ],
       "Withdrawal": [
         ""
@@ -2932,6 +3787,9 @@ strings['fr'] = {
       "Thank you for installing the wallet.": [
         ""
       ],
+      "Permissions": [
+        ""
+      ],
       "(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)": [
         ""
       ],
@@ -3058,6 +3916,9 @@ strings['fr'] = {
       "Total to withdraw": [
         ""
       ],
+      "Known exchanges": [
+        ""
+      ],
       "Cancel exchange selection": [
         ""
       ],
@@ -3134,23 +3995,23 @@ strings['fr'] = {
   }
 };
 
-strings['it'] = {
+strings['ja'] = {
   "domain": "messages",
   "locale_data": {
     "messages": {
       "": {
         "domain": "messages",
         "plural_forms": "nplurals=2; plural=n != 1;",
-        "lang": "it"
+        "lang": "ja"
       },
       "Balance": [
-        ""
+        "残高"
       ],
       "Backup": [
-        ""
+        "バックアップ"
       ],
       "Settings": [
-        ""
+        "設定"
       ],
       "Dev": [
         ""
@@ -3177,13 +4038,13 @@ strings['it'] = {
         ""
       ],
       "You have no balance to show.": [
-        ""
+        "表示するバランスがありません"
       ],
       "To withdraw money you can start from your bank site or click the \"withdraw\" button to use a known exchange.": [
-        ""
+        "お金を引き出すには、銀行のサイトから開始するか、[引き出し]ボタンをクリックして既知の取引所を使用します。"
       ],
       "Withdraw": [
-        ""
+        "撤退"
       ],
       "Could not load balance page": [
         ""
@@ -3272,6 +4133,9 @@ strings['it'] = {
       "This page has a notify reserve action.": [
         ""
       ],
+      "Notify": [
+        ""
+      ],
       "This page has a refund action.": [
         ""
       ],
@@ -3581,7 +4445,13 @@ strings['it'] = {
       "Cancel withdrawal": [
         ""
       ],
-      "Permissions": [
+      "Display": [
+        ""
+      ],
+      "Current Language": [
+        ""
+      ],
+      "Navigator": [
         ""
       ],
       "Automatically open wallet based on page content": [
@@ -3590,7 +4460,7 @@ strings['it'] = {
       "Enabling this option below will make using the wallet faster, but requires more permissions from your browser.": [
         ""
       ],
-      "Known exchanges": [
+      "Trust": [
         ""
       ],
       "No exchange yet": [
@@ -3639,7 +4509,7 @@ strings['it'] = {
         ""
       ],
       "Confirm": [
-        "Confermare"
+        ""
       ],
       "Withdrawal": [
         ""
@@ -3716,6 +4586,9 @@ strings['it'] = {
       "Thank you for installing the wallet.": [
         ""
       ],
+      "Permissions": [
+        ""
+      ],
       "(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)": [
         ""
       ],
@@ -3842,6 +4715,9 @@ strings['it'] = {
       "Total to withdraw": [
         ""
       ],
+      "Known exchanges": [
+        ""
+      ],
       "Cancel exchange selection": [
         ""
       ],
@@ -4056,6 +4932,9 @@ strings['sv'] = {
       "This page has a notify reserve action.": [
         ""
       ],
+      "Notify": [
+        ""
+      ],
       "This page has a refund action.": [
         ""
       ],
@@ -4365,7 +5244,13 @@ strings['sv'] = {
       "Cancel withdrawal": [
         ""
       ],
-      "Permissions": [
+      "Display": [
+        ""
+      ],
+      "Current Language": [
+        ""
+      ],
+      "Navigator": [
         ""
       ],
       "Automatically open wallet based on page content": [
@@ -4374,7 +5259,7 @@ strings['sv'] = {
       "Enabling this option below will make using the wallet faster, but requires more permissions from your browser.": [
         ""
       ],
-      "Known exchanges": [
+      "Trust": [
         ""
       ],
       "No exchange yet": [
@@ -4500,6 +5385,9 @@ strings['sv'] = {
       "Thank you for installing the wallet.": [
         ""
       ],
+      "Permissions": [
+        ""
+      ],
       "(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)": [
         ""
       ],
@@ -4626,6 +5514,9 @@ strings['sv'] = {
       "Total to withdraw": [
         ""
       ],
+      "Known exchanges": [
+        ""
+      ],
       "Cancel exchange selection": [
         ""
       ],
@@ -4840,6 +5731,9 @@ strings['tr'] = {
       "This page has a notify reserve action.": [
         ""
       ],
+      "Notify": [
+        ""
+      ],
       "This page has a refund action.": [
         ""
       ],
@@ -5149,7 +6043,13 @@ strings['tr'] = {
       "Cancel withdrawal": [
         ""
       ],
-      "Permissions": [
+      "Display": [
+        ""
+      ],
+      "Current Language": [
+        ""
+      ],
+      "Navigator": [
         ""
       ],
       "Automatically open wallet based on page content": [
@@ -5158,7 +6058,7 @@ strings['tr'] = {
       "Enabling this option below will make using the wallet faster, but requires more permissions from your browser.": [
         ""
       ],
-      "Known exchanges": [
+      "Trust": [
         ""
       ],
       "No exchange yet": [
@@ -5284,6 +6184,9 @@ strings['tr'] = {
       "Thank you for installing the wallet.": [
         ""
       ],
+      "Permissions": [
+        ""
+      ],
       "(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)": [
         ""
       ],
@@ -5410,6 +6313,9 @@ strings['tr'] = {
       "Total to withdraw": [
         ""
       ],
+      "Known exchanges": [
+        ""
+      ],
       "Cancel exchange selection": [
         ""
       ],
diff --git a/packages/taler-wallet-webextension/src/i18n/sv.po b/packages/taler-wallet-webextension/src/i18n/sv.po
index cced25f91..32427d2e4 100644
--- a/packages/taler-wallet-webextension/src/i18n/sv.po
+++ b/packages/taler-wallet-webextension/src/i18n/sv.po
@@ -112,7 +112,7 @@ msgstr ""
 msgid "Deposit %1$s"
 msgstr "Depostitions avgift"
 
-#: src/popup/BalancePage.tsx:118
+#: src/popup/BalancePage.tsx:120
 #, c-format
 msgid "Enter URI"
 msgstr ""
@@ -253,6 +253,11 @@ msgstr ""
 msgid "This page has a notify reserve action."
 msgstr ""
 
+#: src/popup/TalerActionFound.tsx:114
+#, c-format
+msgid "Notify"
+msgstr ""
+
 #: src/popup/TalerActionFound.tsx:121
 #, c-format
 msgid "This page has a refund action."
@@ -600,7 +605,7 @@ msgstr ""
 msgid "Backup valid until"
 msgstr ""
 
-#: src/popupEntryPoint.tsx:184
+#: src/popupEntryPoint.tsx:187
 #, c-format
 msgid "this popup is being closed and you are being redirected to %1$s"
 msgstr ""
@@ -778,64 +783,74 @@ msgstr ""
 msgid "Cancel withdrawal"
 msgstr ""
 
-#: src/wallet/Settings.tsx:84
+#: src/wallet/Settings.tsx:89
 #, c-format
-msgid "Permissions"
+msgid "Display"
+msgstr ""
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
+msgstr ""
+
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
 msgstr ""
 
-#: src/wallet/Settings.tsx:87
+#: src/wallet/Settings.tsx:105
 #, c-format
 msgid "Automatically open wallet based on page content"
 msgstr ""
 
-#: src/wallet/Settings.tsx:93
+#: src/wallet/Settings.tsx:111
 #, c-format
 msgid ""
 "Enabling this option below will make using the wallet faster, but requires "
 "more permissions from your browser."
 msgstr ""
 
-#: src/wallet/Settings.tsx:104
+#: src/wallet/Settings.tsx:122
 #, c-format
-msgid "Known exchanges"
+msgid "Trust"
 msgstr ""
 
-#: src/wallet/Settings.tsx:108
+#: src/wallet/Settings.tsx:126
 #, c-format
 msgid "No exchange yet"
 msgstr ""
 
-#: src/wallet/Settings.tsx:122
+#: src/wallet/Settings.tsx:140
 #, c-format
 msgid "Term of Service"
 msgstr ""
 
-#: src/wallet/Settings.tsx:138
+#: src/wallet/Settings.tsx:156
 #, c-format
 msgid "ok"
 msgstr ""
 
-#: src/wallet/Settings.tsx:144
+#: src/wallet/Settings.tsx:162
 #, c-format
 msgid "changed"
 msgstr ""
 
-#: src/wallet/Settings.tsx:151
+#: src/wallet/Settings.tsx:169
 #, c-format
 msgid "not accepted"
 msgstr ""
 
-#: src/wallet/Settings.tsx:175
+#: src/wallet/Settings.tsx:193
 #, fuzzy, c-format
 msgid "Add an exchange"
 msgstr "Accepterade tjänsteleverantörer:"
 
-#: src/wallet/Settings.tsx:181
+#: src/wallet/Settings.tsx:199
 #, c-format
 msgid "Developer mode"
 msgstr ""
 
-#: src/wallet/Settings.tsx:183
+#: src/wallet/Settings.tsx:201
 #, c-format
 msgid "(More options and information useful for debugging)"
 msgstr ""
@@ -1007,6 +1022,11 @@ msgstr ""
 msgid "Thank you for installing the wallet."
 msgstr ""
 
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr ""
+
 #: src/wallet/Welcome.tsx:75
 #, c-format
 msgid ""
@@ -1219,6 +1239,11 @@ msgstr ""
 msgid "Total to withdraw"
 msgstr ""
 
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr ""
+
 #: src/cta/Withdraw.tsx:187
 #, c-format
 msgid "Cancel exchange selection"
@@ -1264,7 +1289,7 @@ msgstr ""
 msgid "Could not load the list of known exchanges"
 msgstr ""
 
-#: src/walletEntryPoint.tsx:171
+#: src/walletEntryPoint.tsx:172
 #, c-format
 msgid "All done, your transaction is in progress"
 msgstr ""
diff --git a/packages/taler-wallet-webextension/src/i18n/taler-wallet-webex.pot b/packages/taler-wallet-webextension/src/i18n/taler-wallet-webex.pot
index 6a5bcd552..46d6584cb 100644
--- a/packages/taler-wallet-webextension/src/i18n/taler-wallet-webex.pot
+++ b/packages/taler-wallet-webextension/src/i18n/taler-wallet-webex.pot
@@ -99,7 +99,7 @@ msgstr ""
 msgid "Deposit %1$s"
 msgstr ""
 
-#: src/popup/BalancePage.tsx:118
+#: src/popup/BalancePage.tsx:120
 #, c-format
 msgid "Enter URI"
 msgstr ""
@@ -240,6 +240,11 @@ msgstr ""
 msgid "This page has a notify reserve action."
 msgstr ""
 
+#: src/popup/TalerActionFound.tsx:114
+#, c-format
+msgid "Notify"
+msgstr ""
+
 #: src/popup/TalerActionFound.tsx:121
 #, c-format
 msgid "This page has a refund action."
@@ -587,7 +592,7 @@ msgstr ""
 msgid "Backup valid until"
 msgstr ""
 
-#: src/popupEntryPoint.tsx:184
+#: src/popupEntryPoint.tsx:187
 #, c-format
 msgid "this popup is being closed and you are being redirected to %1$s"
 msgstr ""
@@ -764,64 +769,74 @@ msgstr ""
 msgid "Cancel withdrawal"
 msgstr ""
 
-#: src/wallet/Settings.tsx:84
+#: src/wallet/Settings.tsx:89
 #, c-format
-msgid "Permissions"
+msgid "Display"
+msgstr ""
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
+msgstr ""
+
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
 msgstr ""
 
-#: src/wallet/Settings.tsx:87
+#: src/wallet/Settings.tsx:105
 #, c-format
 msgid "Automatically open wallet based on page content"
 msgstr ""
 
-#: src/wallet/Settings.tsx:93
+#: src/wallet/Settings.tsx:111
 #, c-format
 msgid ""
 "Enabling this option below will make using the wallet faster, but requires more "
 "permissions from your browser."
 msgstr ""
 
-#: src/wallet/Settings.tsx:104
+#: src/wallet/Settings.tsx:122
 #, c-format
-msgid "Known exchanges"
+msgid "Trust"
 msgstr ""
 
-#: src/wallet/Settings.tsx:108
+#: src/wallet/Settings.tsx:126
 #, c-format
 msgid "No exchange yet"
 msgstr ""
 
-#: src/wallet/Settings.tsx:122
+#: src/wallet/Settings.tsx:140
 #, c-format
 msgid "Term of Service"
 msgstr ""
 
-#: src/wallet/Settings.tsx:138
+#: src/wallet/Settings.tsx:156
 #, c-format
 msgid "ok"
 msgstr ""
 
-#: src/wallet/Settings.tsx:144
+#: src/wallet/Settings.tsx:162
 #, c-format
 msgid "changed"
 msgstr ""
 
-#: src/wallet/Settings.tsx:151
+#: src/wallet/Settings.tsx:169
 #, c-format
 msgid "not accepted"
 msgstr ""
 
-#: src/wallet/Settings.tsx:175
+#: src/wallet/Settings.tsx:193
 #, c-format
 msgid "Add an exchange"
 msgstr ""
 
-#: src/wallet/Settings.tsx:181
+#: src/wallet/Settings.tsx:199
 #, c-format
 msgid "Developer mode"
 msgstr ""
 
-#: src/wallet/Settings.tsx:183
+#: src/wallet/Settings.tsx:201
 #, c-format
 msgid "(More options and information useful for debugging)"
 msgstr ""
@@ -993,6 +1008,11 @@ msgstr ""
 msgid "Thank you for installing the wallet."
 msgstr ""
 
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr ""
+
 #: src/wallet/Welcome.tsx:75
 #, c-format
 msgid ""
@@ -1205,6 +1225,11 @@ msgstr ""
 msgid "Total to withdraw"
 msgstr ""
 
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr ""
+
 #: src/cta/Withdraw.tsx:187
 #, c-format
 msgid "Cancel exchange selection"
@@ -1250,7 +1275,7 @@ msgstr ""
 msgid "Could not load the list of known exchanges"
 msgstr ""
 
-#: src/walletEntryPoint.tsx:171
+#: src/walletEntryPoint.tsx:172
 #, c-format
 msgid "All done, your transaction is in progress"
 msgstr ""
diff --git a/packages/taler-wallet-webextension/src/i18n/tr.po b/packages/taler-wallet-webextension/src/i18n/tr.po
index 9b887bde1..4ae9ef83d 100644
--- a/packages/taler-wallet-webextension/src/i18n/tr.po
+++ b/packages/taler-wallet-webextension/src/i18n/tr.po
@@ -123,64 +123,74 @@ msgstr ""
 msgid "Cancel withdrawal"
 msgstr ""
 
-#: src/wallet/Settings.tsx:84
+#: src/wallet/Settings.tsx:89
 #, c-format
-msgid "Permissions"
+msgid "Display"
+msgstr ""
+
+#: src/wallet/Settings.tsx:93
+#, c-format
+msgid "Current Language"
 msgstr ""
 
-#: src/wallet/Settings.tsx:87
+#: src/wallet/Settings.tsx:102
+#, c-format
+msgid "Navigator"
+msgstr ""
+
+#: src/wallet/Settings.tsx:105
 #, c-format
 msgid "Automatically open wallet based on page content"
 msgstr ""
 
-#: src/wallet/Settings.tsx:93
+#: src/wallet/Settings.tsx:111
 #, c-format
 msgid ""
 "Enabling this option below will make using the wallet faster, but requires "
 "more permissions from your browser."
 msgstr ""
 
-#: src/wallet/Settings.tsx:104
+#: src/wallet/Settings.tsx:122
 #, c-format
-msgid "Known exchanges"
+msgid "Trust"
 msgstr ""
 
-#: src/wallet/Settings.tsx:108
+#: src/wallet/Settings.tsx:126
 #, c-format
 msgid "No exchange yet"
 msgstr ""
 
-#: src/wallet/Settings.tsx:122
+#: src/wallet/Settings.tsx:140
 #, c-format
 msgid "Term of Service"
 msgstr ""
 
-#: src/wallet/Settings.tsx:138
+#: src/wallet/Settings.tsx:156
 #, c-format
 msgid "ok"
 msgstr ""
 
-#: src/wallet/Settings.tsx:144
+#: src/wallet/Settings.tsx:162
 #, c-format
 msgid "changed"
 msgstr ""
 
-#: src/wallet/Settings.tsx:151
+#: src/wallet/Settings.tsx:169
 #, c-format
 msgid "not accepted"
 msgstr ""
 
-#: src/wallet/Settings.tsx:175
+#: src/wallet/Settings.tsx:193
 #, c-format
 msgid "Add an exchange"
 msgstr ""
 
-#: src/wallet/Settings.tsx:181
+#: src/wallet/Settings.tsx:199
 #, c-format
 msgid "Developer mode"
 msgstr ""
 
-#: src/wallet/Settings.tsx:183
+#: src/wallet/Settings.tsx:201
 #, c-format
 msgid "(More options and information useful for debugging)"
 msgstr ""
@@ -352,6 +362,11 @@ msgstr ""
 msgid "Thank you for installing the wallet."
 msgstr ""
 
+#: src/wallet/Welcome.tsx:66
+#, c-format
+msgid "Permissions"
+msgstr ""
+
 #: src/wallet/Welcome.tsx:75
 #, c-format
 msgid ""
@@ -564,6 +579,11 @@ msgstr ""
 msgid "Total to withdraw"
 msgstr ""
 
+#: src/cta/Withdraw.tsx:171
+#, c-format
+msgid "Known exchanges"
+msgstr ""
+
 #: src/cta/Withdraw.tsx:187
 #, c-format
 msgid "Cancel exchange selection"
@@ -609,7 +629,7 @@ msgstr ""
 msgid "Could not load the list of known exchanges"
 msgstr ""
 
-#: src/walletEntryPoint.tsx:171
+#: src/walletEntryPoint.tsx:172
 #, c-format
 msgid "All done, your transaction is in progress"
 msgstr ""
diff --git a/packages/taler-wallet-webextension/src/popup/BalancePage.tsx b/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
index 46fe027c9..d7bfdf545 100644
--- a/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
+++ b/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
@@ -108,7 +108,9 @@ export function BalanceView({
         </ButtonPrimary>
         {currencyWithNonZeroAmount.length > 0 && (
           <MultiActionButton
-            label={(s) => <i18n.Translate>Deposit {s}</i18n.Translate>}
+            label={(s) => (
+              <i18n.Translate debug>Deposit {<span>{s}</span>}</i18n.Translate>
+            )}
             actions={currencyWithNonZeroAmount}
             onClick={(c) => goToWalletDeposit(c)}
           />
diff --git a/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx b/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
index 6410ae40e..40b76a289 100644
--- a/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
+++ b/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
@@ -111,7 +111,7 @@ export function TalerActionFound({ url, onDismiss }: Props) {
                 navigateTo(actionForTalerUri(uriType, url));
               }}
             >
-              Notify
+              <i18n.Translate>Notify</i18n.Translate>
             </ButtonSuccess>
           </div>
         )}
diff --git a/packages/taler-wallet-webextension/src/popupEntryPoint.tsx b/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
index e37ea9ccb..02ab0df2c 100644
--- a/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
+++ b/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
@@ -29,6 +29,7 @@ import { useEffect } from "preact/hooks";
 import { PopupBox } from "./components/styled";
 import { DevContextProvider } from "./context/devContext";
 import { IoCProviderForRuntime } from "./context/iocContext";
+import { TranslationProvider } from "./context/translation";
 import { useTalerActionURL } from "./hooks/useTalerActionURL";
 import { strings } from "./i18n/strings";
 import { Pages, PopupNavBar } from "./NavigationBar";
@@ -77,92 +78,94 @@ function CheckTalerActionComponent(): VNode {
 function Application(): VNode {
   const hash_history = createHashHistory();
   return (
-    // <div>
-    <DevContextProvider>
-      {({ devMode }: { devMode: boolean }) => (
-        <IoCProviderForRuntime>
-          <Match>
-            {({ path }: { path: string }) => <PopupNavBar path={path} />}
-          </Match>
-          <CheckTalerActionComponent />
-          <PopupBox devMode={devMode}>
-            <Router history={hash_history}>
-              <Route
-                path={Pages.balance}
-                component={BalancePage}
-                goToWalletManualWithdraw={() =>
-                  route(Pages.balance_manual_withdraw.replace(":currency?", ""))
-                }
-                goToWalletDeposit={(currency: string) =>
-                  route(Pages.balance_deposit.replace(":currency", currency))
-                }
-                goToWalletHistory={(currency: string) =>
-                  route(Pages.balance_history.replace(":currency", currency))
-                }
-              />
-
-              <Route
-                path={Pages.cta}
-                component={function Action({ action }: { action: string }) {
-                  const [, setDismissed] = useTalerActionURL();
-
-                  return (
-                    <TalerActionFound
-                      url={decodeURIComponent(action)}
-                      onDismiss={() => {
-                        setDismissed(true);
-                        route(Pages.balance);
-                      }}
-                    />
-                  );
-                }}
-              />
-
-              <Route
-                path={Pages.backup}
-                component={BackupPage}
-                onAddProvider={() => {
-                  route(Pages.backup_provider_add);
-                }}
-              />
-              <Route
-                path={Pages.backup_provider_detail}
-                component={ProviderDetailPage}
-                onBack={() => {
-                  route(Pages.backup);
-                }}
-              />
-
-              <Route
-                path={Pages.balance_manual_withdraw}
-                component={RedirectToWalletPage}
-              />
-              <Route
-                path={Pages.balance_deposit}
-                component={RedirectToWalletPage}
-              />
-              <Route
-                path={Pages.balance_history}
-                component={RedirectToWalletPage}
-              />
-              <Route
-                path={Pages.backup_provider_add}
-                component={RedirectToWalletPage}
-              />
-              <Route path={Pages.settings} component={RedirectToWalletPage} />
-              <Route
-                path={Pages.settings_exchange_add}
-                component={RedirectToWalletPage}
-              />
-              <Route path={Pages.dev} component={RedirectToWalletPage} />
-
-              <Route default component={Redirect} to={Pages.balance} />
-            </Router>
-          </PopupBox>
-        </IoCProviderForRuntime>
-      )}
-    </DevContextProvider>
-    // </div>
+    <TranslationProvider>
+      <DevContextProvider>
+        {({ devMode }: { devMode: boolean }) => (
+          <IoCProviderForRuntime>
+            <Match>
+              {({ path }: { path: string }) => <PopupNavBar path={path} />}
+            </Match>
+            <CheckTalerActionComponent />
+            <PopupBox devMode={devMode}>
+              <Router history={hash_history}>
+                <Route
+                  path={Pages.balance}
+                  component={BalancePage}
+                  goToWalletManualWithdraw={() =>
+                    route(
+                      Pages.balance_manual_withdraw.replace(":currency?", ""),
+                    )
+                  }
+                  goToWalletDeposit={(currency: string) =>
+                    route(Pages.balance_deposit.replace(":currency", currency))
+                  }
+                  goToWalletHistory={(currency: string) =>
+                    route(Pages.balance_history.replace(":currency", currency))
+                  }
+                />
+
+                <Route
+                  path={Pages.cta}
+                  component={function Action({ action }: { action: string }) {
+                    const [, setDismissed] = useTalerActionURL();
+
+                    return (
+                      <TalerActionFound
+                        url={decodeURIComponent(action)}
+                        onDismiss={() => {
+                          setDismissed(true);
+                          route(Pages.balance);
+                        }}
+                      />
+                    );
+                  }}
+                />
+
+                <Route
+                  path={Pages.backup}
+                  component={BackupPage}
+                  onAddProvider={() => {
+                    route(Pages.backup_provider_add);
+                  }}
+                />
+                <Route
+                  path={Pages.backup_provider_detail}
+                  component={ProviderDetailPage}
+                  onBack={() => {
+                    route(Pages.backup);
+                  }}
+                />
+
+                <Route
+                  path={Pages.balance_manual_withdraw}
+                  component={RedirectToWalletPage}
+                />
+                <Route
+                  path={Pages.balance_deposit}
+                  component={RedirectToWalletPage}
+                />
+                <Route
+                  path={Pages.balance_history}
+                  component={RedirectToWalletPage}
+                />
+                <Route
+                  path={Pages.backup_provider_add}
+                  component={RedirectToWalletPage}
+                />
+                <Route path={Pages.settings} component={RedirectToWalletPage} />
+                <Route
+                  path={Pages.settings_exchange_add}
+                  component={RedirectToWalletPage}
+                />
+                <Route path={Pages.dev} component={RedirectToWalletPage} />
+
+                <Route default component={Redirect} to={Pages.balance} />
+              </Router>
+            </PopupBox>
+          </IoCProviderForRuntime>
+        )}
+      </DevContextProvider>
+    </TranslationProvider>
   );
 }
 
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.tsx b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
index 3bb3fa865..8456ca550 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
@@ -17,13 +17,16 @@
 import { ExchangeListItem, i18n, Translate } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { Checkbox } from "../components/Checkbox";
+import { SelectList } from "../components/SelectList";
 import {
   DestructiveText,
+  Input,
   LinkPrimary,
   SuccessText,
   WarningText,
 } from "../components/styled";
 import { useDevContext } from "../context/devContext";
+import { useTranslationContext } from "../context/translation";
 import { useAsyncAsHook } from "../hooks/useAsyncAsHook";
 import { useBackupDeviceName } from "../hooks/useBackupDeviceName";
 import { useExtendedPermissions } from "../hooks/useExtendedPermissions";
@@ -36,13 +39,13 @@ export function SettingsPage(): VNode {
   const [permissionsEnabled, togglePermissions] = useExtendedPermissions();
   const { devMode, toggleDevMode } = useDevContext();
   const { name, update } = useBackupDeviceName();
-  const [lang, changeLang] = useLang();
+  // const [lang, changeLang] = useLang();
   const exchangesHook = useAsyncAsHook(wxApi.listExchanges);
 
   return (
     <SettingsView
-      lang={lang}
-      changeLang={changeLang}
+      // lang={lang}
+      // changeLang={changeLang}
       knownExchanges={
         !exchangesHook || exchangesHook.hasError
           ? []
@@ -59,8 +62,8 @@ export function SettingsPage(): VNode {
 }
 
 export interface ViewProps {
-  lang: string;
-  changeLang: (s: string) => void;
+  // lang: string;
+  // changeLang: (s: string) => void;
   deviceName: string;
   setDeviceName: (s: string) => Promise<void>;
   permissionsEnabled: boolean;
@@ -77,11 +80,26 @@ export function SettingsView({
   developerMode,
   toggleDeveloperMode,
 }: ViewProps): VNode {
+  const { lang, supportedLang, changeLanguage } = useTranslationContext();
+
   return (
     <Fragment>
       <section>
         <h2>
-          <i18n.Translate>Permissions</i18n.Translate>
+          <i18n.Translate>Display</i18n.Translate>
+        </h2>
+        <Input>
+          <SelectList
+            label={<i18n.Translate>Current Language</i18n.Translate>}
+            list={supportedLang}
+            name="lang"
+            value={lang}
+            onChange={(v) => changeLanguage(v)}
+          />
+        </Input>
+
+        <h2>
+          <i18n.Translate>Navigator</i18n.Translate>
         </h2>
         <Checkbox
           label={
@@ -101,7 +119,7 @@ export function SettingsView({
         />
 
         <h2>
-          <i18n.Translate>Known exchanges</i18n.Translate>
+          <i18n.Translate>Trust</i18n.Translate>
         </h2>
         {!knownExchanges || !knownExchanges.length ? (
           <div>
@@ -176,7 +194,7 @@ export function SettingsView({
           </LinkPrimary>
         </div>
 
-        <h2>Config</h2>
+        <h2>Troubleshooting</h2>
         <Checkbox
           label={<i18n.Translate>Developer mode</i18n.Translate>}
           name="devMode"
diff --git a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
index 9d8d92863..f2240cdf1 100644
--- a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
+++ b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
@@ -35,6 +35,7 @@ import {
 } from "./components/styled";
 import { DevContextProvider } from "./context/devContext";
 import { IoCProviderForRuntime } from "./context/iocContext";
+import { TranslationProvider } from "./context/translation";
 import { PayPage } from "./cta/Pay";
 import { RefundPage } from "./cta/Refund";
 import { TipPage } from "./cta/Tip";
@@ -93,7 +94,7 @@ function Application(): VNode {
     }
   }
   return (
-    <div>
+    <TranslationProvider>
       <DevContextProvider>
         {({ devMode }: { devMode: boolean }) => (
           <IoCProviderForRuntime>
@@ -262,7 +263,7 @@ function Application(): VNode {
           </IoCProviderForRuntime>
         )}
       </DevContextProvider>
-    </div>
+    </TranslationProvider>
   );
 }
 
-- 
cgit v1.2.3

