refactor(settings): 统一语言设置,合并 interface_language 和 ai_language
- 后端 Schema 将 interface_language 和 ai_language 合并为 language - 前端设置界面只保留一个语言选项 - AI 回复语言统一使用 language 设置 - 更新协议文档 - 新增数据库迁移脚本
This commit is contained in:
@@ -41,10 +41,8 @@ class ProfileApi {
|
||||
'settings': {
|
||||
'version': settings.version,
|
||||
'preferences': {
|
||||
'interface_language': settings.preferences.interfaceLanguage,
|
||||
'ai_language': settings.preferences.aiLanguage,
|
||||
'language': settings.preferences.language,
|
||||
'timezone': settings.preferences.timezone,
|
||||
'country': settings.preferences.country,
|
||||
},
|
||||
'privacy': {
|
||||
'can_sell': settings.privacy.canSell,
|
||||
@@ -109,12 +107,9 @@ class ProfileApi {
|
||||
: null;
|
||||
final preferences = preferencesRaw is Map<String, dynamic>
|
||||
? PreferenceSettings(
|
||||
interfaceLanguage:
|
||||
(preferencesRaw['interface_language'] as String?) ?? 'zh-CN',
|
||||
aiLanguage: (preferencesRaw['ai_language'] as String?) ?? 'zh-CN',
|
||||
language: (preferencesRaw['language'] as String?) ?? 'zh-CN',
|
||||
timezone:
|
||||
(preferencesRaw['timezone'] as String?) ?? 'Asia/Shanghai',
|
||||
country: (preferencesRaw['country'] as String?) ?? 'US',
|
||||
)
|
||||
: const PreferenceSettings();
|
||||
|
||||
|
||||
@@ -13,28 +13,20 @@ String displayLanguageLabel(AppLocalizations l10n, String languageTag) {
|
||||
|
||||
class PreferenceSettings {
|
||||
const PreferenceSettings({
|
||||
this.interfaceLanguage = 'zh-CN',
|
||||
this.aiLanguage = 'zh-CN',
|
||||
this.language = 'zh-CN',
|
||||
this.timezone = 'Asia/Shanghai',
|
||||
this.country = 'US',
|
||||
});
|
||||
|
||||
final String interfaceLanguage;
|
||||
final String aiLanguage;
|
||||
final String language;
|
||||
final String timezone;
|
||||
final String country;
|
||||
|
||||
PreferenceSettings copyWith({
|
||||
String? interfaceLanguage,
|
||||
String? aiLanguage,
|
||||
String? language,
|
||||
String? timezone,
|
||||
String? country,
|
||||
}) {
|
||||
return PreferenceSettings(
|
||||
interfaceLanguage: interfaceLanguage ?? this.interfaceLanguage,
|
||||
aiLanguage: aiLanguage ?? this.aiLanguage,
|
||||
language: language ?? this.language,
|
||||
timezone: timezone ?? this.timezone,
|
||||
country: country ?? this.country,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -151,7 +143,7 @@ class ProfileSettingsV1 {
|
||||
factory ProfileSettingsV1.defaultsForLocale(Locale locale) {
|
||||
final tag = languageTagFromLocale(locale);
|
||||
return ProfileSettingsV1(
|
||||
preferences: PreferenceSettings(interfaceLanguage: tag, aiLanguage: tag),
|
||||
preferences: PreferenceSettings(language: tag),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,40 +54,20 @@ class _GeneralSettingsScreenState extends State<GeneralSettingsScreen> {
|
||||
children: [
|
||||
SettingsMenuTile(
|
||||
icon: Icons.language_rounded,
|
||||
title: l10n.settingsInterfaceLanguage,
|
||||
title: l10n.settingsLanguage,
|
||||
subtitle: displayLanguageLabel(
|
||||
l10n,
|
||||
_settings.preferences.interfaceLanguage,
|
||||
),
|
||||
tint: colors.primary,
|
||||
background: colors.surfaceContainerHighest,
|
||||
onTap: () => _selectLanguage(
|
||||
_settings.preferences.interfaceLanguage,
|
||||
(lang) => setState(() {
|
||||
_settings = _settings.copyWith(
|
||||
preferences: _settings.preferences.copyWith(
|
||||
interfaceLanguage: lang,
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
),
|
||||
SettingsMenuTile(
|
||||
icon: Icons.smart_toy_rounded,
|
||||
title: l10n.settingsAiLanguage,
|
||||
subtitle: displayLanguageLabel(
|
||||
l10n,
|
||||
_settings.preferences.aiLanguage,
|
||||
_settings.preferences.language,
|
||||
),
|
||||
tint: colors.primary,
|
||||
background: colors.surfaceContainerHighest,
|
||||
showDivider: false,
|
||||
onTap: () => _selectLanguage(
|
||||
_settings.preferences.aiLanguage,
|
||||
_settings.preferences.language,
|
||||
(lang) => setState(() {
|
||||
_settings = _settings.copyWith(
|
||||
preferences: _settings.preferences.copyWith(
|
||||
aiLanguage: lang,
|
||||
language: lang,
|
||||
),
|
||||
);
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user