aslan-flutter/lib/chatvibe_managers/localization_manager.dart
2026-07-10 20:31:52 +08:00

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();
}
}