TF-2215 Support communicating L18n to remote servers
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit 21b69c6ac0bada69c63b87a17fc42c730ce12762)
This commit is contained in:
+1
-1
@@ -64,7 +64,7 @@ class TMailApp extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
return supportedLocales.first;
|
return supportedLocales.first;
|
||||||
},
|
},
|
||||||
locale: LocalizationService.locale,
|
locale: LocalizationService.getLocaleFromLanguage(),
|
||||||
fallbackLocale: LocalizationService.fallbackLocale,
|
fallbackLocale: LocalizationService.fallbackLocale,
|
||||||
translations: LocalizationService(),
|
translations: LocalizationService(),
|
||||||
onGenerateTitle: (context) {
|
onGenerateTitle: (context) {
|
||||||
|
|||||||
@@ -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/session/data/network/session_api.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/network/thread_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/exceptions/remote_exception_thrower.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/locale_interceptor.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
class NetworkBindings extends Bindings {
|
class NetworkBindings extends Bindings {
|
||||||
@@ -69,11 +70,13 @@ class NetworkBindings extends Bindings {
|
|||||||
Get.find<TokenOidcCacheManager>(),
|
Get.find<TokenOidcCacheManager>(),
|
||||||
Get.find<AccountCacheManager>(),
|
Get.find<AccountCacheManager>(),
|
||||||
));
|
));
|
||||||
|
Get.put(LocaleInterceptor());
|
||||||
Get.find<Dio>().interceptors.add(Get.find<DynamicUrlInterceptors>());
|
Get.find<Dio>().interceptors.add(Get.find<DynamicUrlInterceptors>());
|
||||||
Get.find<Dio>().interceptors.add(Get.find<AuthorizationInterceptors>());
|
Get.find<Dio>().interceptors.add(Get.find<AuthorizationInterceptors>());
|
||||||
if (kDebugMode) {
|
if (kDebugMode) {
|
||||||
Get.find<Dio>().interceptors.add(LogInterceptor(requestBody: true));
|
Get.find<Dio>().interceptors.add(LogInterceptor(requestBody: true));
|
||||||
}
|
}
|
||||||
|
Get.find<Dio>().interceptors.add(Get.find<LocaleInterceptor>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _bindingApi() {
|
void _bindingApi() {
|
||||||
|
|||||||
@@ -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_api.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/network/thread_isolate_worker.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/bindings/network/binding_tag.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/locale_interceptor.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
import 'package:worker_manager/worker_manager.dart';
|
import 'package:worker_manager/worker_manager.dart';
|
||||||
|
|
||||||
@@ -47,6 +48,7 @@ class NetworkIsolateBindings extends Bindings {
|
|||||||
if (kDebugMode) {
|
if (kDebugMode) {
|
||||||
dio.interceptors.add(LogInterceptor(requestBody: true));
|
dio.interceptors.add(LogInterceptor(requestBody: true));
|
||||||
}
|
}
|
||||||
|
dio.interceptors.add(Get.find<LocaleInterceptor>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _bindingApi() {
|
void _bindingApi() {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import 'package:core/utils/app_logger.dart';
|
|||||||
import 'package:get/get.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/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/localizations/language_code_constants.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class LocalizationService extends Translations {
|
class LocalizationService extends Translations {
|
||||||
|
|
||||||
@@ -29,30 +30,34 @@ class LocalizationService extends Translations {
|
|||||||
Locale(LanguageCodeConstants.italian, 'IT')
|
Locale(LanguageCodeConstants.italian, 'IT')
|
||||||
];
|
];
|
||||||
|
|
||||||
static final locale = _getLocaleFromLanguage();
|
|
||||||
|
|
||||||
static void changeLocale(String langCode) {
|
static void changeLocale(String langCode) {
|
||||||
log('LocalizationService::changeLocale(): langCode: $langCode');
|
log('LocalizationService::changeLocale():langCode: $langCode');
|
||||||
final locale = _getLocaleFromLanguage(langCode: langCode);
|
final newLocale = getLocaleFromLanguage(langCode: langCode);
|
||||||
Get.updateLocale(locale);
|
log('LocalizationService::changeLocale():newLocale: $newLocale');
|
||||||
|
Get.updateLocale(newLocale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Locale _getLocaleFromLanguage({String? langCode}) {
|
static Locale getLocaleFromLanguage({String? langCode}) {
|
||||||
final languageCacheManager = Get.find<LanguageCacheManager>();
|
final languageCacheManager = getBinding<LanguageCacheManager>();
|
||||||
final localeStored = languageCacheManager.getStoredLanguage();
|
log('LocalizationService::_getLocaleFromLanguage:languageCacheManager: $languageCacheManager');
|
||||||
|
final localeStored = languageCacheManager?.getStoredLanguage();
|
||||||
log('LocalizationService::_getLocaleFromLanguage(): localeStored: ${localeStored.toString()}');
|
log('LocalizationService::_getLocaleFromLanguage():localeStored: $localeStored');
|
||||||
|
|
||||||
if (localeStored != null) {
|
if (localeStored != null) {
|
||||||
return localeStored;
|
return localeStored;
|
||||||
} else {
|
} else {
|
||||||
final languageCodeCurrent = langCode ?? Get.deviceLocale?.languageCode;
|
final languageCodeCurrent = langCode ?? Get.deviceLocale?.languageCode;
|
||||||
final localeSelected = supportedLocales
|
log('LocalizationService::_getLocaleFromLanguage():languageCodeCurrent: $languageCodeCurrent');
|
||||||
.firstWhereOrNull((locale) => locale.languageCode == languageCodeCurrent);
|
final localeSelected = supportedLocales.firstWhereOrNull((locale) => locale.languageCode == languageCodeCurrent);
|
||||||
return localeSelected ?? Get.locale ?? defaultLocale;
|
return localeSelected ?? Get.deviceLocale ?? defaultLocale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String supportedLocalesToLanguageTags() {
|
||||||
|
final listLanguageTags = supportedLocales.map((locale) => locale.toLanguageTag()).join(', ');
|
||||||
|
log('LocalizationService::supportedLocalesToLanguageTags:listLanguageTags: $listLanguageTags');
|
||||||
|
return listLanguageTags;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, Map<String, String>> get keys => {};
|
Map<String, Map<String, String>> get keys => {};
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user