From 44e0fcda6074c92b0c6b05d8668dadf60e99a90a Mon Sep 17 00:00:00 2001
From: Dominik Hebeler <dominik@hebeler.club>
Date: Thu, 13 Apr 2023 12:10:13 +0200
Subject: [PATCH] more if not all translations

---
 pass/lang/de/checkout.json     |  9 +++++++-
 pass/lang/de/cost.json         |  4 ++--
 pass/lang/de/key.json          | 19 ++++++++++++++++-
 pass/lang/de/order.json        | 22 +++++++++++++++++++
 pass/views/checkout/charge.ejs |  6 +++---
 pass/views/checkout/paypal.ejs | 22 +++++++++----------
 pass/views/key.ejs             | 37 ++++++++++++++------------------
 pass/views/orders/refund.ejs   | 39 +++++++++-------------------------
 8 files changed, 90 insertions(+), 68 deletions(-)

diff --git a/pass/lang/de/checkout.json b/pass/lang/de/checkout.json
index 0b48a54..0e309fc 100644
--- a/pass/lang/de/checkout.json
+++ b/pass/lang/de/checkout.json
@@ -41,6 +41,13 @@
       "expired-card": "Diese Karte ist abgelaufen",
       "rejected": "Ihre Zahlung wurde von der Bank abgelehnt.",
       "3D": "3D Authentifizierung fehlgeschlagen"
-    }
+    },
+    "card": {
+      "number": "Kartennummer",
+      "expiration": "Gültig bis",
+      "cvv": "CVV"
+    },
+    "submit": "Zahlung durchführen",
+    "loading": "Zahlungsmethode wird geladen"
   }
 }
\ No newline at end of file
diff --git a/pass/lang/de/cost.json b/pass/lang/de/cost.json
index dd9e062..ec9431d 100644
--- a/pass/lang/de/cost.json
+++ b/pass/lang/de/cost.json
@@ -8,8 +8,8 @@
         "Ihren Schlüssel können Sie jederzeit mit einem der folgenden Pakete aufladen.",
         "Die angegebenen Zeiträume sind Schätzungen, die auf unseren Erfahrungswerten basieren und sollen einen Anhaltspunkt geben, wie viele Token benötigt werden."
     ],
-    "months_one": "Monat",
-    "months_other": "Monate",
+    "months_one": "{{count}} Monat",
+    "months_other": "{{count}} Monate",
     "short-info": [
         {
             "heading": "Gekaufte Suchen bleiben 1 Jahr lang gültig",
diff --git a/pass/lang/de/key.json b/pass/lang/de/key.json
index 919c133..84ea88d 100644
--- a/pass/lang/de/key.json
+++ b/pass/lang/de/key.json
@@ -1,5 +1,22 @@
 {
   "charge": {
     "full": "Ihr Schlüssel ist bereits voll aufgeladen. Sie können eine weitere Aufladung vornehmen sobald einige Suchen verbraucht wurden."
+  },
+  "key": {
+    "copy-url": "URL kopieren",
+    "share": {
+      "title": "MetaGer Schlüssel",
+      "share": "Teilen"
+    },
+    "store": "In Datei sichern",
+    "tokens": "Tokens",
+    "fill": "Auffüllen",
+    "orders": "Bestellungen",
+    "valid_until": "gültig bis",
+    "new": {
+      "heading": "So gehts weiter",
+      "text": "Ihr MetaGer Schlüssel wurde erstellt und eingerichtet. Er muss lediglich noch aufgeladen werden. Bitte stellen Sie vorher sicher, dass Sie sich den Schlüssel so abgespeichert haben, dass Sie ihn eingeben können, falls die Einstellung in Ihrem Browser gelöscht wird. Dafür benötigen Sie entweder den Schlüssel selbst, obige URL oder den QR-Code als Datei.",
+      "charge": "Schlüssel jetzt aufladen"
+    }
   }
-}
+}
\ No newline at end of file
diff --git a/pass/lang/de/order.json b/pass/lang/de/order.json
index f6ac7dd..b439939 100644
--- a/pass/lang/de/order.json
+++ b/pass/lang/de/order.json
@@ -77,5 +77,27 @@
       "Unternehmer sind von der 30-Tage-Geld-zurück-Garantie ausgeschlossen.",
       "Das gesetzliche Widerrufsrecht wird durch die freiwillige Verlängerung auf 30 Tage nicht eingeschränkt."
     ]
+  },
+  "refund": {
+    "breadcrumps": {
+      "orders": "Bestellungen",
+      "refund": "Erstattung"
+    },
+    "success": "Ihre Anfrage wurde uns erfolgreich zugestellt. Wir bearbeiten diese so schnell wie möglich. Je nach Zahlungsmethode kann es einige Tage dauern, bis eine Erstattung in Ihren Umsätzen sichtbar wird.",
+    "errors": {
+      "already_refunded": "Für diese Bestellung wurde bereits eine Erstattung angefragt.",
+      "generic": "Fehler beim Senden Ihrer Nachricht. Bitte versuchen Sie es später erneut."
+    },
+    "headings": [
+      "Ihre Erstattung"
+    ],
+    "texts": [
+      "Sind Sie unzufrieden mit Ihrem Schlüssel? Das bedauern wir sehr! Selbstverständlich erstatten wir Ihnen in diesem Fall den Rechnungsbetrag. Eine Erstatung erfolgt stets auf das gleiche Konto, welches bei der ursprünglichen Zahlung verwendet wurde. Gerne nehmen wir auch Ihre Kritik entgegen.",
+      "Hinweis: Ein Teil Ihres gekauften Guthabens wurde bereits verbraucht. Wir können Ihnen deshalb lediglich <span class=\"bold\">{{count}}/{{payment_count}}</span> Suchanfragen erstatten."
+    ],
+    "message": {
+      "placeholder": "Ihre Nachricht (optional)"
+    },
+    "submit": "Erstattung anfragen"
   }
 }
\ No newline at end of file
diff --git a/pass/views/checkout/charge.ejs b/pass/views/checkout/charge.ejs
index d156101..6fa7b8b 100644
--- a/pass/views/checkout/charge.ejs
+++ b/pass/views/checkout/charge.ejs
@@ -3,7 +3,7 @@
   <div class="checkout-amounts">
     <a href="<%= change_url.amount %>" class="checkout-amount" title="Menge ändern">
       <span class="checkout-amount"><%= checkout.amount %></span>
-      <span class="checkout-cost"><%= (checkout.amount * price.per_token).toFixed(2) %>€</span>
+      <span class="checkout-cost"><%= (checkout.amount * price.per_token).toFixed(0) %>€</span>
       <span class="checkout-duration"><%= req.t("charge.includes-vat", {ns: "checkout"}) _%></span>
     </a>
   </div>
@@ -35,8 +35,8 @@
     <%_ for(let i = 0; i < price.purchasable.length; i++) { _%>
     <a href="<%= baseDir _%>/key/<%= key.key.get_key() %>/checkout/<%= price.purchasable[i] _%>#payment" class="checkout-amount">
       <span class="checkout-amount"><%= price.purchasable[i] _%></span>
-      <span class="checkout-cost"><%= (price.purchasable[i] * price.per_token).toFixed(2) _%>€</span>
-      <span class="checkout-duration">> <%= req.t("charge.month", {ns: "checkout", count: price.purchasable[i] / 300}) _%>*</span>
+      <span class="checkout-cost"><%= (price.purchasable[i] * price.per_token).toFixed(0) _%>€</span>
+      <span class="checkout-duration">> <%= req.t("charge.month", {ns: "checkout", count: Math.floor(price.purchasable[i] / 900)}) %> *</span>
     </a>
     <%_ } _%>
   </div>
diff --git a/pass/views/checkout/paypal.ejs b/pass/views/checkout/paypal.ejs
index 7b3839c..0be076a 100644
--- a/pass/views/checkout/paypal.ejs
+++ b/pass/views/checkout/paypal.ejs
@@ -1,5 +1,5 @@
 <div id="paypal-checkout">
-  <h2><%= req.t("checkout.paypal.heading", {ns: "checkout"}) _%></h2>
+  <h2><%= req.t("paypal.heading", {ns: "checkout"}) _%></h2>
   <input type="hidden" name="funding-source-not-eligible-url" value="<%= change_url.funding_source_not_eligible %>">
   <input type="hidden" name="paypal-order-base-url" value="<%= change_url.order_base_url %>">
   <input type="hidden" name="paypal-client-id" value="<%= checkout.payment.paypal.client_id %>">
@@ -11,23 +11,23 @@
   <%_ if(checkout.payment.paypal.funding_source === "card") { _%>
   <div id="paypal-payment-card" class="hidden">
     <div id="paypal-card-errors">
-      <p id="paypal-card-errors-generic" class="error hidden"><%= req.t("checkout.paypal.errors.failed", {ns: "checkout"}) _%></p>
-      <p id="paypal-card-errors-invalid-card" class="error hidden"><%= req.t("checkout.paypal.errors.invalid-card", {ns: "checkout"}) _%></p>
-      <p id="paypal-card-errors-expired" class="error hidden"><%= req.t("checkout.paypal.errors.expired-card", {ns: "checkout"}) _%></p>
-      <p id="paypal-card-errors-rejected" class="error hidden"><%= req.t("checkout.paypal.errors.rejected", {ns: "checkout"}) _%></p>
-      <p id="paypal-card-errors-3d" class="error hidden"><%= req.t("checkout.paypal.errors.3d", {ns: "checkout"}) _%></p>
+      <p id="paypal-card-errors-generic" class="error hidden"><%= req.t("paypal.errors.failed", {ns: "checkout"}) _%></p>
+      <p id="paypal-card-errors-invalid-card" class="error hidden"><%= req.t("paypal.errors.invalid-card", {ns: "checkout"}) _%></p>
+      <p id="paypal-card-errors-expired" class="error hidden"><%= req.t("paypal.errors.expired-card", {ns: "checkout"}) _%></p>
+      <p id="paypal-card-errors-rejected" class="error hidden"><%= req.t("paypal.errors.rejected", {ns: "checkout"}) _%></p>
+      <p id="paypal-card-errors-3d" class="error hidden"><%= req.t("paypal.errors.3d", {ns: "checkout"}) _%></p>
     </div>
     <form id="paypal-card-form">
       <div>
-        <label for="card-number">Kartennummer</label>
+        <label for="card-number"><%= req.t("paypal.card.number", {ns: "checkout"}) _%></label>
         <div id="card-number" class="card_field"></div>
       </div>
       <div>
-        <label for="expiration-date">Gültig bis</label>
+        <label for="expiration-date"><%= req.t("paypal.card.number", {ns: "checkout"}) _%></label>
         <div id="expiration-date" class="card_field"></div>
       </div>
       <div>
-        <label for="cvv">CVV</label>
+        <label for="cvv"><%= req.t("paypal.card.cvv", {ns: "checkout"}) _%></label>
         <div id="cvv" class="card_field"></div>
       </div>
       <%_ if(process.env.NODE_ENV === "development") { _%>
@@ -37,7 +37,7 @@
       </div>
       <%_ } _%>
       <%- include("../templates/revocation") -%>
-      <button type="submit" id="submit-credit-card" class="button"><img src="<%= baseDir _%>/images/loader.gif" alt="Loading symbol"> <span>Jetzt bezahlen</span></button>
+      <button type="submit" id="submit-credit-card" class="button"><img src="<%= baseDir _%>/images/loader.gif" alt="Loading symbol"> <span><%= req.t("paypal.submit", {ns: "checkout"}) _%></span></button>
     </form>
   </div>
   <%_ }else { _%>
@@ -50,6 +50,6 @@
   <%_ } _%>
   <div id="loading_paypal_funding_source">
     <img src="<%= baseDir _%>/images/loader.gif" alt="Loading Icon">
-    <div>Zahlungsmethode wird geladen</div>
+    <div><%= req.t("paypal.loading", {ns: "checkout"}) _%></div>
   </div>
 </div>
\ No newline at end of file
diff --git a/pass/views/key.ejs b/pass/views/key.ejs
index 40206fc..ffb44a7 100644
--- a/pass/views/key.ejs
+++ b/pass/views/key.ejs
@@ -6,35 +6,30 @@
 <input id="setting-url" type="text" readonly value="<%= key.settings_url %>" />
 <div id="buttons">
   <button class="copy button" data-target="setting-url"><img src="<%= baseDir _%>/images/copy.svg" />
-    <div>URL kopieren</div>
+    <div><%= req.t("key.copy-url", {ns: "key"}) _%></div>
   </button>
-  <button class="share button" data-share_title="MetaGer Schlüssel" data-share_url_target="setting-url"><img src="<%= baseDir _%>/images/share.svg" />
-    <div>Teilen</div>
+  <button class="share button" data-share_title="<%= req.t("key.share.title", {ns: "key"}) _%>" data-share_url_target="setting-url"><img src="<%= baseDir _%>/images/share.svg" />
+    <div><%= req.t("key.share.share", {ns: "key"}) _%></div>
   </button>
   <a class="download button" href="<%= key.qr %>" target="_blank" download="metager_key.png"><img src="<%= baseDir _%>/images/download.svg" />
-    <div>In Datei sichern</div>
+    <div><%= req.t("key.store", {ns: "key"}) _%></div>
   </a>
 </div>
 
 <div id="amount">
-  <h2>Token</h2>
+  <h2><%= req.t("key.tokens", {ns: "key"}) _%></h2>
   <div class="amount"><%= key.key.get_charge() %></div>
-  <div>bis <span><%= key.key.get_expiration_date().format("DD.MM.YYYY") %></span></div>
+  <div><%= req.t("key.valid_until", {ns: "key"}) %> <span><%= key.key.get_expiration_date().format("DD.MM.YYYY") %></span></div>
 </div>
 <nav id="second-nav">
-  <a class="button <% if(page === "fill") { _%> active<%_ } _%>" href="<%= links.fill_url %>">Auffüllen</a>
-  <a class="button <% if(page === "order") { _%> active<%_ } %>" href="<%= links.orders_url %>">Bestellungen</a>
+  <a class="button <% if(page === "fill") { _%> active<%_ } _%>" href="<%= links.fill_url %>"><%= req.t("key.fill", {ns: "key"}) _%></a>
+  <a class="button <% if(page === "order") { _%> active<%_ } %>" href="<%= links.orders_url %>"><%= req.t("key.orders", {ns: "key"}) _%></a>
 </nav>
 <%_ if (created_new) { _%>
 <div id="store">
-  <h2>So gehts weiter:</h2>
-  <p>
-    Ihr MetaGer Schlüssel wurde erstellt und eingerichtet. Er muss lediglich noch aufgeladen werden.
-    Bitte stellen Sie vorher sicher, dass Sie sich den Schlüssel so abgespeichert haben, dass Sie ihn
-    eingeben können, falls die Einstellung in Ihrem Browser gelöscht wird. Dafür benötigen Sie entweder
-    den Schlüssel selbst, obige URL oder den QR-Code als Datei.
-  </p>
-  <a class="button" href="<%= baseDir _%>/key/<%= key.key.get_key() %>">Schlüssel jetzt aufladen</a>
+  <h2><%= req.t("key.new.heading", {ns: "key"}) %>:</h2>
+  <p><%= req.t("key.new.text", {ns: "key"}) %></p>
+  <a class="button" href="<%= baseDir _%>/key/<%= key.key.get_key() %>"><%= req.t("key.new.charge", {ns: "key"}) %></a>
 </div>
 <% } else if (page === "order") { %>
 <%_ if(typeof order === "undefined") { _%>
@@ -44,11 +39,11 @@
 <%_ } _%>
 <%_ } else { _%>
 <div id="charge">
-<%_ if( key.key.get_charge_orders().length < 3) { _%>
-<%- include('./checkout/charge') -%>
-<%_ } else { _%>
-<p class="warning"><%= req.t("charge.full", {ns: "key"}) _%></p>
-<%_ } _%>
+  <%_ if( key.key.get_charge_orders().length < 3) { _%>
+  <%- include('./checkout/charge') -%>
+  <%_ } else { _%>
+  <p class="warning"><%= req.t("charge.full", {ns: "key"}) _%></p>
+  <%_ } _%>
 </div>
 <%_ } _%>
 <%- include('templates/page_footer'); -%>
\ No newline at end of file
diff --git a/pass/views/orders/refund.ejs b/pass/views/orders/refund.ejs
index e4fd610..ed43024 100644
--- a/pass/views/orders/refund.ejs
+++ b/pass/views/orders/refund.ejs
@@ -1,52 +1,33 @@
 <div id="refund">
   <h2>Erstattung</h2>
   <ul class="breadcrumbs">
-    <li><a href="<%= links.orders_url %>">Bestellungen</a></li>
+    <li><a href="<%= links.orders_url %>"><%= req.t("refund.breadcrumps.orders", {ns: "order"}) _%></a></li>
     <li>
       <a href="<%= links.order_url %>"><%= order.payment_reference.public_id %></a>
     </li>
-    <li>Erstattung</li>
+    <li><%= req.t("refund.breadcrumps.refund", {ns: "order"}) _%></li>
   </ul>
   <%- include("order_details", {payment: order.payment, payment_reference: order.payment_reference, buttons: false}) %>
   <%_ if (typeof order.refund.success !== "undefined" && order.refund.success === true) { _%>
-  <p>
-    Ihre Anfrage wurde uns erfolgreich zugestellt. Wir bearbeiten diese so
-    schnell wie möglich. Je nach Zahlungsmethode kann es einige Tage dauern, bis
-    eine Erstattung in Ihren Umsätzen sichtbar wird.
-  </p>
+  <p><%= req.t("refund.success", {ns: "order"}) _%></p>
   <%_ } else { _%>
   <form id="refund-form" method="post">
     <input type="hidden" name="count" value="<%= order.refund.count %>" />
-    <p>
-      Sind Sie unzufrieden mit Ihrem Schlüssel? Das bedauern wir sehr!
-      Selbstverständlich erstatten wir Ihnen in diesem Fall den Rechnungsbetrag.
-      Eine Erstatung erfolgt stets auf das Gleiche Konto, welches bei der
-      ursprünglichen Zahlung verwendet wurde. Gerne nehmen wir auch Ihre Kritik
-      entgegen.
-    </p>
+    <p><%= req.t("refund.texts.0", {ns: "order"}) _%></p>
     <%_ if(order.refund.count < order.refund.payment_count) { _%>
-    <p>
-      Hinweis: Ein Teil Ihres gekauften Guthabens wurde bereits verbraucht. Wir
-      können Ihnen deshalb lediglich
-      <span class="bold"><%= order.refund.count %>/<%= order.refund.payment_count %></span>
-      Suchanfragen erstatten.
-    </p>
+    <p><%- req.t("refund.texts.1", {ns: "order", count: order.refund.count, payment_count: order.refund.payment_count}) _%></p>
     <%_ } _%>
-    <h3>Ihre Erstattung</h3>
+    <h3><%= req.t("refund.headings.0", {ns: "order"}) _%></h3>
     <%_ if(typeof order.refund.error !== "undefined") { _%> <%_
     if(order.refund.error === "refund_already_requested") { _%>
-    <p class="error">
-      Für diese Bestellung wurde bereits eine Erstattung angefragt.
-    </p>
+    <p class="error"><%= req.t("refund.errors.already_refunded", {ns: "order"}) _%></p>
     <%_ } else { _%>
-    <p class="error">
-      Fehler beim Senden Ihrer Nachricht. Bitte versuchen Sie es später erneut.
-    </p>
+    <p class="error"><%= req.t("refund.errors.generic", {ns: "order"}) _%></p>
     <%_ } _%> <%_ } _%>
-    <textarea name="message" id="message" cols="1" rows="10" placeholder="Ihre Nachricht (optional)" size="1" autofocus></textarea>
+    <textarea name="message" id="message" cols="1" rows="10" placeholder="<%= req.t("refund.message.placeholder", {ns: "order"}) _%>" size="1" autofocus></textarea>
     <button class="button">
       <img src="<%= baseDir _%>/images/money.svg" alt="" aria-hidden="true" />
-      <span><%= order.refund.amount %>€ Erstattung anfragen</span>
+      <span><%= order.refund.amount %>€ <%= req.t("refund.submit", {ns: "order"}) _%></span>
     </button>
   </form>
   <%_ } _%>
-- 
GitLab