mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-04-20 22:13:48 +00:00
#256 finalize translation service
This commit is contained in:
parent
96d222a580
commit
ba6d751346
3 changed files with 32 additions and 9 deletions
|
|
@ -1387,7 +1387,7 @@ class _TranslationLanguageDialogContent extends StatefulWidget {
|
|||
});
|
||||
|
||||
final String? currentLanguageCode;
|
||||
final ValueChanged<String> onLanguageSelected;
|
||||
final ValueChanged<String?> onLanguageSelected;
|
||||
|
||||
@override
|
||||
State<_TranslationLanguageDialogContent> createState() =>
|
||||
|
|
@ -1438,17 +1438,20 @@ class _TranslationLanguageDialogContentState
|
|||
),
|
||||
const SizedBox(height: 12),
|
||||
Flexible(
|
||||
child: RadioGroup<String>(
|
||||
child: RadioGroup<String?>(
|
||||
groupValue: widget.currentLanguageCode,
|
||||
onChanged: (value) {
|
||||
if (value == null) return;
|
||||
widget.onLanguageSelected(value);
|
||||
},
|
||||
child: ListView(
|
||||
shrinkWrap: true,
|
||||
children: [
|
||||
RadioListTile<String?>(
|
||||
value: null,
|
||||
title: Text(context.l10n.translation_useAppLanguage),
|
||||
),
|
||||
for (final option in _filtered)
|
||||
RadioListTile<String>(
|
||||
RadioListTile<String?>(
|
||||
value: option.code,
|
||||
title: Text(option.label),
|
||||
subtitle: Text(option.code.toUpperCase()),
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ Future<void> showMessageTranslationSheet({
|
|||
required bool enabled,
|
||||
required String? selectedLanguageCode,
|
||||
required ValueChanged<bool> onEnabledChanged,
|
||||
required ValueChanged<String> onLanguageSelected,
|
||||
required ValueChanged<String?> onLanguageSelected,
|
||||
}) {
|
||||
return showModalBottomSheet<void>(
|
||||
context: context,
|
||||
|
|
@ -54,7 +54,7 @@ class _MessageTranslationSheet extends StatefulWidget {
|
|||
final bool enabled;
|
||||
final String? selectedLanguageCode;
|
||||
final ValueChanged<bool> onEnabledChanged;
|
||||
final ValueChanged<String> onLanguageSelected;
|
||||
final ValueChanged<String?> 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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue