From 3c3876a5fe959ee631314fac443ff0c6182ab3dc Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 09:31:40 -0700 Subject: [PATCH] Merge main into tak-server-improvements to resolve PR #1603 conflicts (#1646) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Delete Messages fix * Bump version to 2.7.9 * Bump widgets version * TAK Server channel index picker Create a settings picker for the TAK Server's channel index. This allows users to specify TAK traffic to use the non-primary channel to help reduce channel congestion. * Changed capitalization from 'environment' to 'Environment' for section header. (#1591) * Add Danish (da) translations — resolves merge conflicts from PR #1609 (#1612) * Initial plan * Add Danish (da) translations from PR #1609 Resolves merge conflicts from PR #1609 by adding Danish translations to the Localizable.xcstrings file. The PR adds Danish translation strings throughout the app while preserving all existing translations for other languages. Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Migrate test project to Swift Testing and add connect view and router tests (#1643) * Migrate to Swift Testing and add connect view tests - Convert RouterTests.swift from XCTest to Swift Testing (@Suite, @Test, #expect, #require) - Create ConnectViewTests.swift with tests for connect view child types: - Device struct (creation, signal strength, RSSI, description, codable) - TransportType enum (cases, raw values, codable) - ConnectionState enum (equality, codable) - BLESignalStrength enum (raw values, init) - TransportStatus enum (equality) - NavigationState (defaults, tabs, sub-states) - InvalidVersion view (creation with versions) - ConnectedDevice view (connected/disconnected/MQTT states) - CircleText view (default/custom sizes, emoji) - BatteryCompact view (levels, nil, charging, plugged in) - SignalStrengthIndicator view (dimensions, strength levels) - Update Xcode project to include new test file Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/d7bb7a89-2105-4fcb-96bc-7ec794467c74 Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Fix signal strength test boundary conditions The getSignalStrength() method uses NSNumber.compare(.orderedDescending), which is a strict greater-than check. Fix the boundary test cases: - RSSI -65 is .normal (not .strong), since -65 is not > -65 - RSSI -85 is .weak (not .normal), since -85 is not > -85 - Add -64 → .strong and -84 → .normal as adjacent boundary tests Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/4fcbc01e-cbea-4d11-b2c0-e923c6730d69 Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Improve and complete router tests with comprehensive coverage Added tests for: - Custom initial state - Invalid scheme / unknown path handling (state unchanged) - navigateToNodeDetail public method - Messages edge cases: channelId only, userNum only, messageId only, non-numeric params - Nodes with non-numeric nodenum - Map with both nodenum+waypointId (nodeId priority), non-numeric params - Parameterized settings test covering all 31 SettingsNavigationState cases - State transitions: consecutive routes, invalid scheme preserves existing state Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/f69b7352-21aa-494c-8864-31fc0f4b21b8 Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Localizable update * Merge translations file --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> Co-authored-by: Garth Vander Houwen * Fix merge conflicts in PR #1614 (Spanish translations) (#1644) * 20% of strings translated to spanish * add more translations * add rest of translations * small fixes --------- Co-authored-by: Joel Pérez Izquierdo Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * fix typo in hop limit option description (#1631) O hop -> 0 hop --------- Co-authored-by: Jake-B Co-authored-by: Garth Vander Houwen Co-authored-by: niccellular <79813408+niccellular@users.noreply.github.com> Co-authored-by: Austin Hargis <25471876+austinhargis@users.noreply.github.com> Co-authored-by: Ben Meadors Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> Co-authored-by: Joel Pérez Izquierdo Co-authored-by: axunes --- Localizable.xcstrings | 223 +++++++++++++++++++++++++----------------- 1 file changed, 134 insertions(+), 89 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 5ff8eb52..131f9864 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -2,6 +2,7 @@ "sourceLanguage" : "en", "strings" : { "" : { + "shouldTranslate" : false, "localizations" : { "da" : { "stringUnit" : { @@ -9,8 +10,7 @@ "value" : "" } } - }, - "shouldTranslate" : false + } }, "\t%@" : { "localizations" : { @@ -225,8 +225,14 @@ }, "shouldTranslate" : false }, - ": %@" : { + " : %@" : { "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : " : %@" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -236,38 +242,44 @@ "it" : { "stringUnit" : { "state" : "translated", - "value" : ": %@" + "value" : " : %@" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : ": %@" + "value" : " : %@" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : ": %@" + "value" : " : %@" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : ": %@" + "value" : " : %@" } }, "zh-Hant-TW" : { "stringUnit" : { "state" : "translated", - "value" : ": %@" + "value" : " : %@" } } }, "shouldTranslate" : false }, - ": %d" : { + " : %d" : { "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : " : %d" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -277,31 +289,31 @@ "it" : { "stringUnit" : { "state" : "translated", - "value" : ": %d" + "value" : " : %d" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : ": %d" + "value" : " : %d" } }, "sr" : { "stringUnit" : { "state" : "translated", - "value" : ": %d" + "value" : " : %d" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : ": %d" + "value" : " : %d" } }, "zh-Hant-TW" : { "stringUnit" : { "state" : "translated", - "value" : ": %d" + "value" : " : %d" } } }, @@ -3006,9 +3018,7 @@ } } }, - "A default self-signed certificate is included for localhost connections. Import a custom .p12 if needed. Client CA (.pem) validates connecting TAK clients." : { - - }, + "A default self-signed certificate is included for localhost connections. Import a custom .p12 if needed. Client CA (.pem) validates connecting TAK clients." : {}, "A green lock means the channel is securely encrypted with either a 128 or 256 bit AES key." : { "localizations" : { "es" : { @@ -3853,9 +3863,7 @@ } } }, - "Add CA" : { - - }, + "Add CA" : {}, "Add Channel" : { "localizations" : { "da" : { @@ -11476,12 +11484,8 @@ } } }, - "Client CA Certificate" : { - - }, - "Client Configuration" : { - - }, + "Client CA Certificate" : {}, + "Client Configuration" : {}, "Client Hidden" : { "extractionState" : "stale", "localizations" : { @@ -12182,9 +12186,7 @@ } } }, - "Configuration" : { - - }, + "Configuration" : {}, "Configuration for: %@" : { "localizations" : { "da" : { @@ -14568,9 +14570,7 @@ } } }, - "Delete All" : { - - }, + "Delete All" : {}, "Delete all config, keys and BLE bonds? " : { "localizations" : { "es" : { @@ -18174,9 +18174,7 @@ } } }, - "Download TAK Server Data Package" : { - - }, + "Download TAK Server Data Package" : {}, "Drag & Drop Firmware Update" : { "localizations" : { "da" : { @@ -18963,9 +18961,7 @@ } } }, - "Enable TAK Server" : { - - }, + "Enable TAK Server" : {}, "Enable this device as a Store and Forward server. Requires an ESP32 device with PSRAM." : { "localizations" : { "da" : { @@ -19732,12 +19728,8 @@ } } }, - "Enter P12 Password" : { - - }, - "Enter the password for the PKCS#12 file" : { - - }, + "Enter P12 Password" : {}, + "Enter the password for the PKCS#12 file" : {}, "environment" : { "extractionState" : "stale", "localizations" : { @@ -23779,9 +23771,7 @@ } } }, - "Generate a data package (.zip) to configure TAK clients to connect to this server." : { - - }, + "Generate a data package (.zip) to configure TAK clients to connect to this server." : {}, "Generate a new private key to replace the one currently in use. The public key will automatically be regenerated from your private key." : { "localizations" : { "es" : { @@ -27276,18 +27266,10 @@ } } }, - "Import" : { - - }, - "Import .pem" : { - - }, - "Import Custom .p12" : { - - }, - "Import Error" : { - - }, + "Import" : {}, + "Import .pem" : {}, + "Import Custom .p12" : {}, + "Import Error" : {}, "Import Route" : { "localizations" : { "da" : { @@ -33015,9 +32997,7 @@ } } }, - "mTLS" : { - - }, + "mTLS" : {}, "Multiplier" : { "localizations" : { "da" : { @@ -39179,9 +39159,7 @@ } } }, - "Port" : { - - }, + "Port" : {}, "Position" : { "localizations" : { "da" : { @@ -42838,9 +42816,7 @@ } } }, - "Reload Bundled Certificates" : { - - }, + "Reload Bundled Certificates" : {}, "Remote administration for: %@" : { "localizations" : { "da" : { @@ -43647,9 +43623,7 @@ } } }, - "Reset to Default" : { - - }, + "Reset to Default" : {}, "Restart" : { "localizations" : { "da" : { @@ -43702,9 +43676,7 @@ } } }, - "Restart Server" : { - - }, + "Restart Server" : {}, "Restart to the node you are connected to" : { "localizations" : { "da" : { @@ -46476,6 +46448,7 @@ } } }, + "Secure mTLS connection on port 8089. Both server and client certificates are required." : {}, "Secure mTLS connection on port 8089. Both server and client certificates are required. TAK Channel Index selects the channel index where TAK messages will be sent." : { "comment" : "A footer for the TAK Server configuration section.", "isCommentAutoGenerated" : true @@ -49169,9 +49142,7 @@ } } }, - "Server Certificate" : { - - }, + "Server Certificate" : {}, "Server Option" : { "localizations" : { "da" : { @@ -49218,9 +49189,7 @@ } } }, - "Server Status" : { - - }, + "Server Status" : {}, "Set" : { "localizations" : { "da" : { @@ -52056,9 +52025,7 @@ } } }, - "Status" : { - - }, + "Status" : {}, "Stay Connected Anywhere" : { "localizations" : { "de" : { @@ -52705,9 +52672,7 @@ "comment" : "A label for the TAK channel index.", "isCommentAutoGenerated" : true }, - "TAK Server" : { - - }, + "TAK Server" : {}, "TAK Tracker" : { "extractionState" : "stale", "localizations" : { @@ -56038,9 +56003,7 @@ } } }, - "TLS Certificates" : { - - }, + "TLS Certificates" : {}, "TLS Enabled" : { "localizations" : { "da" : { @@ -62940,6 +62903,88 @@ } } } + }, + ": %@" : { + "localizations" : { + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %@" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %@" + } + } + }, + "shouldTranslate" : false + }, + ": %d" : { + "localizations" : { + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %d" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %d" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %d" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %d" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %d" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : ": %d" + } + } + }, + "shouldTranslate" : false } }, "version" : "1.1"