61 lines
1.3 KiB
Dart
61 lines
1.3 KiB
Dart
import 'dart:ui' as ui;
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:aslan/chatvibe_core/constants/at_global_config.dart';
|
|
import 'package:aslan/chatvibe_data/sources/local/data_persistence.dart';
|
|
|
|
class LocalizationManager with ChangeNotifier {
|
|
static const List<String> _supportedLanguageCodes = [
|
|
'en',
|
|
'ar',
|
|
'tr',
|
|
'bn',
|
|
'id',
|
|
'fil',
|
|
'ur',
|
|
'hi',
|
|
];
|
|
|
|
Locale? _locale;
|
|
|
|
Locale? get locale => _locale;
|
|
|
|
LocalizationManager() {
|
|
init();
|
|
}
|
|
|
|
init() {
|
|
String language = DataPersistence.getLang();
|
|
if (language.isEmpty) {
|
|
Locale systemLocale = ui.PlatformDispatcher.instance.locale;
|
|
_locale = Locale(_normalizeLanguageCode(systemLocale.languageCode), '');
|
|
} else {
|
|
_locale = Locale(_normalizeLanguageCode(language), '');
|
|
}
|
|
if (_locale != null) {
|
|
setLocale(_locale!);
|
|
}
|
|
}
|
|
|
|
String _normalizeLanguageCode(String languageCode) {
|
|
if (languageCode.startsWith("ar")) {
|
|
return 'ar';
|
|
}
|
|
if (languageCode == 'tl') {
|
|
return 'fil';
|
|
}
|
|
if (_supportedLanguageCodes.contains(languageCode)) {
|
|
return languageCode;
|
|
}
|
|
return 'en';
|
|
}
|
|
|
|
void setLocale(Locale locale) {
|
|
_locale = locale;
|
|
ATGlobalConfig.lang = locale.languageCode;
|
|
DataPersistence.setLang(locale.languageCode);
|
|
notifyListeners();
|
|
}
|
|
}
|