diff --git a/assets/translations/strings_zh.i18n.json b/assets/translations/strings_zh-CN.i18n.json similarity index 100% rename from assets/translations/strings_zh.i18n.json rename to assets/translations/strings_zh-CN.i18n.json diff --git a/lib/core/prefs/locale_prefs.dart b/lib/core/prefs/locale_prefs.dart index 0f294743..95352687 100644 --- a/lib/core/prefs/locale_prefs.dart +++ b/lib/core/prefs/locale_prefs.dart @@ -1,3 +1,4 @@ +import 'package:flutter_localized_locales/flutter_localized_locales.dart'; import 'package:hiddify/data/data_providers.dart'; import 'package:hiddify/gen/fonts.gen.dart'; import 'package:hiddify/gen/translations.g.dart'; @@ -14,7 +15,13 @@ class LocaleNotifier extends _$LocaleNotifier { ref.watch(sharedPreferencesProvider), "locale", AppLocaleUtils.findDeviceLocale(), - mapFrom: AppLocale.values.byName, + mapFrom: (String value) { + // keep backward compatibility with chinese after changing zh to zh_CN + if (value == "zh") { + return AppLocale.zhCn; + } + return AppLocale.values.byName(value); + }, mapTo: (value) => value.name, ); @@ -30,4 +37,9 @@ class LocaleNotifier extends _$LocaleNotifier { extension AppLocaleX on AppLocale { String get preferredFontFamily => this == AppLocale.fa ? FontFamily.shabnam : ""; + + String get localeName => + LocaleNamesLocalizationsDelegate + .nativeLocaleNames[flutterLocale.toString()] ?? + name; } diff --git a/lib/features/common/general_pref_tiles.dart b/lib/features/common/general_pref_tiles.dart index 7114bafd..69a354cb 100644 --- a/lib/features/common/general_pref_tiles.dart +++ b/lib/features/common/general_pref_tiles.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_localized_locales/flutter_localized_locales.dart'; import 'package:go_router/go_router.dart'; import 'package:hiddify/core/core_providers.dart'; import 'package:hiddify/core/prefs/prefs.dart'; @@ -17,10 +16,7 @@ class LocalePrefTile extends HookConsumerWidget { return ListTile( title: Text(t.settings.general.locale), - subtitle: Text( - LocaleNamesLocalizationsDelegate.nativeLocaleNames[locale.name] ?? - locale.name, - ), + subtitle: Text(locale.localeName), leading: const Icon(Icons.language), onTap: () async { final selectedLocale = await showDialog( @@ -31,11 +27,7 @@ class LocalePrefTile extends HookConsumerWidget { children: AppLocale.values .map( (e) => RadioListTile( - title: Text( - LocaleNamesLocalizationsDelegate - .nativeLocaleNames[e.name] ?? - e.name, - ), + title: Text(e.localeName), value: e, groupValue: locale, onChanged: (e) => context.pop(e),