diff --git a/pass/lang/de/checkout.json b/pass/lang/de/checkout.json index 0b48a54862fec9ea43c34dd0979aed4b35a98394..0e309fca8b6f53cb36ab318f75cdd4073870890d 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 dd9e062dd443722b24493db45f471dae6fd595d1..ec9431dff5126de36a07eaccd8ff5e13dd8f9844 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 919c133c157c1ab0078bde8a4f893eab5ffc7074..84ea88dcf0de943bfed8db4202a91683f63f364e 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 f6ac7dd034433f00765c9a9ea38ea84c95a55b67..b43993945b42c2324f9cb25bfd9de034f8fe83a4 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 d1561018ce2cf6bec16902e30cefd2af55a09681..6fa7b8b8c92a8f3decb0a8f652d06ef80772ea75 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 7b3839c22391dc5e907c2b1cf7fae19d1d0f139c..0be076a70726b5fd954e9f7aad49fa75c37dd723 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 40206fc5079670b3af486ac881ec6fd018aa6379..ffb44a7cb3a25dbd60c58d660e715ebe72775043 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 e4fd610c3c1e3c48d97e967576e936d481d732af..ed43024404e420d8100750fded0d34d60027337a 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> <%_ } _%>