feat(frontend): add multi-language support (en, zh-Hans, zh-Hant, ja)

This commit is contained in:
2026-05-25 11:49:53 +08:00
parent 1539e495e6
commit 261b1ab169
20 changed files with 1955 additions and 139 deletions

View File

@@ -13,11 +13,13 @@ class SettingsProvider with ChangeNotifier {
Color _themeColor = Colors.blue;
ThemeMode _themeMode = ThemeMode.system;
bool _livePreviewThumbnailsEnabled = false;
Locale? _locale;
String get baseUrl => _baseUrl;
Color get themeColor => _themeColor;
ThemeMode get themeMode => _themeMode;
bool get livePreviewThumbnailsEnabled => _livePreviewThumbnailsEnabled;
Locale? get locale => _locale;
SettingsProvider() {
_loadSettings();
@@ -36,6 +38,41 @@ class SettingsProvider with ChangeNotifier {
}
_livePreviewThumbnailsEnabled =
prefs.getBool('livePreviewThumbnailsEnabled') ?? false;
final languageCode = prefs.getString('languageCode');
final scriptCode = prefs.getString('scriptCode');
final countryCode = prefs.getString('countryCode');
if (languageCode != null) {
_locale = Locale.fromSubtags(
languageCode: languageCode,
scriptCode: scriptCode,
countryCode: countryCode,
);
}
notifyListeners();
}
void setLocale(Locale? newLocale) async {
_locale = newLocale;
final prefs = await SharedPreferences.getInstance();
if (newLocale == null) {
await prefs.remove('languageCode');
await prefs.remove('scriptCode');
await prefs.remove('countryCode');
} else {
await prefs.setString('languageCode', newLocale.languageCode);
if (newLocale.scriptCode != null) {
await prefs.setString('scriptCode', newLocale.scriptCode!);
} else {
await prefs.remove('scriptCode');
}
if (newLocale.countryCode != null) {
await prefs.setString('countryCode', newLocale.countryCode!);
} else {
await prefs.remove('countryCode');
}
}
notifyListeners();
}