Merge main into tak-server-improvements to resolve PR #1603 conflicts (#1646)

* 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 <garthvh@yahoo.com>

* 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 <joelperez91@gmail.com>
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 <jake-b@users.noreply.github.com>
Co-authored-by: Garth Vander Houwen <garthvh@yahoo.com>
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 <benmmeadors@gmail.com>
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 <joelperez91@gmail.com>
Co-authored-by: axunes <axunes@axunes.net>
This commit is contained in:
Copilot 2026-04-02 09:31:40 -07:00 committed by GitHub
parent a930d1d938
commit 3c3876a5fe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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"