diff --git a/lib/main.dart b/lib/main.dart index cd574cabc..cde8e98b7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -64,7 +64,7 @@ class TMailApp extends StatelessWidget { } return supportedLocales.first; }, - locale: LocalizationService.locale, + locale: LocalizationService.getLocaleFromLanguage(), fallbackLocale: LocalizationService.fallbackLocale, translations: LocalizationService(), onGenerateTitle: (context) { diff --git a/lib/main/bindings/network/network_bindings.dart b/lib/main/bindings/network/network_bindings.dart index fbe688ed9..e911309bb 100644 --- a/lib/main/bindings/network/network_bindings.dart +++ b/lib/main/bindings/network/network_bindings.dart @@ -29,6 +29,7 @@ import 'package:tmail_ui_user/features/quotas/data/network/quotas_api.dart'; import 'package:tmail_ui_user/features/session/data/network/session_api.dart'; import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart'; import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart'; +import 'package:tmail_ui_user/main/localizations/locale_interceptor.dart'; import 'package:uuid/uuid.dart'; class NetworkBindings extends Bindings { @@ -69,11 +70,13 @@ class NetworkBindings extends Bindings { Get.find(), Get.find(), )); + Get.put(LocaleInterceptor()); Get.find().interceptors.add(Get.find()); Get.find().interceptors.add(Get.find()); if (kDebugMode) { Get.find().interceptors.add(LogInterceptor(requestBody: true)); } + Get.find().interceptors.add(Get.find()); } void _bindingApi() { diff --git a/lib/main/bindings/network/network_isolate_binding.dart b/lib/main/bindings/network/network_isolate_binding.dart index 2d66eb163..fbe72b132 100644 --- a/lib/main/bindings/network/network_isolate_binding.dart +++ b/lib/main/bindings/network/network_isolate_binding.dart @@ -14,6 +14,7 @@ import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_work import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart'; import 'package:tmail_ui_user/features/thread/data/network/thread_isolate_worker.dart'; import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart'; +import 'package:tmail_ui_user/main/localizations/locale_interceptor.dart'; import 'package:uuid/uuid.dart'; import 'package:worker_manager/worker_manager.dart'; @@ -47,6 +48,7 @@ class NetworkIsolateBindings extends Bindings { if (kDebugMode) { dio.interceptors.add(LogInterceptor(requestBody: true)); } + dio.interceptors.add(Get.find()); } void _bindingApi() { diff --git a/lib/main/localizations/locale_interceptor.dart b/lib/main/localizations/locale_interceptor.dart new file mode 100644 index 000000000..82285d00b --- /dev/null +++ b/lib/main/localizations/locale_interceptor.dart @@ -0,0 +1,17 @@ +import 'dart:io'; + +import 'package:core/utils/app_logger.dart'; +import 'package:dio/dio.dart'; +import 'package:tmail_ui_user/main/localizations/localization_service.dart'; + +class LocaleInterceptor extends InterceptorsWrapper { + + @override + void onRequest(RequestOptions options, RequestInterceptorHandler handler) { + final currentLocale = LocalizationService.getLocaleFromLanguage(); + log('LocaleInterceptor::onRequest:currentLocale: $currentLocale'); + options.headers[HttpHeaders.acceptLanguageHeader] = LocalizationService.supportedLocalesToLanguageTags(); + options.headers[HttpHeaders.contentLanguageHeader] = currentLocale.toLanguageTag(); + super.onRequest(options, handler); + } +} \ No newline at end of file diff --git a/lib/main/localizations/localization_service.dart b/lib/main/localizations/localization_service.dart index 9d17d32bf..eb787db76 100644 --- a/lib/main/localizations/localization_service.dart +++ b/lib/main/localizations/localization_service.dart @@ -5,6 +5,7 @@ import 'package:core/utils/app_logger.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart'; import 'package:tmail_ui_user/main/localizations/language_code_constants.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class LocalizationService extends Translations { @@ -29,30 +30,34 @@ class LocalizationService extends Translations { Locale(LanguageCodeConstants.italian, 'IT') ]; - static final locale = _getLocaleFromLanguage(); - static void changeLocale(String langCode) { - log('LocalizationService::changeLocale(): langCode: $langCode'); - final locale = _getLocaleFromLanguage(langCode: langCode); - Get.updateLocale(locale); + log('LocalizationService::changeLocale():langCode: $langCode'); + final newLocale = getLocaleFromLanguage(langCode: langCode); + log('LocalizationService::changeLocale():newLocale: $newLocale'); + Get.updateLocale(newLocale); } - static Locale _getLocaleFromLanguage({String? langCode}) { - final languageCacheManager = Get.find(); - final localeStored = languageCacheManager.getStoredLanguage(); - - log('LocalizationService::_getLocaleFromLanguage(): localeStored: ${localeStored.toString()}'); - + static Locale getLocaleFromLanguage({String? langCode}) { + final languageCacheManager = getBinding(); + log('LocalizationService::_getLocaleFromLanguage:languageCacheManager: $languageCacheManager'); + final localeStored = languageCacheManager?.getStoredLanguage(); + log('LocalizationService::_getLocaleFromLanguage():localeStored: $localeStored'); if (localeStored != null) { return localeStored; } else { final languageCodeCurrent = langCode ?? Get.deviceLocale?.languageCode; - final localeSelected = supportedLocales - .firstWhereOrNull((locale) => locale.languageCode == languageCodeCurrent); - return localeSelected ?? Get.locale ?? defaultLocale; + log('LocalizationService::_getLocaleFromLanguage():languageCodeCurrent: $languageCodeCurrent'); + final localeSelected = supportedLocales.firstWhereOrNull((locale) => locale.languageCode == languageCodeCurrent); + return localeSelected ?? Get.deviceLocale ?? defaultLocale; } } + static String supportedLocalesToLanguageTags() { + final listLanguageTags = supportedLocales.map((locale) => locale.toLanguageTag()).join(', '); + log('LocalizationService::supportedLocalesToLanguageTags:listLanguageTags: $listLanguageTags'); + return listLanguageTags; + } + @override Map> get keys => {}; } \ No newline at end of file