diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000000000000000000000000000000000..da0c9bca54d97dfd8734fcb906643a777f6635ee --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "printWidth": 120, + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index d2ddd5752c982da5de37600a591e4da684f82829..291053cc97d8d24e6f551d11fa5434202bbf5935 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["dart-code.dart-code", "dart-code.flutter"] + "recommendations": ["dart-code.dart-code", "dart-code.flutter", "esbenp.prettier-vscode"] } diff --git a/README.md b/README.md index f81ea5dcfed9a9a2c3b8b3ed54467184288322d8..b97c9be39f2a22d8ffa0a55edfc579f1a1e8cc59 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,34 @@ # Äž1nkgo - + Äž1nkgo (aka Ginkgo) is a lightweight Äž1 wallet for Duniter v1 written in Flutter. The app allows users to manage their Äž1 currency on their mobile device using just a browser. ## Features -- Introduction for beginners -- Generation of Cesium wallet and persistence (if you refresh the page, it should display the same - wallet address). -- A point-of-sale device that generates a QR code for the public address and other QR codes with - amounts (which lightweight wallets will understand). -- Send Äž1 transactions -- Transactions history page and Balance with persistence to load last transactions on boot -- Contact management and cache (to avoid too much API petitions) -- Internationalization (i18n) -- QR code reader -- Import/export of your wallet -- Automatic discover and selection of nodes, error recovery & retry -- Customizable via [env file](https://git.duniter.org/vjrj/ginkgo/-/blob/master/assets/env.production.txt) -- Inline tutorials -- Pagination of transactions -- Some contextual help (for example, by tapping on "Validity"). +- Introduction for beginners +- Generation of Cesium wallet and persistence (if you refresh the page, it should display the same + wallet address). +- A point-of-sale device that generates a QR code for the public address and other QR codes with + amounts (which lightweight wallets will understand). +- Send Äž1 transactions +- Transactions history page and Balance with persistence to load last transactions on boot +- Contact management and cache (to avoid too much API petitions) +- Internationalization (i18n) +- QR code reader +- Import/export of your wallet +- Automatic discover and selection of nodes, error recovery & retry +- Customizable via [env file](https://git.duniter.org/vjrj/ginkgo/-/blob/master/assets/env.production.txt) +- Inline tutorials +- Pagination of transactions +- Some contextual help (for example, by tapping on "Validity"). + +## Screenshots + +| Wallet | Terminal card | +| ---------------------------------------------------------------- | ---------------------------------------------------------------------- | +|  |  | ## Demo @@ -32,8 +38,8 @@ This is a demo used for testing a development, please use a production server fo ## Äž1nkgo in production -- [https://g1nkgo.comunes.org](https://g1nkgo.comunes.org) -- (...) +- [https://g1nkgo.comunes.org](https://g1nkgo.comunes.org) +- (...) ## Translations @@ -148,43 +154,47 @@ In order to do gva operations, you should disable cors in the flutter run config --web-browser-flag "--disable-web-security" ``` - + -### Pub packages used +### Easy Localization -This repository makes use of the following pub packages: +To add translations, add a .json translation file in the [assets/translations](./assets/translations) +folder, by prefixing the file with the language code (for example, `en.json` for English). +The file should be in the format: -| Package | Version | Usage | -| ------------------------------------------------------------------- | ------- | ----------------------------------------------------- | -| [Durt](https://pub.dev/packages/durt) | ^0.1.6 | Duniter crypto lib | -| [Bloc](https://pub.dev/packages/bloc) | ^8.1.0 | State management | -| [Flutter Bloc](https://pub.dev/packages/flutter_bloc) | ^8.1.1 | State management | -| [Hydrated Bloc](https://pub.dev/packages/hydrated_bloc) | ^9.0.0 | Persists Bloc state with Hive | -| [Equatable](https://pub.dev/packages/equatable) | ^2.0.5 | Easily compare custom classes, used for Bloc states\* | -| [Flutter Lints](https://pub.dev/packages/flutter_lints) | ^2.0.1 | Stricter linting rules | -| [Path Provider](https://pub.dev/packages/path_provider) | ^2.0.11 | Get the save path for Hive | -| [Flutter Displaymode](https://pub.dev/packages/flutter_displaymode) | ^0.5.0 | Support high refresh rate displays | -| [Easy Localization](https://pub.dev/packages/easy_localization) | ^3.0.1 | Makes localization easy | -| [Hive](https://pub.dev/packages/hive) | ^2.2.3 | Platform independent storage. | -| [Url Launcher](https://pub.dev/packages/url_launcher) | ^6.1.7 | Open urls in Browser | -| [Ionicons](https://pub.dev/packages/ionicons) | ^0.2.2 | Modern icon library | +```json +{ + "key": "value" +} +``` -### Easy Localization +Then, add the language in the [main.dart](./lib/main.dart) file: + +```dart +supportedLocales: const <Locale>[ + Locale('en', ''), +], +``` -To add translations, add it to `assets/translations` and enable it in `main.dart`. Also go -to [ios/Runner/Info.plist](./ios/Runner/Info.plist) and update the following code: +Go to [ios/Runner/Info.plist](./ios/Runner/Info.plist) and update the following code: ``` + <key>CFBundleLocalizations</key> <array> - <string>en</string> - <string>es</string> - <string>fr</string> - <string>ca</string> + <string>en</string> </array> + ``` -`` +Finally, add the language to the User Interface in the [screen](./lib/fifth_screen.dart) file: + +```dart +DropdownMenuItem<Locale>( + value: Locale('en'), + child: Text('English'), +), +``` ## Troubleshooting @@ -194,38 +204,56 @@ to [ios/Runner/Info.plist](./ios/Runner/Info.plist) and update the following cod 4. And in last resort, you can try to delete the `pubspec.lock` file and run `flutter pub get` again. 5. Finally, there is a troubleshooting command in flutter: `flutter doctor -v`. -## Screenshots - -| Wallet | Terminal card | -| ---------------------------------------------------------------- | ---------------------------------------------------------------------- | -|  |  | - ## Credits ### Translations -- ast: dixebral -- ca: calbasi -- de: FW -- eu: Anna Ayala Alcalá -- fr: flodef, Hugo, Maaltir, poka and vincentux -- gl: Vijitâtman -- it: Anna Ayala Alcalá -- nl: Maria Rosa Costa i Alandi -- pt: Carlos Neto +- ast: dixebral +- ca: calbasi +- de: FW +- eo: flodef +- eu: Anna Ayala Alcalá +- fr: flodef, Hugo, Maaltir, poka and vincentux +- gl: Vijitâtman +- it: Anna Ayala Alcalá +- nl: Maria Rosa Costa i Alandi +- pt: Carlos Neto Thanks! ### Others -- Äž1 logos from duniter.org -- undraw intro images: https://undraw.co/license -- Chipcard https://commons.wikimedia.org/wiki/File:Chipcard.svg under the Creative Commons - Attribution-Share Alike 3.0 Unported license. -- [POS svg from wikimedia](https://commons.wikimedia.org/wiki/File:Card_Terminal_POS_Flat_Icon_Vector.svg) CC-BY-SA 4.0 +- Äž1 logos from duniter.org +- undraw intro images: https://undraw.co/license +- Chipcard https://commons.wikimedia.org/wiki/File:Chipcard.svg under the Creative Commons + Attribution-Share Alike 3.0 Unported license. +- [POS svg from wikimedia](https://commons.wikimedia.org/wiki/File:Card_Terminal_POS_Flat_Icon_Vector.svg) CC-BY-SA 4.0 + +### Pub packages used + +This repository makes use of the following pub packages: + +| Package | Version | Usage | +| ------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| [Durt](https://pub.dev/packages/durt) | ^0.1.6 | Duniter crypto lib | +| [Bloc](https://pub.dev/packages/bloc) | ^8.1.0 | State management | +| [Flutter Bloc](https://pub.dev/packages/flutter_bloc) | ^8.1.1 | State management | +| [Hydrated Bloc](https://pub.dev/packages/hydrated_bloc) | ^9.0.0 | Persists Bloc state with Hive | +| [Equatable](https://pub.dev/packages/equatable) | ^2.0.5 | Easily compare custom classes, used for Bloc states\* | +| [Flutter Lints](https://pub.dev/packages/flutter_lints) | ^2.0.1 | Stricter linting rules | +| [Path Provider](https://pub.dev/packages/path_provider) | ^2.0.11 | Get the save path for Hive | +| [Flutter Displaymode](https://pub.dev/packages/flutter_displaymode) | ^0.5.0 | Support high refresh rate displays | +| [Easy Localization](https://pub.dev/packages/easy_localization) | ^3.0.1 | Makes localization easy | +| [Hive](https://pub.dev/packages/hive) | ^2.2.3 | Platform independent storage. | +| [Url Launcher](https://pub.dev/packages/url_launcher) | ^6.1.7 | Open urls in Browser | +| [Ionicons](https://pub.dev/packages/ionicons) | ^0.2.2 | Modern icon library | Thanks! ## License GNU AGPL v3 (see LICENSE) + +``` + +``` diff --git a/assets/translations/eo.json b/assets/translations/eo.json index c452ba55006f6e4b7de48d5b3cfc7a671ebf9326..82d00857b10a4ceb2a54af789cc3dd538c894705 100644 --- a/assets/translations/eo.json +++ b/assets/translations/eo.json @@ -1,3 +1,234 @@ { - "app_name": "Äžinkgo" + "app_name": "Äžinkgo", + "credit_card_title": "Pagi per Äž1", + "g1_wallet": "Monujo Äž1", + "close": "FERMI", + "bottom_nav_first": "Pagi", + "bottom_nav_second": "Ricevi", + "bottom_nav_trd": "Kontaktoj", + "bottom_nav_frd": "Saldo", + "bottom_nav_fifth": "Informo", + "send_g1": "Sendi Äž1", + "g1_amount": "Sumo por sendi", + "g1_amount_hint": "Sumo por sendi en {valuto}", + "g1_form_pay_send": "Sendi", + "search_user_title": "Uzanto por pagi", + "search_user_title_in_contacts": "Serĉi uzantojn", + "search_user": "Serĉi (uzanto aÅ publika Ålosilo)", + "search_user_btn": "Serĉi uzanton", + "g1_form_pay_desc": "Komento", + "g1_form_pay_hint": "Entajpu komenton (malnepra)", + "code_card_title": "Kodarkivon", + "intro_1_title": "Bonvenon al nia Monujo Äž1!", + "intro_1_description": "Per ĉi tiu monujo, vi facile kaj sekure povas konservi, sendi, kaj ricevi la monon Äž1 (ankaÅ konata kiel 'June').", + "intro_2_title": "Dikeldiga libera valuto kreita de homoj, por homoj", + "intro_2_description": "Äž1 ne dependas de iu registaro aÅ entrepreno kaj estas ekamika (ĉar Äi uzas malmulte da energio), trasa, kaj justa al ĉiuj.", + "intro_3_title": "La valuto Äž1 funkcias sur la reto Duniter", + "intro_3_description": "Duniter estas dezentraligita kriptovaluta reto, kiu ebligas homojn krei sian propran monon Äž1.", + "intro_4_title": "Ni komencu!", + "intro_4_description": "Ni helpos vin krei monujon Äž1, por ke vi facile kaj sekure konservu vian monon Äž1 en via aparato kaj sendu Äin al aliaj sen intermmediuloj.", + "intro_5_title": "Kaj poste...", + "intro_5_description": "De ĉi tie, vi povas proponi viajn servojn kaj varojn kaj ricevi pagon en la valuto Äž1, krom uzi Äž1 por aĉeti varojn.", + "no_internet": "Mankas interreto", + "skip": "Preterlasu", + "start": "Komencu", + "offline": "Vi estas seninterreta!", + "online_terminal": "Interrete", + "offline_terminal": "Seninterrete", + "show_qr_to_client": "Montru vian publikan Ålosilon al via kliento", + "show_qr_to_client_amount": "Montru ĉi tiun QR kodo kun tiu sumo al via kliento", + "keys_tooltip": "Publikaj kaj privataj Ålosiloj en Äž1 kaj Duniter estas kiel sistemo de Ålosilo kaj Ålosilo, kie la publika Ålosilo agas kiel Åloso, kiun povas malfermi ĉiu kun la konforma privata Ålosilo, provante sekuran manieron autentiki kaj kontroli transakciojn.", + "card_validity": "Valido", + "card_validity_tooltip": "Bonvolu noti, ke tiu monujo estas alirebla nur dum uzado de tiu specifa retumilo aÅ aplikaĵo kaj aparato. Se vi forigas aÅ rekomencigas la retumilon aÅ aplikaĵon, vi perdos aliron al tiu monujo kaj la mono en Äi.", + "export_key": "Elportu vian monujon", + "import_key": "Importu vian monujon", + "copy_your_key": "Kopiu vian publikan Ålosilon", + "key_copied_to_clipboard": "Via publika Ålosilo estis kopita en la prespapero", + "some_key_copied_to_clipboard": "La publika Ålosilo estis kopita en la prespapero", + "key_tools_title": "Åœlosiloj kaj Iloj", + "transactions": "Transakcioj", + "balance": "Saldo", + "transaction_from_to": "De {from} al {to}", + "your_wallet": "via monujo", + "delete_contact": "Forigi kontakton", + "search_contacts": "Serĉi kontaktojn", + "no_contacts": "Vi ankoraÅ ne havas kontaktojn", + "data_load_error": "Eraro dum Åargado de datumoj", + "add_contact": "Aldoni kontakton", + "contact_added": "Kontakto aldonita", + "no_transactions": "Tiu monujo ne havas saldon. Ek komencu proponi viajn servojn en la Äž1 merkatoj, ekzemple, por ricevi vian unuan enspezon.", + "qr-scanner-title": "Skani la QR de iu", + "copy_contact_key": "Kopii", + "nothing_found": "Nenio trovita", + "technical_info_title": "Teknika informo", + "pattern_do_not_match": "Kondiĉoj ne kongruas", + "at_least_3": "Minimume 3 punktoj postulataj", + "intro_some_pattern_to_export": "Kondiĉo por importi/eksporti vian monujon", + "confirm_pattern": "Konfirmi kondiĉon", + "draw_pattern": "Desegni kondiĉon", + "draw_your_pattern": "Desegni vian kondiĉon", + "expert_mode": "Spertulo-reÄimo", + "intro_pattern_to_import": "Kondiĉo kiun vi uzis por eksporti vian monujon", + "wrong_pattern": "MalÄusta kondiĉo", + "wallet_exported": "Monujo eksportita sukcese", + "reloading_nodes": "Reloading {type} nodes", + "wallet_imported": "Monujo importita sukcese", + "cancel": "NULIGI", + "yes_import": "MI CERTAS, IMPORTU", + "import_config_title": "Ĉu vi certas?", + "import_config_desc": "Tio superskribos vian nunan monujon per la importita", + "import_config_desc_danger": "Tio superskribos vian nunan monujon (kiu enhavas monon!) per la importita, kaj povas kauzi perdadon de tiu mono", + "enter_a_valid_number": "Entajpu validan numeron", + "enter_a_positive_number": "Entajpu pozitivan numeron", + "payment_successful": "Pago sendita!", + "payment_successful_desc": "La transakcio efektiviÄos post kelkaj minutoj.", + "please_confirm_sent": "Ĉu vi certas?", + "please_confirm_sent_desc": "Bonvolu konfirmi ke vi volas sendi {amount} {currency} al {to}", + "please_confirm_retry_sent_desc": "Bonvolu konfirmi ke vi volas retry sendi {amount} {currency} al {to}", + "yes_sent": "JES, SENDU ÄœIN", + "receive_g1": "Ricevi Äž1", + "insufficient balance": "Insufiĉa saldo por pagi tion", + "language_switch_title": "Elektu vian lingvon", + "transaction_pending": "Pendas", + "transaction_sending": "Sendado", + "transaction_receiving": "Ricevado", + "transaction_sent": "Sendita", + "transaction_received": "Ricevita", + "transaction_failed": "Pago malsukcesis", + "transaction_waiting_network": "Retry kun Interreto", + "valid_comment": "La komento ne povas havi akĉentojn aÅ komojn", + "search_limitation": "La serĉotermo devas havi minimume 3 signojn", + "faq_title": "Ofte demandataj demandoj", + "faq_0_title": "Kiel mi povas komenci uzi Äž1 kaj ĉi tiun monujon?", + "faq_0_desc": "Komencu proponi viajn servojn en Äž1 merkatoj, ekzemple, por ricevi vian unuan enspezon. Se vi jam havas Äž1 en Cesium-konto, vi povas transferi iom al ĉi tiu monujo kaj uzi Äin por sendi kaj ricevi Äž1-monon facile.", + "faq_1_title": "Ĉu mi povas importi mian Cesium-konton?", + "faq_1_desc": "Ne, pro sekurecaj kialoj ni ne permesas importi Cesium-kontojn. Ĉi tiu estas poÅta monujo, kiu baziÄas sur la bazsekureco de via mobilaparato, kaj vi povas uzi Äin por rapide transferi monon aÅ ricevi pagon por ĉiutaga uzo. Krome, Äi ne estas dizajnita havi la funkcion de Cesium-anoncoj.", + "faq_2_title": "Ĉu ĉi tiu monujo estas sekura?", + "faq_2_desc": "Äœi estas tiel sekura kiel porti monujon aÅ poÅbulon en via poÅo. Alie, vi uzas regulan bankan karton, elprenante Äin el via poÅo kaj entajpante kvar-cifran pasvorton. Kun ĉi tiu Äž1 monujo, Äi estas preskaÅ la sama afero. Vi elprenas vian telefonon, malÅlosas Äin kutime per kvar-cifra PIN-kodo, kaj poste vi povas uzi ĉi tiun monujon. Do, vi devas esti tiel singarda, kiel vi estas kun viaj fizikaj monujoj kaj poÅbuloj. Se vi forigas tiun retumon aÅ aplikaĵon aÅ perdas vian mobilan aparaton, vi eble perdos vian monon kaj ne povos resanÄi Äin (krom se vi havas eksportitan rezervkopion de via monujo).", + "faq_3_title": "Kial mi ne povas aldoni pasvorton al la monujo?", + "faq_3_desc": "Unue, aldoni sekurecon Äis la nuklea kofro-nivelo al monujo de ĉi tiu speco estas problemaĵo. Due, homoj ofte perdas siajn pasvortojn kaj monon, tion ni volis eviti. Fine, kvankam ni povus aldoni ion pli simplan, kiel PIN-pasvorton aÅ skemon, homoj povus ripeti siajn pasvortojn por la mobilaj aparatoj aÅ kreditkartoj, kio povus esti katastrofa. Ni kredas, ke tiel estas pli sekure.", + "faq_4_title": "Kial uzi ion tiel literan kiel kreditkarton kaj karta legilo?", + "faq_4_desc": "Ĉefe, ĉar ni volis faciligi la uzon de Äž1 por novuloj, kaj poste, per la uzado, faciligi la transiron al pli komplikaj programoj, kiel ekzemple Cesium.", + "share_your_key": "Disdoni vian publikan Ålosilon", + "share_this_key": "Disdoni", + "form_save": "KONSERVI", + "form_contact_title_add": "Aldoni kontakton", + "form_contact_title": "Redakti kontakton", + "form_contact_name": "Nomo", + "form_contact_name_validation": "Bonvolu entajpi vian nomon", + "form_contact_name_validation_pub_key": "Bonvolu entajpi validan publikan Ålosilon", + "form_contact_notes": "Notoj", + "form_contact_pub_key": "Publika Ålosilo", + "long_press_to_edit": "Gliti por elekti tiun kontakton. Alklaki kaj teni por redakti", + "payment_error": "Eraro de pago", + "payment_error_desc": "Hejme! la pago malsukcesis. Pliaj detaloj: {error}", + "payment_error_retry": "Hejme! la pago malsukcesis. Bonvolu reprovi post kelkaj minutoj.", + "error_installing_desktop": "Eraro instalante Äž1nkgo en via lernilo: (eraro: {error})", + "install_desktop": "Instali Äž1nkgo en lernilo", + "import_failed": "Mona importo malsukcesis", + "select_file_to_import": "Elekti la monujo-rezervkopion", + "You can't send money to yourself.": "Vi ne povas sendi monon al vi mem.", + "request_notifications_perms": "Esti avizata pri novaj pagoj", + "allow_notifications_desc": "Permesi Äž1nkgo'n avizadi vin pri novaj pagoj", + "allow_notifications_btn": "PERMESI", + "deny_notifications_btn": "NEPERMESI", + "notification_open": "MALFERMI", + "notification_new_payment_title": "Nova pago ricevita", + "notification_new_payment_desc": "Vi ricevis pagon de {amount} de {from}", + "notification_new_sent_title": "Nova pago sendita", + "notification_new_sent_desc": "Vi sendis {amount} al {to}", + "contact_already_exists": "Kontakto jam ekzistas", + "wrong_public_key": "MalÄusta publika Ålosilo", + "browser_warning": "Vi uzas retumon, kiun ni ne testis. Bonvolu uzi Chrome, Firefox aÅ Brave-on.", + "code_translate": "Helpu nin traduki Äž1nkgo'n", + "nodes_tech_info": "Nodaro", + "info_links": "Ligiloj", + "error_importing_wallet": "Eraro dum importo de monujo", + "no_nodes_found": "Ni ne povis komuniki kun iu ajn nodo. Bonvolu reprovi poste.", + "fetch_tx_error": "Iu ajn eraro okazis dum preni viajn transakciojn.", + "retry": "REPROVI", + "creditCardKey_title": "Monujo Kreita!", + "creditCardKey_desc": "Gratulojn! Vi sukcese kreis vian Äž1 monujon. Bonvolu noti, ke ĉio estas stokita en ĉi tiu aparato, do certiÄu, ke vi ne forigas ĉi tiun aplikaĵon por eviti la perdon de via monujo. En la informo-sekcio vi povas fari rezervkopion de via monujo, kaze ke via aparato havas ajnajn problemojn kaj vi bezonas aliri vian monujon.", + "creditCardKey_web_title": "Monujo Kreita!", + "creditCardKey_web_desc": "Gratulojn! Vi sukcese kreis vian Äž1 monujon. Grava noti, ke ĉi tiu monujo estas stokita nur en via retumilo. Tial, se vi fermas la retumilon kaj denove malfermas Äin, certiÄu, ke la sama monujo aperas. Se ne, eble vi uzas ne-subtenatan retumilon. Memoru, ke ni ankaÅ havas aplikaĵon. En la informo-sekcio vi povas fari rezervkopion de via monujo, kaze ke via aparato havas ajnajn problemojn.", + "creditCardKey_button_title": "Tio estas via Monujo!", + "creditCardKey_button_desc": "Bonvolu noti, ke ĉio estas stokita en ĉi tiu aparato, do certiÄu, ke vi ne forigas ĉi tiun aplikaĵon por eviti la perdon de via monujo. En la informo-sekcio vi povas fari rezervkopion de via monujo, kaze ke via aparato havas ajnajn problemojn kaj vi bezonas aliri vian monujon.", + "creditCardKey_button_web_title": "Tio estas via Monujo!", + "creditCardKey_button_web_desc": "Grava noti, ke ĉi tiu monujo estas stokita nur en via retumilo. Tial, se vi fermas la retumilon kaj denove malfermas Äin, certiÄu, ke la sama monujo aperas. Se ne, eble vi uzas ne-subtenatan retumilon. Memoru, ke ni ankaÅ havas aplikaĵon. En la informo-sekcio vi povas fari rezervkopion de via monujo, kaze ke via aparato havas ajnajn problemojn.", + "creditCardPubKey_title": "Publika Adreso de la Monujo", + "creditCardPubKey_desc": "Tio estas la publika adreso de via monujo (kvankam ĉi tio estas mallongigita versio). Vi povas kopii Äin alklakante Äin por dividi kun aliaj.", + "paySearchUserKey_title": "Fari Pagojn per Äž1", + "paySearchUserKey_desc": "El ĉi tiu sekcio vi povas fari pagojn en Äž1. Vi povas serĉi uzantojn en la reto aÅ skani QR-kodojn por fari viajn pagojn.", + "payAmountKey_title": "Entajpi la Sumon de Pago", + "payAmountKey_desc": "En tiu ĉi kampo vi devas indiki la sumon, kiun vi volas pagi per Äž1.", + "paySentKey_title": "Sendi Äž1", + "paySentKey_desc": "Unufoje kiam vi indikis la pagosumon, vi nur devas premi la 'Sendi' butonon por fari la pagon. Grava noti, ke ĉi tiu monujo ne havas pasvorton, do Äi funkciigas kiel poÅta monujo por rapidaj transakcioj kun malgrandaj sumoj.", + "receiveMainKey_title": "Ricevi Äž1", + "receiveMainKey_desc": "Tio funkcias simile al puntvendaj aparatoj en butikoj, sed anstataÅ pagoj per kreditkarto, ni uzas QR-kodojn. Ĉi tie vi povas generi QR-kodojn, kiujn aliaj povas skani por fari pagojn al vi.", + "receiveQrKey_desc": "Sur ĉi tiu ekrano vi trovos vian propran QR-kodon, kiun vi povas dividi kun aliaj por ricevi pagojn en Äž1.", + "receiveAmountKey_title": "QR kun Sumoj", + "receiveAmountKey_desc": "Se vi volas vendi produkton aÅ servon, vi povas generi QR-kodon kun via publika Ålosilo kaj la sumo, kiun vi volas Åargi en Äž1.", + "receiveSumKey_title": "Rapida Totalo", + "receiveSumKey_desc": "Vi ankaÅ povas generi QR-kodon kun la tutsuma aĉeto, aldonante la prezojn de la varoj, kiujn vi vendas.", + "contactsMainKey_title": "Kontaktoj", + "contactsMainKey_desc": "En ĉi tiu sekcio vi povas konservi viajn plej oftajn kontaktojn kaj skani QR-kodojn de aliaj homoj.", + "contactsQrKey_desc": "Ĉi tie vi povas skani QR-kodojn de aliaj homoj, por aldoni ilin al viaj kontaktoj.", + "txMainKey_title": "Transakcioj", + "txMainKey_desc": "Ĉi tie vi povas vidi la historion de viaj transakcioj. Se via monujo estas malplena, por komenci uzi Äž1, vi povas proponi viajn servojn en merkatoj aÅ retaj platformoj, kiel ekzemple gchange.fr, girala.net, inter aliaj. Se vi jam havas Äž1, vi povas transferi ilin al ĉi tiu Äž1nkgo monujo kaj komenci uzi Äin.", + "txBalanceKey_title": "Saldo", + "txBalanceKey_desc": "Sur ĉi tiu ekrano vi povas vidi la nunan bilancon de via Äž1nkgo monujo.", + "txRefreshKey_title": "ReÄistri", + "txRefreshKey_desc": "Se vi atendas por pago, vi povas premi ĉi tiun butonon por reÄistri la ekranecon. Tamen, ĉi tiu monujo ankaÅ faros Äin periodale por vi kaj sendos al vi avizaĵojn pri novaj pagoj.", + "infoMainKey_title": "Pliaj Informoj", + "infoMainKey_desc": "Ĉi tie vi trovos pliajn informojn pri via monujo kaj aliaj opcioj.", + "exportMainKey_title": "Eksporti la Monujon", + "exportMainKey_desc": "Gravegas, ke vi faru rezervkopion de via monujo tiel baldaÅ kiel eble kaj gardu Äin sekure, tiel ke vi povu importi Äin al alia retumilo aÅ la aplikaĵo, aÅ restarigi vian monujon, kaze ke vi perdas vian aparaton.", + "feedback": "Problemoj? Donu al ni pli da informoj!", + "feedback_submit": "SUBMETI", + "feedback_whats_wrong": "Priskribu vian problemon:", + "feedback_draw": "Desegni", + "feedback_navigate": "Navigi", + "bug_report": "Raporti Eraron", + "slidable_tutorial": "Balai por pli da agoj", + "retry_payment": "Reprovi Pagon", + "cancel_payment": "Nuligi Pagon", + "payment_canceled": "Pago nuligita kvankam ni ne povas certigi, ke Äi ne jam estis efektivigita", + "pay_again": "Pagi Denove", + "telegram_group": "Telegrama Grupo", + "payment_waiting_internet_title": "Neniu Interreto", + "payment_waiting_internet_desc": "Ni reprovos vian pagon, kiam la interreto revenas", + "payment_waiting_internet_desc_beta": "Reprovu vian pagon, kiam la interreto revenas", + "your_name_here": "Nomu ĉi tiun karton", + "copied_to_clipboard": "Kopita en prespapero", + "pay_with_nfc_tooltip": "Por ricevi pagon, simple aliru ĉi tiun aparaton proksime al alia monujo kun aktivigita NFC.", + "import_wallet_from_clipboard": "Importi Monujon de la Prespapero", + "import_wallet_from_clipboard_desc": "Alglui antaÅe eksportitan tekston de Äž1nkgo monujo aÅ publikan Ålosilon de alia tipo de monujoj (kiel Cesium)", + "paste": "ALGLUI", + "import": "IMPORTI", + "select_import_method": "Elekti Importan Metodon", + "file_import": "Importi de Dosiero", + "export": "EKSPORTI", + "clipboard_import": "Importi el Prespapero", + "clipboard_import_pubkey": "Importi el publika Ålosilo", + "clipboard_export": "Eksporti al Prespapero", + "select_export_method": "Elekti Esportan Metodon", + "file_export": "Eksporti al Dosiero", + "share_export": "Elsendi per retpoÅto/babilejo/aliaj", + "wallet_copied": "Monujo kopita en prespapero", + "link_export": "Eksporti al Ligo", + "share_export_subject": "Äž1nkgo Monuj-Eksperto", + "qr_invalid_payment": "Nevalida QR-Kodo: MalÄusta pago-informoj", + "cant_find_qr_contact": "Ne povas trovi la kontakton donitan de la QR", + "qr_scanner_cancel": "NULIGI", + "qr_scanner_flash_on": "ÅœALTU LUMON", + "qr_scanner_flash_off": "MALÅœALTU LUMON", + "qr_scanner_title": "Skani QR-Kodon", + "display_amounts_du": "Montri sumojn en DU", + "wallet_already_imported": "Monujo jam importita", + "card_theme_select": "Elektu temon por via karto", + "cesium_auth_dialog_title": "Entajpu vian rajtigojn por {key}", + "cesium_secret_phrase": "Sekreta frazo", + "cesium_password": "Pasvorto", + "accept": "AKCEPTI", + "incorrect_passwords": "MalÄustaj pasvortoj" } diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 0a8ab6c2528efa197068d50706f32fd65b0ff562..3ab25c3ef089345451ada56463e0c86211e92744 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -45,6 +45,7 @@ <array> <string>ast</string> <string>en</string> + <string>eo</string> <string>es</string> <string>eu</string> <string>fr</string> diff --git a/lib/main.dart b/lib/main.dart index 9abffe163c001e1bb57859b4f907b4134a5ea8f3..b9b451a3385a4eb9f0b0af040307993867feb268 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -122,6 +122,7 @@ void main() async { Locale('ca'), Locale('de'), Locale('en'), + Locale('eo'), Locale('es'), Locale('eu'), Locale('fr'), diff --git a/lib/ui/screens/fifth_screen.dart b/lib/ui/screens/fifth_screen.dart index 31079f0b974dc53cdd8a7ba724586fcfaa522d48..305ff48061a046abd2a44efa9d0d48e35db52f76 100644 --- a/lib/ui/screens/fifth_screen.dart +++ b/lib/ui/screens/fifth_screen.dart @@ -105,6 +105,10 @@ class _FifthScreenState extends State<FifthScreen> { value: Locale('en'), child: Text('English'), ), + DropdownMenuItem<Locale>( + value: Locale('eo'), + child: Text('Esperanto'), + ), DropdownMenuItem<Locale>( value: Locale('es'), child: Text('Español'), diff --git a/lib/ui/widgets/first_screen/pay_form.dart b/lib/ui/widgets/first_screen/pay_form.dart index 73eb41ea33afe2d10b80145f9cd37aa1478696b8..0a72ad453ba4b09f88405e336af55c75446a34dc 100644 --- a/lib/ui/widgets/first_screen/pay_form.dart +++ b/lib/ui/widgets/first_screen/pay_form.dart @@ -6,7 +6,6 @@ import '../../../data/models/app_cubit.dart'; import '../../../data/models/multi_wallet_transaction_cubit.dart'; import '../../../data/models/payment_cubit.dart'; import '../../../data/models/payment_state.dart'; -import '../../../data/models/theme_cubit.dart'; import '../../../g1/currency.dart'; import '../../../shared_prefs_helper.dart'; import '../../logger.dart'; @@ -56,7 +55,7 @@ class _PayFormState extends State<PayForm> { _onPressed(state, context, currency, currentUd) == null; final Color sentColor = sentDisabled ? Theme.of(context).disabledColor - : context.read<ThemeCubit>().isDark() + : isDark(context) ? const Color(0xFFB8D166) : Theme.of(context).primaryColor; return Form(