diff --git a/example_nav2/lib/app/modules/dashboard/views/dashboard_view.dart b/example_nav2/lib/app/modules/dashboard/views/dashboard_view.dart index f475030f1..4d4871bb0 100644 --- a/example_nav2/lib/app/modules/dashboard/views/dashboard_view.dart +++ b/example_nav2/lib/app/modules/dashboard/views/dashboard_view.dart @@ -14,9 +14,9 @@ class DashboardView extends GetView { () => Column( mainAxisSize: MainAxisSize.min, children: [ - const Text( - 'DashboardView is working', - style: TextStyle(fontSize: 20), + Text( + "PAGES.DASHBOARD.TITLE".tr, + style: const TextStyle(fontSize: 20), ), Text('Time: ${controller.now.value.toString()}'), ], diff --git a/example_nav2/lib/lang/languages/en_US.dart b/example_nav2/lib/lang/languages/en_US.dart new file mode 100644 index 000000000..97bbb4a22 --- /dev/null +++ b/example_nav2/lib/lang/languages/en_US.dart @@ -0,0 +1,11 @@ +Map get enUs => { + "PAGES": { + "DASHBOARD": { + "TITLE": "Dashboard", + "BUTTONS": { + "CHANGE_LANGUAGE": "Change language", + "GO_TO_HOME": "Go to home", + }, + }, + }, + }; diff --git a/example_nav2/lib/lang/languages/es_ES.dart b/example_nav2/lib/lang/languages/es_ES.dart new file mode 100644 index 000000000..3f640b00b --- /dev/null +++ b/example_nav2/lib/lang/languages/es_ES.dart @@ -0,0 +1,11 @@ +Map get esEs => { + "PAGES": { + "DASHBOARD": { + "TITLE": "Tablero mejorado", + "BUTTONS": { + "CHANGE_LANGUAGE": "Cambiar idioma", + "GO_TO_HOME": "Ir a inicio", + }, + }, + }, + }; diff --git a/example_nav2/lib/lang/languages/pt_BR.dart b/example_nav2/lib/lang/languages/pt_BR.dart new file mode 100644 index 000000000..620e7b389 --- /dev/null +++ b/example_nav2/lib/lang/languages/pt_BR.dart @@ -0,0 +1,11 @@ +Map get ptBr => { + "PAGES": { + "DASHBOARD": { + "TITLE": "Painel", + "BUTTONS": { + "CHANGE_LANGUAGE": "Mudar idioma", + "GO_TO_HOME": "Ir para casa", + }, + }, + }, + }; diff --git a/example_nav2/lib/lang/translation_service.dart b/example_nav2/lib/lang/translation_service.dart new file mode 100644 index 000000000..bee41dce7 --- /dev/null +++ b/example_nav2/lib/lang/translation_service.dart @@ -0,0 +1,19 @@ +import 'dart:ui'; + +import 'package:example_nav2/lang/languages/en_us.dart'; +import 'package:example_nav2/lang/languages/es_es.dart'; +import 'package:example_nav2/lang/languages/pt_br.dart'; +import 'package:get/get.dart'; +import 'package:get/route_manager.dart'; + + +class TranslationService extends Translations { + static Locale? get locale => Get.deviceLocale; + static const fallbackLocale = Locale('en', 'US'); + @override + Map> get keys => { + 'en_US': enUs, + 'pt_BR': ptBr, + 'es_ES': esEs, + }; +} diff --git a/example_nav2/lib/main.dart b/example_nav2/lib/main.dart index 71e8eb587..bb11cceea 100644 --- a/example_nav2/lib/main.dart +++ b/example_nav2/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:example_nav2/lang/translation_service.dart'; import 'package:example_nav2/services/auth_service.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -13,6 +14,8 @@ void main() { ], getPages: AppPages.routes, initialRoute: AppPages.initial, + translations: TranslationService(), + locale: TranslationService.locale, // builder: (context, child) { // return FutureBuilder( // key: ValueKey('initFuture'), diff --git a/lib/get_navigation/src/root/internacionalization.dart b/lib/get_navigation/src/root/internacionalization.dart index 9c632759c..ef16ce618 100644 --- a/lib/get_navigation/src/root/internacionalization.dart +++ b/lib/get_navigation/src/root/internacionalization.dart @@ -7,5 +7,5 @@ const List rtlLanguages = [ ]; abstract class Translations { - Map> get keys; + Map> get keys; } diff --git a/lib/get_utils/src/extensions/internacionalization.dart b/lib/get_utils/src/extensions/internacionalization.dart index e0155dd7c..0239cb5eb 100644 --- a/lib/get_utils/src/extensions/internacionalization.dart +++ b/lib/get_utils/src/extensions/internacionalization.dart @@ -33,8 +33,12 @@ extension LocalesIntl on GetInterface { Map> get translations => _intlHost.translations; - void addTranslations(Map> tr) { - translations.addAll(tr); + void addTranslations(Map> tr) { + Map> translationsX = {}; + tr.forEach((key, value) { + translationsX[key] = flattenMap(value); + }); + translations.addAll(translationsX); } void clearTranslations() { @@ -50,6 +54,20 @@ extension LocalesIntl on GetInterface { } }); } + + Map flattenMap(Map map, + [String prefix = '']) { + Map flattenedMap = {}; + map.forEach((key, value) { + if (value is Map) { + flattenedMap.addAll(flattenMap(value.cast(), + prefix.isEmpty ? key : '$prefix.$key')); + } else { + flattenedMap[prefix.isEmpty ? key : '$prefix.$key'] = value; + } + }); + return flattenedMap; + } } extension Trans on String {