From 5b561d52ae756f62ae220ebfd76f6effd415e202 Mon Sep 17 00:00:00 2001 From: atlasan Date: Tue, 31 Jan 2023 15:24:13 +0100 Subject: [PATCH 1/3] Translations - added IT locale - added some untranslated strings to locale conf files - this is a first try run test, Doc? Marty --- assets/translations/en.json | 7 +- assets/translations/es.json | 7 +- assets/translations/fr.json | 7 +- assets/translations/it.json | 215 ++++++++++++++++++ lib/main.dart | 8 +- lib/providers/generate_wallets.dart | 2 + lib/screens/myWallets/custom_derivations.dart | 2 +- lib/screens/settings.dart | 7 +- 8 files changed, 245 insertions(+), 10 deletions(-) create mode 100644 assets/translations/it.json diff --git a/assets/translations/en.json b/assets/translations/en.json index ab23e7f..55570ff 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -205,5 +205,10 @@ "memberAccountOf": "Account of {}", "pasteAddress": "Paste address from\nclipboard", "historyStart" :"Beginning of history", - "blockchainStart": "Beginning of the ĞDev" + "blockchainStart": "Beginning of the ĞDev", + "networkSettings": "Network Settings", + "displaySettings": "Display Settings", + "indexer": "Indexer", + "anAutoNodeChoosed": "A secure and valid node will be automatically used from a random list.", + "rootWallet": "Root Wallet" } \ No newline at end of file diff --git a/assets/translations/es.json b/assets/translations/es.json index d2dbf30..065c10a 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -206,5 +206,10 @@ "memberAccountOf": "Account of {}", "pasteAddress": "Paste address from\nclipboard", "historyStart" :"Beginning of history", - "blockchainStart": "Comienzo de la ĞDev" + "blockchainStart": "Comienzo de la ĞDev", + "networkSettings": "Parametros de red", + "displaySettings": "Parametros interficie", + "indexer": "Indexer", + "anAutoNodeChoosed": "Se usará automáticamente un nodo seguro y valido desde una lista aleatoria.", + "rootWallet": "Monedero raíz" } diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 11e6b74..095b1ab 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -206,5 +206,10 @@ "memberAccountOf": "Compte de {}", "pasteAddress": "Coller l'adresse depuis\nle presse-papier", "historyStart" :"Début de l'historique", - "blockchainStart": "Début de la ĞDev" + "blockchainStart": "Début de la ĞDev", + "networkSettings": "Connectivité réseau", + "displaySettings": "Affichage", + "indexer": "Indexer", + "anAutoNodeChoosed": "Un noeud sûr et valide sera choisi automatiquement parmis une liste aléatoire.", + "rootWallet": "Portefeuille racine" } diff --git a/assets/translations/it.json b/assets/translations/it.json new file mode 100644 index 0000000..82d5619 --- /dev/null +++ b/assets/translations/it.json @@ -0,0 +1,215 @@ +{ + "searchWallet": "Cerca\nportafoglio", + "manageWallets": "Gestisci\nportafogli", + "scanQRCode": "Scannerizza un\ncodice QR", + "wellConnectedToNode": "Sei ben connesso al nodo\n{}", + "networkLost": "Rete persa...", + "noDuniterEndointAvailable": "Server non disponibile...", + "connectionPending": "Connessione in corso...", + "noLizard": "non ci sono lucertole ;-)", + "loading": "Caricando...", + "forgot_password.png": "forgot_password_es.png", + "warningForgotPassword": "In una catena di blocchi o blockchain, non ci sono procedure per recupero tramite email. Solo la tua frase di recupero puó permetterti di recuperare i tuoi Ğ1 in qualunque momento.", + "fastAppDescription": "L'applicazione di pagamento {}\npiú rapida che un rettile del Vietnam", + "createWallet": "Crea un portafoglio", + "restoreWallet": "Restaura miei portafogli", + "parameters": "Parametri", + "chooseAnotherMnemonic": "Scegli un'altra frase di recupero", + "iNotedMyMnemonic": "Ho annotato la mia frase di recupero", + "printMyMnemonic": "Stampa la mia frase di recupero", + "manageChest": "Configura questo scrigno", + "changeChest": "Cambia scrigno", + "GeckoChest": "Scrigno di Ğecko", + "toUnlockEnterPassword": "Per sbloccare il tuo scrigno, introduci la password, lontano da lucertole curiose:", + "rememberPassword": "Mantieni in memoria la mia password per 15 minuti", + "myRootWallet": "Il mio portafoglio principale", + "currentWallet": "Il mio scrigno attuale", + "wallet": "portafoglio", + "displayMnemonic": "Mostra la mia frase di recupero", + "changePassword": "Cambia la mia password", + "createDerivation": "Crea una nuova derivazione", + "createCustomDerivation": "Crea una nuova derivazione personalizzata", + "deleteChest": "Elimina questo scrigno", + "openThisChest": "Apri questo scrigno", + "createChest": "Crea un nuovo scrigno", + "importChest": "Importa uno scrigno", + "selectMyChest": "Seleziona scrigno", + "accessMyChest": "Accedi a scrigno", + "manageMembership": "Amministra affiliazione", + "chooseThisWallet": "Scegli questo portafoglio", + "thisWalletIsDefault": "portafoglio predefinito", + "defineWalletAsDefault": "Imposta come predefinito", + "displayActivity": "Visualizza attivitá", + "displayNActivity": "Visualizza\nattivitá", + "memberValidated": "Membro confermato!", + "copyAddress": "Copia\nl'indirizzo", + "copy": "Copia", + "thisAddressHasBeenCopiedToClipboard": "Questo indirizzo é stato copiato negli appunti", + "chooseWalletName": "Scegli un nuovo nome\nper il tuo portafoglio:", + "choosePassword": "Scegli una password casuale:", + "chooseDerivation": "Scegli una derivazione:", + "validate": "Valida", + "confirm": "Conferma", + "confirmPayment": "Conferma pagamento", + "GeckoGenerateYourWalletFromMnemonic": "Ğecko costruisce il tuo portafoglio da una **frase di recupero**. É come una mappa che permette ricostruire il tuo portafoglio.", + "keepThisMnemonicSecure": "Sii attento nel salvare e conservare questa frase, perché senza di essa Ğecko non potrá ricostruire il tuo portafoglio il giorno che cambierai dispositivo.", + "GeckoGeneratedYourMnemonicKeepItSecret": "Ğecko ha generato la tua frase di recupero! Mantienila segreta, perché chiunque che la sappia potrá accedere al tuo portafoglio.", + "newWallet": "Nuovo portafoglio", + "itsTimeToUseAPenAndPaper": "É il momento di prendere **carta e penna** per annotare la frase di recupero.", + "yourMnemonic": "la tua frase di recupero", + "gecko_also_can_forget.png": "gecko_also_can_forget_es.png", + "didYouNoteMnemonicToBeSureTypeWord": "Ti sei segnato bene la frase di recupero? Per assicurarcene, scrivi la **parola {}** della tua frase di recupero:", + "GeckoWillGenerateAPassword": "Ora Ğecko ti creerá una password corta che ti permetterá accedere rapidamente ai tuoi portafogli, senza dover ogni volta inserire la frase di recupero.", + "myPassword": "La mia password", + "thisPasswordProtectsYourWalletsInASecureChest": "Questa password protegge i tuo portafogli e uno scrigno **di cui solo tu hai accesso**, cosicché i tuoi portafogli non possano essere usati da altri.", + "hereIsThePasswordKeepIt": "Ecco la tua password!\n\nMemorizzala e annotala, perché Ğecko te la chiederá **ogni volta** che si voglia effettuare una pagamento da questo dispositivo.", + "chooseAnotherPassword": "Scegli un'altra password", + "iNotedMyPassword": "Ho annotato la password", + "GeckoWillCheckPassword": "Ğecko controllará insieme a te se ti ricordi la password. Scrivi la password per controllare che l'hai appuntata correttamente.", + "yourChestAndWalletWereCreatedSuccessfully": "Fantastico!\n\nIl tuo scrigno e il primo portafoglio sono stati creati con successo.\n\nCongratulazioni!", + "allGood": "Tutto bene!", + "areYouSureToDeleteWallet": "Sicuro che vuoi eliminare lo scrigno \"{}\"?", + "areYouSureForgetAllChests": "Sicuro che vuoi dimenticare tutti i tuoi scrigni?", + "areYouSureToForgetWallet": "Sicuro che vuoi dimenticare il tuo portafoglio \"{}\"?", + "areYouSureYouWantToCertify": "Sicuro che vuoi certificare l'indirizzo\n\n{}?", + "areYouSureYouWantToCertify1": "Sicuro che vuoi certificare l'identitá :", + "areYouSureYouWantToCertify2": " all'indirizzo :", + "yes": "Sí", + "no": "No", + "keepYourMnemonicSecret": "Cerca di mantenere questa frase di recupero segreta, essa permette a chiunque la conosca di accedere a tutti i tuoi portafogli.", + "iGeneratedYourMnemonicKeepItSecret": "La tua frase di recupero é stata creata!\nCerca di mantenere questa frase di recupero segreta, essa permette a chiunque la conosca di accedere a tutti i tuoi portafogli.", + "myMnemonic": "la mia frase di recupero", + "close": "Chiudi", + "toRestoreEnterMnemonic": "Per recuperare i tuoi portafogli Ğecko, introduci le 12 parole che compongono la tua frase di recupero:", + "pasteFromClipboard": "Incolla dagli\nappunti", + "restoreAChest": "Recupera uno scrigno", + "restoreThisChest": "Recupera questo scrigno", + "continue": "Continua", + "itsTheGoodWord": "É la parola corretta!", + "nthMnemonicWord": "parola della tua mnemotecnia", + "1th": "Prima", + "2th": "Seconda", + "3th": "Terza", + "4th": "Quarta", + "5th": "Quinta", + "6th": "Sesta", + "7th": "Settima", + "8th": "Ottava", + "9th": "Nona", + "10th": "Decima", + "11th": "Undicesima", + "12th": "Dodicesima", + "yourPasswordLengthIsX": "La lunghezza della tua password é {}", + "noIdentity": "Nessuna identitá", + "identityCreated": "Identitá creata", + "identityConfirmed": "Identitá confermata", + "identityExpired": "Identitá scaduta", + "confirmYourIdentity": "Conferma identitá", + "noDuniterNodeAvailableTryLater": "Non ci sono nodi Duniter disponibili, per favore, riprova piú tardi", + "youAreConnectedToNode": "Sei connesso al nodo", + "accountActivity": "Attivitá del conto", + "noNetworkNoHistory": "Lo stato della rete non lo permette\nmostra lo storico del conto", + "noDataToDisplay": "Non ci sono dati da mostrare.", + "noTransactionToDisplay": "Non ci sono transazioni da mostrare", + "month1": "Gennaio", + "month2": "Febbraio", + "month3": "Marzo", + "month4": "Aprile", + "month5": "Maggio", + "month6": "Giugno", + "month7": "Luglio", + "month8": "Agosto", + "month9": "Settembre", + "month10": "Ottobre", + "month11": "Novembre", + "month12": "Dicembre", + "today": "Oggi", + "yesterday": "Ieri", + "thisWeek": "Questa settimana", + "chestNotCompatibleMustReinstallGecko": "la versione dei tuoi scrigni non é compatibile con questa versione di Ğecko.\nTutti i tuoi scrigni saranno dimenticati, dovrai importarli di nuovo.", + "notConnectedToInternet": "Non connesso ad Internet", + "researchResults": "Risultati ricerca", + "resultsFor": "Risultati per ", + "forgetAllMyChests": "Dimentica tutti i miei scrigni", + "transaction": "Transazione", + "certification": "Certificazione", + "identityConfirm": "Conferma di identitá", + "revokeAdhesion": "Revocazione di adesione", + "strangeTransaction": "Transazione 'strana'", + "sending": "Inviando...", + "propagating": "Propagando...", + "validating": "Validando...", + "anErrorOccured": "Si é verificato un errore", + "24hbetweenCerts": "Bisogna aspettare 24 ore fra le certificazioni", + "canNotCertifySelf": "Non puoi certificare te stesso", + "nameAlreadyExist": "Nome giá in uso", + "2GDtoKeepAlive": "Devi mantenere almeno 2ĞD per mantenere il conto vivo", + "youHaveToFeedThisAccountBeforeUsing": "Devi incrementare il saldo\ndi questo conto prima di usarlo.", + "execTimeoutOver": "Tempo di esecuzione terminato", + "seeAWallet": "Vedi un portafoglio", + "mustWaitXBeforeCertify": "Devi aspettare\n{} prima di\ncertificare di nuovo", + "mustConfirmHisIdentity": "Questa persona deve confermare\nla sua identitá prima di essere certificata", + "canRenewCertInX": "Potrai rinnovare\nla certificazione\nin {}", + "executeATransfer": "Esegui una transazione", + "executeTheTransfer": "Esegui la transazione", + "doATransfer" : "Esegui una\ntransazione", + "seconds": "{} secondi", + "minutes": "{} minuti", + "hours": "{} ore {}", + "days": "{} giorni", + "months": "{} mesi", + "certify": "Certifica questa\nidentitá", + "from": "Da:", + "to": "A:", + "amount": "Importo:", + "choiceOfSourceWallet": "Scegli un portafoglio sorgente", + "extrinsicInProgress": "{} in corso", + "extrinsicValidated": "¡ {} validato !", + "fromMinus": "da", + "toMinus": "a", + "deleteThisWallet": "Elimina questo portafoglio", + "cancel": "Annulla", + "inBlockchainResult": "Nella blockchain {}", + "search": "Cerca una identitá\no un indirizzo", + "currencyNode": "Nodo {} :", + "contactsManagementWithNbr": "I miei contatti ({})", + "contactsManagement": "I miei contatti", + "noContacts": "Non ci sono contatti salvati", + "addContact": "Aggiungi\nun contatto", + "removeContact": "Elimina\nquesto contatto", + "derivationsScanProgress": "Scannerizzando l'indirizzo {}/{}", + "youAreOffline": "Disconnesso...", + "importG1v1": "Importa il conto antico da G1v1, versione precedente", + "selectDestWallet": "Seleziona un portafoglio di destinazione:", + "youMustWaitBeforeCashoutThisAccount": "Devi aspettare qualche minuto prima di migrare questo conto", + "thisAccountIsEmpty": "Questo conto é vuoto", + "youCannotMigrateIdentityToExistingIdentity": "Non si puó migrare un'identitá\na un conto che ne ha giá una", + "importOldAccount": "Importa conto precedente", + "enterCesiumId": "Inserisci la tua frase segreta di Cesium", + "enterCesiumPassword": "Inserisci la tua password di Cesium", + "migrateAccount": "Migra conto", + "migrateIdentity": "Migra identitá", + "identityMigration": "Migrazione dell'identitá", + "areYouSureMigrateIdentity": "Sei sicuro che vuoi permanentemente migrare l'identitá **{}** con saldo di **{}**?", + "someoneCreatedYourIdentity": "Qualcuno ha creato la tua {} identitá !", + "confirmMyIdentity": "Conferma la mia identitá", + "revokeMyIdentity": "Revoca la mia identitá", + "youCannotRevokeThisIdentity": "Non puoi revocare questa identitá fintanto che\nappartieni alla rete di forgiatori", + "showUdAmounts": "Mostra importi in DU", + "ud": "{}DU", + "chooseATargetWallet": "Scegli un portafoglio di destinazione", + "thisMnemonicHasBeenCopiedToClipboard": "Questo mnemonic é statocopiato negli appunti", + "smithCantMigrateIdentity":"Non puoi migrare questa identitá fintanto che\nappartieni alla rete di forgiatori", + "received": "Ricevuto", + "sent": "Inviato", + "createIdentity": "Crea una nuova \nidentitá", + "memberAccountOf": "Conto di {}", + "pasteAddress": "Incolla l'indirizzo \ndagli appunti", + "historyStart" :"Inizio della storia", + "blockchainStart": "Inizio di ĞDev", + "networkSettings": "Impostazioni di rete", + "displaySettings": "Impostazioni interfaccia", + "indexer": "Indexer", + "anAutoNodeChoosed": "Un nodo sicuro e valido sará automaticamente scelto da una lista casuale.", + "rootWallet": "Portafoglio radice" +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 28de2c7..2a85c73 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -100,7 +100,8 @@ Future main() async { supportedLocales: const [ Locale('en'), Locale('fr'), - Locale('es') + Locale('es'), + Locale('it'), ], path: 'assets/translations', fallbackLocale: const Locale('en'), @@ -108,12 +109,13 @@ Future main() async { )); })); } else { - log.i('Debug mode enabled: No sentry alerte'); + log.i('Debug mode enabled: No sentry alert'); SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) .then((_) { runApp(EasyLocalization( - supportedLocales: const [Locale('en'), Locale('fr'), Locale('es')], + // test, force locale :: startLocale: Locale.fromSubtags(languageCode: 'it'), + supportedLocales: const [Locale('en'), Locale('fr'), Locale('es'), Locale('it'),], path: 'assets/translations', fallbackLocale: const Locale('en'), child: const Gecko(), diff --git a/lib/providers/generate_wallets.dart b/lib/providers/generate_wallets.dart index 7a7955b..066c48e 100644 --- a/lib/providers/generate_wallets.dart +++ b/lib/providers/generate_wallets.dart @@ -271,6 +271,7 @@ class GenerateWalletsProvider with ChangeNotifier { // Needed for bad encoding of UTF-8 word = word.replaceAll('é', 'é'); word = word.replaceAll('è', 'è'); + // TODO: what about á à ó ò í ì ú ù ... ? make a function to clean data int nbrMatch = 0; if (bip39Words(appLang).contains(word.toLowerCase())) { @@ -291,6 +292,7 @@ class GenerateWalletsProvider with ChangeNotifier { // Needed for bad encoding of UTF-8 word = word.replaceAll('é', 'é'); word = word.replaceAll('è', 'è'); + // TODO: what about á à ó ò í ì ú ù ... ? make a function to clean data if (!bip39Words(appLang).contains(word.toLowerCase())) { isValid = false; } diff --git a/lib/screens/myWallets/custom_derivations.dart b/lib/screens/myWallets/custom_derivations.dart index d03769c..82089b4 100644 --- a/lib/screens/myWallets/custom_derivations.dart +++ b/lib/screens/myWallets/custom_derivations.dart @@ -129,7 +129,7 @@ class _CustomDerivationState extends State { '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}'; if (dropdownValue == 'root') { await myWalletProvider.generateRootWallet( - context, 'Portefeuille racine'); + context, 'rootWallet'.tr()); } else { await myWalletProvider.generateNewDerivation( context, diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 6225a32..18c61df 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -33,7 +33,7 @@ class SettingsScreen extends StatelessWidget { body: Column(children: [ const SizedBox(height: 30), Text( - 'Connectivité réseau', + 'networkSettings'.tr(), style: TextStyle(color: Colors.grey[500], fontSize: 22), ), const SizedBox(height: 20), @@ -42,7 +42,7 @@ class SettingsScreen extends StatelessWidget { indexerEndpointSelection(context), const SizedBox(height: 40), Text( - 'Affichage', + 'displaySettings'.tr(), style: TextStyle(color: Colors.grey[500], fontSize: 22), ), const SizedBox(height: 20), @@ -297,7 +297,8 @@ class SettingsScreen extends StatelessWidget { const SizedBox(width: 10), const SizedBox( width: 100, - child: Text('Indexer : '), + // child: Text('indexer'.tr()), // why translation does not work?? + child: Text('Indexer'), ), const Spacer(), Icon(indexerEndpoint != '' ? Icons.check : Icons.close), From 31627c206038b82b54174a5a407491dc633cf5aa Mon Sep 17 00:00:00 2001 From: atlasan Date: Tue, 31 Jan 2023 16:16:43 +0100 Subject: [PATCH 2/3] fix format - after translation mods --- lib/main.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 2a85c73..41828cd 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -101,7 +101,7 @@ Future main() async { Locale('en'), Locale('fr'), Locale('es'), - Locale('it'), + Locale('it') ], path: 'assets/translations', fallbackLocale: const Locale('en'), @@ -115,7 +115,12 @@ Future main() async { .then((_) { runApp(EasyLocalization( // test, force locale :: startLocale: Locale.fromSubtags(languageCode: 'it'), - supportedLocales: const [Locale('en'), Locale('fr'), Locale('es'), Locale('it'),], + supportedLocales: const [ + Locale('en'), + Locale('fr'), + Locale('es'), + Locale('it') + ], path: 'assets/translations', fallbackLocale: const Locale('en'), child: const Gecko(), From 22325f7299ffa5a5a25d84281929c7f92d0fb30b Mon Sep 17 00:00:00 2001 From: atlasan Date: Tue, 31 Jan 2023 16:34:45 +0100 Subject: [PATCH 3/3] remove unused import - after translations --- lib/screens/myWallets/wallets_home.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/screens/myWallets/wallets_home.dart b/lib/screens/myWallets/wallets_home.dart index 754b175..a7002d5 100644 --- a/lib/screens/myWallets/wallets_home.dart +++ b/lib/screens/myWallets/wallets_home.dart @@ -24,7 +24,7 @@ import 'package:gecko/widgets/commons/smooth_transition.dart'; import 'package:provider/provider.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:truncate/truncate.dart'; -import 'package:tutorial_coach_mark/tutorial_coach_mark.dart'; +// import 'package:tutorial_coach_mark/tutorial_coach_mark.dart'; class WalletsHome extends StatefulWidget { const WalletsHome({Key? key}) : super(key: key);