diff --git a/lib/screens/app_settings_screen.dart b/lib/screens/app_settings_screen.dart index ac6f4cb..cd7fb67 100644 --- a/lib/screens/app_settings_screen.dart +++ b/lib/screens/app_settings_screen.dart @@ -1387,7 +1387,7 @@ class _TranslationLanguageDialogContent extends StatefulWidget { }); final String? currentLanguageCode; - final ValueChanged onLanguageSelected; + final ValueChanged onLanguageSelected; @override State<_TranslationLanguageDialogContent> createState() => @@ -1438,17 +1438,20 @@ class _TranslationLanguageDialogContentState ), const SizedBox(height: 12), Flexible( - child: RadioGroup( + child: RadioGroup( groupValue: widget.currentLanguageCode, onChanged: (value) { - if (value == null) return; widget.onLanguageSelected(value); }, child: ListView( shrinkWrap: true, children: [ + RadioListTile( + value: null, + title: Text(context.l10n.translation_useAppLanguage), + ), for (final option in _filtered) - RadioListTile( + RadioListTile( value: option.code, title: Text(option.label), subtitle: Text(option.code.toUpperCase()), diff --git a/lib/services/translation_service.dart b/lib/services/translation_service.dart index 50b9f1e..f8147a1 100644 --- a/lib/services/translation_service.dart +++ b/lib/services/translation_service.dart @@ -77,7 +77,10 @@ class TranslationService extends ChangeNotifier { } String? resolvedIncomingLanguageCode(String? fallbackLanguageCode) { - return _settings.languageOverride ?? fallbackLanguageCode ?? 'en'; + return _settings.translationTargetLanguageCode ?? + _settings.languageOverride ?? + fallbackLanguageCode ?? + 'en'; } bool shouldTranslateIncoming({ diff --git a/lib/widgets/message_translation_button.dart b/lib/widgets/message_translation_button.dart index 18946dd..b26d5ba 100644 --- a/lib/widgets/message_translation_button.dart +++ b/lib/widgets/message_translation_button.dart @@ -36,7 +36,7 @@ Future showMessageTranslationSheet({ required bool enabled, required String? selectedLanguageCode, required ValueChanged onEnabledChanged, - required ValueChanged onLanguageSelected, + required ValueChanged onLanguageSelected, }) { return showModalBottomSheet( context: context, @@ -54,7 +54,7 @@ class _MessageTranslationSheet extends StatefulWidget { final bool enabled; final String? selectedLanguageCode; final ValueChanged onEnabledChanged; - final ValueChanged onLanguageSelected; + final ValueChanged onLanguageSelected; const _MessageTranslationSheet({ required this.enabled, @@ -145,9 +145,26 @@ class _MessageTranslationSheetState extends State<_MessageTranslationSheet> { Flexible( child: ListView.builder( shrinkWrap: true, - itemCount: _filtered.length, + itemCount: _filtered.length + 1, itemBuilder: (context, index) { - final option = _filtered[index]; + if (index == 0) { + final selected = _localSelectedLanguageCode == null; + return ListTile( + contentPadding: EdgeInsets.zero, + leading: Icon( + selected + ? Icons.radio_button_checked + : Icons.radio_button_unchecked, + ), + title: Text(context.l10n.translation_useAppLanguage), + onTap: () { + setState(() => _localSelectedLanguageCode = null); + widget.onLanguageSelected(null); + Navigator.pop(context); + }, + ); + } + final option = _filtered[index - 1]; final selected = option.code == _localSelectedLanguageCode; return ListTile( contentPadding: EdgeInsets.zero,