Localize Score, fix login dialog overflow, use locale-aware date format in channel chat

This commit is contained in:
Serge Tarkovski
2026-04-24 13:58:31 +03:00
parent 5e446207c6
commit 6ae3f612ae
39 changed files with 103 additions and 22 deletions
+2 -1
View File
@@ -2114,5 +2114,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2142,5 +2142,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+1
View File
@@ -784,6 +784,7 @@
} }
}, },
"chat_successes": "successes", "chat_successes": "successes",
"chat_score": "Score",
"chat_removePath": "Remove path", "chat_removePath": "Remove path",
"chat_noPathHistoryYet": "No path history yet.\nSend a message to discover paths.", "chat_noPathHistoryYet": "No path history yet.\nSend a message to discover paths.",
"chat_pathActions": "Path Actions:", "chat_pathActions": "Path Actions:",
+2 -1
View File
@@ -2142,5 +2142,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2114,5 +2114,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2152,5 +2152,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2114,5 +2114,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2152,5 +2152,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2152,5 +2152,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+6
View File
@@ -2686,6 +2686,12 @@ abstract class AppLocalizations {
/// **'successes'** /// **'successes'**
String get chat_successes; String get chat_successes;
/// No description provided for @chat_score.
///
/// In en, this message translates to:
/// **'Score'**
String get chat_score;
/// No description provided for @chat_removePath. /// No description provided for @chat_removePath.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
+3
View File
@@ -1473,6 +1473,9 @@ class AppLocalizationsBg extends AppLocalizations {
@override @override
String get chat_successes => 'Успехи'; String get chat_successes => 'Успехи';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Премахни пътя'; String get chat_removePath => 'Премахни пътя';
+3
View File
@@ -1472,6 +1472,9 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get chat_successes => 'Erfolgreich'; String get chat_successes => 'Erfolgreich';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Pfad entfernen'; String get chat_removePath => 'Pfad entfernen';
+3
View File
@@ -1445,6 +1445,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get chat_successes => 'successes'; String get chat_successes => 'successes';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Remove path'; String get chat_removePath => 'Remove path';
+3
View File
@@ -1470,6 +1470,9 @@ class AppLocalizationsEs extends AppLocalizations {
@override @override
String get chat_successes => 'Éxitos'; String get chat_successes => 'Éxitos';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Eliminar ruta'; String get chat_removePath => 'Eliminar ruta';
+3
View File
@@ -1477,6 +1477,9 @@ class AppLocalizationsFr extends AppLocalizations {
@override @override
String get chat_successes => 'Succès'; String get chat_successes => 'Succès';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Supprimer le chemin'; String get chat_removePath => 'Supprimer le chemin';
+3
View File
@@ -1482,6 +1482,9 @@ class AppLocalizationsHu extends AppLocalizations {
@override @override
String get chat_successes => 'sikerek'; String get chat_successes => 'sikerek';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Törölje a elérési útvonalat'; String get chat_removePath => 'Törölje a elérési útvonalat';
+3
View File
@@ -1471,6 +1471,9 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get chat_successes => 'successi'; String get chat_successes => 'successi';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Rimuovi percorso'; String get chat_removePath => 'Rimuovi percorso';
+3
View File
@@ -1409,6 +1409,9 @@ class AppLocalizationsJa extends AppLocalizations {
@override @override
String get chat_successes => '成功事例'; String get chat_successes => '成功事例';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'パスを削除する'; String get chat_removePath => 'パスを削除する';
+3
View File
@@ -1405,6 +1405,9 @@ class AppLocalizationsKo extends AppLocalizations {
@override @override
String get chat_successes => '성공 사례'; String get chat_successes => '성공 사례';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => '경로 제거'; String get chat_removePath => '경로 제거';
+3
View File
@@ -1459,6 +1459,9 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get chat_successes => 'Succesvol'; String get chat_successes => 'Succesvol';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Pad verwijderen'; String get chat_removePath => 'Pad verwijderen';
+3
View File
@@ -1483,6 +1483,9 @@ class AppLocalizationsPl extends AppLocalizations {
@override @override
String get chat_successes => 'Sukcesy'; String get chat_successes => 'Sukcesy';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Usuń ścieżkę'; String get chat_removePath => 'Usuń ścieżkę';
+3
View File
@@ -1470,6 +1470,9 @@ class AppLocalizationsPt extends AppLocalizations {
@override @override
String get chat_successes => 'Sucessos'; String get chat_successes => 'Sucessos';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Remover caminho'; String get chat_removePath => 'Remover caminho';
+3
View File
@@ -1473,6 +1473,9 @@ class AppLocalizationsRu extends AppLocalizations {
@override @override
String get chat_successes => 'успешно'; String get chat_successes => 'успешно';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Удалить маршрут'; String get chat_removePath => 'Удалить маршрут';
+3
View File
@@ -1460,6 +1460,9 @@ class AppLocalizationsSk extends AppLocalizations {
@override @override
String get chat_successes => 'Úspechy'; String get chat_successes => 'Úspechy';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Odstrániť cestu'; String get chat_removePath => 'Odstrániť cestu';
+3
View File
@@ -1457,6 +1457,9 @@ class AppLocalizationsSl extends AppLocalizations {
@override @override
String get chat_successes => 'Uspešni'; String get chat_successes => 'Uspešni';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Izbriši pot'; String get chat_removePath => 'Izbriši pot';
+3
View File
@@ -1452,6 +1452,9 @@ class AppLocalizationsSv extends AppLocalizations {
@override @override
String get chat_successes => 'framgångar'; String get chat_successes => 'framgångar';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => 'Ta bort sökväg'; String get chat_removePath => 'Ta bort sökväg';
+3
View File
@@ -1468,6 +1468,9 @@ class AppLocalizationsUk extends AppLocalizations {
@override @override
String get chat_successes => 'Успішно'; String get chat_successes => 'Успішно';
@override
String get chat_score => 'Оцінка';
@override @override
String get chat_removePath => 'Видалити шлях'; String get chat_removePath => 'Видалити шлях';
+3
View File
@@ -1385,6 +1385,9 @@ class AppLocalizationsZh extends AppLocalizations {
@override @override
String get chat_successes => '成功'; String get chat_successes => '成功';
@override
String get chat_score => 'Score';
@override @override
String get chat_removePath => '移除路径'; String get chat_removePath => '移除路径';
+2 -1
View File
@@ -2114,5 +2114,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2152,5 +2152,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2114,5 +2114,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -1354,5 +1354,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2114,5 +2114,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2114,5 +2114,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -2114,5 +2114,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+2 -1
View File
@@ -564,6 +564,7 @@
} }
}, },
"chat_successes": "Успішно", "chat_successes": "Успішно",
"chat_score": "Оцінка",
"chat_removePath": "Видалити шлях", "chat_removePath": "Видалити шлях",
"chat_noPathHistoryYet": "Історія шляхів недоступна.\nНадішліть повідомлення, щоб виявити шляхи.", "chat_noPathHistoryYet": "Історія шляхів недоступна.\nНадішліть повідомлення, щоб виявити шляхи.",
"chat_pathActions": "Дії зі шляхом:", "chat_pathActions": "Дії зі шляхом:",
@@ -827,7 +828,7 @@
"login_roomDescription": "Введіть пароль кімнати для доступу до налаштувань та статусу.", "login_roomDescription": "Введіть пароль кімнати для доступу до налаштувань та статусу.",
"login_routing": "Маршрутизація", "login_routing": "Маршрутизація",
"login_routingMode": "Режим маршрутизації", "login_routingMode": "Режим маршрутизації",
"login_autoUseSavedPath": "Авто (використовувати збережений шлях)", "login_autoUseSavedPath": "Авто (збережений шлях)",
"login_forceFloodMode": "Примусово через всю мережу", "login_forceFloodMode": "Примусово через всю мережу",
"login_managePaths": "Керувати шляхами", "login_managePaths": "Керувати шляхами",
"login_login": "Вхід", "login_login": "Вхід",
+2 -1
View File
@@ -2119,5 +2119,6 @@
"contact_typeRoom": "Room", "contact_typeRoom": "Room",
"contact_typeSensor": "Sensor", "contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown", "contact_typeUnknown": "Unknown",
"channels_via": "via {path}" "channels_via": "via {path}",
"chat_score": "Score"
} }
+7 -4
View File
@@ -4,6 +4,7 @@ import 'dart:math' as math;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
import 'package:latlong2/latlong.dart'; import 'package:latlong2/latlong.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -578,7 +579,7 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
_formatTime(message.timestamp), _formatTime(context, message.timestamp),
style: TextStyle( style: TextStyle(
fontSize: 11, fontSize: 11,
color: Colors.grey[600], color: Colors.grey[600],
@@ -1227,14 +1228,16 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
); );
} }
String _formatTime(DateTime time) { String _formatTime(BuildContext context, DateTime time) {
final now = DateTime.now(); final now = DateTime.now();
final diff = now.difference(time); final diff = now.difference(time);
final locale = Localizations.localeOf(context).toString();
final hm = DateFormat.Hm(locale).format(time);
if (diff.inDays > 0) { if (diff.inDays > 0) {
return '${time.day}/${time.month} ${time.hour}:${time.minute.toString().padLeft(2, '0')}'; return '${DateFormat.Md(locale).format(time)} $hm';
} else { } else {
return '${time.hour}:${time.minute.toString().padLeft(2, '0')}'; return hm;
} }
} }
+1 -1
View File
@@ -303,7 +303,7 @@ class _PathManagementDialogState extends State<_PathManagementDialog> {
), ),
isThreeLine: true, isThreeLine: true,
subtitle: Text( subtitle: Text(
'${(path.tripTimeMs / 1000).toStringAsFixed(2)}s • ${_formatRelativeTime(context, path.timestamp)}\n${path.successCount} ${l10n.chat_successes}Score: ${path.routeWeight.toStringAsFixed(1)}', '${(path.tripTimeMs / 1000).toStringAsFixed(2)}s • ${_formatRelativeTime(context, path.timestamp)}\n${path.successCount} ${l10n.chat_successes}${l10n.chat_score}: ${path.routeWeight.toStringAsFixed(1)}',
style: const TextStyle(fontSize: 11), style: const TextStyle(fontSize: 11),
), ),
trailing: Row( trailing: Row(