TF-3885 Fix language defaults
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -158,7 +158,7 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
|
|||||||
IndividualHeaderIdentifier.acceptLanguageHeader: LocalizationService.supportedLocalesToLanguageTags()
|
IndividualHeaderIdentifier.acceptLanguageHeader: LocalizationService.supportedLocalesToLanguageTags()
|
||||||
},
|
},
|
||||||
contentLanguageHeader: {
|
contentLanguageHeader: {
|
||||||
IndividualHeaderIdentifier.contentLanguageHeader: LocalizationService.getLocaleFromLanguage().toLanguageTag()
|
IndividualHeaderIdentifier.contentLanguageHeader: LocalizationService.getInitialLocale().toLanguageTag()
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2156,7 +2156,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
{_displayingEventBlobId!},
|
{_displayingEventBlobId!},
|
||||||
emailId,
|
emailId,
|
||||||
session!.getLanguageForCalendarEvent(
|
session!.getLanguageForCalendarEvent(
|
||||||
LocalizationService.getLocaleFromLanguage(),
|
LocalizationService.getInitialLocale(),
|
||||||
accountId!,
|
accountId!,
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
@@ -2177,7 +2177,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
{_displayingEventBlobId!},
|
{_displayingEventBlobId!},
|
||||||
emailId,
|
emailId,
|
||||||
session!.getLanguageForCalendarEvent(
|
session!.getLanguageForCalendarEvent(
|
||||||
LocalizationService.getLocaleFromLanguage(),
|
LocalizationService.getInitialLocale(),
|
||||||
accountId!,
|
accountId!,
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
@@ -2198,7 +2198,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
{_displayingEventBlobId!},
|
{_displayingEventBlobId!},
|
||||||
emailId,
|
emailId,
|
||||||
session!.getLanguageForCalendarEvent(
|
session!.getLanguageForCalendarEvent(
|
||||||
LocalizationService.getLocaleFromLanguage(),
|
LocalizationService.getInitialLocale(),
|
||||||
accountId!,
|
accountId!,
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|||||||
+3
-2
@@ -38,9 +38,10 @@ class LanguageAndRegionController extends BaseController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void handleSuccessViewState(Success success) {
|
void handleSuccessViewState(Success success) {
|
||||||
super.handleSuccessViewState(success);
|
|
||||||
if (success is SaveLanguageSuccess) {
|
if (success is SaveLanguageSuccess) {
|
||||||
LocalizationService.changeLocale(success.localeStored.languageCode);
|
LocalizationService.changeLocale(success.localeStored);
|
||||||
|
} else {
|
||||||
|
super.handleSuccessViewState(success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -87,7 +87,7 @@ class _TMailAppState extends State<TMailApp> {
|
|||||||
}
|
}
|
||||||
return supportedLocales.first;
|
return supportedLocales.first;
|
||||||
},
|
},
|
||||||
locale: LocalizationService.getLocaleFromLanguage(),
|
locale: LocalizationService.getInitialLocale(),
|
||||||
fallbackLocale: LocalizationService.fallbackLocale,
|
fallbackLocale: LocalizationService.fallbackLocale,
|
||||||
translations: LocalizationService(),
|
translations: LocalizationService(),
|
||||||
onGenerateTitle: (context) {
|
onGenerateTitle: (context) {
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
|
|
||||||
import 'dart:ui';
|
|
||||||
|
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -8,6 +5,8 @@ import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_
|
|||||||
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';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
|
typedef OnServerLanguageApplied = Function(Locale locale);
|
||||||
|
|
||||||
class LocalizationService extends Translations {
|
class LocalizationService extends Translations {
|
||||||
|
|
||||||
static const defaultLocale = Locale(LanguageCodeConstants.english, 'US');
|
static const defaultLocale = Locale(LanguageCodeConstants.english, 'US');
|
||||||
@@ -33,29 +32,27 @@ class LocalizationService extends Translations {
|
|||||||
Locale(LanguageCodeConstants.german, 'DE')
|
Locale(LanguageCodeConstants.german, 'DE')
|
||||||
];
|
];
|
||||||
|
|
||||||
static void changeLocale(String langCode) {
|
static void changeLocale(Locale newLocale) {
|
||||||
log('LocalizationService::changeLocale():langCode: $langCode');
|
log('LocalizationService::changeLocale(): New locale is $newLocale');
|
||||||
final newLocale = getLocaleFromLanguage(langCode: langCode);
|
|
||||||
log('LocalizationService::changeLocale():newLocale: $newLocale');
|
|
||||||
Get.updateLocale(newLocale);
|
Get.updateLocale(newLocale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Locale getLocaleFromLanguage({String? langCode}) {
|
static Locale getInitialLocale() {
|
||||||
try {
|
try {
|
||||||
final languageCacheManager = getBinding<LanguageCacheManager>();
|
final cachedLocale = _getCachedLocale();
|
||||||
final localeStored = languageCacheManager?.getStoredLanguage();
|
if (cachedLocale != null) return cachedLocale;
|
||||||
log('LocalizationService::_getLocaleFromLanguage():localeStored: $localeStored');
|
|
||||||
final localeSelected = supportedLocales.firstWhereOrNull(
|
final deviceLocale = _getDeviceLocale();
|
||||||
(locale) => locale.languageCode == langCode,
|
if (_isSupportedLocale(deviceLocale)) return deviceLocale;
|
||||||
);
|
|
||||||
return localeSelected ?? localeStored ?? Get.deviceLocale ?? defaultLocale;
|
return defaultLocale;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('LocalizationService::getLocaleFromLanguage: Exception: $e');
|
logError('LocalizationService::getInitialLocale:Exception is $e');
|
||||||
return Get.deviceLocale ?? defaultLocale;
|
return defaultLocale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Locale? getCachedLocale() {
|
static Locale? _getCachedLocale() {
|
||||||
try {
|
try {
|
||||||
final languageCacheManager = getBinding<LanguageCacheManager>();
|
final languageCacheManager = getBinding<LanguageCacheManager>();
|
||||||
return languageCacheManager?.getStoredLanguage();
|
return languageCacheManager?.getStoredLanguage();
|
||||||
@@ -65,6 +62,9 @@ class LocalizationService extends Translations {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Locale _getDeviceLocale() =>
|
||||||
|
WidgetsBinding.instance.platformDispatcher.locale;
|
||||||
|
|
||||||
static String supportedLocalesToLanguageTags() {
|
static String supportedLocalesToLanguageTags() {
|
||||||
final listLanguageTags = supportedLocales.map((locale) => locale.toLanguageTag()).join(', ');
|
final listLanguageTags = supportedLocales.map((locale) => locale.toLanguageTag()).join(', ');
|
||||||
log('LocalizationService::supportedLocalesToLanguageTags:listLanguageTags: $listLanguageTags');
|
log('LocalizationService::supportedLocalesToLanguageTags:listLanguageTags: $listLanguageTags');
|
||||||
@@ -73,49 +73,81 @@ class LocalizationService extends Translations {
|
|||||||
|
|
||||||
static void initializeAppLanguage({
|
static void initializeAppLanguage({
|
||||||
String? serverLanguage,
|
String? serverLanguage,
|
||||||
void Function(Locale locale)? onServerLanguageApplied,
|
OnServerLanguageApplied? onServerLanguageApplied,
|
||||||
}) {
|
}) {
|
||||||
final currentLocale = Get.locale;
|
log('LocalizationService::initializeAppLanguage:Server language: $serverLanguage');
|
||||||
try {
|
try {
|
||||||
final serverLocale = supportedLocales
|
|
||||||
.firstWhereOrNull((locale) => locale.languageCode == serverLanguage);
|
|
||||||
final cachedLocale = getCachedLocale();
|
|
||||||
|
|
||||||
// From server
|
// From server
|
||||||
if (serverLocale != null && supportedLocales.contains(serverLocale)) {
|
if (serverLanguage != null &&
|
||||||
changeLocale(serverLocale.languageCode);
|
_useServerLocale(
|
||||||
onServerLanguageApplied?.call(serverLocale);
|
languageCode: serverLanguage,
|
||||||
|
onServerLanguageApplied: onServerLanguageApplied,
|
||||||
|
)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// From cache
|
if (_useCachedLocale()) return;
|
||||||
if (cachedLocale != null && supportedLocales.contains(cachedLocale)) {
|
|
||||||
changeLocale(cachedLocale.languageCode);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// From device
|
if (_useDeviceLocale()) return;
|
||||||
final deviceLocale = WidgetsBinding.instance.platformDispatcher.locale;
|
|
||||||
if (supportedLocales.contains(deviceLocale)) {
|
|
||||||
changeLocale(deviceLocale.languageCode);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default
|
_useDefaultLocale();
|
||||||
if (currentLocale == null || !supportedLocales.contains(currentLocale)) {
|
|
||||||
changeLocale(defaultLocale.languageCode);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('LocalizationService::initializeAppLanguage: Exception: $e');
|
logError('LocalizationService::initializeAppLanguage: Exception: $e');
|
||||||
// Default
|
_useDefaultLocale();
|
||||||
if (currentLocale == null || !supportedLocales.contains(currentLocale)) {
|
|
||||||
changeLocale(defaultLocale.languageCode);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _useDefaultLocale() {
|
||||||
|
final currentLocale = Get.locale;
|
||||||
|
if (currentLocale == null || !_isSupportedLocale(currentLocale)) {
|
||||||
|
changeLocale(defaultLocale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool _useDeviceLocale() {
|
||||||
|
final deviceLocale = _getDeviceLocale();
|
||||||
|
log('LocalizationService::_useDeviceLocale: Device locale is $deviceLocale');
|
||||||
|
if (_isSupportedLocale(deviceLocale)) {
|
||||||
|
changeLocale(deviceLocale);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool _useCachedLocale() {
|
||||||
|
final cachedLocale = _getCachedLocale();
|
||||||
|
log('LocalizationService::_useCachedLocale: Cached locale is $cachedLocale');
|
||||||
|
if (cachedLocale != null && _isSupportedLocale(cachedLocale)) {
|
||||||
|
changeLocale(cachedLocale);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool _useServerLocale({
|
||||||
|
required String languageCode,
|
||||||
|
required OnServerLanguageApplied? onServerLanguageApplied,
|
||||||
|
}) {
|
||||||
|
final serverLocale = _findSupportedLocale(languageCode);
|
||||||
|
log('LocalizationService::_useServerLocale: Server locale is $serverLocale');
|
||||||
|
if (serverLocale != null && _isSupportedLocale(serverLocale)) {
|
||||||
|
changeLocale(serverLocale);
|
||||||
|
onServerLanguageApplied?.call(serverLocale);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool _isSupportedLocale(Locale locale) {
|
||||||
|
return supportedLocales
|
||||||
|
.any((supported) => supported.languageCode == locale.languageCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Locale? _findSupportedLocale(String languageCode) {
|
||||||
|
return supportedLocales.firstWhereOrNull(
|
||||||
|
(supported) => supported.languageCode == languageCode);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, Map<String, String>> get keys => {};
|
Map<String, Map<String, String>> get keys => {};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user