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

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

@ -1,5 +1,7 @@
import 'language_model.dart';
/// App界面支持的语言列表
/// 包含跟随系统、英语、中文、繁体中文、香港繁体中文、西班牙语、葡萄牙语、日语、韩语、法语、德语、俄语、阿拉伯语、波斯语、越南语、意大利语、印地语、印尼语、泰语、马来语等语言选项
final List<LanguageModel> settingsLanguageList = List.unmodifiable([
LanguageModel(name: 'followingSystem', alias: '', value: 'system'), // 跟随系统.tr
LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr
@ -10,8 +12,7 @@ final List<LanguageModel> settingsLanguageList = List.unmodifiable([
name: 'traditionalChineseHK',
alias: '繁體中文(HK)',
value: 'zh_HK'), // 添加香港繁体中文
LanguageModel(
name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项
LanguageModel(name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项
LanguageModel(
name: 'portuguese', alias: 'Português', value: 'pt_PT'), // 添加葡萄牙语
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: '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(
name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项
LanguageModel(
name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项
LanguageModel(
name: 'indonesian',
alias: 'Bahasa Indonesia',
value: 'id_ID'), // 添加印尼语选项
name: 'indonesian', alias: 'Bahasa Indonesia', value: 'id_ID'), // 添加印尼语选项
LanguageModel(name: 'thai', alias: 'ไทย', value: 'th_TH'), // 添加泰语选项
LanguageModel(
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: 'norwegian', alias: 'Norsk', value: 'nb_NO'), // 挪威语
LanguageModel(name: 'romanian', alias: 'Română', value: 'ro_RO'), // 罗马尼亚语
LanguageModel(
name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语
LanguageModel(name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语
LanguageModel(name: 'greek', alias: 'Ελληνικά', value: 'el_GR'), // 希腊语
LanguageModel(
name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语
LanguageModel(name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语
LanguageModel(name: 'croatian', alias: 'Hrvatski', value: 'hr_HR'), // 克罗地亚语
LanguageModel(name: 'slovak', alias: 'Slovenský', value: 'sk_SK'), // 斯洛伐克语
LanguageModel(
name: 'slovenian', alias: 'Slovenščina', value: 'sl_SI'), // 斯洛文尼亚语
LanguageModel(
name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语
LanguageModel(name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语
LanguageModel(name: 'latvian', alias: 'Latviešu', value: 'lv_LV'), // 拉脱维亚语
LanguageModel(name: 'estonian', alias: 'Eesti', value: 'et_EE'), // 爱沙尼亚语
LanguageModel(
name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁)
LanguageModel(name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁)
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(
() => _buildSimpleNavigationSetting(
title: 'languageSetting'.tr, // 语言设置
subtitle: controller.language.value.name.tr, // 当前语言
subtitle:
controller.currentLanguage.value.name.tr, // 当前语言
icon: Icons.language,
iconBgColor: isDarkMode
? Colors.indigo[900]!.withValues(alpha: 0.3)
@ -1115,7 +1116,8 @@ class SettingsView extends GetView<SettingsController> {
children: controller.languageList.map((language) {
return Obx(() {
final isSelected =
controller.language.value.value == language.value;
controller.currentLanguage.value.value ==
language.value;
return GestureDetector(
onTap: () {
controller.setLanguage(language);

Loading…
Cancel
Save