From e7f3451f82d06c6daed19c952402330c88e1d598 Mon Sep 17 00:00:00 2001 From: Alexander Schmidt Date: Wed, 25 Mar 2026 18:15:07 +0100 Subject: [PATCH] =?UTF-8?q?feat:=207=20languages=20=E2=80=94=20EN,=20DE,?= =?UTF-8?q?=20FR,=20IT,=20ES,=20PT,=20RU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Full translations for all UI strings in 7 languages - Language picker shows native names (Français, Italiano, Español, Português, Русский) - Auto-detection via navigator.languages - Cyrillic font subset for Russian (Inter, 19KB) - Footer shared across all languages (untranslated links) --- fonts/inter-cyrillic.woff2 | Bin 0 -> 18748 bytes i18n.js | 347 +++++++++++++++++++++++++++++++------ i18n.min.js | 2 +- index.html | 2 +- style.css | 9 + 5 files changed, 302 insertions(+), 58 deletions(-) create mode 100644 fonts/inter-cyrillic.woff2 diff --git a/fonts/inter-cyrillic.woff2 b/fonts/inter-cyrillic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d750914763177b95070fba3dc83c3d4466919c01 GIT binary patch literal 18748 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 · Onion', - aria_currency: 'Währung', - label_uri_details: 'Monero-URI anzeigen', - label_share_link: 'Teilbarer Link', - btn_new_request: 'Neue Zahlungsanforderung', - toast_copied: 'Kopiert!', - countdown_expired: 'Zahlungsfrist abgelaufen', - countdown_remaining_days: 'Zahlungsfrist: {d} Tage, {h} Std.', - countdown_remaining_hours: 'Zahlungsfrist: {h}:{m} Std.', - rates_offline: 'Kurse nicht verfügbar — nur XMR-Betrag möglich', - btn_prove_payment: 'Zahlung nachweisen', - label_tx_hash: 'Transaction ID (TX Hash)', - placeholder_tx_hash: '64 Hex-Zeichen...', - label_tx_key: 'Transaction Key (TX Key)', - placeholder_tx_key: '64 Hex-Zeichen...', - btn_verify_proof: 'Zahlung verifizieren', - proof_verifying: 'Verifiziere...', - proof_verified: 'Zahlung bestätigt: {amount} XMR', - proof_no_match: 'Kein passender Output gefunden — TX Key oder Adresse stimmt nicht', - proof_tx_not_found: 'Transaktion nicht gefunden', - proof_error: 'Fehler bei der Verifizierung', - status_paid: 'Bezahlt' - }, en: { subtitle: 'Monero payment request in seconds', label_addr: 'XMR Address', @@ -76,11 +36,10 @@ var I18n = (function () { pdf_deadline_days: '{d} days', pdf_date: 'Date', pdf_scan_qr: 'Scan QR code to pay', - pdf_footer: 'Created with xmrpay.link — No registration, no KYC', + pdf_footer: 'Created with xmrpay.link', qr_hint: 'Click QR to save', - footer: 'Open Source · No Backend · No KYC · Source · Onion', + footer: footer, aria_currency: 'Currency', - label_uri_details: 'Show Monero URI', label_share_link: 'Shareable link', btn_new_request: 'New payment request', toast_copied: 'Copied!', @@ -96,21 +55,297 @@ var I18n = (function () { btn_verify_proof: 'Verify payment', proof_verifying: 'Verifying...', proof_verified: 'Payment confirmed: {amount} XMR', - proof_no_match: 'No matching output found — TX key or address mismatch', + proof_no_match: 'No matching output — TX key or address mismatch', proof_tx_not_found: 'Transaction not found', proof_error: 'Verification error', status_paid: 'Paid' + }, + de: { + subtitle: 'Monero-Zahlungsanforderung in Sekunden', + label_addr: 'XMR-Adresse', + placeholder_addr: '8...', + label_amount: 'Betrag', + label_desc: 'Beschreibung (optional)', + placeholder_desc: 'z.B. Rechnung #42, Freelance-Arbeit...', + label_timer: 'Zahlungsfrist (optional)', + days: 'Tage', + placeholder_timer_custom: 'Tage', + btn_generate: 'Zahlungsanforderung erstellen', + btn_open_wallet: 'In Wallet öffnen', + btn_copy_addr: 'Adresse kopieren', + btn_download_pdf: 'PDF Rechnung', + pdf_title: 'Zahlungsanforderung', + pdf_address: 'XMR-Adresse', + pdf_amount: 'Betrag', + pdf_desc: 'Beschreibung', + pdf_deadline: 'Zahlungsfrist', + pdf_deadline_days: '{d} Tage', + pdf_date: 'Datum', + pdf_scan_qr: 'QR-Code scannen zum Bezahlen', + pdf_footer: 'Erstellt mit xmrpay.link', + qr_hint: 'Klick auf QR zum Speichern', + footer: footer, + aria_currency: 'Währung', + label_share_link: 'Teilbarer Link', + btn_new_request: 'Neue Zahlungsanforderung', + toast_copied: 'Kopiert!', + countdown_expired: 'Zahlungsfrist abgelaufen', + countdown_remaining_days: 'Zahlungsfrist: {d} Tage, {h} Std.', + countdown_remaining_hours: 'Zahlungsfrist: {h}:{m} Std.', + rates_offline: 'Kurse nicht verfügbar — nur XMR-Betrag möglich', + btn_prove_payment: 'Zahlung nachweisen', + label_tx_hash: 'Transaction ID (TX Hash)', + placeholder_tx_hash: '64 Hex-Zeichen...', + label_tx_key: 'Transaction Key (TX Key)', + placeholder_tx_key: '64 Hex-Zeichen...', + btn_verify_proof: 'Zahlung verifizieren', + proof_verifying: 'Verifiziere...', + proof_verified: 'Zahlung bestätigt: {amount} XMR', + proof_no_match: 'Kein passender Output — TX Key oder Adresse stimmt nicht', + proof_tx_not_found: 'Transaktion nicht gefunden', + proof_error: 'Fehler bei der Verifizierung', + status_paid: 'Bezahlt' + }, + fr: { + subtitle: 'Demande de paiement Monero en quelques secondes', + label_addr: 'Adresse XMR', + placeholder_addr: '8...', + label_amount: 'Montant', + label_desc: 'Description (facultatif)', + placeholder_desc: 'ex. Facture #42, travail freelance...', + label_timer: 'Date limite de paiement (facultatif)', + days: 'jours', + placeholder_timer_custom: 'Jours', + btn_generate: 'Créer une demande de paiement', + btn_open_wallet: 'Ouvrir dans le wallet', + btn_copy_addr: 'Copier l\'adresse', + btn_download_pdf: 'Facture PDF', + pdf_title: 'Demande de paiement', + pdf_address: 'Adresse XMR', + pdf_amount: 'Montant', + pdf_desc: 'Description', + pdf_deadline: 'Date limite de paiement', + pdf_deadline_days: '{d} jours', + pdf_date: 'Date', + pdf_scan_qr: 'Scanner le QR code pour payer', + pdf_footer: 'Créé avec xmrpay.link', + qr_hint: 'Cliquez sur le QR pour enregistrer', + footer: footer, + aria_currency: 'Devise', + label_share_link: 'Lien partageable', + btn_new_request: 'Nouvelle demande de paiement', + toast_copied: 'Copié !', + countdown_expired: 'Délai de paiement expiré', + countdown_remaining_days: 'Délai : {d} jours, {h} h', + countdown_remaining_hours: 'Délai : {h}:{m} h', + rates_offline: 'Taux indisponibles — montant en XMR uniquement', + btn_prove_payment: 'Prouver le paiement', + label_tx_hash: 'Transaction ID (TX Hash)', + placeholder_tx_hash: '64 caractères hexadécimaux...', + label_tx_key: 'Transaction Key (TX Key)', + placeholder_tx_key: '64 caractères hexadécimaux...', + btn_verify_proof: 'Vérifier le paiement', + proof_verifying: 'Vérification...', + proof_verified: 'Paiement confirmé : {amount} XMR', + proof_no_match: 'Aucun output correspondant — TX Key ou adresse incorrecte', + proof_tx_not_found: 'Transaction introuvable', + proof_error: 'Erreur de vérification', + status_paid: 'Payé' + }, + it: { + subtitle: 'Richiesta di pagamento Monero in pochi secondi', + label_addr: 'Indirizzo XMR', + placeholder_addr: '8...', + label_amount: 'Importo', + label_desc: 'Descrizione (facoltativo)', + placeholder_desc: 'es. Fattura #42, lavoro freelance...', + label_timer: 'Scadenza pagamento (facoltativo)', + days: 'giorni', + placeholder_timer_custom: 'Giorni', + btn_generate: 'Crea richiesta di pagamento', + btn_open_wallet: 'Apri nel wallet', + btn_copy_addr: 'Copia indirizzo', + btn_download_pdf: 'Fattura PDF', + pdf_title: 'Richiesta di pagamento', + pdf_address: 'Indirizzo XMR', + pdf_amount: 'Importo', + pdf_desc: 'Descrizione', + pdf_deadline: 'Scadenza pagamento', + pdf_deadline_days: '{d} giorni', + pdf_date: 'Data', + pdf_scan_qr: 'Scansiona il QR per pagare', + pdf_footer: 'Creato con xmrpay.link', + qr_hint: 'Clicca sul QR per salvare', + footer: footer, + aria_currency: 'Valuta', + label_share_link: 'Link condivisibile', + btn_new_request: 'Nuova richiesta di pagamento', + toast_copied: 'Copiato!', + countdown_expired: 'Scadenza pagamento superata', + countdown_remaining_days: 'Scadenza: {d} giorni, {h} ore', + countdown_remaining_hours: 'Scadenza: {h}:{m} ore', + rates_offline: 'Tassi non disponibili — solo importo in XMR', + btn_prove_payment: 'Dimostra pagamento', + label_tx_hash: 'Transaction ID (TX Hash)', + placeholder_tx_hash: '64 caratteri esadecimali...', + label_tx_key: 'Transaction Key (TX Key)', + placeholder_tx_key: '64 caratteri esadecimali...', + btn_verify_proof: 'Verifica pagamento', + proof_verifying: 'Verifica in corso...', + proof_verified: 'Pagamento confermato: {amount} XMR', + proof_no_match: 'Nessun output corrispondente — TX Key o indirizzo errato', + proof_tx_not_found: 'Transazione non trovata', + proof_error: 'Errore di verifica', + status_paid: 'Pagato' + }, + es: { + subtitle: 'Solicitud de pago Monero en segundos', + label_addr: 'Dirección XMR', + placeholder_addr: '8...', + label_amount: 'Monto', + label_desc: 'Descripción (opcional)', + placeholder_desc: 'ej. Factura #42, trabajo freelance...', + label_timer: 'Plazo de pago (opcional)', + days: 'días', + placeholder_timer_custom: 'Días', + btn_generate: 'Crear solicitud de pago', + btn_open_wallet: 'Abrir en wallet', + btn_copy_addr: 'Copiar dirección', + btn_download_pdf: 'Factura PDF', + pdf_title: 'Solicitud de pago', + pdf_address: 'Dirección XMR', + pdf_amount: 'Monto', + pdf_desc: 'Descripción', + pdf_deadline: 'Plazo de pago', + pdf_deadline_days: '{d} días', + pdf_date: 'Fecha', + pdf_scan_qr: 'Escanear QR para pagar', + pdf_footer: 'Creado con xmrpay.link', + qr_hint: 'Clic en QR para guardar', + footer: footer, + aria_currency: 'Moneda', + label_share_link: 'Enlace compartible', + btn_new_request: 'Nueva solicitud de pago', + toast_copied: '¡Copiado!', + countdown_expired: 'Plazo de pago vencido', + countdown_remaining_days: 'Plazo: {d} días, {h} h', + countdown_remaining_hours: 'Plazo: {h}:{m} h', + rates_offline: 'Tasas no disponibles — solo monto en XMR', + btn_prove_payment: 'Demostrar pago', + label_tx_hash: 'Transaction ID (TX Hash)', + placeholder_tx_hash: '64 caracteres hexadecimales...', + label_tx_key: 'Transaction Key (TX Key)', + placeholder_tx_key: '64 caracteres hexadecimales...', + btn_verify_proof: 'Verificar pago', + proof_verifying: 'Verificando...', + proof_verified: 'Pago confirmado: {amount} XMR', + proof_no_match: 'Ningún output coincidente — TX Key o dirección incorrecta', + proof_tx_not_found: 'Transacción no encontrada', + proof_error: 'Error de verificación', + status_paid: 'Pagado' + }, + pt: { + subtitle: 'Pedido de pagamento Monero em segundos', + label_addr: 'Endereço XMR', + placeholder_addr: '8...', + label_amount: 'Valor', + label_desc: 'Descrição (opcional)', + placeholder_desc: 'ex. Fatura #42, trabalho freelance...', + label_timer: 'Prazo de pagamento (opcional)', + days: 'dias', + placeholder_timer_custom: 'Dias', + btn_generate: 'Criar pedido de pagamento', + btn_open_wallet: 'Abrir na wallet', + btn_copy_addr: 'Copiar endereço', + btn_download_pdf: 'Fatura PDF', + pdf_title: 'Pedido de pagamento', + pdf_address: 'Endereço XMR', + pdf_amount: 'Valor', + pdf_desc: 'Descrição', + pdf_deadline: 'Prazo de pagamento', + pdf_deadline_days: '{d} dias', + pdf_date: 'Data', + pdf_scan_qr: 'Digitalizar QR para pagar', + pdf_footer: 'Criado com xmrpay.link', + qr_hint: 'Clique no QR para guardar', + footer: footer, + aria_currency: 'Moeda', + label_share_link: 'Link partilhável', + btn_new_request: 'Novo pedido de pagamento', + toast_copied: 'Copiado!', + countdown_expired: 'Prazo de pagamento expirado', + countdown_remaining_days: 'Prazo: {d} dias, {h} h', + countdown_remaining_hours: 'Prazo: {h}:{m} h', + rates_offline: 'Taxas indisponíveis — apenas valor em XMR', + btn_prove_payment: 'Comprovar pagamento', + label_tx_hash: 'Transaction ID (TX Hash)', + placeholder_tx_hash: '64 caracteres hexadecimais...', + label_tx_key: 'Transaction Key (TX Key)', + placeholder_tx_key: '64 caracteres hexadecimais...', + btn_verify_proof: 'Verificar pagamento', + proof_verifying: 'A verificar...', + proof_verified: 'Pagamento confirmado: {amount} XMR', + proof_no_match: 'Nenhum output correspondente — TX Key ou endereço incorreto', + proof_tx_not_found: 'Transação não encontrada', + proof_error: 'Erro de verificação', + status_paid: 'Pago' + }, + ru: { + subtitle: 'Запрос на оплату Monero за секунды', + label_addr: 'Адрес XMR', + placeholder_addr: '8...', + label_amount: 'Сумма', + label_desc: 'Описание (необязательно)', + placeholder_desc: 'напр. Счёт #42, фриланс...', + label_timer: 'Срок оплаты (необязательно)', + days: 'дней', + placeholder_timer_custom: 'Дней', + btn_generate: 'Создать запрос на оплату', + btn_open_wallet: 'Открыть в кошельке', + btn_copy_addr: 'Копировать адрес', + btn_download_pdf: 'PDF счёт', + pdf_title: 'Запрос на оплату', + pdf_address: 'Адрес XMR', + pdf_amount: 'Сумма', + pdf_desc: 'Описание', + pdf_deadline: 'Срок оплаты', + pdf_deadline_days: '{d} дней', + pdf_date: 'Дата', + pdf_scan_qr: 'Сканируйте QR для оплаты', + pdf_footer: 'Создано с помощью xmrpay.link', + qr_hint: 'Нажмите на QR для сохранения', + footer: footer, + aria_currency: 'Валюта', + label_share_link: 'Ссылка для отправки', + btn_new_request: 'Новый запрос на оплату', + toast_copied: 'Скопировано!', + countdown_expired: 'Срок оплаты истёк', + countdown_remaining_days: 'Срок: {d} дней, {h} ч', + countdown_remaining_hours: 'Срок: {h}:{m} ч', + rates_offline: 'Курсы недоступны — только сумма в XMR', + btn_prove_payment: 'Подтвердить оплату', + label_tx_hash: 'Transaction ID (TX Hash)', + placeholder_tx_hash: '64 шестнадцатеричных символа...', + label_tx_key: 'Transaction Key (TX Key)', + placeholder_tx_key: '64 шестнадцатеричных символа...', + btn_verify_proof: 'Проверить оплату', + proof_verifying: 'Проверка...', + proof_verified: 'Оплата подтверждена: {amount} XMR', + proof_no_match: 'Соответствующий выход не найден — неверный TX Key или адрес', + proof_tx_not_found: 'Транзакция не найдена', + proof_error: 'Ошибка проверки', + status_paid: 'Оплачено' } }; - var currentLang = 'de'; + var currentLang = 'en'; function detectLang() { var saved = null; try { saved = localStorage.getItem('xmrpay_lang'); } catch (e) {} if (saved && translations[saved]) return saved; - var navLangs = navigator.languages || [navigator.language || 'de']; + var navLangs = navigator.languages || [navigator.language || 'en']; for (var i = 0; i < navLangs.length; i++) { var code = navLangs[i].substring(0, 2).toLowerCase(); if (translations[code]) return code; @@ -143,7 +378,7 @@ var I18n = (function () { // Update toggle label var cur = document.getElementById('langCurrent'); - if (cur) cur.textContent = languages[lang].flag; + if (cur) cur.textContent = languages[lang].name; // Update dropdown active state document.querySelectorAll('.lang-option').forEach(function (btn) { diff --git a/i18n.min.js b/i18n.min.js index e2139de..d9edd57 100644 --- a/i18n.min.js +++ b/i18n.min.js @@ -1 +1 @@ -var I18n=(function(){"use strict";var d={de:{name:"Deutsch",flag:"DE"},en:{name:"English",flag:"EN"}},i={de:{subtitle:"Monero-Zahlungsanforderung in Sekunden",label_addr:"XMR-Adresse",placeholder_addr:"8...",label_amount:"Betrag",label_desc:"Beschreibung (optional)",placeholder_desc:"z.B. Rechnung #42, Freelance-Arbeit...",label_timer:"Zahlungsfrist (optional)",days:"Tage",placeholder_timer_custom:"Tage",btn_generate:"Zahlungsanforderung erstellen",btn_open_wallet:"In Wallet \xF6ffnen",btn_copy_addr:"Adresse kopieren",btn_download_pdf:"PDF Rechnung",pdf_title:"Zahlungsanforderung",pdf_address:"XMR-Adresse",pdf_amount:"Betrag",pdf_desc:"Beschreibung",pdf_deadline:"Zahlungsfrist",pdf_deadline_days:"{d} Tage",pdf_date:"Datum",pdf_scan_qr:"QR-Code scannen zum Bezahlen",pdf_footer:"Erstellt mit xmrpay.link \u2014 Keine Registrierung, kein KYC",qr_hint:"Klick auf QR zum Speichern",footer:'Open Source · Kein Backend · Kein KYC · Source · Onion',aria_currency:"W\xE4hrung",label_uri_details:"Monero-URI anzeigen",label_share_link:"Teilbarer Link",btn_new_request:"Neue Zahlungsanforderung",toast_copied:"Kopiert!",countdown_expired:"Zahlungsfrist abgelaufen",countdown_remaining_days:"Zahlungsfrist: {d} Tage, {h} Std.",countdown_remaining_hours:"Zahlungsfrist: {h}:{m} Std.",rates_offline:"Kurse nicht verf\xFCgbar \u2014 nur XMR-Betrag m\xF6glich",btn_prove_payment:"Zahlung nachweisen",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 Hex-Zeichen...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 Hex-Zeichen...",btn_verify_proof:"Zahlung verifizieren",proof_verifying:"Verifiziere...",proof_verified:"Zahlung best\xE4tigt: {amount} XMR",proof_no_match:"Kein passender Output gefunden \u2014 TX Key oder Adresse stimmt nicht",proof_tx_not_found:"Transaktion nicht gefunden",proof_error:"Fehler bei der Verifizierung",status_paid:"Bezahlt"},en:{subtitle:"Monero payment request in seconds",label_addr:"XMR Address",placeholder_addr:"8...",label_amount:"Amount",label_desc:"Description (optional)",placeholder_desc:"e.g. Invoice #42, freelance work...",label_timer:"Payment deadline (optional)",days:"days",placeholder_timer_custom:"Days",btn_generate:"Create payment request",btn_open_wallet:"Open in wallet",btn_copy_addr:"Copy address",btn_download_pdf:"PDF Invoice",pdf_title:"Payment Request",pdf_address:"XMR Address",pdf_amount:"Amount",pdf_desc:"Description",pdf_deadline:"Payment deadline",pdf_deadline_days:"{d} days",pdf_date:"Date",pdf_scan_qr:"Scan QR code to pay",pdf_footer:"Created with xmrpay.link \u2014 No registration, no KYC",qr_hint:"Click QR to save",footer:'Open Source · No Backend · No KYC · Source · Onion',aria_currency:"Currency",label_uri_details:"Show Monero URI",label_share_link:"Shareable link",btn_new_request:"New payment request",toast_copied:"Copied!",countdown_expired:"Payment deadline expired",countdown_remaining_days:"Deadline: {d} days, {h} hrs",countdown_remaining_hours:"Deadline: {h}:{m} hrs",rates_offline:"Rates unavailable \u2014 XMR amount only",btn_prove_payment:"Prove payment",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 hex characters...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 hex characters...",btn_verify_proof:"Verify payment",proof_verifying:"Verifying...",proof_verified:"Payment confirmed: {amount} XMR",proof_no_match:"No matching output found \u2014 TX key or address mismatch",proof_tx_not_found:"Transaction not found",proof_error:"Verification error",status_paid:"Paid"}},o="de";function u(){var e=null;try{e=localStorage.getItem("xmrpay_lang")}catch{}if(e&&i[e])return e;for(var n=navigator.languages||[navigator.language||"de"],t=0;tSource · Onion',d={en:{subtitle:"Monero payment request in seconds",label_addr:"XMR Address",placeholder_addr:"8...",label_amount:"Amount",label_desc:"Description (optional)",placeholder_desc:"e.g. Invoice #42, freelance work...",label_timer:"Payment deadline (optional)",days:"days",placeholder_timer_custom:"Days",btn_generate:"Create payment request",btn_open_wallet:"Open in wallet",btn_copy_addr:"Copy address",btn_download_pdf:"PDF Invoice",pdf_title:"Payment Request",pdf_address:"XMR Address",pdf_amount:"Amount",pdf_desc:"Description",pdf_deadline:"Payment deadline",pdf_deadline_days:"{d} days",pdf_date:"Date",pdf_scan_qr:"Scan QR code to pay",pdf_footer:"Created with xmrpay.link",qr_hint:"Click QR to save",footer:t,aria_currency:"Currency",label_share_link:"Shareable link",btn_new_request:"New payment request",toast_copied:"Copied!",countdown_expired:"Payment deadline expired",countdown_remaining_days:"Deadline: {d} days, {h} hrs",countdown_remaining_hours:"Deadline: {h}:{m} hrs",rates_offline:"Rates unavailable \u2014 XMR amount only",btn_prove_payment:"Prove payment",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 hex characters...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 hex characters...",btn_verify_proof:"Verify payment",proof_verifying:"Verifying...",proof_verified:"Payment confirmed: {amount} XMR",proof_no_match:"No matching output \u2014 TX key or address mismatch",proof_tx_not_found:"Transaction not found",proof_error:"Verification error",status_paid:"Paid"},de:{subtitle:"Monero-Zahlungsanforderung in Sekunden",label_addr:"XMR-Adresse",placeholder_addr:"8...",label_amount:"Betrag",label_desc:"Beschreibung (optional)",placeholder_desc:"z.B. Rechnung #42, Freelance-Arbeit...",label_timer:"Zahlungsfrist (optional)",days:"Tage",placeholder_timer_custom:"Tage",btn_generate:"Zahlungsanforderung erstellen",btn_open_wallet:"In Wallet \xF6ffnen",btn_copy_addr:"Adresse kopieren",btn_download_pdf:"PDF Rechnung",pdf_title:"Zahlungsanforderung",pdf_address:"XMR-Adresse",pdf_amount:"Betrag",pdf_desc:"Beschreibung",pdf_deadline:"Zahlungsfrist",pdf_deadline_days:"{d} Tage",pdf_date:"Datum",pdf_scan_qr:"QR-Code scannen zum Bezahlen",pdf_footer:"Erstellt mit xmrpay.link",qr_hint:"Klick auf QR zum Speichern",footer:t,aria_currency:"W\xE4hrung",label_share_link:"Teilbarer Link",btn_new_request:"Neue Zahlungsanforderung",toast_copied:"Kopiert!",countdown_expired:"Zahlungsfrist abgelaufen",countdown_remaining_days:"Zahlungsfrist: {d} Tage, {h} Std.",countdown_remaining_hours:"Zahlungsfrist: {h}:{m} Std.",rates_offline:"Kurse nicht verf\xFCgbar \u2014 nur XMR-Betrag m\xF6glich",btn_prove_payment:"Zahlung nachweisen",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 Hex-Zeichen...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 Hex-Zeichen...",btn_verify_proof:"Zahlung verifizieren",proof_verifying:"Verifiziere...",proof_verified:"Zahlung best\xE4tigt: {amount} XMR",proof_no_match:"Kein passender Output \u2014 TX Key oder Adresse stimmt nicht",proof_tx_not_found:"Transaktion nicht gefunden",proof_error:"Fehler bei der Verifizierung",status_paid:"Bezahlt"},fr:{subtitle:"Demande de paiement Monero en quelques secondes",label_addr:"Adresse XMR",placeholder_addr:"8...",label_amount:"Montant",label_desc:"Description (facultatif)",placeholder_desc:"ex. Facture #42, travail freelance...",label_timer:"Date limite de paiement (facultatif)",days:"jours",placeholder_timer_custom:"Jours",btn_generate:"Cr\xE9er une demande de paiement",btn_open_wallet:"Ouvrir dans le wallet",btn_copy_addr:"Copier l'adresse",btn_download_pdf:"Facture PDF",pdf_title:"Demande de paiement",pdf_address:"Adresse XMR",pdf_amount:"Montant",pdf_desc:"Description",pdf_deadline:"Date limite de paiement",pdf_deadline_days:"{d} jours",pdf_date:"Date",pdf_scan_qr:"Scanner le QR code pour payer",pdf_footer:"Cr\xE9\xE9 avec xmrpay.link",qr_hint:"Cliquez sur le QR pour enregistrer",footer:t,aria_currency:"Devise",label_share_link:"Lien partageable",btn_new_request:"Nouvelle demande de paiement",toast_copied:"Copi\xE9 !",countdown_expired:"D\xE9lai de paiement expir\xE9",countdown_remaining_days:"D\xE9lai : {d} jours, {h} h",countdown_remaining_hours:"D\xE9lai : {h}:{m} h",rates_offline:"Taux indisponibles \u2014 montant en XMR uniquement",btn_prove_payment:"Prouver le paiement",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 caract\xE8res hexad\xE9cimaux...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 caract\xE8res hexad\xE9cimaux...",btn_verify_proof:"V\xE9rifier le paiement",proof_verifying:"V\xE9rification...",proof_verified:"Paiement confirm\xE9 : {amount} XMR",proof_no_match:"Aucun output correspondant \u2014 TX Key ou adresse incorrecte",proof_tx_not_found:"Transaction introuvable",proof_error:"Erreur de v\xE9rification",status_paid:"Pay\xE9"},it:{subtitle:"Richiesta di pagamento Monero in pochi secondi",label_addr:"Indirizzo XMR",placeholder_addr:"8...",label_amount:"Importo",label_desc:"Descrizione (facoltativo)",placeholder_desc:"es. Fattura #42, lavoro freelance...",label_timer:"Scadenza pagamento (facoltativo)",days:"giorni",placeholder_timer_custom:"Giorni",btn_generate:"Crea richiesta di pagamento",btn_open_wallet:"Apri nel wallet",btn_copy_addr:"Copia indirizzo",btn_download_pdf:"Fattura PDF",pdf_title:"Richiesta di pagamento",pdf_address:"Indirizzo XMR",pdf_amount:"Importo",pdf_desc:"Descrizione",pdf_deadline:"Scadenza pagamento",pdf_deadline_days:"{d} giorni",pdf_date:"Data",pdf_scan_qr:"Scansiona il QR per pagare",pdf_footer:"Creato con xmrpay.link",qr_hint:"Clicca sul QR per salvare",footer:t,aria_currency:"Valuta",label_share_link:"Link condivisibile",btn_new_request:"Nuova richiesta di pagamento",toast_copied:"Copiato!",countdown_expired:"Scadenza pagamento superata",countdown_remaining_days:"Scadenza: {d} giorni, {h} ore",countdown_remaining_hours:"Scadenza: {h}:{m} ore",rates_offline:"Tassi non disponibili \u2014 solo importo in XMR",btn_prove_payment:"Dimostra pagamento",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 caratteri esadecimali...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 caratteri esadecimali...",btn_verify_proof:"Verifica pagamento",proof_verifying:"Verifica in corso...",proof_verified:"Pagamento confermato: {amount} XMR",proof_no_match:"Nessun output corrispondente \u2014 TX Key o indirizzo errato",proof_tx_not_found:"Transazione non trovata",proof_error:"Errore di verifica",status_paid:"Pagato"},es:{subtitle:"Solicitud de pago Monero en segundos",label_addr:"Direcci\xF3n XMR",placeholder_addr:"8...",label_amount:"Monto",label_desc:"Descripci\xF3n (opcional)",placeholder_desc:"ej. Factura #42, trabajo freelance...",label_timer:"Plazo de pago (opcional)",days:"d\xEDas",placeholder_timer_custom:"D\xEDas",btn_generate:"Crear solicitud de pago",btn_open_wallet:"Abrir en wallet",btn_copy_addr:"Copiar direcci\xF3n",btn_download_pdf:"Factura PDF",pdf_title:"Solicitud de pago",pdf_address:"Direcci\xF3n XMR",pdf_amount:"Monto",pdf_desc:"Descripci\xF3n",pdf_deadline:"Plazo de pago",pdf_deadline_days:"{d} d\xEDas",pdf_date:"Fecha",pdf_scan_qr:"Escanear QR para pagar",pdf_footer:"Creado con xmrpay.link",qr_hint:"Clic en QR para guardar",footer:t,aria_currency:"Moneda",label_share_link:"Enlace compartible",btn_new_request:"Nueva solicitud de pago",toast_copied:"\xA1Copiado!",countdown_expired:"Plazo de pago vencido",countdown_remaining_days:"Plazo: {d} d\xEDas, {h} h",countdown_remaining_hours:"Plazo: {h}:{m} h",rates_offline:"Tasas no disponibles \u2014 solo monto en XMR",btn_prove_payment:"Demostrar pago",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 caracteres hexadecimales...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 caracteres hexadecimales...",btn_verify_proof:"Verificar pago",proof_verifying:"Verificando...",proof_verified:"Pago confirmado: {amount} XMR",proof_no_match:"Ning\xFAn output coincidente \u2014 TX Key o direcci\xF3n incorrecta",proof_tx_not_found:"Transacci\xF3n no encontrada",proof_error:"Error de verificaci\xF3n",status_paid:"Pagado"},pt:{subtitle:"Pedido de pagamento Monero em segundos",label_addr:"Endere\xE7o XMR",placeholder_addr:"8...",label_amount:"Valor",label_desc:"Descri\xE7\xE3o (opcional)",placeholder_desc:"ex. Fatura #42, trabalho freelance...",label_timer:"Prazo de pagamento (opcional)",days:"dias",placeholder_timer_custom:"Dias",btn_generate:"Criar pedido de pagamento",btn_open_wallet:"Abrir na wallet",btn_copy_addr:"Copiar endere\xE7o",btn_download_pdf:"Fatura PDF",pdf_title:"Pedido de pagamento",pdf_address:"Endere\xE7o XMR",pdf_amount:"Valor",pdf_desc:"Descri\xE7\xE3o",pdf_deadline:"Prazo de pagamento",pdf_deadline_days:"{d} dias",pdf_date:"Data",pdf_scan_qr:"Digitalizar QR para pagar",pdf_footer:"Criado com xmrpay.link",qr_hint:"Clique no QR para guardar",footer:t,aria_currency:"Moeda",label_share_link:"Link partilh\xE1vel",btn_new_request:"Novo pedido de pagamento",toast_copied:"Copiado!",countdown_expired:"Prazo de pagamento expirado",countdown_remaining_days:"Prazo: {d} dias, {h} h",countdown_remaining_hours:"Prazo: {h}:{m} h",rates_offline:"Taxas indispon\xEDveis \u2014 apenas valor em XMR",btn_prove_payment:"Comprovar pagamento",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 caracteres hexadecimais...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 caracteres hexadecimais...",btn_verify_proof:"Verificar pagamento",proof_verifying:"A verificar...",proof_verified:"Pagamento confirmado: {amount} XMR",proof_no_match:"Nenhum output correspondente \u2014 TX Key ou endere\xE7o incorreto",proof_tx_not_found:"Transa\xE7\xE3o n\xE3o encontrada",proof_error:"Erro de verifica\xE7\xE3o",status_paid:"Pago"},ru:{subtitle:"\u0417\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u043E\u043F\u043B\u0430\u0442\u0443 Monero \u0437\u0430 \u0441\u0435\u043A\u0443\u043D\u0434\u044B",label_addr:"\u0410\u0434\u0440\u0435\u0441 XMR",placeholder_addr:"8...",label_amount:"\u0421\u0443\u043C\u043C\u0430",label_desc:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 (\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)",placeholder_desc:"\u043D\u0430\u043F\u0440. \u0421\u0447\u0451\u0442 #42, \u0444\u0440\u0438\u043B\u0430\u043D\u0441...",label_timer:"\u0421\u0440\u043E\u043A \u043E\u043F\u043B\u0430\u0442\u044B (\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)",days:"\u0434\u043D\u0435\u0439",placeholder_timer_custom:"\u0414\u043D\u0435\u0439",btn_generate:"\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u043E\u043F\u043B\u0430\u0442\u0443",btn_open_wallet:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0435",btn_copy_addr:"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0430\u0434\u0440\u0435\u0441",btn_download_pdf:"PDF \u0441\u0447\u0451\u0442",pdf_title:"\u0417\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u043E\u043F\u043B\u0430\u0442\u0443",pdf_address:"\u0410\u0434\u0440\u0435\u0441 XMR",pdf_amount:"\u0421\u0443\u043C\u043C\u0430",pdf_desc:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",pdf_deadline:"\u0421\u0440\u043E\u043A \u043E\u043F\u043B\u0430\u0442\u044B",pdf_deadline_days:"{d} \u0434\u043D\u0435\u0439",pdf_date:"\u0414\u0430\u0442\u0430",pdf_scan_qr:"\u0421\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435 QR \u0434\u043B\u044F \u043E\u043F\u043B\u0430\u0442\u044B",pdf_footer:"\u0421\u043E\u0437\u0434\u0430\u043D\u043E \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E xmrpay.link",qr_hint:"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u043D\u0430 QR \u0434\u043B\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F",footer:t,aria_currency:"\u0412\u0430\u043B\u044E\u0442\u0430",label_share_link:"\u0421\u0441\u044B\u043B\u043A\u0430 \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438",btn_new_request:"\u041D\u043E\u0432\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u043E\u043F\u043B\u0430\u0442\u0443",toast_copied:"\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E!",countdown_expired:"\u0421\u0440\u043E\u043A \u043E\u043F\u043B\u0430\u0442\u044B \u0438\u0441\u0442\u0451\u043A",countdown_remaining_days:"\u0421\u0440\u043E\u043A: {d} \u0434\u043D\u0435\u0439, {h} \u0447",countdown_remaining_hours:"\u0421\u0440\u043E\u043A: {h}:{m} \u0447",rates_offline:"\u041A\u0443\u0440\u0441\u044B \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u0443\u043C\u043C\u0430 \u0432 XMR",btn_prove_payment:"\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u043E\u043F\u043B\u0430\u0442\u0443",label_tx_hash:"Transaction ID (TX Hash)",placeholder_tx_hash:"64 \u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u0430...",label_tx_key:"Transaction Key (TX Key)",placeholder_tx_key:"64 \u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u0430...",btn_verify_proof:"\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043E\u043F\u043B\u0430\u0442\u0443",proof_verifying:"\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430...",proof_verified:"\u041E\u043F\u043B\u0430\u0442\u0430 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0430: {amount} XMR",proof_no_match:"\u0421\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0439 \u0432\u044B\u0445\u043E\u0434 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u2014 \u043D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 TX Key \u0438\u043B\u0438 \u0430\u0434\u0440\u0435\u0441",proof_tx_not_found:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430",proof_error:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438",status_paid:"\u041E\u043F\u043B\u0430\u0447\u0435\u043D\u043E"}},i="en";function p(){var e=null;try{e=localStorage.getItem("xmrpay_lang")}catch{}if(e&&d[e])return e;for(var a=navigator.languages||[navigator.language||"en"],n=0;n - DE + English
diff --git a/style.css b/style.css index dc2e083..b8da7ac 100644 --- a/style.css +++ b/style.css @@ -7,6 +7,15 @@ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url('fonts/inter-cyrillic.woff2') format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + @font-face { font-family: 'JetBrains Mono'; font-style: normal;