diff --git a/l10n.yaml b/l10n.yaml index 18e4ae4..9b357f3 100644 --- a/l10n.yaml +++ b/l10n.yaml @@ -4,4 +4,5 @@ output-localization-file: app_localizations.dart output-class: AppLocalizations output-dir: lib/l10n/generated nullable-getter: false -synthetic-package: false \ No newline at end of file +synthetic-package: false + diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 411782f..935e2c0 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -67,7 +67,8 @@ "pending_label": "Ausstehend", "failed_label": "Fehlgeschlagen", "loading_transactions_error_prefix": "Fehler beim Laden der Transaktionen: ", - + + "create_lnaddress_label": "oder Sie können auch eine erstellen:", "lightning_address_title": "Lightning-Adresse", "loading_address_text": "Lade Adresse...", "your_lightning_address_label": "Ihre Lightning-Adresse:", @@ -88,6 +89,7 @@ "logout_confirm_button": "Abmelden", "receive_title": "Empfangen", + "create_invoice_label": "Erstellen Sie eine Rechnung, um Zahlungen direkt in Ihrer Wallet zu erhalten", "amount_sats_label": "Angeforderten Betrag", "amount_label": "Betrag", "currency_label": "Währung", @@ -101,6 +103,7 @@ "generating_button": "ERSTELLE...", "invoice_generated_message": "Rechnung erfolgreich erstellt", "invoice_generation_error_prefix": "Fehler beim Erstellen der Rechnung: ", + "invoice_empty_response_error": "Rechnung konnte nicht erstellt werden", "send_title": "Senden", "paste_invoice_placeholder": "Rechnung, LNURL oder Adresse einfügen", @@ -116,6 +119,9 @@ "send_to_title": "Senden an", "clear_button": "C", + "invoice_cleared_message": "Rechnung gelöscht", + "clear_invoice_button": "Rechnung löschen", + "invoice_copied_message": "Rechnung kopiert", "decimal_button": ".", "calculating_text": "berechne...", "loading_rates_text": "Lade Kurse...", @@ -150,6 +156,7 @@ "sending_button": "Sende...", "invoice_expired_error": "Die Rechnung ist abgelaufen und kann nicht bezahlt werden", "amountless_invoice_error": "Rechnung ohne Betrag wird nicht unterstützt. Bitte fordern Sie eine Rechnung mit einem bestimmten Betrag an.", + "invoice_amount_label": "Rechnung: {amount}", "payment_sent_status": "Zahlung gesendet - Status: {status}", "confirm_no_session_error": "Keine aktive Sitzung", "confirm_no_wallet_error": "Keine primäre Wallet verfügbar", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 624a672..36f177b 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -67,7 +67,8 @@ "pending_label": "Pending", "failed_label": "Failed", "loading_transactions_error_prefix": "Error loading transactions: ", - + + "create_lnaddress_label": "or create a:", "lightning_address_title": "Lightning Address", "loading_address_text": "Loading address...", "your_lightning_address_label": "Your Lightning address:", @@ -88,6 +89,7 @@ "logout_confirm_button": "Logout", "receive_title": "Receive", + "create_invoice_label": "Create an invoice to receive payments directly in your wallet", "amount_sats_label": "Request Amount", "amount_label": "Amount", "currency_label": "Currency", @@ -101,6 +103,7 @@ "generating_button": "GENERATING...", "invoice_generated_message": "Invoice generated successfully", "invoice_generation_error_prefix": "Error generating invoice: ", + "invoice_empty_response_error": "Failed to generate invoice", "send_title": "Send", "paste_invoice_placeholder": "Paste invoice, LNURL or address", @@ -170,6 +173,9 @@ "send_to_title": "Send to", "clear_button": "C", + "invoice_cleared_message": "Invoice cleared", + "clear_invoice_button": "Clear invoice", + "invoice_copied_message": "Invoice copied", "decimal_button": ".", "calculating_text": "calculating...", "loading_rates_text": "Loading rates...", @@ -204,6 +210,12 @@ "sending_button": "Sending...", "invoice_expired_error": "The invoice has expired and cannot be paid", "amountless_invoice_error": "Invoice without amount not supported. Please request an invoice with a specific amount.", + "invoice_amount_label": "Invoice: {amount}", + "@invoice_amount_label": { + "placeholders": { + "amount": {"type": "Object"} + } + }, "payment_sent_status": "Payment sent - Status: {status}", "@payment_sent_status": { "placeholders": { diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 6a7c468..ebbacb2 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -68,6 +68,7 @@ "failed_label": "Fallida", "loading_transactions_error_prefix": "Error cargando transacciones: ", + "create_lnaddress_label": "o también puedes crear una:", "lightning_address_title": "Dirección Lightning", "loading_address_text": "Cargando dirección...", "your_lightning_address_label": "Tu dirección Lightning:", @@ -88,6 +89,7 @@ "logout_confirm_button": "Cerrar Sesión", "receive_title": "Recibir", + "create_invoice_label": "Crea una factura para recibir pagos directamente en tu billetera", "amount_sats_label": "Solicitar Monto", "amount_label": "Cantidad", "currency_label": "Moneda", @@ -101,6 +103,7 @@ "generating_button": "GENERANDO...", "invoice_generated_message": "Factura generada correctamente", "invoice_generation_error_prefix": "Error generando factura: ", + "invoice_empty_response_error": "Error al generar la factura", "send_title": "Enviar", "paste_invoice_placeholder": "Pega factura, LNURL o dirección", @@ -170,6 +173,9 @@ "send_to_title": "Enviar a", "clear_button": "C", + "invoice_cleared_message": "Factura limpiada", + "clear_invoice_button": "Limpiar factura", + "invoice_copied_message": "Factura copiada", "decimal_button": ".", "calculating_text": "calculando...", "loading_rates_text": "Loading rates...", @@ -204,6 +210,14 @@ "sending_button": "Enviando...", "invoice_expired_error": "La factura ha expirado y no se puede pagar", "amountless_invoice_error": "Factura sin monto no soportada. Solicite una factura con un monto específico.", + "invoice_amount_label": "Factura: {amount}", + "@invoice_amount_label": { + "placeholders": { + "amount": { + "type": "Object" + } + } + }, "payment_sent_status": "Pago enviado - Estado: {status}", "confirm_no_session_error": "Sin sesión activa", "confirm_no_wallet_error": "No hay wallet principal disponible", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index b5ce8b1..9eeac9e 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -67,7 +67,8 @@ "pending_label": "En attente", "failed_label": "Échoué", "loading_transactions_error_prefix": "Erreur lors du chargement des transactions : ", - + + "create_lnaddress_label": "ou vous pouvez aussi créer un :", "lightning_address_title": "Adresse Lightning", "loading_address_text": "Chargement de l'adresse...", "your_lightning_address_label": "Votre adresse Lightning :", @@ -88,6 +89,7 @@ "logout_confirm_button": "Se déconnecter", "receive_title": "Recevoir", + "create_invoice_label": "Créez une facture pour recevoir des paiements directement dans votre portefeuille", "amount_sats_label": "Montant demandé", "amount_label": "Montant", "currency_label": "Devise", @@ -101,6 +103,7 @@ "generating_button": "GÉNÉRATION...", "invoice_generated_message": "Facture générée avec succès", "invoice_generation_error_prefix": "Erreur lors de la génération de la facture : ", + "invoice_empty_response_error": "Échec de la génération de la facture", "send_title": "Envoyer", "paste_invoice_placeholder": "Coller la facture, LNURL ou adresse", @@ -116,6 +119,9 @@ "send_to_title": "Envoyer à", "clear_button": "C", + "invoice_cleared_message": "Facture effacée", + "clear_invoice_button": "Effacer la facture", + "invoice_copied_message": "Facture copiée", "decimal_button": ".", "calculating_text": "calcul...", "loading_rates_text": "Chargement des taux...", @@ -150,6 +156,7 @@ "sending_button": "Envoi...", "invoice_expired_error": "La facture a expiré et ne peut pas être payée", "amountless_invoice_error": "Facture sans montant non prise en charge. Veuillez demander une facture avec un montant spécifique.", + "invoice_amount_label": "Facture: {amount}", "payment_sent_status": "Paiement envoyé - Statut : {status}", "confirm_no_session_error": "Aucune session active", "confirm_no_wallet_error": "Aucun portefeuille principal disponible", diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index d5e0421..5598fc9 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -67,7 +67,8 @@ "pending_label": "In attesa", "failed_label": "Fallito", "loading_transactions_error_prefix": "Errore nel caricamento delle transazioni: ", - + + "create_lnaddress_label": "oppure crea un indirizzo:", "lightning_address_title": "Indirizzo Lightning", "loading_address_text": "Caricamento indirizzo...", "your_lightning_address_label": "Il tuo indirizzo Lightning:", @@ -88,6 +89,7 @@ "logout_confirm_button": "Disconnetti", "receive_title": "Ricevi", + "create_invoice_label": "Crea una fattura per ricevere pagamenti direttamente nel tuo portafoglio", "amount_sats_label": "Importo richiesto", "amount_label": "Importo", "currency_label": "Valuta", @@ -101,6 +103,7 @@ "generating_button": "GENERAZIONE...", "invoice_generated_message": "Fattura generata con successo", "invoice_generation_error_prefix": "Errore nella generazione della fattura: ", + "invoice_empty_response_error": "Impossibile generare la fattura", "send_title": "Invia", "paste_invoice_placeholder": "Incolla fattura, LNURL o indirizzo", @@ -116,6 +119,9 @@ "send_to_title": "Invia a", "clear_button": "C", + "invoice_cleared_message": "Fattura cancellata", + "clear_invoice_button": "Cancella fattura", + "invoice_copied_message": "Fattura copiata", "decimal_button": ".", "calculating_text": "calcolo...", "loading_rates_text": "Caricamento tassi...", @@ -150,6 +156,7 @@ "sending_button": "Invio...", "invoice_expired_error": "La fattura è scaduta e non può essere pagata", "amountless_invoice_error": "Fattura senza importo non supportata. Richiedere una fattura con un importo specifico.", + "invoice_amount_label": "Fattura: {amount}", "payment_sent_status": "Pagamento inviato - Stato: {status}", "confirm_no_session_error": "Nessuna sessione attiva", "confirm_no_wallet_error": "Nessun portafoglio principale disponibile", diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 33992a3..121e207 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -67,7 +67,8 @@ "pending_label": "Pendente", "failed_label": "Falhada", "loading_transactions_error_prefix": "Erro ao carregar transações: ", - + + "create_lnaddress_label": "ou também pode criar um:", "lightning_address_title": "Endereço Lightning", "loading_address_text": "Carregando endereço...", "your_lightning_address_label": "O seu endereço Lightning:", @@ -88,6 +89,7 @@ "logout_confirm_button": "Terminar Sessão", "receive_title": "Receber", + "create_invoice_label": "Crie uma fatura para receber pagamentos diretamente na sua carteira", "amount_sats_label": "Solicitar Quantia", "amount_label": "Quantia", "currency_label": "Moeda", @@ -101,6 +103,7 @@ "generating_button": "GERANDO...", "invoice_generated_message": "Fatura gerada com sucesso", "invoice_generation_error_prefix": "Erro ao gerar fatura: ", + "invoice_empty_response_error": "Falha ao gerar fatura", "send_title": "Enviar", "paste_invoice_placeholder": "Colar fatura, LNURL ou endereço", @@ -116,6 +119,9 @@ "send_to_title": "Enviar para", "clear_button": "C", + "invoice_cleared_message": "Fatura limpa", + "clear_invoice_button": "Limpar fatura", + "invoice_copied_message": "Fatura copiada", "decimal_button": ".", "calculating_text": "calculando...", "loading_rates_text": "Carregando taxas...", @@ -150,6 +156,7 @@ "sending_button": "Enviando...", "invoice_expired_error": "A fatura expirou e não pode ser paga", "amountless_invoice_error": "Fatura sem valor não suportada. Solicite uma fatura com um valor específico.", + "invoice_amount_label": "Fatura: {amount}", "payment_sent_status": "Pagamento enviado - Estado: {status}", "confirm_no_session_error": "Sem sessão ativa", "confirm_no_wallet_error": "Sem carteira principal disponível", diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 7cda3ee..e0b870f 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -67,7 +67,8 @@ "pending_label": "В ожидании", "failed_label": "Не удалось", "loading_transactions_error_prefix": "Ошибка загрузки транзакций: ", - + + "create_lnaddress_label": "или вы также можете создать:", "lightning_address_title": "Lightning адрес", "loading_address_text": "Загрузка адреса...", "your_lightning_address_label": "Ваш Lightning адрес:", @@ -88,6 +89,7 @@ "logout_confirm_button": "Выйти", "receive_title": "Получить", + "create_invoice_label": "Создайте счет для получения платежей непосредственно в вашем кошельке", "amount_sats_label": "Запрашиваемая сумма", "amount_label": "Сумма", "currency_label": "Валюта", @@ -101,6 +103,7 @@ "generating_button": "СОЗДАНИЕ...", "invoice_generated_message": "Счет успешно создан", "invoice_generation_error_prefix": "Ошибка создания счета: ", + "invoice_empty_response_error": "Не удалось создать счет", "send_title": "Отправить", "paste_invoice_placeholder": "Вставьте счет, LNURL или адрес", @@ -116,6 +119,9 @@ "send_to_title": "Отправить на", "clear_button": "C", + "invoice_cleared_message": "Счет очищен", + "clear_invoice_button": "Очистить счет", + "invoice_copied_message": "Счет скопирован", "decimal_button": ".", "calculating_text": "вычисление...", "loading_rates_text": "Загрузка курсов...", @@ -150,6 +156,7 @@ "sending_button": "Отправка...", "invoice_expired_error": "Счет истек и не может быть оплачен", "amountless_invoice_error": "Счет без суммы не поддерживается. Запросите счет с указанной суммой.", + "invoice_amount_label": "Счет: {amount}", "payment_sent_status": "Платеж отправлен - Статус: {status}", "confirm_no_session_error": "Нет активной сессии", "confirm_no_wallet_error": "Нет доступного основного кошелька", diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index f7e075e..257bba7 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -67,7 +67,8 @@ import 'app_localizations_ru.dart'; /// be consistent with the languages listed in the AppLocalizations.supportedLocales /// property. abstract class AppLocalizations { - AppLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + AppLocalizations(String locale) + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); final String localeName; @@ -75,7 +76,8 @@ abstract class AppLocalizations { return Localizations.of(context, AppLocalizations)!; } - static const LocalizationsDelegate delegate = _AppLocalizationsDelegate(); + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); /// A list of this localizations delegate along with the default localizations /// delegates. @@ -87,7 +89,8 @@ abstract class AppLocalizations { /// Additional delegates can be added by appending to this list in /// MaterialApp. This list does not have to be used at all if a custom list /// of delegates is preferred or required. - static const List> localizationsDelegates = >[ + static const List> localizationsDelegates = + >[ delegate, GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, @@ -465,6 +468,12 @@ abstract class AppLocalizations { /// **'Error cargando transacciones: '** String get loading_transactions_error_prefix; + /// No description provided for @create_lnaddress_label. + /// + /// In es, this message translates to: + /// **'o también puedes crear una:'** + String get create_lnaddress_label; + /// No description provided for @lightning_address_title. /// /// In es, this message translates to: @@ -573,6 +582,12 @@ abstract class AppLocalizations { /// **'Recibir'** String get receive_title; + /// No description provided for @create_invoice_label. + /// + /// In es, this message translates to: + /// **'Crea una factura para recibir pagos directamente en tu billetera'** + String get create_invoice_label; + /// No description provided for @amount_sats_label. /// /// In es, this message translates to: @@ -651,6 +666,12 @@ abstract class AppLocalizations { /// **'Error generando factura: '** String get invoice_generation_error_prefix; + /// No description provided for @invoice_empty_response_error. + /// + /// In es, this message translates to: + /// **'Error al generar la factura'** + String get invoice_empty_response_error; + /// No description provided for @send_title. /// /// In es, this message translates to: @@ -957,6 +978,24 @@ abstract class AppLocalizations { /// **'C'** String get clear_button; + /// No description provided for @invoice_cleared_message. + /// + /// In es, this message translates to: + /// **'Factura limpiada'** + String get invoice_cleared_message; + + /// No description provided for @clear_invoice_button. + /// + /// In es, this message translates to: + /// **'Limpiar factura'** + String get clear_invoice_button; + + /// No description provided for @invoice_copied_message. + /// + /// In es, this message translates to: + /// **'Factura copiada'** + String get invoice_copied_message; + /// No description provided for @decimal_button. /// /// In es, this message translates to: @@ -1155,6 +1194,12 @@ abstract class AppLocalizations { /// **'Factura sin monto no soportada. Solicite una factura con un monto específico.'** String get amountless_invoice_error; + /// No description provided for @invoice_amount_label. + /// + /// In es, this message translates to: + /// **'Factura: {amount}'** + String invoice_amount_label(Object amount); + /// No description provided for @payment_sent_status. /// /// In es, this message translates to: @@ -1654,7 +1699,8 @@ abstract class AppLocalizations { String get deep_link_login_required_message; } -class _AppLocalizationsDelegate extends LocalizationsDelegate { +class _AppLocalizationsDelegate + extends LocalizationsDelegate { const _AppLocalizationsDelegate(); @override @@ -1663,30 +1709,42 @@ class _AppLocalizationsDelegate extends LocalizationsDelegate } @override - bool isSupported(Locale locale) => ['de', 'en', 'es', 'fr', 'it', 'pt', 'ru'].contains(locale.languageCode); + bool isSupported(Locale locale) => [ + 'de', + 'en', + 'es', + 'fr', + 'it', + 'pt', + 'ru' + ].contains(locale.languageCode); @override bool shouldReload(_AppLocalizationsDelegate old) => false; } AppLocalizations lookupAppLocalizations(Locale locale) { - - // Lookup logic when only language code is specified. switch (locale.languageCode) { - case 'de': return AppLocalizationsDe(); - case 'en': return AppLocalizationsEn(); - case 'es': return AppLocalizationsEs(); - case 'fr': return AppLocalizationsFr(); - case 'it': return AppLocalizationsIt(); - case 'pt': return AppLocalizationsPt(); - case 'ru': return AppLocalizationsRu(); + case 'de': + return AppLocalizationsDe(); + case 'en': + return AppLocalizationsEn(); + case 'es': + return AppLocalizationsEs(); + case 'fr': + return AppLocalizationsFr(); + case 'it': + return AppLocalizationsIt(); + case 'pt': + return AppLocalizationsPt(); + case 'ru': + return AppLocalizationsRu(); } throw FlutterError( - 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' - 'an issue with the localizations generation tool. Please file an issue ' - 'on GitHub with a reproducible sample app and the gen-l10n configuration ' - 'that was used.' - ); + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.'); } diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index 84628fe..ffdc54a 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -1,3 +1,5 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; import 'app_localizations.dart'; // ignore_for_file: type=lint @@ -19,19 +21,22 @@ class AppLocalizationsDe extends AppLocalizations { String get tap_to_start_hint => 'So einfach wie einen Funken zu entzünden'; @override - String get choose_option_title => 'Verbinden Sie sich mit Ihrem liebsten LNBits-Server'; + String get choose_option_title => + 'Verbinden Sie sich mit Ihrem liebsten LNBits-Server'; @override String get create_new_wallet_title => 'Neue Wallet erstellen'; @override - String get create_new_wallet_subtitle => 'Ihre eigene Lightning-Wallet einrichten'; + String get create_new_wallet_subtitle => + 'Ihre eigene Lightning-Wallet einrichten'; @override String get use_existing_wallet_title => 'Bestehende Wallet verwenden'; @override - String get use_existing_wallet_subtitle => 'Mit einer Lightning-Wallet verbinden'; + String get use_existing_wallet_subtitle => + 'Mit einer Lightning-Wallet verbinden'; @override String get server_settings_title => 'Aktueller Server'; @@ -136,7 +141,8 @@ class AppLocalizationsDe extends AppLocalizations { String get passwords_mismatch_error => 'Passwörter stimmen nicht überein'; @override - String get account_creation_error_prefix => 'Fehler beim Erstellen des Kontos: '; + String get account_creation_error_prefix => + 'Fehler beim Erstellen des Kontos: '; @override String get wallet_title => 'Wallet'; @@ -169,7 +175,8 @@ class AppLocalizationsDe extends AppLocalizations { String get no_transactions_text => 'Keine Transaktionen'; @override - String get no_transactions_description => 'Sie haben noch keine Transaktionen durchgeführt.'; + String get no_transactions_description => + 'Sie haben noch keine Transaktionen durchgeführt.'; @override String get sent_label => 'Gesendet'; @@ -184,7 +191,11 @@ class AppLocalizationsDe extends AppLocalizations { String get failed_label => 'Fehlgeschlagen'; @override - String get loading_transactions_error_prefix => 'Fehler beim Laden der Transaktionen: '; + String get loading_transactions_error_prefix => + 'Fehler beim Laden der Transaktionen: '; + + @override + String get create_lnaddress_label => 'oder Sie können auch eine erstellen:'; @override String get lightning_address_title => 'Lightning-Adresse'; @@ -208,7 +219,8 @@ class AppLocalizationsDe extends AppLocalizations { String get address_copied_message => 'Adresse in die Zwischenablage kopiert'; @override - String get loading_address_error_prefix => 'Fehler beim Laden der Lightning-Adresse: '; + String get loading_address_error_prefix => + 'Fehler beim Laden der Lightning-Adresse: '; @override String get settings_title => 'Über'; @@ -229,7 +241,8 @@ class AppLocalizationsDe extends AppLocalizations { String get confirm_logout_title => 'Abmeldung bestätigen'; @override - String get confirm_logout_message => 'Sind Sie sicher, dass Sie sich abmelden möchten?'; + String get confirm_logout_message => + 'Sind Sie sicher, dass Sie sich abmelden möchten?'; @override String get cancel_button => 'Abbrechen'; @@ -240,6 +253,10 @@ class AppLocalizationsDe extends AppLocalizations { @override String get receive_title => 'Empfangen'; + @override + String get create_invoice_label => + 'Erstellen Sie eine Rechnung, um Zahlungen direkt in Ihrer Wallet zu erhalten'; + @override String get amount_sats_label => 'Angeforderten Betrag'; @@ -277,13 +294,19 @@ class AppLocalizationsDe extends AppLocalizations { String get invoice_generated_message => 'Rechnung erfolgreich erstellt'; @override - String get invoice_generation_error_prefix => 'Fehler beim Erstellen der Rechnung: '; + String get invoice_generation_error_prefix => + 'Fehler beim Erstellen der Rechnung: '; + + @override + String get invoice_empty_response_error => + 'Rechnung konnte nicht erstellt werden'; @override String get send_title => 'Senden'; @override - String get paste_invoice_placeholder => 'Rechnung, LNURL oder Adresse einfügen'; + String get paste_invoice_placeholder => + 'Rechnung, LNURL oder Adresse einfügen'; @override String get paste_button => 'Einfügen'; @@ -295,10 +318,12 @@ class AppLocalizationsDe extends AppLocalizations { String get voucher_scan_title => 'Voucher scannen'; @override - String get voucher_scan_instructions => 'Richten Sie Ihre Kamera auf den LNURL-withdraw Voucher QR-Code'; + String get voucher_scan_instructions => + 'Richten Sie Ihre Kamera auf den LNURL-withdraw Voucher QR-Code'; @override - String get voucher_scan_subtitle => 'Die App erkennt automatisch den Voucher und ermöglicht es Ihnen, ihn einzulösen'; + String get voucher_scan_subtitle => + 'Die App erkennt automatisch den Voucher und ermöglicht es Ihnen, ihn einzulösen'; @override String get voucher_scan_button => 'QR scannen'; @@ -313,7 +338,8 @@ class AppLocalizationsDe extends AppLocalizations { String get voucher_processing => 'Verarbeitung...'; @override - String get voucher_manual_input_hint => 'Fügen Sie den LNURL-withdraw Voucher-Code ein:'; + String get voucher_manual_input_hint => + 'Fügen Sie den LNURL-withdraw Voucher-Code ein:'; @override String get voucher_manual_input_placeholder => 'lnurl1...'; @@ -350,13 +376,15 @@ class AppLocalizationsDe extends AppLocalizations { String get voucher_claimed_title => 'Voucher eingelöst!'; @override - String get voucher_claimed_subtitle => 'Die Mittel werden in Kürze in Ihrer Wallet erscheinen.'; + String get voucher_claimed_subtitle => + 'Die Mittel werden in Kürze in Ihrer Wallet erscheinen.'; @override String get voucher_invalid_code => 'Ungültiger Code'; @override - String get voucher_not_valid_lnurl => 'Der gescannte Code ist kein gültiger LNURL-withdraw Voucher.'; + String get voucher_not_valid_lnurl => + 'Der gescannte Code ist kein gültiger LNURL-withdraw Voucher.'; @override String get voucher_processing_error => 'Fehler beim Verarbeiten des Vouchers'; @@ -365,49 +393,57 @@ class AppLocalizationsDe extends AppLocalizations { String get voucher_already_claimed => 'Voucher bereits eingelöst'; @override - String get voucher_already_claimed_desc => 'Dieser Voucher wurde bereits verwendet und kann nicht erneut eingelöst werden.'; + String get voucher_already_claimed_desc => + 'Dieser Voucher wurde bereits verwendet und kann nicht erneut eingelöst werden.'; @override String get voucher_expired => 'Voucher abgelaufen'; @override - String get voucher_expired_desc => 'Dieser Voucher ist abgelaufen und nicht mehr gültig.'; + String get voucher_expired_desc => + 'Dieser Voucher ist abgelaufen und nicht mehr gültig.'; @override String get voucher_not_found => 'Voucher nicht gefunden'; @override - String get voucher_not_found_desc => 'Dieser Voucher konnte nicht gefunden werden oder wurde möglicherweise entfernt.'; + String get voucher_not_found_desc => + 'Dieser Voucher konnte nicht gefunden werden oder wurde möglicherweise entfernt.'; @override String get voucher_server_error => 'Server-Fehler'; @override - String get voucher_server_error_desc => 'Es gab ein Problem mit dem Voucher-Server. Bitte versuchen Sie es später erneut.'; + String get voucher_server_error_desc => + 'Es gab ein Problem mit dem Voucher-Server. Bitte versuchen Sie es später erneut.'; @override String get voucher_connection_error => 'Verbindungsfehler'; @override - String get voucher_connection_error_desc => 'Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.'; + String get voucher_connection_error_desc => + 'Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.'; @override String get voucher_invalid_amount => 'Ungültiger Betrag'; @override - String get voucher_invalid_amount_desc => 'Der Voucher-Betrag ist nicht gültig oder wurde beschädigt.'; + String get voucher_invalid_amount_desc => + 'Der Voucher-Betrag ist nicht gültig oder wurde beschädigt.'; @override String get voucher_insufficient_funds => 'Unzureichende Mittel'; @override - String get voucher_insufficient_funds_desc => 'Der Voucher hat nicht genügend verfügbare Mittel.'; + String get voucher_insufficient_funds_desc => + 'Der Voucher hat nicht genügend verfügbare Mittel.'; @override String get voucher_generic_error => 'Voucher kann nicht verarbeitet werden'; @override - String get voucher_generic_error_desc => 'Es gab einen unerwarteten Fehler beim Verarbeiten dieses Vouchers. Bitte versuchen Sie es erneut oder kontaktieren Sie den Support.'; + String get voucher_generic_error_desc => + 'Es gab einen unerwarteten Fehler beim Verarbeiten dieses Vouchers. Bitte versuchen Sie es erneut oder kontaktieren Sie den Support.'; @override String get pay_button => 'BEZAHLEN'; @@ -416,10 +452,12 @@ class AppLocalizationsDe extends AppLocalizations { String get processing_button => 'VERARBEITE...'; @override - String get payment_instruction_text => 'Lightning-Rechnung, LNURL oder Adresse einfügen'; + String get payment_instruction_text => + 'Lightning-Rechnung, LNURL oder Adresse einfügen'; @override - String get payment_processing_error_prefix => 'Fehler bei der Zahlungsverarbeitung: '; + String get payment_processing_error_prefix => + 'Fehler bei der Zahlungsverarbeitung: '; @override String get no_active_session_error => 'Keine aktive Sitzung'; @@ -428,7 +466,8 @@ class AppLocalizationsDe extends AppLocalizations { String get no_primary_wallet_error => 'Keine primäre Wallet verfügbar'; @override - String get invoice_decoding_error_prefix => 'Fehler beim Dekodieren der Rechnung: '; + String get invoice_decoding_error_prefix => + 'Fehler beim Dekodieren der Rechnung: '; @override String get send_to_title => 'Senden an'; @@ -436,6 +475,15 @@ class AppLocalizationsDe extends AppLocalizations { @override String get clear_button => 'C'; + @override + String get invoice_cleared_message => 'Rechnung gelöscht'; + + @override + String get clear_invoice_button => 'Rechnung löschen'; + + @override + String get invoice_copied_message => 'Rechnung kopiert'; + @override String get decimal_button => '.'; @@ -455,10 +503,12 @@ class AppLocalizationsDe extends AppLocalizations { String get exchange_rates_error => 'Fehler beim Laden der Wechselkurse'; @override - String get invalid_amount_error => 'Bitte geben Sie einen gültigen Betrag ein'; + String get invalid_amount_error => + 'Bitte geben Sie einen gültigen Betrag ein'; @override - String get amount_payment_error_prefix => 'Fehler bei der Zahlungsverarbeitung: '; + String get amount_payment_error_prefix => + 'Fehler bei der Zahlungsverarbeitung: '; @override String get amount_no_session_error => 'Keine aktive Sitzung'; @@ -473,19 +523,24 @@ class AppLocalizationsDe extends AppLocalizations { String get sending_lightning_payment => 'Sende Lightning-Adresse-Zahlung...'; @override - String get lnurl_payment_pending => 'LNURL-Zahlung ausstehend - Hold-Rechnung erkannt'; + String get lnurl_payment_pending => + 'LNURL-Zahlung ausstehend - Hold-Rechnung erkannt'; @override - String get lnurl_payment_success => 'LNURL-Zahlung erfolgreich abgeschlossen!'; + String get lnurl_payment_success => + 'LNURL-Zahlung erfolgreich abgeschlossen!'; @override - String get lightning_payment_pending => 'Lightning-Adresse-Zahlung ausstehend - Hold-Rechnung erkannt'; + String get lightning_payment_pending => + 'Lightning-Adresse-Zahlung ausstehend - Hold-Rechnung erkannt'; @override - String get lightning_payment_success => 'Lightning-Adresse-Zahlung erfolgreich abgeschlossen!'; + String get lightning_payment_success => + 'Lightning-Adresse-Zahlung erfolgreich abgeschlossen!'; @override - String get insufficient_balance_error => 'Unzureichendes Guthaben für die Zahlung'; + String get insufficient_balance_error => + 'Unzureichendes Guthaben für die Zahlung'; @override String get confirm_payment_title => 'Zahlung bestätigen'; @@ -530,10 +585,17 @@ class AppLocalizationsDe extends AppLocalizations { String get sending_button => 'Sende...'; @override - String get invoice_expired_error => 'Die Rechnung ist abgelaufen und kann nicht bezahlt werden'; + String get invoice_expired_error => + 'Die Rechnung ist abgelaufen und kann nicht bezahlt werden'; @override - String get amountless_invoice_error => 'Rechnung ohne Betrag wird nicht unterstützt. Bitte fordern Sie eine Rechnung mit einem bestimmten Betrag an.'; + String get amountless_invoice_error => + 'Rechnung ohne Betrag wird nicht unterstützt. Bitte fordern Sie eine Rechnung mit einem bestimmten Betrag an.'; + + @override + String invoice_amount_label(Object amount) { + return 'Rechnung: $amount'; + } @override String payment_sent_status(Object status) { @@ -547,7 +609,8 @@ class AppLocalizationsDe extends AppLocalizations { String get confirm_no_wallet_error => 'Keine primäre Wallet verfügbar'; @override - String get payment_pending_hold => 'Zahlung ausstehend - Hold-Rechnung erkannt'; + String get payment_pending_hold => + 'Zahlung ausstehend - Hold-Rechnung erkannt'; @override String get payment_completed_success => 'Zahlung erfolgreich abgeschlossen'; @@ -577,7 +640,8 @@ class AppLocalizationsDe extends AppLocalizations { String get send_error_prefix => 'Fehler beim Verarbeiten des Sendens: '; @override - String get decode_invoice_error_prefix => 'Fehler beim Dekodieren der Rechnung: '; + String get decode_invoice_error_prefix => + 'Fehler beim Dekodieren der Rechnung: '; @override String get payment_success => 'Zahlung erfolgreich abgeschlossen'; @@ -601,10 +665,12 @@ class AppLocalizationsDe extends AppLocalizations { String get favorite_server_feature => 'Mit Ihrem bevorzugten Server'; @override - String get receive_info_text => '• Teilen Sie Ihre Lightning-Adresse, um Zahlungen jeder Größe zu erhalten\n\n• QR-Code wird automatisch zu LNURL für maximale Kompatibilität aufgelöst\n\n• Zahlungen werden direkt in dieser Wallet empfangen'; + String get receive_info_text => + '• Teilen Sie Ihre Lightning-Adresse, um Zahlungen jeder Größe zu erhalten\n\n• QR-Code wird automatisch zu LNURL für maximale Kompatibilität aufgelöst\n\n• Zahlungen werden direkt in dieser Wallet empfangen'; @override - String get payment_description_example => 'Beispiel: Zahlung für Dienstleistungen'; + String get payment_description_example => + 'Beispiel: Zahlung für Dienstleistungen'; @override String get remember_password_label => 'Passwort merken'; @@ -613,31 +679,36 @@ class AppLocalizationsDe extends AppLocalizations { String get server_prefix => 'Server: '; @override - String get login_subtitle => 'Geben Sie Ihre Anmeldedaten ein, um auf Ihre Wallet zuzugreifen'; + String get login_subtitle => + 'Geben Sie Ihre Anmeldedaten ein, um auf Ihre Wallet zuzugreifen'; @override String get username_required_error => 'Benutzername ist erforderlich'; @override - String get username_length_error => 'Benutzername muss mindestens 3 Zeichen haben'; + String get username_length_error => + 'Benutzername muss mindestens 3 Zeichen haben'; @override String get password_required_error => 'Passwort ist erforderlich'; @override - String get password_length_error => 'Passwort muss mindestens 6 Zeichen haben'; + String get password_length_error => + 'Passwort muss mindestens 6 Zeichen haben'; @override String get saved_users_header => 'Gespeicherte Benutzer'; @override - String get tap_to_autocomplete_hint => 'Tippen, um Passwort automatisch zu vervollständigen'; + String get tap_to_autocomplete_hint => + 'Tippen, um Passwort automatisch zu vervollständigen'; @override String get delete_credentials_title => 'Anmeldedaten löschen'; @override - String get delete_credentials_message => 'Durch das Deaktivieren dieser Option werden die gespeicherten Anmeldedaten für diesen Benutzer gelöscht.\\n\\nSind Sie sicher, dass Sie fortfahren möchten?'; + String get delete_credentials_message => + 'Durch das Deaktivieren dieser Option werden die gespeicherten Anmeldedaten für diesen Benutzer gelöscht.\\n\\nSind Sie sicher, dass Sie fortfahren möchten?'; @override String get delete_credentials_cancel => 'Abbrechen'; @@ -649,10 +720,12 @@ class AppLocalizationsDe extends AppLocalizations { String get close_dialog => 'Schließen'; @override - String get credentials_found_message => 'Anmeldedaten gefunden - Passwort wird gespeichert'; + String get credentials_found_message => + 'Anmeldedaten gefunden - Passwort wird gespeichert'; @override - String get password_will_be_remembered => 'Passwort wird nach der Anmeldung gespeichert'; + String get password_will_be_remembered => + 'Passwort wird nach der Anmeldung gespeichert'; @override String get password_saved_successfully => 'Passwort erfolgreich gespeichert'; @@ -664,7 +737,8 @@ class AppLocalizationsDe extends AppLocalizations { String get about_app_subtitle => 'Lightning-Wallet'; @override - String get about_app_description => 'Eine mobile Anwendung zur Verwaltung von Bitcoin über das Lightning-Netzwerk mit LNBits als Backend.'; + String get about_app_description => + 'Eine mobile Anwendung zur Verwaltung von Bitcoin über das Lightning-Netzwerk mit LNBits als Backend.'; @override String get lightning_address_copy => 'Kopieren'; @@ -685,19 +759,23 @@ class AppLocalizationsDe extends AppLocalizations { String get create_new_wallet_help => 'Neue Wallet erstellen'; @override - String get create_wallet_short_description => 'Um eine neue Wallet zu erstellen, greifen Sie über den Browser auf Ihr LNBits-Panel zu und verwenden Sie die Option \"Wallet erstellen\".'; + String get create_wallet_short_description => + 'Um eine neue Wallet zu erstellen, greifen Sie über den Browser auf Ihr LNBits-Panel zu und verwenden Sie die Option \"Wallet erstellen\".'; @override - String get create_wallet_detailed_instructions => 'Um eine neue Wallet zu erstellen:\\n\\n1. Öffnen Sie Ihren Webbrowser\\n2. Greifen Sie auf Ihren LNBits-Server zu\\n3. Melden Sie sich mit Ihrem Konto an\\n4. Suchen Sie nach der Schaltfläche \"Wallet erstellen\"\\n5. Vergeben Sie einen Namen für Ihre neue Wallet\\n6. Kehren Sie zu LaChispa zurück und aktualisieren Sie Ihre Wallets\\n\\nDie neue Wallet wird automatisch in Ihrer Liste angezeigt.'; + String get create_wallet_detailed_instructions => + 'Um eine neue Wallet zu erstellen:\\n\\n1. Öffnen Sie Ihren Webbrowser\\n2. Greifen Sie auf Ihren LNBits-Server zu\\n3. Melden Sie sich mit Ihrem Konto an\\n4. Suchen Sie nach der Schaltfläche \"Wallet erstellen\"\\n5. Vergeben Sie einen Namen für Ihre neue Wallet\\n6. Kehren Sie zu LaChispa zurück und aktualisieren Sie Ihre Wallets\\n\\nDie neue Wallet wird automatisch in Ihrer Liste angezeigt.'; @override String get fixed_float_loading => 'Lade Fixed Float...'; @override - String get fixed_float_description => 'Tauschen Sie Kryptowährungen mit\nfesten Kursen und ohne Registrierung'; + String get fixed_float_description => + 'Tauschen Sie Kryptowährungen mit\nfesten Kursen und ohne Registrierung'; @override - String get fixed_float_webview_error => 'WebView ist auf dieser Plattform nicht verfügbar.\nWird im externen Browser geöffnet.'; + String get fixed_float_webview_error => + 'WebView ist auf dieser Plattform nicht verfügbar.\nWird im externen Browser geöffnet.'; @override String get fixed_float_open_button => 'Fixed Float öffnen'; @@ -708,7 +786,8 @@ class AppLocalizationsDe extends AppLocalizations { } @override - String get fixed_float_external_browser => 'Öffnet Fixed Float im externen Browser'; + String get fixed_float_external_browser => + 'Öffnet Fixed Float im externen Browser'; @override String get fixed_float_within_app => 'Öffnet Fixed Float innerhalb der App'; @@ -717,10 +796,12 @@ class AppLocalizationsDe extends AppLocalizations { String get boltz_loading => 'Lade Boltz...'; @override - String get boltz_description => 'Vertrauenslose Bitcoin und Lightning\natomare Swaps'; + String get boltz_description => + 'Vertrauenslose Bitcoin und Lightning\natomare Swaps'; @override - String get boltz_webview_error => 'WebView ist auf dieser Plattform nicht verfügbar.\nWird im externen Browser geöffnet.'; + String get boltz_webview_error => + 'WebView ist auf dieser Plattform nicht verfügbar.\nWird im externen Browser geöffnet.'; @override String get boltz_open_button => 'Boltz öffnen'; @@ -743,7 +824,8 @@ class AppLocalizationsDe extends AppLocalizations { String get currency_settings_title => 'Währungsauswahl'; @override - String get currency_settings_subtitle => 'Wählen Sie Ihre bevorzugten Währungen'; + String get currency_settings_subtitle => + 'Wählen Sie Ihre bevorzugten Währungen'; @override String get available_currencies => 'Verfügbare Währungen'; @@ -755,7 +837,8 @@ class AppLocalizationsDe extends AppLocalizations { String get no_currencies_available => 'Keine Währungen vom Server verfügbar'; @override - String get select_currencies_hint => 'Währungen aus der obigen Liste auswählen'; + String get select_currencies_hint => + 'Währungen aus der obigen Liste auswählen'; @override String get preview_title => 'Vorschau'; @@ -770,7 +853,8 @@ class AppLocalizationsDe extends AppLocalizations { String get about_title => 'Über'; @override - String get currency_validation_info => 'Bei der Auswahl einer Währung wird überprüft, ob sie auf diesem Server verfügbar ist'; + String get currency_validation_info => + 'Bei der Auswahl einer Währung wird überprüft, ob sie auf diesem Server verfügbar ist'; @override String checking_currency_availability(Object currency) { @@ -783,7 +867,8 @@ class AppLocalizationsDe extends AppLocalizations { } @override - String currency_not_available_on_server(Object currency, Object currencyName) { + String currency_not_available_on_server( + Object currency, Object currencyName) { return '$currencyName ($currency) ist auf diesem Server nicht verfügbar'; } @@ -796,5 +881,6 @@ class AppLocalizationsDe extends AppLocalizations { String get deep_link_login_required_title => 'Anmeldung erforderlich'; @override - String get deep_link_login_required_message => 'Sie müssen sich in Ihr LaChispa-Konto einloggen, um diese Zahlung zu verarbeiten.'; + String get deep_link_login_required_message => + 'Sie müssen sich in Ihr LaChispa-Konto einloggen, um diese Zahlung zu verarbeiten.'; } diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index 5eec5dd..144aaca 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -1,3 +1,5 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; import 'app_localizations.dart'; // ignore_for_file: type=lint @@ -169,7 +171,8 @@ class AppLocalizationsEn extends AppLocalizations { String get no_transactions_text => 'No transactions'; @override - String get no_transactions_description => 'You haven\'t made any transactions yet.'; + String get no_transactions_description => + 'You haven\'t made any transactions yet.'; @override String get sent_label => 'Sent'; @@ -184,7 +187,11 @@ class AppLocalizationsEn extends AppLocalizations { String get failed_label => 'Failed'; @override - String get loading_transactions_error_prefix => 'Error loading transactions: '; + String get loading_transactions_error_prefix => + 'Error loading transactions: '; + + @override + String get create_lnaddress_label => 'or create a:'; @override String get lightning_address_title => 'Lightning Address'; @@ -208,7 +215,8 @@ class AppLocalizationsEn extends AppLocalizations { String get address_copied_message => 'Address copied to clipboard'; @override - String get loading_address_error_prefix => 'Error loading Lightning address: '; + String get loading_address_error_prefix => + 'Error loading Lightning address: '; @override String get settings_title => 'About'; @@ -240,6 +248,10 @@ class AppLocalizationsEn extends AppLocalizations { @override String get receive_title => 'Receive'; + @override + String get create_invoice_label => + 'Create an invoice to receive payments directly in your wallet'; + @override String get amount_sats_label => 'Request Amount'; @@ -279,6 +291,9 @@ class AppLocalizationsEn extends AppLocalizations { @override String get invoice_generation_error_prefix => 'Error generating invoice: '; + @override + String get invoice_empty_response_error => 'Failed to generate invoice'; + @override String get send_title => 'Send'; @@ -295,10 +310,12 @@ class AppLocalizationsEn extends AppLocalizations { String get voucher_scan_title => 'Scan Voucher'; @override - String get voucher_scan_instructions => 'Point your camera at the LNURL-withdraw voucher QR code'; + String get voucher_scan_instructions => + 'Point your camera at the LNURL-withdraw voucher QR code'; @override - String get voucher_scan_subtitle => 'The app will automatically detect the voucher and allow you to claim it'; + String get voucher_scan_subtitle => + 'The app will automatically detect the voucher and allow you to claim it'; @override String get voucher_scan_button => 'Scan QR'; @@ -313,7 +330,8 @@ class AppLocalizationsEn extends AppLocalizations { String get voucher_processing => 'Processing...'; @override - String get voucher_manual_input_hint => 'Paste the LNURL-withdraw voucher code:'; + String get voucher_manual_input_hint => + 'Paste the LNURL-withdraw voucher code:'; @override String get voucher_manual_input_placeholder => 'lnurl1...'; @@ -350,13 +368,15 @@ class AppLocalizationsEn extends AppLocalizations { String get voucher_claimed_title => 'Voucher claimed!'; @override - String get voucher_claimed_subtitle => 'The funds will appear in your wallet shortly.'; + String get voucher_claimed_subtitle => + 'The funds will appear in your wallet shortly.'; @override String get voucher_invalid_code => 'Invalid code'; @override - String get voucher_not_valid_lnurl => 'The scanned code is not a valid LNURL-withdraw voucher.'; + String get voucher_not_valid_lnurl => + 'The scanned code is not a valid LNURL-withdraw voucher.'; @override String get voucher_processing_error => 'Error processing voucher'; @@ -365,49 +385,57 @@ class AppLocalizationsEn extends AppLocalizations { String get voucher_already_claimed => 'Voucher already claimed'; @override - String get voucher_already_claimed_desc => 'This voucher has already been used and cannot be claimed again.'; + String get voucher_already_claimed_desc => + 'This voucher has already been used and cannot be claimed again.'; @override String get voucher_expired => 'Voucher expired'; @override - String get voucher_expired_desc => 'This voucher has expired and is no longer valid.'; + String get voucher_expired_desc => + 'This voucher has expired and is no longer valid.'; @override String get voucher_not_found => 'Voucher not found'; @override - String get voucher_not_found_desc => 'This voucher could not be found or may have been removed.'; + String get voucher_not_found_desc => + 'This voucher could not be found or may have been removed.'; @override String get voucher_server_error => 'Server error'; @override - String get voucher_server_error_desc => 'There was a problem with the voucher server. Please try again later.'; + String get voucher_server_error_desc => + 'There was a problem with the voucher server. Please try again later.'; @override String get voucher_connection_error => 'Connection error'; @override - String get voucher_connection_error_desc => 'Please check your internet connection and try again.'; + String get voucher_connection_error_desc => + 'Please check your internet connection and try again.'; @override String get voucher_invalid_amount => 'Invalid amount'; @override - String get voucher_invalid_amount_desc => 'The voucher amount is not valid or has been corrupted.'; + String get voucher_invalid_amount_desc => + 'The voucher amount is not valid or has been corrupted.'; @override String get voucher_insufficient_funds => 'Insufficient funds'; @override - String get voucher_insufficient_funds_desc => 'The voucher does not have enough funds available.'; + String get voucher_insufficient_funds_desc => + 'The voucher does not have enough funds available.'; @override String get voucher_generic_error => 'Unable to process voucher'; @override - String get voucher_generic_error_desc => 'There was an unexpected error processing this voucher. Please try again or contact support.'; + String get voucher_generic_error_desc => + 'There was an unexpected error processing this voucher. Please try again or contact support.'; @override String get pay_button => 'PAY'; @@ -416,7 +444,8 @@ class AppLocalizationsEn extends AppLocalizations { String get processing_button => 'PROCESSING...'; @override - String get payment_instruction_text => 'Paste a Lightning invoice, LNURL or address'; + String get payment_instruction_text => + 'Paste a Lightning invoice, LNURL or address'; @override String get payment_processing_error_prefix => 'Error processing payment: '; @@ -436,6 +465,15 @@ class AppLocalizationsEn extends AppLocalizations { @override String get clear_button => 'C'; + @override + String get invoice_cleared_message => 'Invoice cleared'; + + @override + String get clear_invoice_button => 'Clear invoice'; + + @override + String get invoice_copied_message => 'Invoice copied'; + @override String get decimal_button => '.'; @@ -470,22 +508,27 @@ class AppLocalizationsEn extends AppLocalizations { String get sending_lnurl_payment => 'Sending LNURL payment...'; @override - String get sending_lightning_payment => 'Sending Lightning Address payment...'; + String get sending_lightning_payment => + 'Sending Lightning Address payment...'; @override - String get lnurl_payment_pending => 'LNURL payment pending - Hold invoice detected'; + String get lnurl_payment_pending => + 'LNURL payment pending - Hold invoice detected'; @override String get lnurl_payment_success => 'LNURL payment completed successfully!'; @override - String get lightning_payment_pending => 'Lightning Address payment pending - Hold invoice detected'; + String get lightning_payment_pending => + 'Lightning Address payment pending - Hold invoice detected'; @override - String get lightning_payment_success => 'Lightning Address payment completed successfully!'; + String get lightning_payment_success => + 'Lightning Address payment completed successfully!'; @override - String get insufficient_balance_error => 'Insufficient balance to make payment'; + String get insufficient_balance_error => + 'Insufficient balance to make payment'; @override String get confirm_payment_title => 'Confirm Payment'; @@ -530,10 +573,17 @@ class AppLocalizationsEn extends AppLocalizations { String get sending_button => 'Sending...'; @override - String get invoice_expired_error => 'The invoice has expired and cannot be paid'; + String get invoice_expired_error => + 'The invoice has expired and cannot be paid'; @override - String get amountless_invoice_error => 'Invoice without amount not supported. Please request an invoice with a specific amount.'; + String get amountless_invoice_error => + 'Invoice without amount not supported. Please request an invoice with a specific amount.'; + + @override + String invoice_amount_label(Object amount) { + return 'Invoice: $amount'; + } @override String payment_sent_status(Object status) { @@ -601,7 +651,8 @@ class AppLocalizationsEn extends AppLocalizations { String get favorite_server_feature => 'With your favorite server'; @override - String get receive_info_text => '• Share your Lightning Address to receive payments of any amount\n\n• QR code automatically resolves to LNURL for maximum compatibility\n\n• Payments are received directly in this wallet'; + String get receive_info_text => + '• Share your Lightning Address to receive payments of any amount\n\n• QR code automatically resolves to LNURL for maximum compatibility\n\n• Payments are received directly in this wallet'; @override String get payment_description_example => 'Ex: Payment for services'; @@ -637,7 +688,8 @@ class AppLocalizationsEn extends AppLocalizations { String get delete_credentials_title => 'Delete credentials'; @override - String get delete_credentials_message => 'By unchecking this option, saved credentials for this user will be deleted.\\n\\nAre you sure you want to continue?'; + String get delete_credentials_message => + 'By unchecking this option, saved credentials for this user will be deleted.\\n\\nAre you sure you want to continue?'; @override String get delete_credentials_cancel => 'Cancel'; @@ -649,10 +701,12 @@ class AppLocalizationsEn extends AppLocalizations { String get close_dialog => 'Close'; @override - String get credentials_found_message => 'Credentials found - password will be remembered'; + String get credentials_found_message => + 'Credentials found - password will be remembered'; @override - String get password_will_be_remembered => 'Password will be remembered after login'; + String get password_will_be_remembered => + 'Password will be remembered after login'; @override String get password_saved_successfully => 'Password saved successfully'; @@ -664,7 +718,8 @@ class AppLocalizationsEn extends AppLocalizations { String get about_app_subtitle => 'Lightning Wallet'; @override - String get about_app_description => 'A mobile application to manage Bitcoin through Lightning Network using LNBits as backend.'; + String get about_app_description => + 'A mobile application to manage Bitcoin through Lightning Network using LNBits as backend.'; @override String get lightning_address_copy => 'Copy'; @@ -685,19 +740,23 @@ class AppLocalizationsEn extends AppLocalizations { String get create_new_wallet_help => 'Create new wallet'; @override - String get create_wallet_short_description => 'To create a new wallet, access your LNBits panel from the browser and use the \"Create wallet\" option.'; + String get create_wallet_short_description => + 'To create a new wallet, access your LNBits panel from the browser and use the \"Create wallet\" option.'; @override - String get create_wallet_detailed_instructions => 'To create a new wallet:\\n\\n1. Open your web browser\\n2. Access your LNBits server\\n3. Log in with your account\\n4. Look for the \"Create wallet\" button\\n5. Assign a name to your new wallet\\n6. Return to LaChispa and refresh your wallets\\n\\nThe new wallet will appear automatically in your list.'; + String get create_wallet_detailed_instructions => + 'To create a new wallet:\\n\\n1. Open your web browser\\n2. Access your LNBits server\\n3. Log in with your account\\n4. Look for the \"Create wallet\" button\\n5. Assign a name to your new wallet\\n6. Return to LaChispa and refresh your wallets\\n\\nThe new wallet will appear automatically in your list.'; @override String get fixed_float_loading => 'Loading Fixed Float...'; @override - String get fixed_float_description => 'Exchange cryptocurrencies with\nfixed rates and no registration'; + String get fixed_float_description => + 'Exchange cryptocurrencies with\nfixed rates and no registration'; @override - String get fixed_float_webview_error => 'WebView not available on this platform.\nWill open in external browser.'; + String get fixed_float_webview_error => + 'WebView not available on this platform.\nWill open in external browser.'; @override String get fixed_float_open_button => 'Open Fixed Float'; @@ -708,7 +767,8 @@ class AppLocalizationsEn extends AppLocalizations { } @override - String get fixed_float_external_browser => 'Will open Fixed Float in external browser'; + String get fixed_float_external_browser => + 'Will open Fixed Float in external browser'; @override String get fixed_float_within_app => 'Opens Fixed Float within the app'; @@ -717,10 +777,12 @@ class AppLocalizationsEn extends AppLocalizations { String get boltz_loading => 'Loading Boltz...'; @override - String get boltz_description => 'Trustless Bitcoin and Lightning\natomic swaps'; + String get boltz_description => + 'Trustless Bitcoin and Lightning\natomic swaps'; @override - String get boltz_webview_error => 'WebView not available on this platform.\nWill open in external browser.'; + String get boltz_webview_error => + 'WebView not available on this platform.\nWill open in external browser.'; @override String get boltz_open_button => 'Open Boltz'; @@ -770,7 +832,8 @@ class AppLocalizationsEn extends AppLocalizations { String get about_title => 'About'; @override - String get currency_validation_info => 'When selecting a currency, it will be verified if it\'s available on this server'; + String get currency_validation_info => + 'When selecting a currency, it will be verified if it\'s available on this server'; @override String checking_currency_availability(Object currency) { @@ -783,7 +846,8 @@ class AppLocalizationsEn extends AppLocalizations { } @override - String currency_not_available_on_server(Object currency, Object currencyName) { + String currency_not_available_on_server( + Object currency, Object currencyName) { return '$currencyName ($currency) is not available on this server'; } @@ -796,5 +860,6 @@ class AppLocalizationsEn extends AppLocalizations { String get deep_link_login_required_title => 'Login Required'; @override - String get deep_link_login_required_message => 'You must log in to your LaChispa account to process this payment.'; + String get deep_link_login_required_message => + 'You must log in to your LaChispa account to process this payment.'; } diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index 0c6606a..8261483 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -1,3 +1,5 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; import 'app_localizations.dart'; // ignore_for_file: type=lint @@ -25,13 +27,15 @@ class AppLocalizationsEs extends AppLocalizations { String get create_new_wallet_title => 'Crear Nueva Billetera'; @override - String get create_new_wallet_subtitle => 'Configurar tu propia billetera Lightning'; + String get create_new_wallet_subtitle => + 'Configurar tu propia billetera Lightning'; @override String get use_existing_wallet_title => 'Usar Billetera Existente'; @override - String get use_existing_wallet_subtitle => 'Conectar a una billetera Lightning'; + String get use_existing_wallet_subtitle => + 'Conectar a una billetera Lightning'; @override String get server_settings_title => 'Servidor actual'; @@ -169,7 +173,8 @@ class AppLocalizationsEs extends AppLocalizations { String get no_transactions_text => 'No hay transacciones'; @override - String get no_transactions_description => 'Aún no has realizado ninguna transacción.'; + String get no_transactions_description => + 'Aún no has realizado ninguna transacción.'; @override String get sent_label => 'Enviado'; @@ -184,7 +189,11 @@ class AppLocalizationsEs extends AppLocalizations { String get failed_label => 'Fallida'; @override - String get loading_transactions_error_prefix => 'Error cargando transacciones: '; + String get loading_transactions_error_prefix => + 'Error cargando transacciones: '; + + @override + String get create_lnaddress_label => 'o también puedes crear una:'; @override String get lightning_address_title => 'Dirección Lightning'; @@ -208,7 +217,8 @@ class AppLocalizationsEs extends AppLocalizations { String get address_copied_message => 'Dirección copiada al portapapeles'; @override - String get loading_address_error_prefix => 'Error cargando dirección Lightning: '; + String get loading_address_error_prefix => + 'Error cargando dirección Lightning: '; @override String get settings_title => 'Acerca de'; @@ -229,7 +239,8 @@ class AppLocalizationsEs extends AppLocalizations { String get confirm_logout_title => 'Confirmar Cierre de Sesión'; @override - String get confirm_logout_message => '¿Estás seguro de que deseas cerrar sesión?'; + String get confirm_logout_message => + '¿Estás seguro de que deseas cerrar sesión?'; @override String get cancel_button => 'Cancelar'; @@ -240,6 +251,10 @@ class AppLocalizationsEs extends AppLocalizations { @override String get receive_title => 'Recibir'; + @override + String get create_invoice_label => + 'Crea una factura para recibir pagos directamente en tu billetera'; + @override String get amount_sats_label => 'Solicitar Monto'; @@ -279,6 +294,9 @@ class AppLocalizationsEs extends AppLocalizations { @override String get invoice_generation_error_prefix => 'Error generando factura: '; + @override + String get invoice_empty_response_error => 'Error al generar la factura'; + @override String get send_title => 'Enviar'; @@ -295,10 +313,12 @@ class AppLocalizationsEs extends AppLocalizations { String get voucher_scan_title => 'Escanear Voucher'; @override - String get voucher_scan_instructions => 'Apunta tu cámara al código QR del voucher LNURL-withdraw'; + String get voucher_scan_instructions => + 'Apunta tu cámara al código QR del voucher LNURL-withdraw'; @override - String get voucher_scan_subtitle => 'La aplicación detectará automáticamente el voucher y te permitirá cobrarlo'; + String get voucher_scan_subtitle => + 'La aplicación detectará automáticamente el voucher y te permitirá cobrarlo'; @override String get voucher_scan_button => 'Escanear QR'; @@ -313,7 +333,8 @@ class AppLocalizationsEs extends AppLocalizations { String get voucher_processing => 'Procesando...'; @override - String get voucher_manual_input_hint => 'Pega el código LNURL-withdraw del voucher:'; + String get voucher_manual_input_hint => + 'Pega el código LNURL-withdraw del voucher:'; @override String get voucher_manual_input_placeholder => 'lnurl1...'; @@ -350,13 +371,15 @@ class AppLocalizationsEs extends AppLocalizations { String get voucher_claimed_title => '¡Voucher cobrado!'; @override - String get voucher_claimed_subtitle => 'Los fondos aparecerán en tu wallet en unos momentos.'; + String get voucher_claimed_subtitle => + 'Los fondos aparecerán en tu wallet en unos momentos.'; @override String get voucher_invalid_code => 'Código no válido'; @override - String get voucher_not_valid_lnurl => 'El código escaneado no es un voucher LNURL-withdraw válido.'; + String get voucher_not_valid_lnurl => + 'El código escaneado no es un voucher LNURL-withdraw válido.'; @override String get voucher_processing_error => 'Error procesando el voucher'; @@ -365,49 +388,57 @@ class AppLocalizationsEs extends AppLocalizations { String get voucher_already_claimed => 'Voucher ya cobrado'; @override - String get voucher_already_claimed_desc => 'Este voucher ya fue usado y no puede ser cobrado nuevamente.'; + String get voucher_already_claimed_desc => + 'Este voucher ya fue usado y no puede ser cobrado nuevamente.'; @override String get voucher_expired => 'Voucher expirado'; @override - String get voucher_expired_desc => 'Este voucher ha expirado y ya no es válido.'; + String get voucher_expired_desc => + 'Este voucher ha expirado y ya no es válido.'; @override String get voucher_not_found => 'Voucher no encontrado'; @override - String get voucher_not_found_desc => 'Este voucher no pudo ser encontrado o puede haber sido eliminado.'; + String get voucher_not_found_desc => + 'Este voucher no pudo ser encontrado o puede haber sido eliminado.'; @override String get voucher_server_error => 'Error del servidor'; @override - String get voucher_server_error_desc => 'Hubo un problema con el servidor del voucher. Inténtalo de nuevo más tarde.'; + String get voucher_server_error_desc => + 'Hubo un problema con el servidor del voucher. Inténtalo de nuevo más tarde.'; @override String get voucher_connection_error => 'Error de conexión'; @override - String get voucher_connection_error_desc => 'Verifica tu conexión a internet e inténtalo de nuevo.'; + String get voucher_connection_error_desc => + 'Verifica tu conexión a internet e inténtalo de nuevo.'; @override String get voucher_invalid_amount => 'Cantidad inválida'; @override - String get voucher_invalid_amount_desc => 'La cantidad del voucher no es válida o se ha corrompido.'; + String get voucher_invalid_amount_desc => + 'La cantidad del voucher no es válida o se ha corrompido.'; @override String get voucher_insufficient_funds => 'Fondos insuficientes'; @override - String get voucher_insufficient_funds_desc => 'El voucher no tiene suficientes fondos disponibles.'; + String get voucher_insufficient_funds_desc => + 'El voucher no tiene suficientes fondos disponibles.'; @override String get voucher_generic_error => 'No se pudo procesar el voucher'; @override - String get voucher_generic_error_desc => 'Hubo un error inesperado procesando este voucher. Inténtalo de nuevo o contacta soporte.'; + String get voucher_generic_error_desc => + 'Hubo un error inesperado procesando este voucher. Inténtalo de nuevo o contacta soporte.'; @override String get pay_button => 'PAGAR'; @@ -416,7 +447,8 @@ class AppLocalizationsEs extends AppLocalizations { String get processing_button => 'PROCESANDO...'; @override - String get payment_instruction_text => 'Pega una factura Lightning, LNURL o dirección'; + String get payment_instruction_text => + 'Pega una factura Lightning, LNURL o dirección'; @override String get payment_processing_error_prefix => 'Error procesando el pago: '; @@ -436,6 +468,15 @@ class AppLocalizationsEs extends AppLocalizations { @override String get clear_button => 'C'; + @override + String get invoice_cleared_message => 'Factura limpiada'; + + @override + String get clear_invoice_button => 'Limpiar factura'; + + @override + String get invoice_copied_message => 'Factura copiada'; + @override String get decimal_button => '.'; @@ -470,22 +511,27 @@ class AppLocalizationsEs extends AppLocalizations { String get sending_lnurl_payment => 'Enviando pago LNURL...'; @override - String get sending_lightning_payment => 'Sending Lightning Address payment...'; + String get sending_lightning_payment => + 'Sending Lightning Address payment...'; @override - String get lnurl_payment_pending => 'Pago LNURL pendiente - Factura Hold detectada'; + String get lnurl_payment_pending => + 'Pago LNURL pendiente - Factura Hold detectada'; @override String get lnurl_payment_success => 'Pago LNURL completado exitosamente!'; @override - String get lightning_payment_pending => 'Pago Lightning Address pendiente - Factura Hold detectada'; + String get lightning_payment_pending => + 'Pago Lightning Address pendiente - Factura Hold detectada'; @override - String get lightning_payment_success => 'Pago Lightning Address completado exitosamente!'; + String get lightning_payment_success => + 'Pago Lightning Address completado exitosamente!'; @override - String get insufficient_balance_error => 'Saldo insuficiente para realizar el pago'; + String get insufficient_balance_error => + 'Saldo insuficiente para realizar el pago'; @override String get confirm_payment_title => 'Confirmar Pago'; @@ -530,10 +576,17 @@ class AppLocalizationsEs extends AppLocalizations { String get sending_button => 'Enviando...'; @override - String get invoice_expired_error => 'La factura ha expirado y no se puede pagar'; + String get invoice_expired_error => + 'La factura ha expirado y no se puede pagar'; @override - String get amountless_invoice_error => 'Factura sin monto no soportada. Solicite una factura con un monto específico.'; + String get amountless_invoice_error => + 'Factura sin monto no soportada. Solicite una factura con un monto específico.'; + + @override + String invoice_amount_label(Object amount) { + return 'Factura: $amount'; + } @override String payment_sent_status(Object status) { @@ -601,7 +654,8 @@ class AppLocalizationsEs extends AppLocalizations { String get favorite_server_feature => 'Con tu servidor favorito'; @override - String get receive_info_text => '• Comparte tu Lightning Address para recibir pagos de cualquier monto\n\n• El código QR se resuelve automáticamente a LNURL para máxima compatibilidad\n\n• Los pagos se reciben directamente en esta billetera'; + String get receive_info_text => + '• Comparte tu Lightning Address para recibir pagos de cualquier monto\n\n• El código QR se resuelve automáticamente a LNURL para máxima compatibilidad\n\n• Los pagos se reciben directamente en esta billetera'; @override String get payment_description_example => 'Ej: Pago por servicios'; @@ -613,19 +667,22 @@ class AppLocalizationsEs extends AppLocalizations { String get server_prefix => 'Servidor: '; @override - String get login_subtitle => 'Ingresa tus credenciales para acceder a tu billetera'; + String get login_subtitle => + 'Ingresa tus credenciales para acceder a tu billetera'; @override String get username_required_error => 'El nombre de usuario es requerido'; @override - String get username_length_error => 'El nombre de usuario debe tener al menos 3 caracteres'; + String get username_length_error => + 'El nombre de usuario debe tener al menos 3 caracteres'; @override String get password_required_error => 'La contraseña es requerida'; @override - String get password_length_error => 'La contraseña debe tener al menos 6 caracteres'; + String get password_length_error => + 'La contraseña debe tener al menos 6 caracteres'; @override String get saved_users_header => 'Usuarios guardados'; @@ -637,7 +694,8 @@ class AppLocalizationsEs extends AppLocalizations { String get delete_credentials_title => 'Eliminar credenciales'; @override - String get delete_credentials_message => 'Al desmarcar esta opción, las credenciales guardadas para este usuario serán eliminadas.\\n\\n¿Estás seguro de que quieres continuar?'; + String get delete_credentials_message => + 'Al desmarcar esta opción, las credenciales guardadas para este usuario serán eliminadas.\\n\\n¿Estás seguro de que quieres continuar?'; @override String get delete_credentials_cancel => 'Cancelar'; @@ -649,10 +707,12 @@ class AppLocalizationsEs extends AppLocalizations { String get close_dialog => 'Cerrar'; @override - String get credentials_found_message => 'Credenciales encontradas - la contraseña será recordada'; + String get credentials_found_message => + 'Credenciales encontradas - la contraseña será recordada'; @override - String get password_will_be_remembered => 'La contraseña será recordada después del login'; + String get password_will_be_remembered => + 'La contraseña será recordada después del login'; @override String get password_saved_successfully => 'Contraseña guardada exitosamente'; @@ -664,7 +724,8 @@ class AppLocalizationsEs extends AppLocalizations { String get about_app_subtitle => 'Billetera Lightning'; @override - String get about_app_description => 'Una aplicación móvil para gestionar Bitcoin a través de Lightning Network usando LNBits como backend.'; + String get about_app_description => + 'Una aplicación móvil para gestionar Bitcoin a través de Lightning Network usando LNBits como backend.'; @override String get lightning_address_copy => 'Copiar'; @@ -685,19 +746,23 @@ class AppLocalizationsEs extends AppLocalizations { String get create_new_wallet_help => 'Crear nueva billetera'; @override - String get create_wallet_short_description => 'Para crear una nueva billetera, accede a tu panel LNBits desde el navegador y usa la opción \"Crear billetera\".'; + String get create_wallet_short_description => + 'Para crear una nueva billetera, accede a tu panel LNBits desde el navegador y usa la opción \"Crear billetera\".'; @override - String get create_wallet_detailed_instructions => 'Para crear una nueva billetera:\\n\\n1. Abre tu navegador web\\n2. Accede a tu servidor LNBits\\n3. Inicia sesión con tu cuenta\\n4. Busca el botón \"Crear billetera\"\\n5. Asigna un nombre a tu nueva billetera\\n6. Regresa a LaChispa y actualiza tus billeteras\\n\\nLa nueva billetera aparecerá automáticamente en tu lista.'; + String get create_wallet_detailed_instructions => + 'Para crear una nueva billetera:\\n\\n1. Abre tu navegador web\\n2. Accede a tu servidor LNBits\\n3. Inicia sesión con tu cuenta\\n4. Busca el botón \"Crear billetera\"\\n5. Asigna un nombre a tu nueva billetera\\n6. Regresa a LaChispa y actualiza tus billeteras\\n\\nLa nueva billetera aparecerá automáticamente en tu lista.'; @override String get fixed_float_loading => 'Cargando Fixed Float...'; @override - String get fixed_float_description => 'Intercambia criptomonedas con\ntasas fijas y sin registro'; + String get fixed_float_description => + 'Intercambia criptomonedas con\ntasas fijas y sin registro'; @override - String get fixed_float_webview_error => 'WebView no disponible en esta plataforma.\nSe abrirá en navegador externo.'; + String get fixed_float_webview_error => + 'WebView no disponible en esta plataforma.\nSe abrirá en navegador externo.'; @override String get fixed_float_open_button => 'Abrir Fixed Float'; @@ -708,19 +773,23 @@ class AppLocalizationsEs extends AppLocalizations { } @override - String get fixed_float_external_browser => 'Se abrirá Fixed Float en navegador externo'; + String get fixed_float_external_browser => + 'Se abrirá Fixed Float en navegador externo'; @override - String get fixed_float_within_app => 'Abre Fixed Float dentro de la aplicación'; + String get fixed_float_within_app => + 'Abre Fixed Float dentro de la aplicación'; @override String get boltz_loading => 'Cargando Boltz...'; @override - String get boltz_description => 'Intercambios atómicos sin confianza\nde Bitcoin y Lightning'; + String get boltz_description => + 'Intercambios atómicos sin confianza\nde Bitcoin y Lightning'; @override - String get boltz_webview_error => 'WebView no disponible en esta plataforma.\nSe abrirá en navegador externo.'; + String get boltz_webview_error => + 'WebView no disponible en esta plataforma.\nSe abrirá en navegador externo.'; @override String get boltz_open_button => 'Abrir Boltz'; @@ -752,10 +821,12 @@ class AppLocalizationsEs extends AppLocalizations { String get selected_currencies => 'Monedas Seleccionadas'; @override - String get no_currencies_available => 'No hay monedas disponibles del servidor'; + String get no_currencies_available => + 'No hay monedas disponibles del servidor'; @override - String get select_currencies_hint => 'Selecciona monedas de la lista de arriba'; + String get select_currencies_hint => + 'Selecciona monedas de la lista de arriba'; @override String get preview_title => 'Vista Previa'; @@ -770,7 +841,8 @@ class AppLocalizationsEs extends AppLocalizations { String get about_title => 'Acerca de'; @override - String get currency_validation_info => 'Al seleccionar una moneda, se verificará si está disponible en este servidor'; + String get currency_validation_info => + 'Al seleccionar una moneda, se verificará si está disponible en este servidor'; @override String checking_currency_availability(Object currency) { @@ -783,7 +855,8 @@ class AppLocalizationsEs extends AppLocalizations { } @override - String currency_not_available_on_server(Object currency, Object currencyName) { + String currency_not_available_on_server( + Object currency, Object currencyName) { return '$currencyName ($currency) no está disponible en este servidor'; } @@ -796,5 +869,6 @@ class AppLocalizationsEs extends AppLocalizations { String get deep_link_login_required_title => 'Inicio de sesión requerido'; @override - String get deep_link_login_required_message => 'Debes iniciar sesión en tu cuenta LaChispa para procesar este pago.'; + String get deep_link_login_required_message => + 'Debes iniciar sesión en tu cuenta LaChispa para procesar este pago.'; } diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 1d71a8a..4bb0875 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -1,3 +1,5 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; import 'app_localizations.dart'; // ignore_for_file: type=lint @@ -19,19 +21,22 @@ class AppLocalizationsFr extends AppLocalizations { String get tap_to_start_hint => 'Aussi simple qu\'allumer une étincelle'; @override - String get choose_option_title => 'Connectez-vous à votre serveur LNBits préféré'; + String get choose_option_title => + 'Connectez-vous à votre serveur LNBits préféré'; @override String get create_new_wallet_title => 'Créer un nouveau portefeuille'; @override - String get create_new_wallet_subtitle => 'Configurez votre propre portefeuille Lightning'; + String get create_new_wallet_subtitle => + 'Configurez votre propre portefeuille Lightning'; @override String get use_existing_wallet_title => 'Utiliser un portefeuille existant'; @override - String get use_existing_wallet_subtitle => 'Se connecter à un portefeuille Lightning'; + String get use_existing_wallet_subtitle => + 'Se connecter à un portefeuille Lightning'; @override String get server_settings_title => 'Serveur actuel'; @@ -133,10 +138,12 @@ class AppLocalizationsFr extends AppLocalizations { String get login_link => 'Se connecter'; @override - String get passwords_mismatch_error => 'Les mots de passe ne correspondent pas'; + String get passwords_mismatch_error => + 'Les mots de passe ne correspondent pas'; @override - String get account_creation_error_prefix => 'Erreur lors de la création du compte : '; + String get account_creation_error_prefix => + 'Erreur lors de la création du compte : '; @override String get wallet_title => 'Portefeuille'; @@ -169,7 +176,8 @@ class AppLocalizationsFr extends AppLocalizations { String get no_transactions_text => 'Aucune transaction'; @override - String get no_transactions_description => 'Vous n\'avez encore effectué aucune transaction.'; + String get no_transactions_description => + 'Vous n\'avez encore effectué aucune transaction.'; @override String get sent_label => 'Envoyé'; @@ -184,7 +192,11 @@ class AppLocalizationsFr extends AppLocalizations { String get failed_label => 'Échoué'; @override - String get loading_transactions_error_prefix => 'Erreur lors du chargement des transactions : '; + String get loading_transactions_error_prefix => + 'Erreur lors du chargement des transactions : '; + + @override + String get create_lnaddress_label => 'ou vous pouvez aussi créer un :'; @override String get lightning_address_title => 'Adresse Lightning'; @@ -208,7 +220,8 @@ class AppLocalizationsFr extends AppLocalizations { String get address_copied_message => 'Adresse copiée dans le presse-papiers'; @override - String get loading_address_error_prefix => 'Erreur lors du chargement de l\'adresse Lightning : '; + String get loading_address_error_prefix => + 'Erreur lors du chargement de l\'adresse Lightning : '; @override String get settings_title => 'À propos'; @@ -229,7 +242,8 @@ class AppLocalizationsFr extends AppLocalizations { String get confirm_logout_title => 'Confirmer la déconnexion'; @override - String get confirm_logout_message => 'Êtes-vous sûr de vouloir vous déconnecter ?'; + String get confirm_logout_message => + 'Êtes-vous sûr de vouloir vous déconnecter ?'; @override String get cancel_button => 'Annuler'; @@ -240,6 +254,10 @@ class AppLocalizationsFr extends AppLocalizations { @override String get receive_title => 'Recevoir'; + @override + String get create_invoice_label => + 'Créez une facture pour recevoir des paiements directement dans votre portefeuille'; + @override String get amount_sats_label => 'Montant demandé'; @@ -277,7 +295,12 @@ class AppLocalizationsFr extends AppLocalizations { String get invoice_generated_message => 'Facture générée avec succès'; @override - String get invoice_generation_error_prefix => 'Erreur lors de la génération de la facture : '; + String get invoice_generation_error_prefix => + 'Erreur lors de la génération de la facture : '; + + @override + String get invoice_empty_response_error => + 'Échec de la génération de la facture'; @override String get send_title => 'Envoyer'; @@ -295,10 +318,12 @@ class AppLocalizationsFr extends AppLocalizations { String get voucher_scan_title => 'Scanner le voucher'; @override - String get voucher_scan_instructions => 'Pointez votre caméra vers le code QR du voucher LNURL-withdraw'; + String get voucher_scan_instructions => + 'Pointez votre caméra vers le code QR du voucher LNURL-withdraw'; @override - String get voucher_scan_subtitle => 'L\'application détectera automatiquement le voucher et vous permettra de l\'encaisser'; + String get voucher_scan_subtitle => + 'L\'application détectera automatiquement le voucher et vous permettra de l\'encaisser'; @override String get voucher_scan_button => 'Scanner QR'; @@ -313,7 +338,8 @@ class AppLocalizationsFr extends AppLocalizations { String get voucher_processing => 'Traitement...'; @override - String get voucher_manual_input_hint => 'Collez le code LNURL-withdraw du voucher :'; + String get voucher_manual_input_hint => + 'Collez le code LNURL-withdraw du voucher :'; @override String get voucher_manual_input_placeholder => 'lnurl1...'; @@ -350,13 +376,15 @@ class AppLocalizationsFr extends AppLocalizations { String get voucher_claimed_title => 'Voucher réclamé !'; @override - String get voucher_claimed_subtitle => 'Les fonds apparaîtront dans votre portefeuille sous peu.'; + String get voucher_claimed_subtitle => + 'Les fonds apparaîtront dans votre portefeuille sous peu.'; @override String get voucher_invalid_code => 'Code invalide'; @override - String get voucher_not_valid_lnurl => 'Le code scanné n\'est pas un voucher LNURL-withdraw valide.'; + String get voucher_not_valid_lnurl => + 'Le code scanné n\'est pas un voucher LNURL-withdraw valide.'; @override String get voucher_processing_error => 'Erreur lors du traitement du voucher'; @@ -365,49 +393,57 @@ class AppLocalizationsFr extends AppLocalizations { String get voucher_already_claimed => 'Voucher déjà réclamé'; @override - String get voucher_already_claimed_desc => 'Ce voucher a déjà été utilisé et ne peut pas être réclamé à nouveau.'; + String get voucher_already_claimed_desc => + 'Ce voucher a déjà été utilisé et ne peut pas être réclamé à nouveau.'; @override String get voucher_expired => 'Voucher expiré'; @override - String get voucher_expired_desc => 'Ce voucher a expiré et n\'est plus valide.'; + String get voucher_expired_desc => + 'Ce voucher a expiré et n\'est plus valide.'; @override String get voucher_not_found => 'Voucher non trouvé'; @override - String get voucher_not_found_desc => 'Ce voucher n\'a pas pu être trouvé ou a peut-être été supprimé.'; + String get voucher_not_found_desc => + 'Ce voucher n\'a pas pu être trouvé ou a peut-être été supprimé.'; @override String get voucher_server_error => 'Erreur serveur'; @override - String get voucher_server_error_desc => 'Il y a eu un problème avec le serveur du voucher. Veuillez réessayer plus tard.'; + String get voucher_server_error_desc => + 'Il y a eu un problème avec le serveur du voucher. Veuillez réessayer plus tard.'; @override String get voucher_connection_error => 'Erreur de connexion'; @override - String get voucher_connection_error_desc => 'Veuillez vérifier votre connexion internet et réessayer.'; + String get voucher_connection_error_desc => + 'Veuillez vérifier votre connexion internet et réessayer.'; @override String get voucher_invalid_amount => 'Montant invalide'; @override - String get voucher_invalid_amount_desc => 'Le montant du voucher n\'est pas valide ou a été corrompu.'; + String get voucher_invalid_amount_desc => + 'Le montant du voucher n\'est pas valide ou a été corrompu.'; @override String get voucher_insufficient_funds => 'Fonds insuffisants'; @override - String get voucher_insufficient_funds_desc => 'Le voucher n\'a pas suffisamment de fonds disponibles.'; + String get voucher_insufficient_funds_desc => + 'Le voucher n\'a pas suffisamment de fonds disponibles.'; @override String get voucher_generic_error => 'Impossible de traiter le voucher'; @override - String get voucher_generic_error_desc => 'Il y a eu une erreur inattendue lors du traitement de ce voucher. Veuillez réessayer ou contacter le support.'; + String get voucher_generic_error_desc => + 'Il y a eu une erreur inattendue lors du traitement de ce voucher. Veuillez réessayer ou contacter le support.'; @override String get pay_button => 'PAYER'; @@ -416,19 +452,23 @@ class AppLocalizationsFr extends AppLocalizations { String get processing_button => 'TRAITEMENT EN COURS...'; @override - String get payment_instruction_text => 'Coller une facture Lightning, LNURL ou adresse'; + String get payment_instruction_text => + 'Coller une facture Lightning, LNURL ou adresse'; @override - String get payment_processing_error_prefix => 'Erreur lors du traitement du paiement : '; + String get payment_processing_error_prefix => + 'Erreur lors du traitement du paiement : '; @override String get no_active_session_error => 'Aucune session active'; @override - String get no_primary_wallet_error => 'Aucun portefeuille principal disponible'; + String get no_primary_wallet_error => + 'Aucun portefeuille principal disponible'; @override - String get invoice_decoding_error_prefix => 'Erreur lors du décodage de la facture : '; + String get invoice_decoding_error_prefix => + 'Erreur lors du décodage de la facture : '; @override String get send_to_title => 'Envoyer à'; @@ -436,6 +476,15 @@ class AppLocalizationsFr extends AppLocalizations { @override String get clear_button => 'C'; + @override + String get invoice_cleared_message => 'Facture effacée'; + + @override + String get clear_invoice_button => 'Effacer la facture'; + + @override + String get invoice_copied_message => 'Facture copiée'; + @override String get decimal_button => '.'; @@ -452,40 +501,48 @@ class AppLocalizationsFr extends AppLocalizations { String get amount_processing_button => 'TRAITEMENT EN COURS...'; @override - String get exchange_rates_error => 'Erreur lors du chargement des taux de change'; + String get exchange_rates_error => + 'Erreur lors du chargement des taux de change'; @override String get invalid_amount_error => 'Veuillez entrer un montant valide'; @override - String get amount_payment_error_prefix => 'Erreur lors du traitement du paiement : '; + String get amount_payment_error_prefix => + 'Erreur lors du traitement du paiement : '; @override String get amount_no_session_error => 'Aucune session active'; @override - String get amount_no_wallet_error => 'Aucun portefeuille principal disponible'; + String get amount_no_wallet_error => + 'Aucun portefeuille principal disponible'; @override String get sending_lnurl_payment => 'Envoi du paiement LNURL...'; @override - String get sending_lightning_payment => 'Envoi du paiement Lightning Address...'; + String get sending_lightning_payment => + 'Envoi du paiement Lightning Address...'; @override - String get lnurl_payment_pending => 'Paiement LNURL en attente - Facture de retenue détectée'; + String get lnurl_payment_pending => + 'Paiement LNURL en attente - Facture de retenue détectée'; @override String get lnurl_payment_success => 'Paiement LNURL effectué avec succès !'; @override - String get lightning_payment_pending => 'Paiement Lightning Address en attente - Facture de retenue détectée'; + String get lightning_payment_pending => + 'Paiement Lightning Address en attente - Facture de retenue détectée'; @override - String get lightning_payment_success => 'Paiement Lightning Address effectué avec succès !'; + String get lightning_payment_success => + 'Paiement Lightning Address effectué avec succès !'; @override - String get insufficient_balance_error => 'Solde insuffisant pour effectuer le paiement'; + String get insufficient_balance_error => + 'Solde insuffisant pour effectuer le paiement'; @override String get confirm_payment_title => 'Confirmer le paiement'; @@ -530,10 +587,17 @@ class AppLocalizationsFr extends AppLocalizations { String get sending_button => 'Envoi...'; @override - String get invoice_expired_error => 'La facture a expiré et ne peut pas être payée'; + String get invoice_expired_error => + 'La facture a expiré et ne peut pas être payée'; @override - String get amountless_invoice_error => 'Facture sans montant non prise en charge. Veuillez demander une facture avec un montant spécifique.'; + String get amountless_invoice_error => + 'Facture sans montant non prise en charge. Veuillez demander une facture avec un montant spécifique.'; + + @override + String invoice_amount_label(Object amount) { + return 'Facture: $amount'; + } @override String payment_sent_status(Object status) { @@ -544,10 +608,12 @@ class AppLocalizationsFr extends AppLocalizations { String get confirm_no_session_error => 'Aucune session active'; @override - String get confirm_no_wallet_error => 'Aucun portefeuille principal disponible'; + String get confirm_no_wallet_error => + 'Aucun portefeuille principal disponible'; @override - String get payment_pending_hold => 'Paiement en attente - Facture de retenue détectée'; + String get payment_pending_hold => + 'Paiement en attente - Facture de retenue détectée'; @override String get payment_completed_success => 'Paiement effectué avec succès'; @@ -556,13 +622,15 @@ class AppLocalizationsFr extends AppLocalizations { String get payment_sent_status_prefix => 'Paiement envoyé - Statut : '; @override - String get payment_sending_error_prefix => 'Erreur lors de l\'envoi du paiement : '; + String get payment_sending_error_prefix => + 'Erreur lors de l\'envoi du paiement : '; @override String get language_selector_title => 'Langue'; @override - String get language_selector_description => 'Changer la langue de l\'application'; + String get language_selector_description => + 'Changer la langue de l\'application'; @override String get select_language => 'Sélectionner la langue'; @@ -577,7 +645,8 @@ class AppLocalizationsFr extends AppLocalizations { String get send_error_prefix => 'Erreur lors du traitement de l\'envoi : '; @override - String get decode_invoice_error_prefix => 'Erreur lors du décodage de la facture : '; + String get decode_invoice_error_prefix => + 'Erreur lors du décodage de la facture : '; @override String get payment_success => 'Paiement effectué avec succès'; @@ -592,7 +661,8 @@ class AppLocalizationsFr extends AppLocalizations { String get paste_input_hint => 'Coller la facture, LNURL ou adresse'; @override - String get conversion_rate_error => 'Erreur lors du chargement des taux de change'; + String get conversion_rate_error => + 'Erreur lors du chargement des taux de change'; @override String get instant_payments_feature => 'Paiements instantanés'; @@ -601,7 +671,8 @@ class AppLocalizationsFr extends AppLocalizations { String get favorite_server_feature => 'Avec votre serveur préféré'; @override - String get receive_info_text => '• Partagez votre adresse Lightning pour recevoir des paiements de n\'importe quel montant\n\n• Le code QR se résout automatiquement en LNURL pour une compatibilité maximale\n\n• Les paiements sont reçus directement dans ce portefeuille'; + String get receive_info_text => + '• Partagez votre adresse Lightning pour recevoir des paiements de n\'importe quel montant\n\n• Le code QR se résout automatiquement en LNURL pour une compatibilité maximale\n\n• Les paiements sont reçus directement dans ce portefeuille'; @override String get payment_description_example => 'Ex : Paiement pour services'; @@ -613,31 +684,36 @@ class AppLocalizationsFr extends AppLocalizations { String get server_prefix => 'Serveur : '; @override - String get login_subtitle => 'Entrez vos identifiants pour accéder à votre portefeuille'; + String get login_subtitle => + 'Entrez vos identifiants pour accéder à votre portefeuille'; @override String get username_required_error => 'Le nom d\'utilisateur est requis'; @override - String get username_length_error => 'Le nom d\'utilisateur doit contenir au moins 3 caractères'; + String get username_length_error => + 'Le nom d\'utilisateur doit contenir au moins 3 caractères'; @override String get password_required_error => 'Le mot de passe est requis'; @override - String get password_length_error => 'Le mot de passe doit contenir au moins 6 caractères'; + String get password_length_error => + 'Le mot de passe doit contenir au moins 6 caractères'; @override String get saved_users_header => 'Utilisateurs enregistrés'; @override - String get tap_to_autocomplete_hint => 'Appuyez pour compléter automatiquement le mot de passe'; + String get tap_to_autocomplete_hint => + 'Appuyez pour compléter automatiquement le mot de passe'; @override String get delete_credentials_title => 'Supprimer les identifiants'; @override - String get delete_credentials_message => 'En décochant cette option, les identifiants enregistrés pour cet utilisateur seront supprimés.\\n\\nÊtes-vous sûr de vouloir continuer ?'; + String get delete_credentials_message => + 'En décochant cette option, les identifiants enregistrés pour cet utilisateur seront supprimés.\\n\\nÊtes-vous sûr de vouloir continuer ?'; @override String get delete_credentials_cancel => 'Annuler'; @@ -649,22 +725,27 @@ class AppLocalizationsFr extends AppLocalizations { String get close_dialog => 'Fermer'; @override - String get credentials_found_message => 'Identifiants trouvés - le mot de passe sera retenu'; + String get credentials_found_message => + 'Identifiants trouvés - le mot de passe sera retenu'; @override - String get password_will_be_remembered => 'Le mot de passe sera retenu après la connexion'; + String get password_will_be_remembered => + 'Le mot de passe sera retenu après la connexion'; @override - String get password_saved_successfully => 'Mot de passe enregistré avec succès'; + String get password_saved_successfully => + 'Mot de passe enregistré avec succès'; @override - String get password_save_failed => 'Impossible d\'enregistrer le mot de passe'; + String get password_save_failed => + 'Impossible d\'enregistrer le mot de passe'; @override String get about_app_subtitle => 'Portefeuille Lightning'; @override - String get about_app_description => 'Une application mobile pour gérer Bitcoin via le réseau Lightning en utilisant LNBits comme backend.'; + String get about_app_description => + 'Une application mobile pour gérer Bitcoin via le réseau Lightning en utilisant LNBits comme backend.'; @override String get lightning_address_copy => 'Copier'; @@ -685,19 +766,23 @@ class AppLocalizationsFr extends AppLocalizations { String get create_new_wallet_help => 'Créer un nouveau portefeuille'; @override - String get create_wallet_short_description => 'Pour créer un nouveau portefeuille, accédez à votre panneau LNBits depuis le navigateur et utilisez l\'option \"Créer un portefeuille\".'; + String get create_wallet_short_description => + 'Pour créer un nouveau portefeuille, accédez à votre panneau LNBits depuis le navigateur et utilisez l\'option \"Créer un portefeuille\".'; @override - String get create_wallet_detailed_instructions => 'Pour créer un nouveau portefeuille :\\n\\n1. Ouvrez votre navigateur web\\n2. Accédez à votre serveur LNBits\\n3. Connectez-vous avec votre compte\\n4. Recherchez le bouton \"Créer un portefeuille\"\\n5. Attribuez un nom à votre nouveau portefeuille\\n6. Retournez à LaChispa et actualisez vos portefeuilles\\n\\nLe nouveau portefeuille apparaîtra automatiquement dans votre liste.'; + String get create_wallet_detailed_instructions => + 'Pour créer un nouveau portefeuille :\\n\\n1. Ouvrez votre navigateur web\\n2. Accédez à votre serveur LNBits\\n3. Connectez-vous avec votre compte\\n4. Recherchez le bouton \"Créer un portefeuille\"\\n5. Attribuez un nom à votre nouveau portefeuille\\n6. Retournez à LaChispa et actualisez vos portefeuilles\\n\\nLe nouveau portefeuille apparaîtra automatiquement dans votre liste.'; @override String get fixed_float_loading => 'Chargement de Fixed Float...'; @override - String get fixed_float_description => 'Échangez des cryptomonnaies avec\ndes taux fixes et sans inscription'; + String get fixed_float_description => + 'Échangez des cryptomonnaies avec\ndes taux fixes et sans inscription'; @override - String get fixed_float_webview_error => 'WebView non disponible sur cette plateforme.\nOuverture dans le navigateur externe.'; + String get fixed_float_webview_error => + 'WebView non disponible sur cette plateforme.\nOuverture dans le navigateur externe.'; @override String get fixed_float_open_button => 'Ouvrir Fixed Float'; @@ -708,7 +793,8 @@ class AppLocalizationsFr extends AppLocalizations { } @override - String get fixed_float_external_browser => 'Ouvrira Fixed Float dans le navigateur externe'; + String get fixed_float_external_browser => + 'Ouvrira Fixed Float dans le navigateur externe'; @override String get fixed_float_within_app => 'Ouvre Fixed Float dans l\'application'; @@ -717,10 +803,12 @@ class AppLocalizationsFr extends AppLocalizations { String get boltz_loading => 'Chargement de Boltz...'; @override - String get boltz_description => 'Échanges atomiques Bitcoin et Lightning\nsans confiance'; + String get boltz_description => + 'Échanges atomiques Bitcoin et Lightning\nsans confiance'; @override - String get boltz_webview_error => 'WebView non disponible sur cette plateforme.\nOuverture dans le navigateur externe.'; + String get boltz_webview_error => + 'WebView non disponible sur cette plateforme.\nOuverture dans le navigateur externe.'; @override String get boltz_open_button => 'Ouvrir Boltz'; @@ -731,7 +819,8 @@ class AppLocalizationsFr extends AppLocalizations { } @override - String get boltz_external_browser => 'Ouvrira Boltz dans le navigateur externe'; + String get boltz_external_browser => + 'Ouvrira Boltz dans le navigateur externe'; @override String get boltz_within_app => 'Ouvre Boltz dans l\'application'; @@ -752,10 +841,12 @@ class AppLocalizationsFr extends AppLocalizations { String get selected_currencies => 'Devises sélectionnées'; @override - String get no_currencies_available => 'Aucune devise disponible depuis le serveur'; + String get no_currencies_available => + 'Aucune devise disponible depuis le serveur'; @override - String get select_currencies_hint => 'Sélectionnez des devises dans la liste ci-dessus'; + String get select_currencies_hint => + 'Sélectionnez des devises dans la liste ci-dessus'; @override String get preview_title => 'Aperçu'; @@ -770,7 +861,8 @@ class AppLocalizationsFr extends AppLocalizations { String get about_title => 'À propos'; @override - String get currency_validation_info => 'Lors de la sélection d\'une devise, il sera vérifié si elle est disponible sur ce serveur'; + String get currency_validation_info => + 'Lors de la sélection d\'une devise, il sera vérifié si elle est disponible sur ce serveur'; @override String checking_currency_availability(Object currency) { @@ -783,7 +875,8 @@ class AppLocalizationsFr extends AppLocalizations { } @override - String currency_not_available_on_server(Object currency, Object currencyName) { + String currency_not_available_on_server( + Object currency, Object currencyName) { return '$currencyName ($currency) n\'est pas disponible sur ce serveur'; } @@ -796,5 +889,6 @@ class AppLocalizationsFr extends AppLocalizations { String get deep_link_login_required_title => 'Connexion requise'; @override - String get deep_link_login_required_message => 'Vous devez vous connecter à votre compte LaChispa pour traiter ce paiement.'; + String get deep_link_login_required_message => + 'Vous devez vous connecter à votre compte LaChispa pour traiter ce paiement.'; } diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 7ef529e..8c46867 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -1,3 +1,5 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; import 'app_localizations.dart'; // ignore_for_file: type=lint @@ -25,13 +27,15 @@ class AppLocalizationsIt extends AppLocalizations { String get create_new_wallet_title => 'Crea nuovo portafoglio'; @override - String get create_new_wallet_subtitle => 'Configura il tuo portafoglio Lightning'; + String get create_new_wallet_subtitle => + 'Configura il tuo portafoglio Lightning'; @override String get use_existing_wallet_title => 'Usa portafoglio esistente'; @override - String get use_existing_wallet_subtitle => 'Connettiti a un portafoglio Lightning'; + String get use_existing_wallet_subtitle => + 'Connettiti a un portafoglio Lightning'; @override String get server_settings_title => 'Server corrente'; @@ -136,7 +140,8 @@ class AppLocalizationsIt extends AppLocalizations { String get passwords_mismatch_error => 'Le password non corrispondono'; @override - String get account_creation_error_prefix => 'Errore nella creazione dell\'account: '; + String get account_creation_error_prefix => + 'Errore nella creazione dell\'account: '; @override String get wallet_title => 'Portafoglio'; @@ -169,7 +174,8 @@ class AppLocalizationsIt extends AppLocalizations { String get no_transactions_text => 'Nessuna transazione'; @override - String get no_transactions_description => 'Non hai ancora effettuato transazioni.'; + String get no_transactions_description => + 'Non hai ancora effettuato transazioni.'; @override String get sent_label => 'Inviato'; @@ -184,7 +190,11 @@ class AppLocalizationsIt extends AppLocalizations { String get failed_label => 'Fallito'; @override - String get loading_transactions_error_prefix => 'Errore nel caricamento delle transazioni: '; + String get loading_transactions_error_prefix => + 'Errore nel caricamento delle transazioni: '; + + @override + String get create_lnaddress_label => 'oppure crea un indirizzo:'; @override String get lightning_address_title => 'Indirizzo Lightning'; @@ -208,7 +218,8 @@ class AppLocalizationsIt extends AppLocalizations { String get address_copied_message => 'Indirizzo copiato negli appunti'; @override - String get loading_address_error_prefix => 'Errore nel caricamento dell\'indirizzo Lightning: '; + String get loading_address_error_prefix => + 'Errore nel caricamento dell\'indirizzo Lightning: '; @override String get settings_title => 'Informazioni'; @@ -217,7 +228,8 @@ class AppLocalizationsIt extends AppLocalizations { String get lightning_address_option => 'Indirizzo Lightning'; @override - String get lightning_address_description => 'Visualizza il tuo indirizzo Lightning'; + String get lightning_address_description => + 'Visualizza il tuo indirizzo Lightning'; @override String get logout_option => 'Disconnetti'; @@ -240,6 +252,10 @@ class AppLocalizationsIt extends AppLocalizations { @override String get receive_title => 'Ricevi'; + @override + String get create_invoice_label => + 'Crea una fattura per ricevere pagamenti direttamente nel tuo portafoglio'; + @override String get amount_sats_label => 'Importo richiesto'; @@ -277,7 +293,11 @@ class AppLocalizationsIt extends AppLocalizations { String get invoice_generated_message => 'Fattura generata con successo'; @override - String get invoice_generation_error_prefix => 'Errore nella generazione della fattura: '; + String get invoice_generation_error_prefix => + 'Errore nella generazione della fattura: '; + + @override + String get invoice_empty_response_error => 'Impossibile generare la fattura'; @override String get send_title => 'Invia'; @@ -295,10 +315,12 @@ class AppLocalizationsIt extends AppLocalizations { String get voucher_scan_title => 'Scansiona voucher'; @override - String get voucher_scan_instructions => 'Punta la fotocamera sul codice QR del voucher LNURL-withdraw'; + String get voucher_scan_instructions => + 'Punta la fotocamera sul codice QR del voucher LNURL-withdraw'; @override - String get voucher_scan_subtitle => 'L\'app rileverà automaticamente il voucher e ti permetterà di riscattarlo'; + String get voucher_scan_subtitle => + 'L\'app rileverà automaticamente il voucher e ti permetterà di riscattarlo'; @override String get voucher_scan_button => 'Scansiona QR'; @@ -313,7 +335,8 @@ class AppLocalizationsIt extends AppLocalizations { String get voucher_processing => 'Elaborazione...'; @override - String get voucher_manual_input_hint => 'Incolla il codice LNURL-withdraw del voucher:'; + String get voucher_manual_input_hint => + 'Incolla il codice LNURL-withdraw del voucher:'; @override String get voucher_manual_input_placeholder => 'lnurl1...'; @@ -350,64 +373,75 @@ class AppLocalizationsIt extends AppLocalizations { String get voucher_claimed_title => 'Voucher riscattato!'; @override - String get voucher_claimed_subtitle => 'I fondi appariranno nel tuo portafoglio a breve.'; + String get voucher_claimed_subtitle => + 'I fondi appariranno nel tuo portafoglio a breve.'; @override String get voucher_invalid_code => 'Codice non valido'; @override - String get voucher_not_valid_lnurl => 'Il codice scansionato non è un voucher LNURL-withdraw valido.'; + String get voucher_not_valid_lnurl => + 'Il codice scansionato non è un voucher LNURL-withdraw valido.'; @override - String get voucher_processing_error => 'Errore nell\'elaborazione del voucher'; + String get voucher_processing_error => + 'Errore nell\'elaborazione del voucher'; @override String get voucher_already_claimed => 'Voucher già riscattato'; @override - String get voucher_already_claimed_desc => 'Questo voucher è già stato utilizzato e non può essere riscattato nuovamente.'; + String get voucher_already_claimed_desc => + 'Questo voucher è già stato utilizzato e non può essere riscattato nuovamente.'; @override String get voucher_expired => 'Voucher scaduto'; @override - String get voucher_expired_desc => 'Questo voucher è scaduto e non è più valido.'; + String get voucher_expired_desc => + 'Questo voucher è scaduto e non è più valido.'; @override String get voucher_not_found => 'Voucher non trovato'; @override - String get voucher_not_found_desc => 'Questo voucher non è stato trovato o potrebbe essere stato rimosso.'; + String get voucher_not_found_desc => + 'Questo voucher non è stato trovato o potrebbe essere stato rimosso.'; @override String get voucher_server_error => 'Errore del server'; @override - String get voucher_server_error_desc => 'C\'è stato un problema con il server del voucher. Riprova più tardi.'; + String get voucher_server_error_desc => + 'C\'è stato un problema con il server del voucher. Riprova più tardi.'; @override String get voucher_connection_error => 'Errore di connessione'; @override - String get voucher_connection_error_desc => 'Controlla la tua connessione internet e riprova.'; + String get voucher_connection_error_desc => + 'Controlla la tua connessione internet e riprova.'; @override String get voucher_invalid_amount => 'Importo non valido'; @override - String get voucher_invalid_amount_desc => 'L\'importo del voucher non è valido o è stato corrotto.'; + String get voucher_invalid_amount_desc => + 'L\'importo del voucher non è valido o è stato corrotto.'; @override String get voucher_insufficient_funds => 'Fondi insufficienti'; @override - String get voucher_insufficient_funds_desc => 'Il voucher non ha fondi sufficienti disponibili.'; + String get voucher_insufficient_funds_desc => + 'Il voucher non ha fondi sufficienti disponibili.'; @override String get voucher_generic_error => 'Impossibile elaborare il voucher'; @override - String get voucher_generic_error_desc => 'C\'è stato un errore imprevisto nell\'elaborazione di questo voucher. Riprova o contatta il supporto.'; + String get voucher_generic_error_desc => + 'C\'è stato un errore imprevisto nell\'elaborazione di questo voucher. Riprova o contatta il supporto.'; @override String get pay_button => 'PAGA'; @@ -416,19 +450,23 @@ class AppLocalizationsIt extends AppLocalizations { String get processing_button => 'ELABORAZIONE...'; @override - String get payment_instruction_text => 'Incolla una fattura Lightning, LNURL o indirizzo'; + String get payment_instruction_text => + 'Incolla una fattura Lightning, LNURL o indirizzo'; @override - String get payment_processing_error_prefix => 'Errore nell\'elaborazione del pagamento: '; + String get payment_processing_error_prefix => + 'Errore nell\'elaborazione del pagamento: '; @override String get no_active_session_error => 'Nessuna sessione attiva'; @override - String get no_primary_wallet_error => 'Nessun portafoglio principale disponibile'; + String get no_primary_wallet_error => + 'Nessun portafoglio principale disponibile'; @override - String get invoice_decoding_error_prefix => 'Errore nella decodifica della fattura: '; + String get invoice_decoding_error_prefix => + 'Errore nella decodifica della fattura: '; @override String get send_to_title => 'Invia a'; @@ -436,6 +474,15 @@ class AppLocalizationsIt extends AppLocalizations { @override String get clear_button => 'C'; + @override + String get invoice_cleared_message => 'Fattura cancellata'; + + @override + String get clear_invoice_button => 'Cancella fattura'; + + @override + String get invoice_copied_message => 'Fattura copiata'; + @override String get decimal_button => '.'; @@ -452,40 +499,49 @@ class AppLocalizationsIt extends AppLocalizations { String get amount_processing_button => 'ELABORAZIONE...'; @override - String get exchange_rates_error => 'Errore nel caricamento dei tassi di cambio'; + String get exchange_rates_error => + 'Errore nel caricamento dei tassi di cambio'; @override String get invalid_amount_error => 'Inserisci un importo valido'; @override - String get amount_payment_error_prefix => 'Errore nell\'elaborazione del pagamento: '; + String get amount_payment_error_prefix => + 'Errore nell\'elaborazione del pagamento: '; @override String get amount_no_session_error => 'Nessuna sessione attiva'; @override - String get amount_no_wallet_error => 'Nessun portafoglio principale disponibile'; + String get amount_no_wallet_error => + 'Nessun portafoglio principale disponibile'; @override String get sending_lnurl_payment => 'Invio pagamento LNURL...'; @override - String get sending_lightning_payment => 'Invio pagamento Lightning Address...'; + String get sending_lightning_payment => + 'Invio pagamento Lightning Address...'; @override - String get lnurl_payment_pending => 'Pagamento LNURL in attesa - Fattura di blocco rilevata'; + String get lnurl_payment_pending => + 'Pagamento LNURL in attesa - Fattura di blocco rilevata'; @override - String get lnurl_payment_success => 'Pagamento LNURL completato con successo!'; + String get lnurl_payment_success => + 'Pagamento LNURL completato con successo!'; @override - String get lightning_payment_pending => 'Pagamento Lightning Address in attesa - Fattura di blocco rilevata'; + String get lightning_payment_pending => + 'Pagamento Lightning Address in attesa - Fattura di blocco rilevata'; @override - String get lightning_payment_success => 'Pagamento Lightning Address completato con successo!'; + String get lightning_payment_success => + 'Pagamento Lightning Address completato con successo!'; @override - String get insufficient_balance_error => 'Saldo insufficiente per effettuare il pagamento'; + String get insufficient_balance_error => + 'Saldo insufficiente per effettuare il pagamento'; @override String get confirm_payment_title => 'Conferma pagamento'; @@ -530,10 +586,17 @@ class AppLocalizationsIt extends AppLocalizations { String get sending_button => 'Invio...'; @override - String get invoice_expired_error => 'La fattura è scaduta e non può essere pagata'; + String get invoice_expired_error => + 'La fattura è scaduta e non può essere pagata'; @override - String get amountless_invoice_error => 'Fattura senza importo non supportata. Richiedere una fattura con un importo specifico.'; + String get amountless_invoice_error => + 'Fattura senza importo non supportata. Richiedere una fattura con un importo specifico.'; + + @override + String invoice_amount_label(Object amount) { + return 'Fattura: $amount'; + } @override String payment_sent_status(Object status) { @@ -544,10 +607,12 @@ class AppLocalizationsIt extends AppLocalizations { String get confirm_no_session_error => 'Nessuna sessione attiva'; @override - String get confirm_no_wallet_error => 'Nessun portafoglio principale disponibile'; + String get confirm_no_wallet_error => + 'Nessun portafoglio principale disponibile'; @override - String get payment_pending_hold => 'Pagamento in attesa - Fattura di blocco rilevata'; + String get payment_pending_hold => + 'Pagamento in attesa - Fattura di blocco rilevata'; @override String get payment_completed_success => 'Pagamento completato con successo'; @@ -556,13 +621,15 @@ class AppLocalizationsIt extends AppLocalizations { String get payment_sent_status_prefix => 'Pagamento inviato - Stato: '; @override - String get payment_sending_error_prefix => 'Errore nell\'invio del pagamento: '; + String get payment_sending_error_prefix => + 'Errore nell\'invio del pagamento: '; @override String get language_selector_title => 'Lingua'; @override - String get language_selector_description => 'Cambia lingua dell\'applicazione'; + String get language_selector_description => + 'Cambia lingua dell\'applicazione'; @override String get select_language => 'Seleziona lingua'; @@ -577,7 +644,8 @@ class AppLocalizationsIt extends AppLocalizations { String get send_error_prefix => 'Errore nell\'elaborazione dell\'invio: '; @override - String get decode_invoice_error_prefix => 'Errore nella decodifica della fattura: '; + String get decode_invoice_error_prefix => + 'Errore nella decodifica della fattura: '; @override String get payment_success => 'Pagamento completato con successo'; @@ -592,7 +660,8 @@ class AppLocalizationsIt extends AppLocalizations { String get paste_input_hint => 'Incolla fattura, LNURL o indirizzo'; @override - String get conversion_rate_error => 'Errore nel caricamento dei tassi di cambio'; + String get conversion_rate_error => + 'Errore nel caricamento dei tassi di cambio'; @override String get instant_payments_feature => 'Pagamenti istantanei'; @@ -601,7 +670,8 @@ class AppLocalizationsIt extends AppLocalizations { String get favorite_server_feature => 'Con il tuo server preferito'; @override - String get receive_info_text => '• Condividi il tuo indirizzo Lightning per ricevere pagamenti di qualsiasi importo\n\n• Il codice QR si risolve automaticamente in LNURL per massima compatibilità\n\n• I pagamenti vengono ricevuti direttamente in questo portafoglio'; + String get receive_info_text => + '• Condividi il tuo indirizzo Lightning per ricevere pagamenti di qualsiasi importo\n\n• Il codice QR si risolve automaticamente in LNURL per massima compatibilità\n\n• I pagamenti vengono ricevuti direttamente in questo portafoglio'; @override String get payment_description_example => 'Es: Pagamento per servizi'; @@ -613,31 +683,36 @@ class AppLocalizationsIt extends AppLocalizations { String get server_prefix => 'Server: '; @override - String get login_subtitle => 'Inserisci le tue credenziali per accedere al portafoglio'; + String get login_subtitle => + 'Inserisci le tue credenziali per accedere al portafoglio'; @override String get username_required_error => 'Nome utente richiesto'; @override - String get username_length_error => 'Il nome utente deve avere almeno 3 caratteri'; + String get username_length_error => + 'Il nome utente deve avere almeno 3 caratteri'; @override String get password_required_error => 'Password richiesta'; @override - String get password_length_error => 'La password deve avere almeno 6 caratteri'; + String get password_length_error => + 'La password deve avere almeno 6 caratteri'; @override String get saved_users_header => 'Utenti salvati'; @override - String get tap_to_autocomplete_hint => 'Tocca per completare automaticamente la password'; + String get tap_to_autocomplete_hint => + 'Tocca per completare automaticamente la password'; @override String get delete_credentials_title => 'Elimina credenziali'; @override - String get delete_credentials_message => 'Deselezionando questa opzione, le credenziali salvate per questo utente verranno eliminate.\\n\\nSei sicuro di voler continuare?'; + String get delete_credentials_message => + 'Deselezionando questa opzione, le credenziali salvate per questo utente verranno eliminate.\\n\\nSei sicuro di voler continuare?'; @override String get delete_credentials_cancel => 'Annulla'; @@ -649,10 +724,12 @@ class AppLocalizationsIt extends AppLocalizations { String get close_dialog => 'Chiudi'; @override - String get credentials_found_message => 'Credenziali trovate - la password verrà ricordata'; + String get credentials_found_message => + 'Credenziali trovate - la password verrà ricordata'; @override - String get password_will_be_remembered => 'La password verrà ricordata dopo l\'accesso'; + String get password_will_be_remembered => + 'La password verrà ricordata dopo l\'accesso'; @override String get password_saved_successfully => 'Password salvata con successo'; @@ -664,7 +741,8 @@ class AppLocalizationsIt extends AppLocalizations { String get about_app_subtitle => 'Portafoglio Lightning'; @override - String get about_app_description => 'Un\'applicazione mobile per gestire Bitcoin tramite Lightning Network utilizzando LNBits come backend.'; + String get about_app_description => + 'Un\'applicazione mobile per gestire Bitcoin tramite Lightning Network utilizzando LNBits come backend.'; @override String get lightning_address_copy => 'Copia'; @@ -685,19 +763,23 @@ class AppLocalizationsIt extends AppLocalizations { String get create_new_wallet_help => 'Crea nuovo portafoglio'; @override - String get create_wallet_short_description => 'Per creare un nuovo portafoglio, accedi al tuo pannello LNBits dal browser e usa l\'opzione \"Crea portafoglio\".'; + String get create_wallet_short_description => + 'Per creare un nuovo portafoglio, accedi al tuo pannello LNBits dal browser e usa l\'opzione \"Crea portafoglio\".'; @override - String get create_wallet_detailed_instructions => 'Per creare un nuovo portafoglio:\\n\\n1. Apri il tuo browser web\\n2. Accedi al tuo server LNBits\\n3. Effettua l\'accesso con il tuo account\\n4. Cerca il pulsante \"Crea portafoglio\"\\n5. Assegna un nome al tuo nuovo portafoglio\\n6. Torna a LaChispa e aggiorna i tuoi portafogli\\n\\nIl nuovo portafoglio apparirà automaticamente nella tua lista.'; + String get create_wallet_detailed_instructions => + 'Per creare un nuovo portafoglio:\\n\\n1. Apri il tuo browser web\\n2. Accedi al tuo server LNBits\\n3. Effettua l\'accesso con il tuo account\\n4. Cerca il pulsante \"Crea portafoglio\"\\n5. Assegna un nome al tuo nuovo portafoglio\\n6. Torna a LaChispa e aggiorna i tuoi portafogli\\n\\nIl nuovo portafoglio apparirà automaticamente nella tua lista.'; @override String get fixed_float_loading => 'Caricamento Fixed Float...'; @override - String get fixed_float_description => 'Scambia criptovalute con\ntassi fissi e senza registrazione'; + String get fixed_float_description => + 'Scambia criptovalute con\ntassi fissi e senza registrazione'; @override - String get fixed_float_webview_error => 'WebView non disponibile su questa piattaforma.\\nAprirà nel browser esterno.'; + String get fixed_float_webview_error => + 'WebView non disponibile su questa piattaforma.\\nAprirà nel browser esterno.'; @override String get fixed_float_open_button => 'Apri Fixed Float'; @@ -708,7 +790,8 @@ class AppLocalizationsIt extends AppLocalizations { } @override - String get fixed_float_external_browser => 'Aprirà Fixed Float nel browser esterno'; + String get fixed_float_external_browser => + 'Aprirà Fixed Float nel browser esterno'; @override String get fixed_float_within_app => 'Apre Fixed Float nell\'applicazione'; @@ -717,10 +800,12 @@ class AppLocalizationsIt extends AppLocalizations { String get boltz_loading => 'Caricamento Boltz...'; @override - String get boltz_description => 'Scambi atomici Bitcoin e Lightning\nsenza fiducia'; + String get boltz_description => + 'Scambi atomici Bitcoin e Lightning\nsenza fiducia'; @override - String get boltz_webview_error => 'WebView non disponibile su questa piattaforma.\\nAprirà nel browser esterno.'; + String get boltz_webview_error => + 'WebView non disponibile su questa piattaforma.\\nAprirà nel browser esterno.'; @override String get boltz_open_button => 'Apri Boltz'; @@ -770,7 +855,8 @@ class AppLocalizationsIt extends AppLocalizations { String get about_title => 'Informazioni'; @override - String get currency_validation_info => 'Quando si seleziona una valuta, verrà verificato se è disponibile su questo server'; + String get currency_validation_info => + 'Quando si seleziona una valuta, verrà verificato se è disponibile su questo server'; @override String checking_currency_availability(Object currency) { @@ -783,7 +869,8 @@ class AppLocalizationsIt extends AppLocalizations { } @override - String currency_not_available_on_server(Object currency, Object currencyName) { + String currency_not_available_on_server( + Object currency, Object currencyName) { return '$currencyName ($currency) non è disponibile su questo server'; } @@ -796,5 +883,6 @@ class AppLocalizationsIt extends AppLocalizations { String get deep_link_login_required_title => 'Accesso richiesto'; @override - String get deep_link_login_required_message => 'Devi accedere al tuo account LaChispa per elaborare questo pagamento.'; + String get deep_link_login_required_message => + 'Devi accedere al tuo account LaChispa per elaborare questo pagamento.'; } diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index acf2444..787ed2c 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -1,3 +1,5 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; import 'app_localizations.dart'; // ignore_for_file: type=lint @@ -19,19 +21,22 @@ class AppLocalizationsPt extends AppLocalizations { String get tap_to_start_hint => 'Tão fácil como acender uma faísca'; @override - String get choose_option_title => 'Conecte com o seu servidor LNBits favorito'; + String get choose_option_title => + 'Conecte com o seu servidor LNBits favorito'; @override String get create_new_wallet_title => 'Criar Nova Carteira'; @override - String get create_new_wallet_subtitle => 'Configure a sua própria carteira Lightning'; + String get create_new_wallet_subtitle => + 'Configure a sua própria carteira Lightning'; @override String get use_existing_wallet_title => 'Usar Carteira Existente'; @override - String get use_existing_wallet_subtitle => 'Conectar a uma carteira Lightning'; + String get use_existing_wallet_subtitle => + 'Conectar a uma carteira Lightning'; @override String get server_settings_title => 'Servidor Atual'; @@ -184,7 +189,11 @@ class AppLocalizationsPt extends AppLocalizations { String get failed_label => 'Falhada'; @override - String get loading_transactions_error_prefix => 'Erro ao carregar transações: '; + String get loading_transactions_error_prefix => + 'Erro ao carregar transações: '; + + @override + String get create_lnaddress_label => 'ou também pode criar um:'; @override String get lightning_address_title => 'Endereço Lightning'; @@ -205,10 +214,12 @@ class AppLocalizationsPt extends AppLocalizations { String get copy_button => 'Copiar'; @override - String get address_copied_message => 'Endereço copiado para a área de transferência'; + String get address_copied_message => + 'Endereço copiado para a área de transferência'; @override - String get loading_address_error_prefix => 'Erro ao carregar endereço Lightning: '; + String get loading_address_error_prefix => + 'Erro ao carregar endereço Lightning: '; @override String get settings_title => 'Acerca de'; @@ -229,7 +240,8 @@ class AppLocalizationsPt extends AppLocalizations { String get confirm_logout_title => 'Confirmar Fim de Sessão'; @override - String get confirm_logout_message => 'Tem a certeza de que deseja terminar a sessão?'; + String get confirm_logout_message => + 'Tem a certeza de que deseja terminar a sessão?'; @override String get cancel_button => 'Cancelar'; @@ -240,6 +252,10 @@ class AppLocalizationsPt extends AppLocalizations { @override String get receive_title => 'Receber'; + @override + String get create_invoice_label => + 'Crie uma fatura para receber pagamentos diretamente na sua carteira'; + @override String get amount_sats_label => 'Solicitar Quantia'; @@ -279,6 +295,9 @@ class AppLocalizationsPt extends AppLocalizations { @override String get invoice_generation_error_prefix => 'Erro ao gerar fatura: '; + @override + String get invoice_empty_response_error => 'Falha ao gerar fatura'; + @override String get send_title => 'Enviar'; @@ -295,10 +314,12 @@ class AppLocalizationsPt extends AppLocalizations { String get voucher_scan_title => 'Digitalizar Voucher'; @override - String get voucher_scan_instructions => 'Aponte a sua câmara para o código QR do voucher LNURL-withdraw'; + String get voucher_scan_instructions => + 'Aponte a sua câmara para o código QR do voucher LNURL-withdraw'; @override - String get voucher_scan_subtitle => 'A aplicação detetará automaticamente o voucher e permitirá que o resgate'; + String get voucher_scan_subtitle => + 'A aplicação detetará automaticamente o voucher e permitirá que o resgate'; @override String get voucher_scan_button => 'Digitalizar QR'; @@ -313,7 +334,8 @@ class AppLocalizationsPt extends AppLocalizations { String get voucher_processing => 'A processar...'; @override - String get voucher_manual_input_hint => 'Cole o código LNURL-withdraw do voucher:'; + String get voucher_manual_input_hint => + 'Cole o código LNURL-withdraw do voucher:'; @override String get voucher_manual_input_placeholder => 'lnurl1...'; @@ -350,13 +372,15 @@ class AppLocalizationsPt extends AppLocalizations { String get voucher_claimed_title => 'Voucher resgatado!'; @override - String get voucher_claimed_subtitle => 'Os fundos aparecerão na sua carteira em breve.'; + String get voucher_claimed_subtitle => + 'Os fundos aparecerão na sua carteira em breve.'; @override String get voucher_invalid_code => 'Código inválido'; @override - String get voucher_not_valid_lnurl => 'O código digitalizado não é um voucher LNURL-withdraw válido.'; + String get voucher_not_valid_lnurl => + 'O código digitalizado não é um voucher LNURL-withdraw válido.'; @override String get voucher_processing_error => 'Erro ao processar o voucher'; @@ -365,7 +389,8 @@ class AppLocalizationsPt extends AppLocalizations { String get voucher_already_claimed => 'Voucher já resgatado'; @override - String get voucher_already_claimed_desc => 'Este voucher já foi usado e não pode ser resgatado novamente.'; + String get voucher_already_claimed_desc => + 'Este voucher já foi usado e não pode ser resgatado novamente.'; @override String get voucher_expired => 'Voucher expirado'; @@ -377,37 +402,43 @@ class AppLocalizationsPt extends AppLocalizations { String get voucher_not_found => 'Voucher não encontrado'; @override - String get voucher_not_found_desc => 'Este voucher não pôde ser encontrado ou pode ter sido removido.'; + String get voucher_not_found_desc => + 'Este voucher não pôde ser encontrado ou pode ter sido removido.'; @override String get voucher_server_error => 'Erro do servidor'; @override - String get voucher_server_error_desc => 'Houve um problema com o servidor do voucher. Tente novamente mais tarde.'; + String get voucher_server_error_desc => + 'Houve um problema com o servidor do voucher. Tente novamente mais tarde.'; @override String get voucher_connection_error => 'Erro de ligação'; @override - String get voucher_connection_error_desc => 'Verifique a sua ligação à internet e tente novamente.'; + String get voucher_connection_error_desc => + 'Verifique a sua ligação à internet e tente novamente.'; @override String get voucher_invalid_amount => 'Quantia inválida'; @override - String get voucher_invalid_amount_desc => 'A quantia do voucher não é válida ou foi corrompida.'; + String get voucher_invalid_amount_desc => + 'A quantia do voucher não é válida ou foi corrompida.'; @override String get voucher_insufficient_funds => 'Fundos insuficientes'; @override - String get voucher_insufficient_funds_desc => 'O voucher não tem fundos suficientes disponíveis.'; + String get voucher_insufficient_funds_desc => + 'O voucher não tem fundos suficientes disponíveis.'; @override String get voucher_generic_error => 'Não foi possível processar o voucher'; @override - String get voucher_generic_error_desc => 'Houve um erro inesperado ao processar este voucher. Tente novamente ou contacte o suporte.'; + String get voucher_generic_error_desc => + 'Houve um erro inesperado ao processar este voucher. Tente novamente ou contacte o suporte.'; @override String get pay_button => 'PAGAR'; @@ -416,7 +447,8 @@ class AppLocalizationsPt extends AppLocalizations { String get processing_button => 'PROCESSANDO...'; @override - String get payment_instruction_text => 'Colar uma fatura Lightning, LNURL ou endereço'; + String get payment_instruction_text => + 'Colar uma fatura Lightning, LNURL ou endereço'; @override String get payment_processing_error_prefix => 'Erro ao processar pagamento: '; @@ -436,6 +468,15 @@ class AppLocalizationsPt extends AppLocalizations { @override String get clear_button => 'C'; + @override + String get invoice_cleared_message => 'Fatura limpa'; + + @override + String get clear_invoice_button => 'Limpar fatura'; + + @override + String get invoice_copied_message => 'Fatura copiada'; + @override String get decimal_button => '.'; @@ -470,22 +511,27 @@ class AppLocalizationsPt extends AppLocalizations { String get sending_lnurl_payment => 'Enviando pagamento LNURL...'; @override - String get sending_lightning_payment => 'Enviando pagamento Lightning Address...'; + String get sending_lightning_payment => + 'Enviando pagamento Lightning Address...'; @override - String get lnurl_payment_pending => 'Pagamento LNURL pendente - Fatura Hold detetada'; + String get lnurl_payment_pending => + 'Pagamento LNURL pendente - Fatura Hold detetada'; @override String get lnurl_payment_success => 'Pagamento LNURL concluído com sucesso!'; @override - String get lightning_payment_pending => 'Pagamento Lightning Address pendente - Fatura Hold detetada'; + String get lightning_payment_pending => + 'Pagamento Lightning Address pendente - Fatura Hold detetada'; @override - String get lightning_payment_success => 'Pagamento Lightning Address concluído com sucesso!'; + String get lightning_payment_success => + 'Pagamento Lightning Address concluído com sucesso!'; @override - String get insufficient_balance_error => 'Saldo insuficiente para efetuar o pagamento'; + String get insufficient_balance_error => + 'Saldo insuficiente para efetuar o pagamento'; @override String get confirm_payment_title => 'Confirmar Pagamento'; @@ -533,7 +579,13 @@ class AppLocalizationsPt extends AppLocalizations { String get invoice_expired_error => 'A fatura expirou e não pode ser paga'; @override - String get amountless_invoice_error => 'Fatura sem valor não suportada. Solicite uma fatura com um valor específico.'; + String get amountless_invoice_error => + 'Fatura sem valor não suportada. Solicite uma fatura com um valor específico.'; + + @override + String invoice_amount_label(Object amount) { + return 'Fatura: $amount'; + } @override String payment_sent_status(Object status) { @@ -547,7 +599,8 @@ class AppLocalizationsPt extends AppLocalizations { String get confirm_no_wallet_error => 'Sem carteira principal disponível'; @override - String get payment_pending_hold => 'Pagamento pendente - Fatura Hold detetada'; + String get payment_pending_hold => + 'Pagamento pendente - Fatura Hold detetada'; @override String get payment_completed_success => 'Pagamento concluído com sucesso'; @@ -601,7 +654,8 @@ class AppLocalizationsPt extends AppLocalizations { String get favorite_server_feature => 'Com o seu servidor favorito'; @override - String get receive_info_text => '• Partilhe o seu Endereço Lightning para receber pagamentos de qualquer quantia\\n\\n• O código QR resolve automaticamente para LNURL para máxima compatibilidade\\n\\n• Os pagamentos são recebidos diretamente nesta carteira'; + String get receive_info_text => + '• Partilhe o seu Endereço Lightning para receber pagamentos de qualquer quantia\\n\\n• O código QR resolve automaticamente para LNURL para máxima compatibilidade\\n\\n• Os pagamentos são recebidos diretamente nesta carteira'; @override String get payment_description_example => 'Ex: Pagamento por serviços'; @@ -613,31 +667,36 @@ class AppLocalizationsPt extends AppLocalizations { String get server_prefix => 'Servidor: '; @override - String get login_subtitle => 'Insira as suas credenciais para aceder à sua carteira'; + String get login_subtitle => + 'Insira as suas credenciais para aceder à sua carteira'; @override String get username_required_error => 'O nome de utilizador é obrigatório'; @override - String get username_length_error => 'O nome de utilizador deve ter pelo menos 3 caracteres'; + String get username_length_error => + 'O nome de utilizador deve ter pelo menos 3 caracteres'; @override String get password_required_error => 'A palavra-passe é obrigatória'; @override - String get password_length_error => 'A palavra-passe deve ter pelo menos 6 caracteres'; + String get password_length_error => + 'A palavra-passe deve ter pelo menos 6 caracteres'; @override String get saved_users_header => 'Utilizadores guardados'; @override - String get tap_to_autocomplete_hint => 'Toque para preencher automaticamente a palavra-passe'; + String get tap_to_autocomplete_hint => + 'Toque para preencher automaticamente a palavra-passe'; @override String get delete_credentials_title => 'Eliminar credenciais'; @override - String get delete_credentials_message => 'Ao desmarcar esta opção, as credenciais guardadas para este utilizador serão eliminadas.\\n\\nTem a certeza de que deseja continuar?'; + String get delete_credentials_message => + 'Ao desmarcar esta opção, as credenciais guardadas para este utilizador serão eliminadas.\\n\\nTem a certeza de que deseja continuar?'; @override String get delete_credentials_cancel => 'Cancelar'; @@ -649,13 +708,16 @@ class AppLocalizationsPt extends AppLocalizations { String get close_dialog => 'Fechar'; @override - String get credentials_found_message => 'Credenciais encontradas - a palavra-passe será lembrada'; + String get credentials_found_message => + 'Credenciais encontradas - a palavra-passe será lembrada'; @override - String get password_will_be_remembered => 'A palavra-passe será lembrada após o início de sessão'; + String get password_will_be_remembered => + 'A palavra-passe será lembrada após o início de sessão'; @override - String get password_saved_successfully => 'Palavra-passe guardada com sucesso'; + String get password_saved_successfully => + 'Palavra-passe guardada com sucesso'; @override String get password_save_failed => 'Não foi possível guardar a palavra-passe'; @@ -664,7 +726,8 @@ class AppLocalizationsPt extends AppLocalizations { String get about_app_subtitle => 'Carteira Lightning'; @override - String get about_app_description => 'Uma aplicação móvel para gerir Bitcoin através da Lightning Network usando LNBits como backend.'; + String get about_app_description => + 'Uma aplicação móvel para gerir Bitcoin através da Lightning Network usando LNBits como backend.'; @override String get lightning_address_copy => 'Copiar'; @@ -685,19 +748,23 @@ class AppLocalizationsPt extends AppLocalizations { String get create_new_wallet_help => 'Criar nova carteira'; @override - String get create_wallet_short_description => 'Para criar uma nova carteira, aceda ao seu painel LNBits pelo navegador e use a opção \\\"Criar carteira\\\".'; + String get create_wallet_short_description => + 'Para criar uma nova carteira, aceda ao seu painel LNBits pelo navegador e use a opção \\\"Criar carteira\\\".'; @override - String get create_wallet_detailed_instructions => 'Para criar uma nova carteira:\\n\\n1. Abra o seu navegador web\\n2. Aceda ao seu servidor LNBits\\n3. Inicie sessão com a sua conta\\n4. Procure o botão \\\"Criar carteira\\\"\\n5. Atribua um nome à sua nova carteira\\n6. Regresse ao LaChispa e atualize as suas carteiras\\n\\nA nova carteira aparecerá automaticamente na sua lista.'; + String get create_wallet_detailed_instructions => + 'Para criar uma nova carteira:\\n\\n1. Abra o seu navegador web\\n2. Aceda ao seu servidor LNBits\\n3. Inicie sessão com a sua conta\\n4. Procure o botão \\\"Criar carteira\\\"\\n5. Atribua um nome à sua nova carteira\\n6. Regresse ao LaChispa e atualize as suas carteiras\\n\\nA nova carteira aparecerá automaticamente na sua lista.'; @override String get fixed_float_loading => 'A carregar Fixed Float...'; @override - String get fixed_float_description => 'Troque criptomoedas com\ntaxas fixas e sem registo'; + String get fixed_float_description => + 'Troque criptomoedas com\ntaxas fixas e sem registo'; @override - String get fixed_float_webview_error => 'WebView não disponível nesta plataforma.\nAbrirá no navegador externo.'; + String get fixed_float_webview_error => + 'WebView não disponível nesta plataforma.\nAbrirá no navegador externo.'; @override String get fixed_float_open_button => 'Abrir Fixed Float'; @@ -708,7 +775,8 @@ class AppLocalizationsPt extends AppLocalizations { } @override - String get fixed_float_external_browser => 'Abrirá Fixed Float no navegador externo'; + String get fixed_float_external_browser => + 'Abrirá Fixed Float no navegador externo'; @override String get fixed_float_within_app => 'Abre Fixed Float dentro da aplicação'; @@ -717,10 +785,12 @@ class AppLocalizationsPt extends AppLocalizations { String get boltz_loading => 'A carregar Boltz...'; @override - String get boltz_description => 'Trocas atómicas de Bitcoin e Lightning\nsem necessidade de confiança'; + String get boltz_description => + 'Trocas atómicas de Bitcoin e Lightning\nsem necessidade de confiança'; @override - String get boltz_webview_error => 'WebView não disponível nesta plataforma.\nAbrirá no navegador externo.'; + String get boltz_webview_error => + 'WebView não disponível nesta plataforma.\nAbrirá no navegador externo.'; @override String get boltz_open_button => 'Abrir Boltz'; @@ -770,7 +840,8 @@ class AppLocalizationsPt extends AppLocalizations { String get about_title => 'Sobre'; @override - String get currency_validation_info => 'Ao selecionar uma moeda, será verificado se está disponível neste servidor'; + String get currency_validation_info => + 'Ao selecionar uma moeda, será verificado se está disponível neste servidor'; @override String checking_currency_availability(Object currency) { @@ -783,7 +854,8 @@ class AppLocalizationsPt extends AppLocalizations { } @override - String currency_not_available_on_server(Object currency, Object currencyName) { + String currency_not_available_on_server( + Object currency, Object currencyName) { return '$currencyName ($currency) não está disponível neste servidor'; } @@ -796,5 +868,6 @@ class AppLocalizationsPt extends AppLocalizations { String get deep_link_login_required_title => 'Login Necessário'; @override - String get deep_link_login_required_message => 'Você deve fazer login em sua conta LaChispa para processar este pagamento.'; + String get deep_link_login_required_message => + 'Você deve fazer login em sua conta LaChispa para processar este pagamento.'; } diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index 11639c6..306c310 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -1,3 +1,5 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; import 'app_localizations.dart'; // ignore_for_file: type=lint @@ -19,7 +21,8 @@ class AppLocalizationsRu extends AppLocalizations { String get tap_to_start_hint => 'Просто как зажечь искру'; @override - String get choose_option_title => 'Подключитесь к вашему любимому серверу LNBits'; + String get choose_option_title => + 'Подключитесь к вашему любимому серверу LNBits'; @override String get create_new_wallet_title => 'Создать новый кошелек'; @@ -31,7 +34,8 @@ class AppLocalizationsRu extends AppLocalizations { String get use_existing_wallet_title => 'Использовать существующий кошелек'; @override - String get use_existing_wallet_subtitle => 'Подключитесь к Lightning кошельку'; + String get use_existing_wallet_subtitle => + 'Подключитесь к Lightning кошельку'; @override String get server_settings_title => 'Текущий сервер'; @@ -184,7 +188,11 @@ class AppLocalizationsRu extends AppLocalizations { String get failed_label => 'Не удалось'; @override - String get loading_transactions_error_prefix => 'Ошибка загрузки транзакций: '; + String get loading_transactions_error_prefix => + 'Ошибка загрузки транзакций: '; + + @override + String get create_lnaddress_label => 'или вы также можете создать:'; @override String get lightning_address_title => 'Lightning адрес'; @@ -208,7 +216,8 @@ class AppLocalizationsRu extends AppLocalizations { String get address_copied_message => 'Адрес скопирован в буфер обмена'; @override - String get loading_address_error_prefix => 'Ошибка загрузки Lightning адреса: '; + String get loading_address_error_prefix => + 'Ошибка загрузки Lightning адреса: '; @override String get settings_title => 'Информация'; @@ -240,6 +249,10 @@ class AppLocalizationsRu extends AppLocalizations { @override String get receive_title => 'Получить'; + @override + String get create_invoice_label => + 'Создайте счет для получения платежей непосредственно в вашем кошельке'; + @override String get amount_sats_label => 'Запрашиваемая сумма'; @@ -279,6 +292,9 @@ class AppLocalizationsRu extends AppLocalizations { @override String get invoice_generation_error_prefix => 'Ошибка создания счета: '; + @override + String get invoice_empty_response_error => 'Не удалось создать счет'; + @override String get send_title => 'Отправить'; @@ -295,10 +311,12 @@ class AppLocalizationsRu extends AppLocalizations { String get voucher_scan_title => 'Сканировать ваучер'; @override - String get voucher_scan_instructions => 'Наведите камеру на QR-код ваучера LNURL-withdraw'; + String get voucher_scan_instructions => + 'Наведите камеру на QR-код ваучера LNURL-withdraw'; @override - String get voucher_scan_subtitle => 'Приложение автоматически обнаружит ваучер и позволит вам его активировать'; + String get voucher_scan_subtitle => + 'Приложение автоматически обнаружит ваучер и позволит вам его активировать'; @override String get voucher_scan_button => 'Сканировать QR'; @@ -313,7 +331,8 @@ class AppLocalizationsRu extends AppLocalizations { String get voucher_processing => 'Обработка...'; @override - String get voucher_manual_input_hint => 'Вставьте код ваучера LNURL-withdraw:'; + String get voucher_manual_input_hint => + 'Вставьте код ваучера LNURL-withdraw:'; @override String get voucher_manual_input_placeholder => 'lnurl1...'; @@ -350,13 +369,15 @@ class AppLocalizationsRu extends AppLocalizations { String get voucher_claimed_title => 'Ваучер активирован!'; @override - String get voucher_claimed_subtitle => 'Средства вскоре появятся в вашем кошельке.'; + String get voucher_claimed_subtitle => + 'Средства вскоре появятся в вашем кошельке.'; @override String get voucher_invalid_code => 'Неверный код'; @override - String get voucher_not_valid_lnurl => 'Отсканированный код не является действительным ваучером LNURL-withdraw.'; + String get voucher_not_valid_lnurl => + 'Отсканированный код не является действительным ваучером LNURL-withdraw.'; @override String get voucher_processing_error => 'Ошибка обработки ваучера'; @@ -365,49 +386,57 @@ class AppLocalizationsRu extends AppLocalizations { String get voucher_already_claimed => 'Ваучер уже активирован'; @override - String get voucher_already_claimed_desc => 'Этот ваучер уже был использован и не может быть активирован повторно.'; + String get voucher_already_claimed_desc => + 'Этот ваучер уже был использован и не может быть активирован повторно.'; @override String get voucher_expired => 'Ваучер истек'; @override - String get voucher_expired_desc => 'Этот ваучер истек и больше не действителен.'; + String get voucher_expired_desc => + 'Этот ваучер истек и больше не действителен.'; @override String get voucher_not_found => 'Ваучер не найден'; @override - String get voucher_not_found_desc => 'Этот ваучер не найден или мог быть удален.'; + String get voucher_not_found_desc => + 'Этот ваучер не найден или мог быть удален.'; @override String get voucher_server_error => 'Ошибка сервера'; @override - String get voucher_server_error_desc => 'Возникла проблема с сервером ваучеров. Попробуйте еще раз позже.'; + String get voucher_server_error_desc => + 'Возникла проблема с сервером ваучеров. Попробуйте еще раз позже.'; @override String get voucher_connection_error => 'Ошибка соединения'; @override - String get voucher_connection_error_desc => 'Проверьте подключение к интернету и попробуйте еще раз.'; + String get voucher_connection_error_desc => + 'Проверьте подключение к интернету и попробуйте еще раз.'; @override String get voucher_invalid_amount => 'Неверная сумма'; @override - String get voucher_invalid_amount_desc => 'Сумма ваучера недействительна или была повреждена.'; + String get voucher_invalid_amount_desc => + 'Сумма ваучера недействительна или была повреждена.'; @override String get voucher_insufficient_funds => 'Недостаточно средств'; @override - String get voucher_insufficient_funds_desc => 'У ваучера недостаточно доступных средств.'; + String get voucher_insufficient_funds_desc => + 'У ваучера недостаточно доступных средств.'; @override String get voucher_generic_error => 'Не удается обработать ваучер'; @override - String get voucher_generic_error_desc => 'Произошла неожиданная ошибка при обработке этого ваучера. Попробуйте еще раз или обратитесь в поддержку.'; + String get voucher_generic_error_desc => + 'Произошла неожиданная ошибка при обработке этого ваучера. Попробуйте еще раз или обратитесь в поддержку.'; @override String get pay_button => 'ОПЛАТИТЬ'; @@ -416,7 +445,8 @@ class AppLocalizationsRu extends AppLocalizations { String get processing_button => 'ОБРАБОТКА...'; @override - String get payment_instruction_text => 'Вставьте Lightning счет, LNURL или адрес'; + String get payment_instruction_text => + 'Вставьте Lightning счет, LNURL или адрес'; @override String get payment_processing_error_prefix => 'Ошибка обработки платежа: '; @@ -436,6 +466,15 @@ class AppLocalizationsRu extends AppLocalizations { @override String get clear_button => 'C'; + @override + String get invoice_cleared_message => 'Счет очищен'; + + @override + String get clear_invoice_button => 'Очистить счет'; + + @override + String get invoice_copied_message => 'Счет скопирован'; + @override String get decimal_button => '.'; @@ -470,22 +509,27 @@ class AppLocalizationsRu extends AppLocalizations { String get sending_lnurl_payment => 'Отправка LNURL платежа...'; @override - String get sending_lightning_payment => 'Отправка Lightning Address платежа...'; + String get sending_lightning_payment => + 'Отправка Lightning Address платежа...'; @override - String get lnurl_payment_pending => 'LNURL платеж ожидает - Обнаружен счет-холд'; + String get lnurl_payment_pending => + 'LNURL платеж ожидает - Обнаружен счет-холд'; @override String get lnurl_payment_success => 'LNURL платеж успешно завершен!'; @override - String get lightning_payment_pending => 'Lightning Address платеж ожидает - Обнаружен счет-холд'; + String get lightning_payment_pending => + 'Lightning Address платеж ожидает - Обнаружен счет-холд'; @override - String get lightning_payment_success => 'Lightning Address платеж успешно завершен!'; + String get lightning_payment_success => + 'Lightning Address платеж успешно завершен!'; @override - String get insufficient_balance_error => 'Недостаточно средств для совершения платежа'; + String get insufficient_balance_error => + 'Недостаточно средств для совершения платежа'; @override String get confirm_payment_title => 'Подтвердить платеж'; @@ -533,7 +577,13 @@ class AppLocalizationsRu extends AppLocalizations { String get invoice_expired_error => 'Счет истек и не может быть оплачен'; @override - String get amountless_invoice_error => 'Счет без суммы не поддерживается. Запросите счет с указанной суммой.'; + String get amountless_invoice_error => + 'Счет без суммы не поддерживается. Запросите счет с указанной суммой.'; + + @override + String invoice_amount_label(Object amount) { + return 'Счет: $amount'; + } @override String payment_sent_status(Object status) { @@ -601,7 +651,8 @@ class AppLocalizationsRu extends AppLocalizations { String get favorite_server_feature => 'С вашим любимым сервером'; @override - String get receive_info_text => '• Поделитесь своим Lightning адресом для получения платежей любой суммы\\n\\n• QR-код автоматически разрешается в LNURL для максимальной совместимости\\n\\n• Платежи поступают непосредственно в этот кошелек'; + String get receive_info_text => + '• Поделитесь своим Lightning адресом для получения платежей любой суммы\\n\\n• QR-код автоматически разрешается в LNURL для максимальной совместимости\\n\\n• Платежи поступают непосредственно в этот кошелек'; @override String get payment_description_example => 'Например: Оплата услуг'; @@ -613,19 +664,22 @@ class AppLocalizationsRu extends AppLocalizations { String get server_prefix => 'Сервер: '; @override - String get login_subtitle => 'Введите ваши учетные данные для доступа к кошельку'; + String get login_subtitle => + 'Введите ваши учетные данные для доступа к кошельку'; @override String get username_required_error => 'Требуется имя пользователя'; @override - String get username_length_error => 'Имя пользователя должно содержать не менее 3 символов'; + String get username_length_error => + 'Имя пользователя должно содержать не менее 3 символов'; @override String get password_required_error => 'Требуется пароль'; @override - String get password_length_error => 'Пароль должен содержать не менее 6 символов'; + String get password_length_error => + 'Пароль должен содержать не менее 6 символов'; @override String get saved_users_header => 'Сохраненные пользователи'; @@ -637,7 +691,8 @@ class AppLocalizationsRu extends AppLocalizations { String get delete_credentials_title => 'Удалить учетные данные'; @override - String get delete_credentials_message => 'Сняв этот флажок, сохраненные учетные данные для этого пользователя будут удалены.\\\\n\\\\nВы уверены, что хотите продолжить?'; + String get delete_credentials_message => + 'Сняв этот флажок, сохраненные учетные данные для этого пользователя будут удалены.\\\\n\\\\nВы уверены, что хотите продолжить?'; @override String get delete_credentials_cancel => 'Отмена'; @@ -649,7 +704,8 @@ class AppLocalizationsRu extends AppLocalizations { String get close_dialog => 'Закрыть'; @override - String get credentials_found_message => 'Учетные данные найдены - пароль будет запомнен'; + String get credentials_found_message => + 'Учетные данные найдены - пароль будет запомнен'; @override String get password_will_be_remembered => 'Пароль будет запомнен после входа'; @@ -664,7 +720,8 @@ class AppLocalizationsRu extends AppLocalizations { String get about_app_subtitle => 'Lightning кошелек'; @override - String get about_app_description => 'Мобильное приложение для управления Bitcoin через Lightning Network с использованием LNBits в качестве бэкенда.'; + String get about_app_description => + 'Мобильное приложение для управления Bitcoin через Lightning Network с использованием LNBits в качестве бэкенда.'; @override String get lightning_address_copy => 'Копировать'; @@ -685,19 +742,23 @@ class AppLocalizationsRu extends AppLocalizations { String get create_new_wallet_help => 'Создать новый кошелек'; @override - String get create_wallet_short_description => 'Чтобы создать новый кошелек, войдите в панель LNBits через браузер и используйте опцию \\\"Создать кошелек\\\".'; + String get create_wallet_short_description => + 'Чтобы создать новый кошелек, войдите в панель LNBits через браузер и используйте опцию \\\"Создать кошелек\\\".'; @override - String get create_wallet_detailed_instructions => 'Чтобы создать новый кошелек:\\\\n\\\\n1. Откройте веб-браузер\\\\n2. Войдите на ваш сервер LNBits\\\\n3. Войдите в свой аккаунт\\\\n4. Найдите кнопку \\\"Создать кошелек\\\"\\\\n5. Дайте имя вашему новому кошельку\\\\n6. Вернитесь в LaChispa и обновите ваши кошельки\\\\n\\\\nНовый кошелек автоматически появится в вашем списке.'; + String get create_wallet_detailed_instructions => + 'Чтобы создать новый кошелек:\\\\n\\\\n1. Откройте веб-браузер\\\\n2. Войдите на ваш сервер LNBits\\\\n3. Войдите в свой аккаунт\\\\n4. Найдите кнопку \\\"Создать кошелек\\\"\\\\n5. Дайте имя вашему новому кошельку\\\\n6. Вернитесь в LaChispa и обновите ваши кошельки\\\\n\\\\nНовый кошелек автоматически появится в вашем списке.'; @override String get fixed_float_loading => 'Загрузка Fixed Float...'; @override - String get fixed_float_description => 'Обменивайте криптовалюты по\\nфиксированным курсам без регистрации'; + String get fixed_float_description => + 'Обменивайте криптовалюты по\\nфиксированным курсам без регистрации'; @override - String get fixed_float_webview_error => 'WebView недоступен на этой платформе.\\\\nОткроется во внешнем браузере.'; + String get fixed_float_webview_error => + 'WebView недоступен на этой платформе.\\\\nОткроется во внешнем браузере.'; @override String get fixed_float_open_button => 'Открыть Fixed Float'; @@ -708,7 +769,8 @@ class AppLocalizationsRu extends AppLocalizations { } @override - String get fixed_float_external_browser => 'Откроет Fixed Float во внешнем браузере'; + String get fixed_float_external_browser => + 'Откроет Fixed Float во внешнем браузере'; @override String get fixed_float_within_app => 'Открывает Fixed Float в приложении'; @@ -717,10 +779,12 @@ class AppLocalizationsRu extends AppLocalizations { String get boltz_loading => 'Загрузка Boltz...'; @override - String get boltz_description => 'Атомные свопы Bitcoin и Lightning\\nбез доверия'; + String get boltz_description => + 'Атомные свопы Bitcoin и Lightning\\nбез доверия'; @override - String get boltz_webview_error => 'WebView недоступен на этой платформе.\\\\nОткроется во внешнем браузере.'; + String get boltz_webview_error => + 'WebView недоступен на этой платформе.\\\\nОткроется во внешнем браузере.'; @override String get boltz_open_button => 'Открыть Boltz'; @@ -743,7 +807,8 @@ class AppLocalizationsRu extends AppLocalizations { String get currency_settings_title => 'Выбор валют'; @override - String get currency_settings_subtitle => 'Выберите ваши предпочитаемые валюты'; + String get currency_settings_subtitle => + 'Выберите ваши предпочитаемые валюты'; @override String get available_currencies => 'Доступные валюты'; @@ -770,7 +835,8 @@ class AppLocalizationsRu extends AppLocalizations { String get about_title => 'Информация'; @override - String get currency_validation_info => 'При выборе валюты будет проверено, доступна ли она на этом сервере'; + String get currency_validation_info => + 'При выборе валюты будет проверено, доступна ли она на этом сервере'; @override String checking_currency_availability(Object currency) { @@ -783,7 +849,8 @@ class AppLocalizationsRu extends AppLocalizations { } @override - String currency_not_available_on_server(Object currency, Object currencyName) { + String currency_not_available_on_server( + Object currency, Object currencyName) { return '$currencyName ($currency) недоступна на этом сервере'; } @@ -796,5 +863,6 @@ class AppLocalizationsRu extends AppLocalizations { String get deep_link_login_required_title => 'Требуется вход в систему'; @override - String get deep_link_login_required_message => 'Вы должны войти в свою учетную запись LaChispa для обработки этого платежа.'; + String get deep_link_login_required_message => + 'Вы должны войти в свою учетную запись LaChispa для обработки этого платежа.'; } diff --git a/lib/screens/9receive_screen.dart b/lib/screens/9receive_screen.dart index 0139df1..77b1cd3 100644 --- a/lib/screens/9receive_screen.dart +++ b/lib/screens/9receive_screen.dart @@ -30,26 +30,32 @@ class _ReceiveScreenState extends State { String? _cachedLightningAddress; String? _cachedLNURL; Future? _lnurlFuture; - + // State for information panel bool _isInfoExpanded = false; - + // State for request amount modal final _amountController = TextEditingController(); final _noteController = TextEditingController(); String _selectedCurrency = 'sats'; List _currencies = ['sats']; - + // State for generated invoice LightningInvoice? _generatedInvoice; final InvoiceService _invoiceService = InvoiceService(); final YadioService _yadioService = YadioService(); final TransactionDetector _transactionDetector = TransactionDetector(); bool _isGeneratingInvoice = false; - + // Timer to verify invoice payment Timer? _invoicePaymentTimer; + // Reentrancy guard for invoice payment timer + bool _isCheckingInvoice = false; + + // Timer for invoice payment monitoring timeout (10 minutes) + Timer? _invoicePaymentTimeoutTimer; + @override void initState() { super.initState(); @@ -58,86 +64,135 @@ class _ReceiveScreenState extends State { _initializeCurrencies(); }); } - - void _initializeCurrencies() async { + + Future _initializeCurrencies() async { final currencyProvider = context.read(); final authProvider = context.read(); - - print('[RECEIVE_SCREEN] Initializing currencies...'); - print('[RECEIVE_SCREEN] Server URL: ${authProvider.currentServer}'); - - // Ensure provider has server URL configured - if (authProvider.currentServer != null) { - await currencyProvider.updateServerUrl(authProvider.currentServer); - - // Force load exchange rates to ensure they're available - await currencyProvider.loadExchangeRates(forceRefresh: true); - - print('[RECEIVE_SCREEN] Available currencies: ${currencyProvider.availableCurrencies}'); - print('[RECEIVE_SCREEN] Exchange rates loaded: ${currencyProvider.availableCurrencies.isNotEmpty}'); + + try { + // Ensure provider has server URL configured + if (authProvider.currentServer != null) { + await currencyProvider.updateServerUrl(authProvider.currentServer); + + // Force load exchange rates to ensure they're available + await currencyProvider.loadExchangeRates(forceRefresh: true); + + print( + '[RECEIVE_SCREEN] Available currencies: ${currencyProvider.availableCurrencies}', + ); + print( + '[RECEIVE_SCREEN] Exchange rates loaded: ${currencyProvider.availableCurrencies.isNotEmpty}', + ); + } + + final displaySequence = currencyProvider.displaySequence; + + if (mounted) { + setState(() { + _currencies = displaySequence.isNotEmpty ? displaySequence : ['sats']; + // Ensure selected currency is valid + if (!_currencies.contains(_selectedCurrency)) { + _selectedCurrency = _currencies.first; + } + }); + } + + print('[RECEIVE_SCREEN] Final currencies: $_currencies'); + print('[RECEIVE_SCREEN] Selected currency: $_selectedCurrency'); + } catch (e) { + print('[RECEIVE_SCREEN] Error initializing currencies: $e'); + + // Ensure UI remains stable with safe fallback + if (mounted) { + setState(() { + _currencies = ['sats']; + _selectedCurrency = 'sats'; + }); + } } - - final displaySequence = currencyProvider.displaySequence; - - if (mounted) { - setState(() { - _currencies = displaySequence.isNotEmpty ? displaySequence : ['sats']; - // Ensure selected currency is valid - if (!_currencies.contains(_selectedCurrency)) { - _selectedCurrency = _currencies.first; - } - }); + } + + /// Normalizes a localized number string to a standard format for parsing. + /// Handles both US format (1234.56) and EU format (1234,56). + double? _normalizeLocalizedNumber(String input) { + final normalized = input.replaceAll(' ', ''); + final hasComma = normalized.contains(','); + final hasDot = normalized.contains('.'); + + if (!hasComma && !hasDot) { + return double.tryParse(normalized); } - - print('[RECEIVE_SCREEN] Final currencies: $_currencies'); - print('[RECEIVE_SCREEN] Selected currency: $_selectedCurrency'); + + String normalizedString; + if (hasComma && hasDot) { + final lastComma = normalized.lastIndexOf(','); + final lastDot = normalized.lastIndexOf('.'); + if (lastComma > lastDot) { + normalizedString = normalized.replaceAll('.', '').replaceAll(',', '.'); + } else { + normalizedString = normalized.replaceAll(',', ''); + } + } else if (hasComma) { + normalizedString = normalized.replaceAll(',', '.'); + } else { + normalizedString = normalized; + } + + return double.tryParse(normalizedString); } - + /// Convert fiat amount to sats using inverse conversion (same method as amount_screen) Future _getAmountInSats(double amount, String currency) async { print('[RECEIVE_SCREEN] Converting $amount $currency to sats'); - + if (currency == 'sats') { return amount.round(); } - + // Use INVERSE conversion from the working convertSatsToFiat method // This ensures we use exactly the same rates as home_screen try { final currencyProvider = context.read(); - + print('[RECEIVE_SCREEN] Using inverse conversion method for consistency'); - + // Step 1: Get rate by converting 1 BTC (100M sats) to fiat const oneBtcInSats = 100000000; // 1 BTC = 100M sats - final oneBtcInFiat = await currencyProvider.convertSatsToFiat(oneBtcInSats, currency); - - print('[RECEIVE_SCREEN] Rate check: $oneBtcInSats sats = $oneBtcInFiat $currency'); - - // Step 2: Parse the result to get numeric rate - final fiatString = oneBtcInFiat.replaceAll(RegExp(r'[^\d.]'), ''); // Remove non-numeric chars - final oneBtcRate = double.tryParse(fiatString); - + final oneBtcInFiat = await currencyProvider.convertSatsToFiat( + oneBtcInSats, + currency, + ); + + print( + '[RECEIVE_SCREEN] Rate check: $oneBtcInSats sats = $oneBtcInFiat $currency', + ); + + // Step 2: Parse the result to get numeric rate (handles localized formats) + final oneBtcRate = _normalizeLocalizedNumber(oneBtcInFiat); + if (oneBtcRate == null || oneBtcRate <= 0) { throw Exception('Invalid rate obtained: $oneBtcInFiat'); } - + print('[RECEIVE_SCREEN] Parsed rate: 1 BTC = $oneBtcRate $currency'); - + // Step 3: Calculate sats using inverse proportion // If 1 BTC = oneBtcRate fiat, then amount fiat = ? sats // sats = (amount / oneBtcRate) * 100000000 final btcAmount = amount / oneBtcRate; final satsAmount = (btcAmount * 100000000).round(); - - print('[RECEIVE_SCREEN] Conversion successful: $amount $currency = $satsAmount sats'); - print('[RECEIVE_SCREEN] Math: ($amount / $oneBtcRate) * 100000000 = $satsAmount'); - + + print( + '[RECEIVE_SCREEN] Conversion successful: $amount $currency = $satsAmount sats', + ); + print( + '[RECEIVE_SCREEN] Math: ($amount / $oneBtcRate) * 100000000 = $satsAmount', + ); + return satsAmount; - } catch (e) { print('[RECEIVE_SCREEN] Error with inverse conversion: $e'); - + // Fallback to YadioService as last resort try { print('[RECEIVE_SCREEN] Trying YadioService fallback'); @@ -145,7 +200,9 @@ class _ReceiveScreenState extends State { amount: amount, currency: currency, ); - print('[RECEIVE_SCREEN] YadioService conversion: $amount $currency = $sats sats'); + print( + '[RECEIVE_SCREEN] YadioService conversion: $amount $currency = $sats sats', + ); return sats; } catch (fallbackError) { print('[RECEIVE_SCREEN] All conversion methods failed: $fallbackError'); @@ -161,6 +218,7 @@ class _ReceiveScreenState extends State { _invoiceService.dispose(); _yadioService.dispose(); _invoicePaymentTimer?.cancel(); + _invoicePaymentTimeoutTimer?.cancel(); super.dispose(); } @@ -177,7 +235,8 @@ class _ReceiveScreenState extends State { } // Only load addresses if they are not already loaded - if (lnAddressProvider.currentWalletAddresses.isEmpty && !lnAddressProvider.isLoading) { + if (lnAddressProvider.currentWalletAddresses.isEmpty && + !lnAddressProvider.isLoading) { lnAddressProvider.loadAllAddresses(); } } @@ -191,11 +250,7 @@ class _ReceiveScreenState extends State { gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, - colors: [ - Color(0xFF0F1419), - Color(0xFF1A1D47), - Color(0xFF2D3FE7), - ], + colors: [Color(0xFF0F1419), Color(0xFF1A1D47), Color(0xFF2D3FE7)], stops: [0.0, 0.5, 1.0], ), ), @@ -206,11 +261,18 @@ class _ReceiveScreenState extends State { children: [ // Header with navigation _buildHeader(), - + // Main content Expanded( - child: Consumer3( - builder: (context, lnAddressProvider, walletProvider, authProvider, child) { + child: Consumer3( + builder: ( + context, + lnAddressProvider, + walletProvider, + authProvider, + child, + ) { final isMobile = MediaQuery.of(context).size.width < 768; return SingleChildScrollView( padding: EdgeInsets.symmetric( @@ -220,7 +282,10 @@ class _ReceiveScreenState extends State { child: Column( children: [ SizedBox(height: isMobile ? 8 : 12), - _buildMainContent(lnAddressProvider, walletProvider), + _buildMainContent( + lnAddressProvider, + walletProvider, + ), ], ), ); @@ -238,7 +303,7 @@ class _ReceiveScreenState extends State { Widget _buildHeader() { final isMobile = MediaQuery.of(context).size.width < 768; - + return Container( padding: const EdgeInsets.fromLTRB(24, 16, 24, 8), child: Column( @@ -277,9 +342,9 @@ class _ReceiveScreenState extends State { padding: EdgeInsets.zero, ), ), - + const Spacer(), - + // QR Scan button for vouchers Container( width: 40, @@ -312,9 +377,9 @@ class _ReceiveScreenState extends State { ), ], ), - + SizedBox(height: isMobile ? 0 : 4), - + // Centered title Text( AppLocalizations.of(context)!.receive_title, @@ -332,23 +397,23 @@ class _ReceiveScreenState extends State { ); } - Widget _buildMainContent(LNAddressProvider lnAddressProvider, WalletProvider walletProvider) { + Widget _buildMainContent( + LNAddressProvider lnAddressProvider, + WalletProvider walletProvider, + ) { final defaultAddress = lnAddressProvider.defaultAddress; - - if (lnAddressProvider.isLoading) { - return _buildLoadingState(); - } - - if (lnAddressProvider.error != null) { - return _buildErrorState(lnAddressProvider.error!); - } - - if (defaultAddress == null) { - return _buildNoAddressState(); + + // Show Lightning Address with QR if available - prioritize this + if (defaultAddress != null) { + return _buildLightningAddressCard(defaultAddress, walletProvider); } - - // Show Lightning Address with QR - return _buildLightningAddressCard(defaultAddress, walletProvider); + + // No address - show invoice-only flow with loading/error as secondary info + return _buildNoAddressState( + walletProvider, + isLoading: lnAddressProvider.isLoading, + error: lnAddressProvider.error, + ); } Widget _buildLoadingState() { @@ -449,7 +514,15 @@ class _ReceiveScreenState extends State { ); } - Widget _buildNoAddressState() { + Widget _buildNoAddressState( + WalletProvider walletProvider, { + bool isLoading = false, + String? error, + }) { + if (_generatedInvoice != null) { + return _buildInvoiceOnlyCard(walletProvider); + } + return Container( padding: const EdgeInsets.all(24), decoration: BoxDecoration( @@ -463,14 +536,38 @@ class _ReceiveScreenState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ + if (isLoading) + const Padding( + padding: EdgeInsets.only(bottom: 16), + child: SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator( + strokeWidth: 2, + color: Colors.white54, + ), + ), + ) + else if (error != null) + Padding( + padding: const EdgeInsets.only(bottom: 16), + child: Text( + error, + style: TextStyle( + color: Colors.red.shade300, + fontSize: 12, + ), + textAlign: TextAlign.center, + ), + ), Icon( - Icons.alternate_email, + Icons.qr_code_2, color: Colors.white.withValues(alpha: 0.6), size: 64, ), const SizedBox(height: 24), Text( - AppLocalizations.of(context)!.not_available_text, + AppLocalizations.of(context)!.receive_title, style: TextStyle( color: Colors.white, fontSize: 20, @@ -480,7 +577,7 @@ class _ReceiveScreenState extends State { ), const SizedBox(height: 12), Text( - AppLocalizations.of(context)!.lightning_address_description, + AppLocalizations.of(context)!.create_invoice_label, style: TextStyle( color: Colors.white.withValues(alpha: 0.8), fontSize: 16, @@ -508,14 +605,7 @@ class _ReceiveScreenState extends State { ], ), child: ElevatedButton.icon( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const LNAddressScreen(), - ), - ); - }, + onPressed: _showRequestAmountModal, style: ElevatedButton.styleFrom( backgroundColor: Colors.transparent, shadowColor: Colors.transparent, @@ -524,9 +614,9 @@ class _ReceiveScreenState extends State { borderRadius: BorderRadius.circular(16), ), ), - icon: const Icon(Icons.add, color: Colors.white), + icon: const Icon(Icons.request_quote, color: Colors.white), label: Text( - AppLocalizations.of(context)!.lightning_address_title, + AppLocalizations.of(context)!.amount_sats_label, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, @@ -537,12 +627,17 @@ class _ReceiveScreenState extends State { ), ), ), + const SizedBox(height: 16), + _buildCreateLnAddressCta(), ], ), ); } - Widget _buildLightningAddressCard(LNAddress defaultAddress, WalletProvider walletProvider) { + Widget _buildLightningAddressCard( + LNAddress defaultAddress, + WalletProvider walletProvider, + ) { return Container( padding: const EdgeInsets.all(24), decoration: BoxDecoration( @@ -565,14 +660,14 @@ class _ReceiveScreenState extends State { children: [ // QR Code with LNURL _buildQRSection(defaultAddress), - + const SizedBox(height: 16), - + // Lightning Address and copy button together _buildAddressWithCopySection(defaultAddress), - + const SizedBox(height: 16), - + // Collapsible contextual information _buildCollapsibleInfoSection(), ], @@ -580,18 +675,178 @@ class _ReceiveScreenState extends State { ); } + Widget _buildInvoiceOnlyCard(WalletProvider walletProvider) { + final invoice = _generatedInvoice!; + return Container( + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.08), + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: Colors.white.withValues(alpha: 0.1), + width: 1, + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.1), + blurRadius: 10, + offset: const Offset(0, 4), + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + // QR Code for invoice + Center(child: _buildInvoiceQR(invoice)), + + const SizedBox(height: 16), + + // Invoice amount display + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.05), + borderRadius: BorderRadius.circular(12), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.bolt, color: Colors.amber, size: 24), + const SizedBox(width: 8), + Text( + invoice.formattedAmount, + style: const TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.w600, + fontFamily: 'Inter', + ), + ), + ], + ), + ), + + if (invoice.memo.isNotEmpty) ...[ + const SizedBox(height: 8), + Text( + invoice.memo, + style: TextStyle( + color: Colors.white.withValues(alpha: 0.7), + fontSize: 14, + fontFamily: 'Inter', + ), + textAlign: TextAlign.center, + ), + ], + + const SizedBox(height: 16), + + // Copy invoice button + _buildCopyInvoiceButton(), + + const SizedBox(height: 12), + + // Clear invoice / Create new button + _buildClearInvoiceButton(), + + const SizedBox(height: 16), + + // Option to create LNAddress + _buildCreateLnAddressCta(topSpacing: 12, textAlign: TextAlign.center), + ], + ), + ); + } + + Widget _buildCopyInvoiceButton() { + return SizedBox( + width: double.infinity, + child: Container( + decoration: BoxDecoration( + gradient: const LinearGradient( + colors: [Color(0xFF2D3FE7), Color(0xFF4C63F7)], + begin: Alignment.centerLeft, + end: Alignment.centerRight, + ), + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: const Color(0xFF2D3FE7).withValues(alpha: 0.3), + blurRadius: 12, + offset: const Offset(0, 6), + ), + ], + ), + child: ElevatedButton.icon( + onPressed: _copyInvoicePaymentRequest, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.transparent, + shadowColor: Colors.transparent, + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + ), + ), + icon: const Icon(Icons.copy, color: Colors.white, size: 20), + label: Text( + AppLocalizations.of(context)!.copy_button, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + fontFamily: 'Inter', + color: Colors.white, + ), + ), + ), + ), + ); + } + + void _copyInvoicePaymentRequest() async { + final invoice = _generatedInvoice; + if (invoice == null) return; + + await Clipboard.setData(ClipboardData(text: invoice.paymentRequest)); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Row( + children: [ + const Icon(Icons.check_circle, color: Colors.white, size: 20), + const SizedBox(width: 12), + Expanded( + child: Text( + AppLocalizations.of(context)!.invoice_copied_message, + style: const TextStyle( + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ), + backgroundColor: Colors.green, + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + duration: const Duration(seconds: 2), + ), + ); + } + } + Widget _buildWalletInfo(WalletProvider walletProvider) { final wallet = walletProvider.primaryWallet; if (wallet == null) return const SizedBox.shrink(); - + return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.05), borderRadius: BorderRadius.circular(12), - border: Border.all( - color: Colors.white.withValues(alpha: 0.1), - ), + border: Border.all(color: Colors.white.withValues(alpha: 0.1)), ), child: Row( children: [ @@ -623,7 +878,7 @@ class _ReceiveScreenState extends State { ), const SizedBox(height: 2), Text( - 'Balance: ${wallet.balanceFormatted}', + '${AppLocalizations.of(context)!.balance_label}: ${wallet.balanceFormatted}', style: TextStyle( color: Colors.white.withValues(alpha: 0.7), fontSize: 14, @@ -645,9 +900,7 @@ class _ReceiveScreenState extends State { decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.05), borderRadius: BorderRadius.circular(12), - border: Border.all( - color: Colors.white.withValues(alpha: 0.1), - ), + border: Border.all(color: Colors.white.withValues(alpha: 0.1)), ), child: Column( crossAxisAlignment: CrossAxisAlignment.center, @@ -674,7 +927,6 @@ class _ReceiveScreenState extends State { ); } - Widget _buildQRSection(LNAddress defaultAddress) { return Center( child: Container( @@ -683,9 +935,7 @@ class _ReceiveScreenState extends State { decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(6), // More square: from 16 to 6 - border: Border.all( - color: Colors.white.withValues(alpha: 0.2), - ), + border: Border.all(color: Colors.white.withValues(alpha: 0.2)), ), child: _buildQRCodeWithLNURL(defaultAddress), ), @@ -695,26 +945,33 @@ class _ReceiveScreenState extends State { Widget _buildQRCodeWithLNURL(LNAddress defaultAddress) { // If there's a generated invoice, show its QR if (_generatedInvoice != null) { - print('[RECEIVE_SCREEN] Mostrando QR de factura: ${_generatedInvoice!.paymentRequest.substring(0, 20)}...'); + print( + '[RECEIVE_SCREEN] Mostrando QR de factura: ${_generatedInvoice!.paymentRequest.substring(0, 20)}...', + ); return _buildInvoiceQR(_generatedInvoice!); } - + // If there's no invoice, show Lightning Address final lnurl = defaultAddress.lnurl; - + if (lnurl != null && lnurl.isNotEmpty) { - print('[RECEIVE_SCREEN] Usando LNURL de LNBits: ${lnurl.substring(0, 20)}...${lnurl.substring(lnurl.length - 10)}'); + print( + '[RECEIVE_SCREEN] Usando LNURL de LNBits: ${lnurl.substring(0, 20)}...${lnurl.substring(lnurl.length - 10)}', + ); return _buildSuccessQR(lnurl); } else { print('[RECEIVE_SCREEN] No hay LNURL en el modelo, usando fallback'); - return _buildFallbackQR(defaultAddress.fullAddress, 'LNURL no disponible en LNBits'); + return _buildFallbackQR( + defaultAddress.fullAddress, + 'LNURL no disponible en LNBits', + ); } } Widget _buildLoadingQR() { return SizedBox( height: 220, // Reduced from 280 to 220 - width: 220, // Reduced from 280 to 220 + width: 220, // Reduced from 280 to 220 child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -837,7 +1094,9 @@ class _ReceiveScreenState extends State { ), icon: const Icon(Icons.copy, color: Colors.white, size: 20), label: Text( - _generatedInvoice != null ? AppLocalizations.of(context)!.copy_button : AppLocalizations.of(context)!.copy_lightning_address, + _generatedInvoice != null + ? AppLocalizations.of(context)!.copy_button + : AppLocalizations.of(context)!.copy_lightning_address, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.w600, @@ -856,23 +1115,23 @@ class _ReceiveScreenState extends State { children: [ // Lightning Address display _buildAddressDisplay(defaultAddress), - + const SizedBox(height: 12), - + // Copy button right below _buildCopyButton(defaultAddress), - + const SizedBox(height: 12), - + // LNURL copy button _buildCopyLNURLButton(defaultAddress), - + const SizedBox(height: 12), - + // Request amount button or clear invoice button - _generatedInvoice != null - ? _buildClearInvoiceButton() - : _buildRequestAmountButton(), + _generatedInvoice != null + ? _buildClearInvoiceButton() + : _buildRequestAmountButton(), ], ); } @@ -929,7 +1188,7 @@ class _ReceiveScreenState extends State { ), ), ), - + // Expandable content if (_isInfoExpanded) Container( @@ -996,7 +1255,10 @@ class _ReceiveScreenState extends State { onPressed: () { // Cancel monitoring of current invoice _invoicePaymentTimer?.cancel(); - + _invoicePaymentTimer = null; + _invoicePaymentTimeoutTimer?.cancel(); + _invoicePaymentTimeoutTimer = null; + setState(() { _generatedInvoice = null; }); @@ -1007,7 +1269,7 @@ class _ReceiveScreenState extends State { Icon(Icons.refresh, color: Colors.white, size: 20), SizedBox(width: 12), Text( - AppLocalizations.of(context)!.lightning_address_title, + AppLocalizations.of(context)!.invoice_cleared_message, style: TextStyle( fontFamily: 'Inter', fontWeight: FontWeight.w500, @@ -1037,7 +1299,7 @@ class _ReceiveScreenState extends State { ), icon: const Icon(Icons.refresh, size: 20), label: Text( - AppLocalizations.of(context)!.receive_title, + AppLocalizations.of(context)!.clear_invoice_button, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, @@ -1091,7 +1353,7 @@ class _ReceiveScreenState extends State { borderRadius: BorderRadius.circular(2), ), ), - + // Header Container( padding: const EdgeInsets.all(24), @@ -1124,7 +1386,7 @@ class _ReceiveScreenState extends State { ], ), ), - + // Modal content Padding( padding: const EdgeInsets.symmetric(horizontal: 24), @@ -1144,7 +1406,9 @@ class _ReceiveScreenState extends State { Text( AppLocalizations.of(context)!.amount_label, style: TextStyle( - color: Colors.white.withValues(alpha: 0.8), + color: Colors.white.withValues( + alpha: 0.8, + ), fontSize: 14, fontWeight: FontWeight.w500, fontFamily: 'Inter', @@ -1162,20 +1426,28 @@ class _ReceiveScreenState extends State { decoration: InputDecoration( hintText: '0', hintStyle: TextStyle( - color: Colors.white.withValues(alpha: 0.5), + color: Colors.white.withValues( + alpha: 0.5, + ), ), filled: true, - fillColor: Colors.white.withValues(alpha: 0.05), + fillColor: Colors.white.withValues( + alpha: 0.05, + ), border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide( - color: Colors.white.withValues(alpha: 0.1), + color: Colors.white.withValues( + alpha: 0.1, + ), ), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide( - color: Colors.white.withValues(alpha: 0.1), + color: Colors.white.withValues( + alpha: 0.1, + ), ), ), focusedBorder: OutlineInputBorder( @@ -1184,7 +1456,8 @@ class _ReceiveScreenState extends State { color: Color(0xFF4C63F7), ), ), - contentPadding: const EdgeInsets.symmetric( + contentPadding: + const EdgeInsets.symmetric( horizontal: 16, vertical: 16, ), @@ -1193,9 +1466,9 @@ class _ReceiveScreenState extends State { ], ), ), - + const SizedBox(width: 12), - + // Currency selector Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -1220,16 +1493,23 @@ class _ReceiveScreenState extends State { borderRadius: BorderRadius.circular(12), onTap: () { setModalState(() { - final currentIndex = _currencies.indexOf(_selectedCurrency); - final nextIndex = (currentIndex + 1) % _currencies.length; - _selectedCurrency = _currencies[nextIndex]; + final currentIndex = _currencies + .indexOf(_selectedCurrency); + final nextIndex = (currentIndex + 1) % + _currencies.length; + _selectedCurrency = + _currencies[nextIndex]; }); }, child: Container( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular( + 12, + ), border: Border.all( - color: Colors.white.withValues(alpha: 0.1), + color: Colors.white.withValues( + alpha: 0.1, + ), ), ), child: Center( @@ -1251,15 +1531,18 @@ class _ReceiveScreenState extends State { ), ], ), - + const SizedBox(height: 16), - + // Note input Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - AppLocalizations.of(context)!.optional_description_label, + AppLocalizations.of( + context, + )! + .optional_description_label, style: TextStyle( color: Colors.white.withValues(alpha: 0.8), fontSize: 14, @@ -1276,7 +1559,10 @@ class _ReceiveScreenState extends State { fontFamily: 'Inter', ), decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.payment_description_example, + hintText: AppLocalizations.of( + context, + )! + .payment_description_example, hintStyle: TextStyle( color: Colors.white.withValues(alpha: 0.5), ), @@ -1309,9 +1595,9 @@ class _ReceiveScreenState extends State { ), ], ), - + const SizedBox(height: 24), - + // Buttons Padding( padding: const EdgeInsets.only(bottom: 24), @@ -1323,9 +1609,13 @@ class _ReceiveScreenState extends State { style: OutlinedButton.styleFrom( foregroundColor: Colors.white, side: BorderSide( - color: Colors.white.withValues(alpha: 0.3), + color: Colors.white.withValues( + alpha: 0.3, + ), + ), + padding: const EdgeInsets.symmetric( + vertical: 16, ), - padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), @@ -1347,14 +1637,19 @@ class _ReceiveScreenState extends State { style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF2D3FE7), foregroundColor: Colors.white, - padding: const EdgeInsets.symmetric(vertical: 16), + padding: const EdgeInsets.symmetric( + vertical: 16, + ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), elevation: 0, ), child: Text( - AppLocalizations.of(context)!.confirm_button, + AppLocalizations.of( + context, + )! + .confirm_button, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, @@ -1404,10 +1699,10 @@ class _ReceiveScreenState extends State { // Get necessary data final walletProvider = context.read(); final authProvider = context.read(); - + final wallet = walletProvider.primaryWallet; final serverUrl = authProvider.sessionData?.serverUrl; - + if (wallet == null || serverUrl == null) { throw Exception(AppLocalizations.of(context)!.no_wallet_error); } @@ -1415,35 +1710,42 @@ class _ReceiveScreenState extends State { // CURRENCY CONVERSION TO SATOSHIS print('[RECEIVE_SCREEN] === STARTING CURRENCY CONVERSION ==='); print('[RECEIVE_SCREEN] Amount: $amount $_selectedCurrency'); - + // ALWAYS use fresh conversion with consistent rates final amountInSats = await _getAmountInSats(amount, _selectedCurrency); - final conversionMessage = _selectedCurrency == 'sats' - ? 'Factura: $amountInSats sats' + + // Check if widget was disposed during async operation + if (!mounted) { + print('[RECEIVE_SCREEN] Widget disposed, aborting invoice generation'); + return; + } + + final conversionMessage = _selectedCurrency == 'sats' + ? AppLocalizations.of(context)! + .invoice_amount_label('$amountInSats sats') : '$amount $_selectedCurrency / $amountInSats sats'; - + print('[RECEIVE_SCREEN] Final conversion result: $conversionMessage'); - + // Basic validations if (amountInSats < 1) { throw Exception('Monto convertido muy pequeño (mínimo 1 sat)'); } - + // Validate extremely large amounts that can cause server problems - if (amountInSats > 2100000000000000) { // 21M BTC en sats + if (amountInSats > 2100000000000000) { + // 21M BTC en sats throw Exception('Monto muy grande. Máximo: 21M BTC'); } - - if (amountInSats > 100000000000) { // 1000 BTC as practical limit - print('[RECEIVE_SCREEN] ⚠️ WARNING: Very large amount ($amountInSats sats = ${(amountInSats/100000000).toStringAsFixed(2)} BTC)'); + + if (amountInSats > 100000000000) { + // 1000 BTC as practical limit + print( + '[RECEIVE_SCREEN] ⚠️ WARNING: Very large amount ($amountInSats sats = ${(amountInSats / 100000000).toStringAsFixed(2)} BTC)', + ); } print('[RECEIVE_SCREEN] Generando factura: $amountInSats sats'); - print('[RECEIVE_SCREEN] Server: $serverUrl'); - print('[RECEIVE_SCREEN] Wallet: ${wallet.name}'); - print('[RECEIVE_SCREEN] Original currency: $_selectedCurrency'); - print('[RECEIVE_SCREEN] Original amount: $amount'); - print('[RECEIVE_SCREEN] Original rate: ${_selectedCurrency != 'sats' ? (amountInSats / amount) : 'N/A'}'); // Prepare memo with fiat info as fallback for LNBits limitations String? finalMemo; @@ -1451,7 +1753,8 @@ class _ReceiveScreenState extends State { finalMemo = _noteController.text.trim(); } else if (_selectedCurrency != 'sats') { // Use fiat amount as memo when no custom note (fallback for LNBits) - finalMemo = '${amount.toStringAsFixed(amount.truncateToDouble() == amount ? 0 : 2)} $_selectedCurrency'; + finalMemo = + '${amount.toStringAsFixed(amount.truncateToDouble() == amount ? 0 : 2)} $_selectedCurrency'; } // Generate invoice with amount in satoshis and original fiat information @@ -1460,12 +1763,39 @@ class _ReceiveScreenState extends State { adminKey: wallet.adminKey, amount: amountInSats, memo: finalMemo, - comment: _noteController.text.trim().isNotEmpty ? _noteController.text.trim() : null, - originalFiatCurrency: _selectedCurrency != 'sats' ? _selectedCurrency : null, + comment: _noteController.text.trim().isNotEmpty + ? _noteController.text.trim() + : null, + originalFiatCurrency: + _selectedCurrency != 'sats' ? _selectedCurrency : null, originalFiatAmount: _selectedCurrency != 'sats' ? amount : null, - originalFiatRate: _selectedCurrency != 'sats' ? (amountInSats / amount) : null, + originalFiatRate: + _selectedCurrency != 'sats' ? (amountInSats / amount) : null, ); + // Validate BOLT11 response before updating state + if (invoice.paymentRequest.isEmpty) { + setState(() { + _isGeneratingInvoice = false; + }); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + AppLocalizations.of(context)!.invoice_empty_response_error), + backgroundColor: Colors.red, + ), + ); + } + return; + } + + // Check if widget was disposed during async operation + if (!mounted) { + print('[RECEIVE_SCREEN] Widget disposed, aborting invoice generation'); + return; + } + // Update state setState(() { _generatedInvoice = invoice; @@ -1485,7 +1815,10 @@ class _ReceiveScreenState extends State { mainAxisSize: MainAxisSize.min, children: [ Text( - conversionMessage.isNotEmpty ? conversionMessage : 'Factura: ${invoice.formattedAmount}', + conversionMessage.isNotEmpty + ? conversionMessage + : AppLocalizations.of(context)! + .invoice_amount_label(invoice.formattedAmount), style: const TextStyle( fontFamily: 'Inter', fontWeight: FontWeight.w500, @@ -1506,18 +1839,25 @@ class _ReceiveScreenState extends State { ), ); - print('[RECEIVE_SCREEN] Factura generada exitosamente: ${invoice.paymentHash}'); - + print( + '[RECEIVE_SCREEN] Factura generada exitosamente: ${invoice.paymentHash}', + ); + // Start automatic verification of invoice payment _startInvoicePaymentMonitoring(invoice, wallet, serverUrl); - } catch (e) { print('[RECEIVE_SCREEN] Error generando factura: $e'); - + + // Check if widget was disposed before updating state + if (!mounted) { + print('[RECEIVE_SCREEN] Widget disposed, skipping error handling'); + return; + } + setState(() { _isGeneratingInvoice = false; }); - + _showErrorSnackBar('Error generando factura: ${e.toString()}'); } } @@ -1544,9 +1884,7 @@ class _ReceiveScreenState extends State { ), backgroundColor: Colors.red, behavior: SnackBarBehavior.floating, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), duration: const Duration(seconds: 3), ), ); @@ -1570,9 +1908,7 @@ class _ReceiveScreenState extends State { ), backgroundColor: const Color(0xFF4C63F7), behavior: SnackBarBehavior.floating, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), duration: const Duration(seconds: 2), ), ); @@ -1581,17 +1917,17 @@ class _ReceiveScreenState extends State { void _copyPaymentInfo(LNAddress defaultAddress) async { String textToCopy; String successMessage; - + if (_generatedInvoice != null) { // If there's a generated invoice, copy the invoice textToCopy = _generatedInvoice!.paymentRequest; - successMessage = AppLocalizations.of(context)!.copy_button; + successMessage = AppLocalizations.of(context)!.invoice_copied_message; } else { // If there's no invoice, copy the Lightning Address textToCopy = defaultAddress.fullAddress; successMessage = AppLocalizations.of(context)!.address_copied_message; } - + await Clipboard.setData(ClipboardData(text: textToCopy)); if (mounted) { ScaffoldMessenger.of(context).showSnackBar( @@ -1620,39 +1956,55 @@ class _ReceiveScreenState extends State { } } - void _startInvoicePaymentMonitoring(LightningInvoice invoice, WalletInfo wallet, String serverUrl) { - print('[RECEIVE_SCREEN] Iniciando monitoreo de pago para factura: ${invoice.paymentHash}'); - + void _startInvoicePaymentMonitoring( + LightningInvoice invoice, + WalletInfo wallet, + String serverUrl, + ) { + print( + '[RECEIVE_SCREEN] Iniciando monitoreo de pago para factura: ${invoice.paymentHash}', + ); + // Cancel previous timer if it exists _invoicePaymentTimer?.cancel(); - + // Check every 2 seconds if the invoice was paid - _invoicePaymentTimer = Timer.periodic(const Duration(seconds: 2), (timer) async { - if (!mounted) { - timer.cancel(); + _invoicePaymentTimer = Timer.periodic(const Duration(seconds: 2), ( + timer, + ) async { + // Reentrancy guard - skip if already checking + if (_isCheckingInvoice) { return; } - + _isCheckingInvoice = true; + try { + if (!mounted) { + timer.cancel(); + return; + } + // Check invoice status final isPaid = await _invoiceService.checkInvoiceStatus( serverUrl: serverUrl, adminKey: wallet.adminKey, paymentHash: invoice.paymentHash, ); - + if (isPaid) { print('[RECEIVE_SCREEN] Invoice paid! Starting celebration sequence'); timer.cancel(); - + if (mounted) { // 1. FIRST: Activate spark effect - print('[RECEIVE_SCREEN] 🎆 Activando efecto chispa por pago recibido'); + print( + '[RECEIVE_SCREEN] 🎆 Activando efecto chispa por pago recibido', + ); _transactionDetector.triggerEventSpark('invoice_paid'); - + // 2. AFTER: Navigate to HomeScreen to show spark effect Navigator.of(context).popUntil((route) => route.isFirst); - + // 3. FINALLY: Wait a moment and show green notification Future.delayed(const Duration(milliseconds: 800), () { if (mounted) { @@ -1660,7 +2012,11 @@ class _ReceiveScreenState extends State { SnackBar( content: Row( children: [ - const Icon(Icons.check_circle, color: Colors.white, size: 20), + const Icon( + Icons.check_circle, + color: Colors.white, + size: 20, + ), const SizedBox(width: 12), Text( '${AppLocalizations.of(context)!.received_label}! ${invoice.formattedAmount}', @@ -1686,11 +2042,14 @@ class _ReceiveScreenState extends State { } catch (e) { print('[RECEIVE_SCREEN] Error verificando estado de factura: $e'); // Continue checking in case of temporary error + } finally { + _isCheckingInvoice = false; } }); - + // Auto-cancel after 10 minutes to avoid infinite monitoring - Timer(const Duration(minutes: 10), () { + _invoicePaymentTimeoutTimer?.cancel(); + _invoicePaymentTimeoutTimer = Timer(const Duration(minutes: 10), () { _invoicePaymentTimer?.cancel(); print('[RECEIVE_SCREEN] Timeout: Deteniendo monitoreo de factura'); }); @@ -1727,7 +2086,7 @@ class _ReceiveScreenState extends State { void _copyLNURL(LNAddress defaultAddress) async { final lnurl = defaultAddress.lnurl; - + if (lnurl != null && lnurl.isNotEmpty) { await Clipboard.setData(ClipboardData(text: lnurl)); if (mounted) { @@ -1816,9 +2175,59 @@ class _ReceiveScreenState extends State { void _navigateToVoucherScreen() { Navigator.push( context, - MaterialPageRoute( - builder: (context) => const VoucherScanScreen(), - ), + MaterialPageRoute(builder: (context) => const VoucherScanScreen()), ); } -} \ No newline at end of file + + Widget _buildCreateLnAddressCta( + {double topSpacing = 16, TextAlign? textAlign}) { + return Column( + children: [ + SizedBox(height: topSpacing), + Text( + AppLocalizations.of(context)!.create_lnaddress_label, + style: TextStyle( + color: Colors.white.withValues(alpha: 0.6), + fontSize: 14, + fontFamily: 'Inter', + ), + textAlign: textAlign, + ), + const SizedBox(height: 16), + SizedBox( + width: double.infinity, + child: OutlinedButton.icon( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const LNAddressScreen(), + ), + ); + }, + style: OutlinedButton.styleFrom( + foregroundColor: Colors.white, + side: BorderSide( + color: Colors.white.withValues(alpha: 0.3), + width: 1.5, + ), + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + ), + ), + icon: const Icon(Icons.add, size: 20), + label: Text( + AppLocalizations.of(context)!.lightning_address_title, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + fontFamily: 'Inter', + ), + ), + ), + ), + ], + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index dcdabb6..150a059 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.4.1+5 environment: - sdk: '>=3.0.0 <4.0.0' + sdk: '>=3.3.0 <4.0.0' dependencies: flutter: @@ -20,9 +20,10 @@ dependencies: crypto: ^3.0.3 qr_flutter: ^4.1.0 mobile_scanner: ^5.0.0 - intl: ^0.19.0 + intl: ^0.20.2 url_launcher: ^6.2.2 - webview_flutter: ^4.4.2 + webview_flutter: ^4.13.1 + webview_flutter_android: ^4.10.13 package_info_plus: ^8.3.1 app_links: ^6.3.2