From 0a99a7b6e76d5783c3b7b4a896d76b4405692705 Mon Sep 17 00:00:00 2001 From: MarekWo Date: Sat, 1 Aug 2026 10:06:02 +0200 Subject: [PATCH] feat(i18n): translate Settings - Device, Messages, Group Chat, Interface (stage 8a) The modal shell and the first four tabs, plus all ten tab labels: the tab bar is one block, so splitting it across two commits would have meant editing the same lines twice. 8b fills the panes behind the other six. Radio parameter names stay English - Bandwidth, Spreading Factor, Coding Rate are what the firmware, the CLI and the forums call them, the same call rptmgmt.set.radio_note already made. Latitude, Longitude and "Pick from map" reuse the rptmgmt.set.* keys rather than getting a second translation that could drift from the repeater form. "Auto-close after (s)" and "Don't close automatically" appear in both the Group Chat and Interface tabs with identical English, so they share one key; only their tooltips differ, and those are separate keys. Also in app.js: populateRadioPresets() rebuilds the preset + id="settDeviceName" maxlength="32" placeholder="{{ t('settings.device.name_ph') }}"> - Latitude + {{ t('rptmgmt.set.lat') }}
+ title="{{ t('rptmgmt.set.map_pick') }}">
- Longitude + {{ t('rptmgmt.set.lon') }} - Share position in advert + {{ t('settings.device.share_pos') }} + title="{{ t('settings.device.share_pos_help') }}">
@@ -547,22 +547,22 @@ - Path hash mode + {{ t('settings.device.path_hash_mode') }} + title="{{ t('settings.device.path_hash_mode_help') }}">
- +
@@ -574,17 +574,17 @@ - Frequency (MHz) + {{ t('settings.device.freq') }} - Bandwidth (kHz) + {{ t('settings.device.bw') }} - Coding Rate + {{ t('settings.device.cr') }} - TX Power (dBm) + {{ t('settings.device.tx_power') }}
- +
@@ -627,78 +627,78 @@
-

Retries are counted after the initial send, e.g. 3 retries = 4 total attempts.

-
When path is known (DIRECT)
+

{{ t('settings.msg.intro') }}

+
{{ t('settings.msg.direct_header') }}
- + - + - +
Direct retries {{ t('settings.msg.direct_retries') }}
Flood retries {{ t('settings.msg.flood_retries') }}
Interval (s) {{ t('settings.msg.interval') }}
-
When no path (FLOOD)
+
{{ t('settings.msg.flood_header') }}
- + - +
Max retries {{ t('settings.msg.max_retries') }}
Interval (s) {{ t('settings.msg.interval') }}
-
Other
+
{{ t('settings.msg.other') }}
- +
Grace period (s) {{ t('settings.msg.grace') }}
- - + +
-
Quote
+
{{ t('settings.chat.quote') }}
- +
Quote length (bytes) {{ t('settings.chat.quote_len') }}
-
Route popup
-

The popup shown when tapping "SNR | Hops" under a message. Also applies to DMs.

+
{{ t('settings.chat.route_popup') }}
+

{{ t('settings.chat.route_popup_desc') }}

- + - +
Auto-close after (s) {{ t('settings.chat.autoclose') }}
Don't close automatically {{ t('settings.chat.no_autoclose') }}
@@ -708,22 +708,22 @@
- - + +
-
Layout
-

Window width above which the channel/contact list is shown as a sidebar. Below this width it collapses to a dropdown at the top of the screen. Saved per device (browser).

+
{{ t('settings.iface.layout') }}
+

{{ t('settings.iface.layout_desc') }}

- + @@ -731,16 +731,16 @@
Sidebar breakpoint (px) {{ t('settings.iface.breakpoint') }}
- +

-
Notifications
-

Controls the small toasts shown after actions (e.g. "Advert Sent", errors).

+
{{ t('settings.tab.notifications') }}
+

{{ t('settings.iface.toast_desc') }}

- + - + - +
Auto-close after (s) {{ t('settings.chat.autoclose') }}
Don't close automatically {{ t('settings.chat.no_autoclose') }}
@@ -748,22 +748,22 @@
Position on screen{{ t('settings.iface.position') }}
- - + +
diff --git a/app/translations/en.json b/app/translations/en.json index dc84a9b..ea0046d 100644 --- a/app/translations/en.json +++ b/app/translations/en.json @@ -728,6 +728,70 @@ "search.tip_phrase": "exact phrase", "search.tip_prefix": "prefix match (hello,hellas...)", "search.tips": "Search tips:", + "settings.chat.autoclose": "Auto-close after (s)", + "settings.chat.autoclose_help": "Seconds before the route popup closes automatically", + "settings.chat.no_autoclose": "Don't close automatically", + "settings.chat.no_autoclose_help": "Popup stays open until you tap outside it", + "settings.chat.quote": "Quote", + "settings.chat.quote_len": "Quote length (bytes)", + "settings.chat.quote_len_help": "Default max UTF-8 bytes for truncated quotes", + "settings.chat.route_popup": "Route popup", + "settings.chat.route_popup_desc": "The popup shown when tapping \"SNR | Hops\" under a message. Also applies to DMs.", + "settings.device.bw": "Bandwidth (kHz)", + "settings.device.cr": "Coding Rate", + "settings.device.freq": "Frequency (MHz)", + "settings.device.hash_1b": "1 byte (default)", + "settings.device.hash_2b": "2 bytes", + "settings.device.hash_3b": "3 bytes", + "settings.device.load_preset": "Load preset...", + "settings.device.name_ph": "Device name", + "settings.device.path_hash_mode": "Path hash mode", + "settings.device.path_hash_mode_help": "Bytes per hop in routing paths. 1B = shortest path, more collisions; 3B = longest, fewest collisions.", + "settings.device.public_info": "Public Info", + "settings.device.radio": "Radio Settings", + "settings.device.sf": "Spreading Factor", + "settings.device.share_pos": "Share position in advert", + "settings.device.share_pos_help": "Include GPS coordinates in device advertisement", + "settings.device.tx_power": "TX Power (dBm)", + "settings.iface.breakpoint": "Sidebar breakpoint (px)", + "settings.iface.breakpoint_help": "Default: 992. Range: 600-2000.", + "settings.iface.breakpoint_reset_title": "Reset to default (992)", + "settings.iface.layout": "Layout", + "settings.iface.layout_desc": "Window width above which the channel/contact list is shown as a sidebar. Below this width it collapses to a dropdown at the top of the screen. Saved per device (browser).", + "settings.iface.pos_bottom_left": "Bottom left", + "settings.iface.pos_bottom_right": "Bottom right", + "settings.iface.pos_center": "Center", + "settings.iface.pos_top_left": "Top left", + "settings.iface.pos_top_right": "Top right", + "settings.iface.position": "Position on screen", + "settings.iface.toast_autoclose_help": "Seconds before a notification closes automatically", + "settings.iface.toast_desc": "Controls the small toasts shown after actions (e.g. \"Advert Sent\", errors).", + "settings.iface.toast_no_autoclose_help": "Notifications stay until dismissed via their close button", + "settings.msg.direct_header": "When path is known (DIRECT)", + "settings.msg.direct_interval_help": "Seconds to wait between direct retries", + "settings.msg.direct_retries": "Direct retries", + "settings.msg.direct_retries_help": "Attempts via known path before switching to flood", + "settings.msg.flood_header": "When no path (FLOOD)", + "settings.msg.flood_interval_help": "Seconds to wait between flood retries", + "settings.msg.flood_retries": "Flood retries", + "settings.msg.flood_retries_help": "Flood attempts after direct retries exhausted (when no configured paths)", + "settings.msg.grace": "Grace period (s)", + "settings.msg.grace_help": "Wait for late ACKs after all retries exhausted", + "settings.msg.interval": "Interval (s)", + "settings.msg.intro": "Retries are counted after the initial send, e.g. 3 retries = 4 total attempts.", + "settings.msg.max_retries": "Max retries", + "settings.msg.max_retries_help": "Flood retry attempts (also used after path rotation)", + "settings.msg.other": "Other", + "settings.reset_defaults": "Reset to defaults", + "settings.tab.analyzer": "Analyzer", + "settings.tab.appearance": "Appearance", + "settings.tab.chat": "Group Chat", + "settings.tab.contacts": "Contacts", + "settings.tab.interface": "Interface", + "settings.tab.messages": "Messages", + "settings.tab.notifications": "Notifications", + "settings.tab.observer": "Observer", + "settings.tab.regions": "Regions", "update.checking": "Checking for updates...", "update.now": "Update Now", "update.reload": "Reload Page", diff --git a/app/translations/pl.json b/app/translations/pl.json index 443ca70..78cdab5 100644 --- a/app/translations/pl.json +++ b/app/translations/pl.json @@ -784,6 +784,70 @@ "search.tip_phrase": "dokładna fraza", "search.tip_prefix": "dopasowanie przedrostka (hello, hellas...)", "search.tips": "Wskazówki wyszukiwania:", + "settings.chat.autoclose": "Zamknij automatycznie po (s)", + "settings.chat.autoclose_help": "Ile sekund do automatycznego zamknięcia popupu trasy", + "settings.chat.no_autoclose": "Nie zamykaj automatycznie", + "settings.chat.no_autoclose_help": "Popup pozostaje otwarty, dopóki nie dotkniesz poza nim", + "settings.chat.quote": "Cytowanie", + "settings.chat.quote_len": "Długość cytatu (bajty)", + "settings.chat.quote_len_help": "Domyślna maks. liczba bajtów UTF-8 dla skróconych cytatów", + "settings.chat.route_popup": "Popup trasy", + "settings.chat.route_popup_desc": "Popup pokazywany po dotknięciu \"SNR | Hops\" pod wiadomością. Dotyczy także DM-ów.", + "settings.device.bw": "Bandwidth (kHz)", + "settings.device.cr": "Coding Rate", + "settings.device.freq": "Częstotliwość (MHz)", + "settings.device.hash_1b": "1 bajt (domyślnie)", + "settings.device.hash_2b": "2 bajty", + "settings.device.hash_3b": "3 bajty", + "settings.device.load_preset": "Wczytaj preset...", + "settings.device.name_ph": "Nazwa urządzenia", + "settings.device.path_hash_mode": "Tryb hasha ścieżki", + "settings.device.path_hash_mode_help": "Bajtów na hop w ścieżkach routingu. 1B = najkrótsza ścieżka, więcej kolizji; 3B = najdłuższa, najmniej kolizji.", + "settings.device.public_info": "Informacje publiczne", + "settings.device.radio": "Ustawienia radia", + "settings.device.sf": "Spreading Factor", + "settings.device.share_pos": "Udostępniaj pozycję w advert", + "settings.device.share_pos_help": "Dołącz współrzędne GPS do advertu urządzenia", + "settings.device.tx_power": "Moc TX (dBm)", + "settings.iface.breakpoint": "Próg szerokości paska bocznego (px)", + "settings.iface.breakpoint_help": "Domyślnie: 992. Zakres: 600-2000.", + "settings.iface.breakpoint_reset_title": "Przywróć domyślną (992)", + "settings.iface.layout": "Układ", + "settings.iface.layout_desc": "Szerokość okna, powyżej której lista kanałów/kontaktów pokazuje się jako pasek boczny. Poniżej zwija się do listy rozwijanej na górze ekranu. Zapisywane dla każdego urządzenia (przeglądarki).", + "settings.iface.pos_bottom_left": "Lewy dolny", + "settings.iface.pos_bottom_right": "Prawy dolny", + "settings.iface.pos_center": "Na środku", + "settings.iface.pos_top_left": "Lewy górny", + "settings.iface.pos_top_right": "Prawy górny", + "settings.iface.position": "Pozycja na ekranie", + "settings.iface.toast_autoclose_help": "Ile sekund do automatycznego zamknięcia powiadomienia", + "settings.iface.toast_desc": "Steruje małymi powiadomieniami po akcjach (np. \"Advert wysłany\", błędy).", + "settings.iface.toast_no_autoclose_help": "Powiadomienia pozostają, dopóki nie zamkniesz ich przyciskiem", + "settings.msg.direct_header": "Gdy ścieżka jest znana (DIRECT)", + "settings.msg.direct_interval_help": "Ile sekund czekać między próbami direct", + "settings.msg.direct_retries": "Próby direct", + "settings.msg.direct_retries_help": "Próby znaną ścieżką przed przełączeniem na flood", + "settings.msg.flood_header": "Gdy brak ścieżki (FLOOD)", + "settings.msg.flood_interval_help": "Ile sekund czekać między próbami flood", + "settings.msg.flood_retries": "Próby flood", + "settings.msg.flood_retries_help": "Próby flood po wyczerpaniu prób direct (gdy brak skonfigurowanych ścieżek)", + "settings.msg.grace": "Okres karencji (s)", + "settings.msg.grace_help": "Czekaj na spóźnione ACK po wyczerpaniu wszystkich prób", + "settings.msg.interval": "Interwał (s)", + "settings.msg.intro": "Ponowienia liczone są po pierwszym wysłaniu, np. 3 ponowienia = 4 próby łącznie.", + "settings.msg.max_retries": "Maks. prób", + "settings.msg.max_retries_help": "Próby flood (używane także po rotacji ścieżki)", + "settings.msg.other": "Inne", + "settings.reset_defaults": "Przywróć domyślne", + "settings.tab.analyzer": "Analizator", + "settings.tab.appearance": "Wygląd", + "settings.tab.chat": "Czat grupowy", + "settings.tab.contacts": "Kontakty", + "settings.tab.interface": "Interfejs", + "settings.tab.messages": "Wiadomości", + "settings.tab.notifications": "Powiadomienia", + "settings.tab.observer": "Observer", + "settings.tab.regions": "Regiony", "update.checking": "Sprawdzanie aktualizacji...", "update.now": "Aktualizuj teraz", "update.reload": "Przeładuj stronę",