mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-07-18 06:40:52 +10:00
#256 finalize translation service
This commit is contained in:
@@ -1387,7 +1387,7 @@ class _TranslationLanguageDialogContent extends StatefulWidget {
|
|||||||
});
|
});
|
||||||
|
|
||||||
final String? currentLanguageCode;
|
final String? currentLanguageCode;
|
||||||
final ValueChanged<String> onLanguageSelected;
|
final ValueChanged<String?> onLanguageSelected;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<_TranslationLanguageDialogContent> createState() =>
|
State<_TranslationLanguageDialogContent> createState() =>
|
||||||
@@ -1438,17 +1438,20 @@ class _TranslationLanguageDialogContentState
|
|||||||
),
|
),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
Flexible(
|
Flexible(
|
||||||
child: RadioGroup<String>(
|
child: RadioGroup<String?>(
|
||||||
groupValue: widget.currentLanguageCode,
|
groupValue: widget.currentLanguageCode,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
if (value == null) return;
|
|
||||||
widget.onLanguageSelected(value);
|
widget.onLanguageSelected(value);
|
||||||
},
|
},
|
||||||
child: ListView(
|
child: ListView(
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
children: [
|
children: [
|
||||||
|
RadioListTile<String?>(
|
||||||
|
value: null,
|
||||||
|
title: Text(context.l10n.translation_useAppLanguage),
|
||||||
|
),
|
||||||
for (final option in _filtered)
|
for (final option in _filtered)
|
||||||
RadioListTile<String>(
|
RadioListTile<String?>(
|
||||||
value: option.code,
|
value: option.code,
|
||||||
title: Text(option.label),
|
title: Text(option.label),
|
||||||
subtitle: Text(option.code.toUpperCase()),
|
subtitle: Text(option.code.toUpperCase()),
|
||||||
|
|||||||
@@ -77,7 +77,10 @@ class TranslationService extends ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String? resolvedIncomingLanguageCode(String? fallbackLanguageCode) {
|
String? resolvedIncomingLanguageCode(String? fallbackLanguageCode) {
|
||||||
return _settings.languageOverride ?? fallbackLanguageCode ?? 'en';
|
return _settings.translationTargetLanguageCode ??
|
||||||
|
_settings.languageOverride ??
|
||||||
|
fallbackLanguageCode ??
|
||||||
|
'en';
|
||||||
}
|
}
|
||||||
|
|
||||||
bool shouldTranslateIncoming({
|
bool shouldTranslateIncoming({
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ Future<void> showMessageTranslationSheet({
|
|||||||
required bool enabled,
|
required bool enabled,
|
||||||
required String? selectedLanguageCode,
|
required String? selectedLanguageCode,
|
||||||
required ValueChanged<bool> onEnabledChanged,
|
required ValueChanged<bool> onEnabledChanged,
|
||||||
required ValueChanged<String> onLanguageSelected,
|
required ValueChanged<String?> onLanguageSelected,
|
||||||
}) {
|
}) {
|
||||||
return showModalBottomSheet<void>(
|
return showModalBottomSheet<void>(
|
||||||
context: context,
|
context: context,
|
||||||
@@ -54,7 +54,7 @@ class _MessageTranslationSheet extends StatefulWidget {
|
|||||||
final bool enabled;
|
final bool enabled;
|
||||||
final String? selectedLanguageCode;
|
final String? selectedLanguageCode;
|
||||||
final ValueChanged<bool> onEnabledChanged;
|
final ValueChanged<bool> onEnabledChanged;
|
||||||
final ValueChanged<String> onLanguageSelected;
|
final ValueChanged<String?> onLanguageSelected;
|
||||||
|
|
||||||
const _MessageTranslationSheet({
|
const _MessageTranslationSheet({
|
||||||
required this.enabled,
|
required this.enabled,
|
||||||
@@ -145,9 +145,26 @@ class _MessageTranslationSheetState extends State<_MessageTranslationSheet> {
|
|||||||
Flexible(
|
Flexible(
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
itemCount: _filtered.length,
|
itemCount: _filtered.length + 1,
|
||||||
itemBuilder: (context, index) {
|
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;
|
final selected = option.code == _localSelectedLanguageCode;
|
||||||
return ListTile(
|
return ListTile(
|
||||||
contentPadding: EdgeInsets.zero,
|
contentPadding: EdgeInsets.zero,
|
||||||
|
|||||||
Reference in New Issue
Block a user