Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion lib/core/providers/settings_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1403,7 +1403,7 @@ class SettingsProvider extends ChangeNotifier {
}

// ===== App locale (UI language) =====
String? _appLocaleTag; // 'system', 'zh_CN', 'zh_Hant', 'en_US'
String? _appLocaleTag; // 'system', 'zh_CN', 'zh_Hant', 'en_US', 'tr_TR'
Locale get appLocale => _parseLocaleTag(_appLocaleTag ?? 'en_US');
bool get isFollowingSystemLocale =>
(_appLocaleTag == null) || (_appLocaleTag == 'system');
Expand Down Expand Up @@ -1433,6 +1433,9 @@ class SettingsProvider extends ChangeNotifier {
if (script == 'hant') return 'zh_Hant';
return 'zh_CN';
}
if (lc == 'tr') {
return 'tr_TR';
}
return 'en_US';
}

Expand All @@ -1443,6 +1446,9 @@ class SettingsProvider extends ChangeNotifier {
case 'zh_Hant':
return const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant');
case 'en_US':
return const Locale('en', 'US');
case 'tr_TR':
return const Locale('tr', 'TR');
default:
return const Locale('en', 'US');
}
Expand Down
6 changes: 6 additions & 0 deletions lib/desktop/desktop_translate_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ class _DesktopTranslatePageState extends State<DesktopTranslatePage> {
return l10n.languageDisplayItalian;
case 'es':
return l10n.languageDisplaySpanish;
case 'tr':
return l10n.languageDisplayTurkish;
default:
return code;
}
Expand Down Expand Up @@ -591,6 +593,8 @@ class _LanguageDropdownState extends State<_LanguageDropdown> {
return l10n.languageDisplayItalian;
case 'es':
return l10n.languageDisplaySpanish;
case 'tr':
return l10n.languageDisplayTurkish;
default:
return code;
}
Expand Down Expand Up @@ -824,6 +828,8 @@ class _LangOptionTileState extends State<_LangOptionTile> {
return l10n.languageDisplayItalian;
case 'es':
return l10n.languageDisplaySpanish;
case 'tr':
return l10n.languageDisplayTurkish;
default:
return code;
}
Expand Down
23 changes: 22 additions & 1 deletion lib/desktop/setting/display_pane.dart
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,7 @@ class _AppLanguageRowState extends State<_AppLanguageRow> {
'🇨🇳 ${AppLocalizations.of(ctx)!.displaySettingsPageLanguageChineseLabel}',
'🇨🇳 ${AppLocalizations.of(ctx)!.languageDisplayTraditionalChinese}',
'🇺🇸 ${AppLocalizations.of(ctx)!.displaySettingsPageLanguageEnglishLabel}',
'🇹🇷 ${AppLocalizations.of(ctx)!.languageDisplayTurkish}',
];
double maxText = 0;
for (final s in labels) {
Expand Down Expand Up @@ -835,6 +836,9 @@ class _AppLanguageRowState extends State<_AppLanguageRow> {
return l10n.languageDisplayTraditionalChinese;
return l10n.displaySettingsPageLanguageChineseLabel;
}
if (l.languageCode == 'tr') {
return l10n.languageDisplayTurkish;
}
return l10n.displaySettingsPageLanguageEnglishLabel;
}

Expand Down Expand Up @@ -1173,6 +1177,14 @@ class _LanguageDropdownState extends State<_LanguageDropdown> {
),
(!sp.isFollowingSystemLocale && sp.appLocale.languageCode == 'en'),
),
(
_LangItem(
flag: '🇹🇷',
label: l10n.languageDisplayTurkish,
tag: 'tr_TR',
),
(!sp.isFollowingSystemLocale && sp.appLocale.languageCode == 'tr'),
),
];
final maxH = MediaQuery.of(context).size.height * 0.5;
return AnimatedOpacity(
Expand Down Expand Up @@ -1237,6 +1249,15 @@ class _LanguageDropdownState extends State<_LanguageDropdown> {
);
break;
case 'en_US':
await context
.read<SettingsProvider>()
.setAppLocale(const Locale('en', 'US'));
break;
case 'tr_TR':
await context
.read<SettingsProvider>()
.setAppLocale(const Locale('tr', 'TR'));
break;
default:
await context
.read<SettingsProvider>()
Expand All @@ -1260,7 +1281,7 @@ class _LanguageDropdownState extends State<_LanguageDropdown> {
class _LangItem {
final String flag;
final String label;
final String tag; // 'system' | 'zh_CN' | 'zh_Hant' | 'en_US'
final String tag; // 'system' | 'zh_CN' | 'zh_Hant' | 'en_US' | 'tr_TR'
const _LangItem({required this.flag, required this.label, required this.tag});
}

Expand Down
18 changes: 18 additions & 0 deletions lib/features/settings/pages/display_settings_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ class _DisplaySettingsPageState extends State<DisplaySettingsPage> {
return l10n.languageDisplayTraditionalChinese;
return l10n.displaySettingsPageLanguageChineseLabel;
}
if (l.languageCode == 'tr') {
return l10n.languageDisplayTurkish;
}
return l10n.displaySettingsPageLanguageEnglishLabel;
}

Expand Down Expand Up @@ -621,6 +624,12 @@ class _DisplaySettingsPageState extends State<DisplaySettingsPage> {
label: l10n.displaySettingsPageLanguageEnglishLabel,
onTap: () => Navigator.of(ctx).pop('en_US'),
),
_sheetDividerNoIcon(ctx),
_sheetOption(
ctx,
label: l10n.languageDisplayTurkish,
onTap: () => Navigator.of(ctx).pop('tr_TR'),
),
],
),
),
Expand All @@ -643,6 +652,15 @@ class _DisplaySettingsPageState extends State<DisplaySettingsPage> {
);
break;
case 'en_US':
await context.read<SettingsProvider>().setAppLocale(
const Locale('en', 'US'),
);
break;
case 'tr_TR':
await context.read<SettingsProvider>().setAppLocale(
const Locale('tr', 'TR'),
);
break;
default:
await context.read<SettingsProvider>().setAppLocale(
const Locale('en', 'US'),
Expand Down
10 changes: 10 additions & 0 deletions lib/features/settings/widgets/language_select_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ const List<LanguageOption> supportedLanguages = [
displayNameZh: 'Español',
flag: '🇪🇸',
),
LanguageOption(
code: 'tr',
displayName: 'Turkish',
displayNameZh: 'Turkce',
flag: '🇹🇷',
),
// LanguageOption(code: 'pt', displayName: 'Portuguese', displayNameZh: 'Português', flag: '🇵🇹'),
// LanguageOption(code: 'ru', displayName: 'Russian', displayNameZh: 'Русский', flag: '🇷🇺'),
// LanguageOption(code: 'ar', displayName: 'Arabic', displayNameZh: 'العربية', flag: '🇸🇦'),
Expand Down Expand Up @@ -105,6 +111,8 @@ String _displayNameFor(AppLocalizations l10n, String languageCode) {
return l10n.languageDisplayItalian;
case 'es':
return l10n.languageDisplaySpanish;
case 'tr':
return l10n.languageDisplayTurkish;
default:
return languageCode;
}
Expand Down Expand Up @@ -322,6 +330,8 @@ class _LanguageSelectSheetState extends State<_LanguageSelectSheet> {
return l10n.languageDisplayItalian;
case 'es':
return l10n.languageDisplaySpanish;
case 'tr':
return l10n.languageDisplayTurkish;
default:
return languageCode;
}
Expand Down
2 changes: 2 additions & 0 deletions lib/features/translate/pages/translate_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,8 @@ class _TranslatePageState extends State<TranslatePage> {
return l10n.languageDisplayItalian;
case 'es':
return l10n.languageDisplaySpanish;
case 'tr':
return l10n.languageDisplayTurkish;
default:
return code;
}
Expand Down
15 changes: 9 additions & 6 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@
"languageDisplayGerman": "German",
"languageDisplayItalian": "Italian",
"languageDisplaySpanish": "Spanish",
"languageDisplayTurkish": "Turkish",
"languageSelectSheetTitle": "Select Translation Language",
"languageSelectSheetClearButton": "Clear Translation",
"homePageClearContext": "Clear Context",
Expand Down Expand Up @@ -1391,7 +1392,7 @@
"desktopFontLoading": "Loading fonts…",
"displaySettingsPageFontLocalFileLabel": "Local file",
"displaySettingsPageFontResetLabel": "Reset font settings",
"displaySettingsPageOtherSettingsTitle": "Other",
"displaySettingsPageOtherSettingsTitle": "Other Settings",
"themeSettingsPageDynamicColorSection": "Dynamic Color",
"themeSettingsPageUseDynamicColorTitle": "System Dynamic Colors",
"themeSettingsPageUseDynamicColorSubtitle": "Match system palette (Android 12+)",
Expand Down Expand Up @@ -1579,14 +1580,15 @@
"displaySettingsPageBehaviorStartupTitle": "Behavior & startup",
"displaySettingsPageHapticsSettingsTitle": "Haptics",
"assistantSettingsNoPromptPlaceholder": "No prompt yet",
"providersPageMultiSelectTooltip": "Multi-select"
,
"providersPageMultiSelectTooltip": "Multi-select",
"providersPageDeleteSelectedConfirmContent": "Delete selected providers? This cannot be undone.",
"providersPageDeleteSelectedSnackbar": "Deleted selected providers",
"providersPageExportSelectedTitle": "Export {count} providers",
"@providersPageExportSelectedTitle": {
"placeholders": {
"count": {"type": "int"}
"count": {
"type": "int"
}
}
},
"providersPageExportCopyButton": "Copy",
Expand Down Expand Up @@ -1626,7 +1628,9 @@
"networkProxyTestFailed": "Test failed: {error}",
"@networkProxyTestFailed": {
"placeholders": {
"error": { "type": "String" }
"error": {
"type": "String"
}
}
},
"networkProxyNoUrl": "Please enter a URL",
Expand All @@ -1644,7 +1648,6 @@
"providerDetailPageDetectSuccess": "Detection successful",
"providerDetailPageDetectFailed": "Detection failed",
"providerDetailPageDeleteAllModelsWarning": "This action cannot be undone.",
"displaySettingsPageOtherSettingsTitle": "Other Settings",
"requestLogSettingTitle": "Request Logging",
"requestLogSettingSubtitle": "When enabled, request/response details are written to logs/logs.txt (rotated daily).",
"flutterLogSettingTitle": "Flutter Logging",
Expand Down
12 changes: 11 additions & 1 deletion lib/l10n/app_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart' as intl;

import 'app_localizations_en.dart';
import 'app_localizations_tr.dart';
import 'app_localizations_zh.dart';

// ignore_for_file: type=lint
Expand Down Expand Up @@ -95,6 +96,7 @@ abstract class AppLocalizations {
/// A list of this localizations delegate's supported locales.
static const List<Locale> supportedLocales = <Locale>[
Locale('en'),
Locale('tr'),
Locale('zh'),
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'),
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'),
Expand Down Expand Up @@ -664,6 +666,12 @@ abstract class AppLocalizations {
/// **'Spanish'**
String get languageDisplaySpanish;

/// No description provided for @languageDisplayTurkish.
///
/// In en, this message translates to:
/// **'Turkish'**
String get languageDisplayTurkish;

/// No description provided for @languageSelectSheetTitle.
///
/// In en, this message translates to:
Expand Down Expand Up @@ -8072,7 +8080,7 @@ class _AppLocalizationsDelegate

@override
bool isSupported(Locale locale) =>
<String>['en', 'zh'].contains(locale.languageCode);
<String>['en', 'tr', 'zh'].contains(locale.languageCode);

@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
Expand All @@ -8097,6 +8105,8 @@ AppLocalizations lookupAppLocalizations(Locale locale) {
switch (locale.languageCode) {
case 'en':
return AppLocalizationsEn();
case 'tr':
return AppLocalizationsTr();
case 'zh':
return AppLocalizationsZh();
}
Expand Down
3 changes: 3 additions & 0 deletions lib/l10n/app_localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get languageDisplaySpanish => 'Spanish';

@override
String get languageDisplayTurkish => 'Turkish';

@override
String get languageSelectSheetTitle => 'Select Translation Language';

Expand Down
Loading