diff --git a/fonts/inter-cyrillic.woff2 b/fonts/inter-cyrillic.woff2 new file mode 100644 index 0000000..d750914 Binary files /dev/null and b/fonts/inter-cyrillic.woff2 differ diff --git a/i18n.js b/i18n.js index 0be2d3d..0af21ea 100644 --- a/i18n.js +++ b/i18n.js @@ -2,58 +2,18 @@ var I18n = (function () { 'use strict'; var languages = { - de: { name: 'Deutsch', flag: 'DE' }, - en: { name: 'English', flag: 'EN' } + en: { name: 'English' }, + de: { name: 'Deutsch' }, + fr: { name: 'Français' }, + it: { name: 'Italiano' }, + es: { name: 'Español' }, + pt: { name: 'Português' }, + ru: { name: 'Русский' } }; + var footer = 'Open Source · No Backend · No KYC · Source · Onion'; + var translations = { - 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 — Keine Registrierung, kein KYC', - qr_hint: 'Klick auf QR zum Speichern', - footer: 'Open Source · Kein Backend · Kein KYC · Source · 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;