Browse Source

refactor(settings): 重命名语言变量并优化语言设置逻辑

将`language`重命名为`currentLanguage`以提高可读性
优化语言设置逻辑,添加详细注释说明
整理语言列表的代码格式
newdev_shunjiawei
lxm 9 months ago
parent
commit
e2c4575cb8
  1. 51
      lib/modules/settings/controllers/settings_controller.dart
  2. 28
      lib/modules/settings/models/settings_language_data.dart
  3. 6
      lib/modules/settings/views/settings_view.dart

51
lib/modules/settings/controllers/settings_controller.dart

@ -21,7 +21,7 @@ class SettingsController extends GetxController {
// 语言设置 // 语言设置
final List<LanguageModel> languageList = settingsLanguageList; final List<LanguageModel> languageList = settingsLanguageList;
Rx<LanguageModel> language = LanguageModel().obs; Rx<LanguageModel> currentLanguage = LanguageModel().obs; // 当前选择的语言
final GetStorage _storage = GetStorage(); final GetStorage _storage = GetStorage();
@ -56,9 +56,6 @@ class SettingsController extends GetxController {
// 设置当前主题状态 // 设置当前主题状态
isDarkMode.value = savedDarkMode; isDarkMode.value = savedDarkMode;
//获取用户信息
// loadUserInfo();
// 获取应用版本信息 // 获取应用版本信息
getAppVersion(); getAppVersion();
} }
@ -75,31 +72,42 @@ class SettingsController extends GetxController {
} }
} }
/// 获取系统语言
/// 从存储中读取用户上次选择的语言
/// 如果没有保存记录,则默认使用第一个语言
void _getLanguage() { void _getLanguage() {
String? languageValue = _storage.read('language'); String? storedLanguageCode = _storage.read('language');
LanguageModel data = languageList.firstWhere( //在语言列表中查找匹配的语言
(element) => element.value == languageValue, LanguageModel languageToApply = languageList.firstWhere(
//查找条件:元素的value属性与从存储中读取的值匹配
(element) => element.value == storedLanguageCode,
//如果没有找到匹配的语言,返回第一个语言作为默认值
orElse: () => languageList[0], orElse: () => languageList[0],
); );
language.value = data; currentLanguage.value = languageToApply;
} }
/// 设置语言 /// 设置应用语言
Future<void> setLanguage(LanguageModel data) async { /// 1. 更新Flutter的Locale设置
/// 2. 保存用户选择到本地存储
/// 3. 更新agent服务的语音识别语言设置
/// 4. 显示语言切换成功提示
/// 5. 延迟一下确保语言更新完成,然后重新进入应用
Future<void> setLanguage(LanguageModel selectedLanguage) async {
try { try {
// 如果用户选择的语言与当前语言一致,则直接返回,避免重复设置 // 如果用户选择的语言与当前语言一致,则直接返回,避免重复设置
// print('lxm--设置语言: ${data.value}'); // print('lxm--设置语言: ${selectedLanguage.value}');
// print('lxm--当前语言: ${language.value.value}'); // print('lxm--当前语言: ${currentLanguage.value.value}');
if (data.value == language.value.value) { if (selectedLanguage.value == currentLanguage.value.value) {
return; return;
} }
Locale? targetLocale; Locale? targetLocale;
// print('lxm--设置语言: ${data.value}'); // print('lxm--设置语言: ${selectedLanguage.value}');
if (data.value != 'system') { if (selectedLanguage.value != 'system') {
// 用户手动选择的语言 // 用户手动选择的语言
List languageList = data.value.split('_'); List languageList = selectedLanguage.value.split('_');
targetLocale = Locale(languageList[0], languageList[1]); targetLocale = Locale(languageList[0], languageList[1]);
} else { } else {
// 跟随系统语言,使用智能匹配 // 跟随系统语言,使用智能匹配
@ -112,7 +120,8 @@ class SettingsController extends GetxController {
if (targetLocale != null) { if (targetLocale != null) {
Get.updateLocale(targetLocale); Get.updateLocale(targetLocale);
Logger().i("设置语言: ${data.value} -> ${targetLocale.toString()}"); Logger()
.i("设置语言: ${selectedLanguage.value} -> ${targetLocale.toString()}");
} else { } else {
// 如果无法确定目标语言,使用智能fallback // 如果无法确定目标语言,使用智能fallback
targetLocale = AppTranslations.getSmartFallbackLocale(); targetLocale = AppTranslations.getSmartFallbackLocale();
@ -121,14 +130,14 @@ class SettingsController extends GetxController {
} }
// 保存用户选择 // 保存用户选择
language.value = data; currentLanguage.value = selectedLanguage;
await _storage.write('language', data.value); await _storage.write('language', selectedLanguage.value);
// 更新agent服务的语音识别语言设置 // 更新agent服务的语音识别语言设置
await _updateAgentLanguageSettings(data); await _updateAgentLanguageSettings(selectedLanguage);
// 显示语言切换成功提示 // 显示语言切换成功提示
Logger().i("语言切换成功: ${data.value}"); Logger().i("语言切换成功: ${selectedLanguage.value}");
// 延迟一下确保语言更新完成,然后重新进入应用 // 延迟一下确保语言更新完成,然后重新进入应用
await Future.delayed(const Duration(milliseconds: 500)); await Future.delayed(const Duration(milliseconds: 500));

28
lib/modules/settings/models/settings_language_data.dart

@ -1,5 +1,7 @@
import 'language_model.dart'; import 'language_model.dart';
/// App界面支持的语言列表
/// 包含跟随系统、英语、中文、繁体中文、香港繁体中文、西班牙语、葡萄牙语、日语、韩语、法语、德语、俄语、阿拉伯语、波斯语、越南语、意大利语、印地语、印尼语、泰语、马来语等语言选项
final List<LanguageModel> settingsLanguageList = List.unmodifiable([ final List<LanguageModel> settingsLanguageList = List.unmodifiable([
LanguageModel(name: 'followingSystem', alias: '', value: 'system'), // 跟随系统.tr LanguageModel(name: 'followingSystem', alias: '', value: 'system'), // 跟随系统.tr
LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr
@ -10,8 +12,7 @@ final List<LanguageModel> settingsLanguageList = List.unmodifiable([
name: 'traditionalChineseHK', name: 'traditionalChineseHK',
alias: '繁體中文(HK)', alias: '繁體中文(HK)',
value: 'zh_HK'), // 添加香港繁体中文 value: 'zh_HK'), // 添加香港繁体中文
LanguageModel( LanguageModel(name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项
name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项
LanguageModel( LanguageModel(
name: 'portuguese', alias: 'Português', value: 'pt_PT'), // 添加葡萄牙语 name: 'portuguese', alias: 'Português', value: 'pt_PT'), // 添加葡萄牙语
LanguageModel(name: 'japanese', alias: '日本語', value: 'ja_JP'), // 添加日语选项 LanguageModel(name: 'japanese', alias: '日本語', value: 'ja_JP'), // 添加日语选项
@ -23,14 +24,10 @@ final List<LanguageModel> settingsLanguageList = List.unmodifiable([
LanguageModel(name: 'persian', alias: 'فارسی', value: 'fa_IR'), // 波斯语 LanguageModel(name: 'persian', alias: 'فارسی', value: 'fa_IR'), // 波斯语
LanguageModel( LanguageModel(
name: 'vietnamese', alias: 'Tiếng Việt', value: 'vi_VN'), // 添加越南语选项 name: 'vietnamese', alias: 'Tiếng Việt', value: 'vi_VN'), // 添加越南语选项
LanguageModel(name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项
LanguageModel(name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项
LanguageModel( LanguageModel(
name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项 name: 'indonesian', alias: 'Bahasa Indonesia', value: 'id_ID'), // 添加印尼语选项
LanguageModel(
name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项
LanguageModel(
name: 'indonesian',
alias: 'Bahasa Indonesia',
value: 'id_ID'), // 添加印尼语选项
LanguageModel(name: 'thai', alias: 'ไทย', value: 'th_TH'), // 添加泰语选项 LanguageModel(name: 'thai', alias: 'ไทย', value: 'th_TH'), // 添加泰语选项
LanguageModel( LanguageModel(
name: 'malay', alias: 'Bahasa Melayu', value: 'ms_MY'), // 添加马来语选项 name: 'malay', alias: 'Bahasa Melayu', value: 'ms_MY'), // 添加马来语选项
@ -45,21 +42,16 @@ final List<LanguageModel> settingsLanguageList = List.unmodifiable([
LanguageModel(name: 'hungarian', alias: 'Magyar', value: 'hu_HU'), // 匈牙利语 LanguageModel(name: 'hungarian', alias: 'Magyar', value: 'hu_HU'), // 匈牙利语
LanguageModel(name: 'norwegian', alias: 'Norsk', value: 'nb_NO'), // 挪威语 LanguageModel(name: 'norwegian', alias: 'Norsk', value: 'nb_NO'), // 挪威语
LanguageModel(name: 'romanian', alias: 'Română', value: 'ro_RO'), // 罗马尼亚语 LanguageModel(name: 'romanian', alias: 'Română', value: 'ro_RO'), // 罗马尼亚语
LanguageModel( LanguageModel(name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语
name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语
LanguageModel(name: 'greek', alias: 'Ελληνικά', value: 'el_GR'), // 希腊语 LanguageModel(name: 'greek', alias: 'Ελληνικά', value: 'el_GR'), // 希腊语
LanguageModel( LanguageModel(name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语
name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语
LanguageModel(name: 'croatian', alias: 'Hrvatski', value: 'hr_HR'), // 克罗地亚语 LanguageModel(name: 'croatian', alias: 'Hrvatski', value: 'hr_HR'), // 克罗地亚语
LanguageModel(name: 'slovak', alias: 'Slovenský', value: 'sk_SK'), // 斯洛伐克语 LanguageModel(name: 'slovak', alias: 'Slovenský', value: 'sk_SK'), // 斯洛伐克语
LanguageModel( LanguageModel(
name: 'slovenian', alias: 'Slovenščina', value: 'sl_SI'), // 斯洛文尼亚语 name: 'slovenian', alias: 'Slovenščina', value: 'sl_SI'), // 斯洛文尼亚语
LanguageModel( LanguageModel(name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语
name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语
LanguageModel(name: 'latvian', alias: 'Latviešu', value: 'lv_LV'), // 拉脱维亚语 LanguageModel(name: 'latvian', alias: 'Latviešu', value: 'lv_LV'), // 拉脱维亚语
LanguageModel(name: 'estonian', alias: 'Eesti', value: 'et_EE'), // 爱沙尼亚语 LanguageModel(name: 'estonian', alias: 'Eesti', value: 'et_EE'), // 爱沙尼亚语
LanguageModel( LanguageModel(name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁)
name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁)
LanguageModel(name: 'icelandic', alias: 'Íslenska', value: 'is_IS'), // 冰岛语 LanguageModel(name: 'icelandic', alias: 'Íslenska', value: 'is_IS'), // 冰岛语
]); ]);

6
lib/modules/settings/views/settings_view.dart

@ -397,7 +397,8 @@ class SettingsView extends GetView<SettingsController> {
Obx( Obx(
() => _buildSimpleNavigationSetting( () => _buildSimpleNavigationSetting(
title: 'languageSetting'.tr, // 语言设置 title: 'languageSetting'.tr, // 语言设置
subtitle: controller.language.value.name.tr, // 当前语言 subtitle:
controller.currentLanguage.value.name.tr, // 当前语言
icon: Icons.language, icon: Icons.language,
iconBgColor: isDarkMode iconBgColor: isDarkMode
? Colors.indigo[900]!.withValues(alpha: 0.3) ? Colors.indigo[900]!.withValues(alpha: 0.3)
@ -1115,7 +1116,8 @@ class SettingsView extends GetView<SettingsController> {
children: controller.languageList.map((language) { children: controller.languageList.map((language) {
return Obx(() { return Obx(() {
final isSelected = final isSelected =
controller.language.value.value == language.value; controller.currentLanguage.value.value ==
language.value;
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
controller.setLanguage(language); controller.setLanguage(language);

Loading…
Cancel
Save