2.7.6 Working Changes (#1479)

* Bump version

* Message list performance fixes into 2.7.6 (#1475)

* Remove extra want config call when adding a contact

* App badge and unnecessary notification fixes (#1455)

* - Fix for app badge not going to zero if a message arrives while you have that chat open
- Fix for push notifications popping up when a message is received while that chat is open

* Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message

* Fix: Channels help grammer fix (#1452)

* remove outdated TCP not available on Apple devices (#1450)

* Update initial onboarding view

* remove toggle gating for mac

* Update crash reporting opt out in real time

* Update onboarding text

* Use mDNS text records for node name

* TCP IP and port on the connection screen

* Hide app icon chooser on mac

* Infinite loop hang bugfixes and performance improvements for both `UserMessageList` and `ChannelMessageList` (#1465)

* 2.7.5 Working Changes (#1460)

* Remove extra want config call when adding a contact

* App badge and unnecessary notification fixes (#1455)

* - Fix for app badge not going to zero if a message arrives while you have that chat open
- Fix for push notifications popping up when a message is received while that chat is open

* Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message

* Fix: Channels help grammer fix (#1452)

* remove outdated TCP not available on Apple devices (#1450)

* Update initial onboarding view

* remove toggle gating for mac

* Update crash reporting opt out in real time

* Update onboarding text

---------

Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com>
Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com>
Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com>

* UserEntity: add mostRecentMessage and unreadMessages with early exit when lastMessage is nil, and fetch 1 row (not N) otherwise

* UserList: replace 5 slow calls to user.messageList with new fast calls

* NodeList: always put the connected node at the top of list (if it matches the node filters)

* ChannelEntity: add faster mostRecentPrivateMessage and unreadMessages which fetch 1 row (not N)

* ChannelList: replace 5 calls to channel.allPrivateMessage with new fast calls

* Fix incorrect appState.unreadDirectMessages calculations

* MyInfoEntity: also fix unreadMessages count here to be fast, and use it for appState.unreadChannelMessages

* UserMessageList: use @FetchRequest to prevent the N^2 behavior that was happening in calls to allPrivateMessages

* Refactor ChannelEntityExtension and MyInfoEntityExtension to be more similar to UserEntityExtension

* Remove SwiftUI-infinite-loop-causing `.id(redrawTapbacksTrigger)` in ChannelMessageList and UserMessageList (duplicate row ids)

* MyInfoEntityExtension: exclude emoji tapbacks (which never get marked as read anyway) from unread message count

* Add SaveChannelLinkData so MessageText and MeshtasticApp can use .sheet(item: ...) and avoid infinite loop hang due to Binding rebuild

* ChannelMessageList and UserMessageList: switch to stable messageId for ForEach SwiftUI row identity

* ChannelMessageList and UserMessageList: debouncedScrollToBottom; keyboardWillShowNotification/keyboardDidShowNotification

* ChannelMessageList and UserMessageList: scroll to bottom onFirstAppear

* ChannelMessageList and UserMessageList: block spurious markMessagesAsRead when this View is not active

---------

Co-authored-by: Garth Vander Houwen <garth@meshtastic.com>
Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com>
Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com>
Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com>

* message-list-performance: revert scrolling changes (#1472)

* Revert e0f0b4a0f7 (ChannelMessageList and UserMessageList: scroll to bottom onFirstAppear)

* Revert "ChannelMessageList and UserMessageList: debouncedScrollToBottom; keyboardWillShowNotification/keyboardDidShowNotification"

This reverts commit ee1a7c4415.

---------

Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com>
Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com>
Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com>
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Mike Robbins <mrobbins@alum.mit.edu>

* Explicitly set unmessagable, seems unnessary

* Add back missing mesh map features

* Fix: "Retrieving nodes" significantly slower after reconnect  extracted from #1424 (#1477)

* Fix: "Retrieving nodes" significantly slower after reconnect (#1424)

The node database retrieval was calling context.save() for every single
NodeInfo packet received (250 saves for 250 nodes). This caused severe
performance degradation on reconnect when CoreData had accumulated state.

Root Cause:
- nodeInfoPacket() called context.save() immediately for each node
- With 250 nodes, this meant 250 individual CoreData save operations
- On first connection, CoreData is fresh and fast
- On reconnect, CoreData has accumulated change tracking, undo management,
  and memory pressure, making each save progressively slower
- This resulted in 10+ second retrieval times vs 1-2 seconds initially

Solution:
- Added deferSave parameter to nodeInfoPacket() function
- During database retrieval (.retrievingDatabase state), defer all saves
- Perform a single batch save when database retrieval completes
  (when NONCE_ONLY_DB configCompleteID is received)
- This reduces 250 saves to 1 save

Performance Impact:
- Eliminates N individual saves during node database sync
- Reduces database retrieval time back to 1-2 seconds on reconnect
- Matches first-connection performance consistently

Fixes #1424

* Revert *MessageListUnified files

---------

Co-authored-by: Martin Bogomolni <martinbogo@gmail.com>
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>

* Hide route lines filter from mesh map

* Mesh Map: fuzz imprecise locations so they're distinguishable and clickable at the highest zoom levels (#1478)

Co-authored-by: Garth Vander Houwen <garth@meshtastic.com>

* Fix bad merge

* Update Meshtastic/Extensions/CoreData/UserEntityExtension.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Meshtastic/Views/Nodes/Helpers/Map/MapContent/MeshMapContent.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Meshtastic/Extensions/CoreData/MyInfoEntityExtension.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Keep list of previous manual connections (#1484)

* Keep list of previous manual connections

* More descriptive manual connection rows

* Merge fixes and new way to show IP on Connect view

---------

Co-authored-by: Jake-B <jake-b@users.noreply.github.com>

* Show who relayed messages (#1486)

* Add identification for node that relayed text messages and add count for ammount of relayers of your message

* Ack Relays

* upsertPositionPacket: don't use future timestamps to set node's lastHeard (#1488)

* R1 NEO

* Neo

* Update Meshtastic/Views/Settings/AppSettings.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Remove bad if

* Git rid of extra environment variable

* Update Meshtastic/Accessory/Transports/TCP/TCPTransport.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* MeshMap performance: quick wins (#1490)

* MeshMap: change onMapCameraChange frequency to .onEnd so that zooming doesn't cause continuous SwiftUI reevaluation on every frame

* MeshMapContent: factor out reducedPrecisionMapCircles into a separate function

* MeshMapContent: when multiple reducedPrecisionCircles have the same (lat,lon,radius), just draw one (big perf boost in dense areas)

* NodeMap performance improvements for high # positions history (#1480)

* NodeMapContent: move Route Lines out of ForEach

* NodeMapContent: move Convex Hull out of ForEach

* NodeMapContent: Replace `position.nodePosition?` with `node`

* NodeMapContent: drop unnecessary LazyVStack in showNodeHistory

* NodeMapContent: hoist out nodeColorSwift

* Move lineCoords, loraCoords calculations within showRouteLines, showConvexHull respectively

* Hoist out repeated node.metadata?.positionFlags lookups / PositionFlags creation

* NodeMapContent: remove unused @State

* NodeMapSwiftUI: add NodeMapContentEquatableWrapper and NodeMapContentSignature to prevent frequent NodeMapContent recomputation and infinite render loops

* NodeMapSwiftUI: disable animation during SwiftUI transactions

* NodeMapContent: hoist nodeBorderColor and set allowsHitTesting(false) on history point views

* NodeMapContent: prerenderHistoryPointCircle and prerenderHistoryPointArrow to avoid thousands of vector draw operations

* NodeMapContent: Shared coordinate list for Route Lines and Convex Hull

* NodeMapContent.prerenderHistoryPointArrow: add .frame(width: 16, height: 16)

* Fix wantRangeTestPackets to correctly follow rangeTestConfig.enabled (#1489)

* Fix interval drop down formatter

* Clean up channel qr code functionality.

* perferredPeripheralId fix

* Set opt in

* Retry once 5 second timer. dont throw the error

* Queue for peripherals

* Fix: hoplimit of dms would always fallback to hops away of the node even when configured hops was higher (#1495)

* fix hops setting in dms

* Fix hops for exchange position

* Final fix

* Don't favorite client base

* Update device hardware

* Prevent nil environment metrics

* Bump datadog sdk

* fix setting device telemetry enabled (#1515)

* Update Muzi R1 Neo to actively supported

* fix setting device telemetry enabled

---------

Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>

* Don't subscribe to mqtt topic if downlink is not on (#1501)

* Dont sub if no downlink

* moved reload mqtt connect config

* Preview enabled in connected devices (#1509)

* Update Muzi R1 Neo to actively supported

* Preview enabled in connected devices

* Fixing indentation

* Fixing indentation

---------

Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>

* UpdateCoreData.updateAnyPacketFrom: mirror firmware's lastHeard/snr/rssi/hopsAway update logic from NodeDB::updateFrom (#1492)

* `CLIENT_BASE` add-favorite/role-change confirmation dialog (#1493)

* FavoriteNodeButton: refactor task out

* AccessoryManager.connectedDeviceRole helper

* FavoriteNodeButton: show confirmation dialog when a CLIENT_BASE is trying to add a favorite

* addContactFromURL: add comment referencing upcoming change in https://github.com/meshtastic/firmware/pull/8495

* DeviceConfig: role picker: show a warning when selecting CLIENT_BASE, similar to warning shown for ROUTER

* Adjust device configuration Client Base warning text

* Compass view (#1521)

* Added compass view

* Added Compass View

* Node colors in compass

* Update Muzi R1 Neo to actively supported

* Update PositionPopover.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update CompassView.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update CompassView.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Meshtastic/Views/Helpers/CompassView.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Meshtastic/Views/Helpers/CompassView.swift

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com>
Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Remove discovery queue

* revert problematic retry functionalliy

* format file

* Update & improve zh-Hans translation (#1523)

* Update Muzi R1 Neo to actively supported

* update & improve zh-Hans translation

rt

---------

Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>

* Update protobufs to 2.7.1

* Add long-turbo preset

* Disable Range Test module when primary channel is public/unsecured (#1512)

* Update Muzi R1 Neo to actively supported

* Disable Range Test module when primary channel is public/unsecured

Updated RangeTestConfig.swift to determine whether the primary channel (index 0) is operating without encryption or with a 1-byte minimal PSK.

Disabled Range Test UI controls when on a public/default channel to prevent user interaction.

Added safety enforcement in the save operation: Range Test enabled flag is automatically forced to false before sending updates to the device.

Introduced a computed property isPrimaryChannelPublic following existing code patterns and security indicators (e.g., hexDescription PSK length).

Matches the behavior implemented in the Android client for consistent policy across platforms.

---------

Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>

* Add new device images

* Remove print statement, get rid of cut and paste error

---------

Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com>
Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com>
Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com>
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Mike Robbins <mrobbins@alum.mit.edu>
Co-authored-by: Martin Bogomolni <martinbogo@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: jake-b <1012393+jake-b@users.noreply.github.com>
Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com>
Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: Charles Pinesky <25388414+Vaidios@users.noreply.github.com>
Co-authored-by: Radio <35003866+radiolee@users.noreply.github.com>
Co-authored-by: Jason Houk <dubsectordevelopment@gmail.com>
This commit is contained in:
Garth Vander Houwen 2025-12-21 12:15:01 -08:00 committed by GitHub
parent 09c31e8228
commit b30dc8645a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
96 changed files with 3369 additions and 4282 deletions

View file

@ -1486,8 +1486,8 @@
}
}
},
"⚠️ The configured value: (%@ seconds) is not one of the optimized options." : {
"comment" : "A text warning that the configured update interval is not one of the optimized options.",
"⚠️ The configured value: (%@) is not one of the optimized options." : {
"comment" : "A warning label below the picker, indicating that the selected update interval is not one of the optimized options.",
"isCommentAutoGenerated" : true
},
"🦕 End of life Version 🦖 ☄️" : {
@ -3854,7 +3854,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ambient Lighting module config received: %@"
"value" : "收到环境照明模块配置: %@"
}
},
"zh-Hant-TW" : {
@ -3905,10 +3905,6 @@
}
}
},
"Anonymous Usage and Crash data" : {
"comment" : "A description of how the app collects and uses data about its usage and crashes. It emphasizes that this data is anonymous and non-personally identifiable.",
"isCommentAutoGenerated" : true
},
"Any missed messages will be delivered again." : {
"localizations" : {
"it" : {
@ -5139,6 +5135,12 @@
}
}
}
},
"Bearing: %@" : {
},
"Bearing: N/A" : {
},
"Biking" : {
"localizations" : {
@ -5459,7 +5461,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Bluetooth config received: %@"
"value" : "收到蓝牙配置: %@"
}
},
"zh-Hant-TW" : {
@ -6127,7 +6129,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Canned Message module config received: %@"
"value" : "收到预设消息模块配置: %@"
}
},
"zh-Hant-TW" : {
@ -6313,7 +6315,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Canned Messages Messages Received For: %@"
"value" : "收到预设消息: %@"
}
},
"zh-Hant-TW" : {
@ -7666,6 +7668,10 @@
}
}
},
"Client Base should only favorite other nodes you control. Improper use will hurt your local mesh." : {
"comment" : "A message displayed in a confirmation dialog when trying to favorite a node as a CLIENT_BASE.",
"isCommentAutoGenerated" : true
},
"Client Hidden" : {
"localizations" : {
"de" : {
@ -8085,6 +8091,9 @@
}
}
}
},
"Compass" : {
},
"Config" : {
"localizations" : {
@ -10412,7 +10421,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Detection Sensor module config received: %@"
"value" : "收到检测传感器模块配置: %@"
}
},
"zh-Hant-TW" : {
@ -10638,7 +10647,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Device config received: %@"
"value" : "收到设备配置: %@"
}
},
"zh-Hant-TW" : {
@ -10822,7 +10831,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Device Metadata admin message received from: %@"
"value" : "已收到来自设备元数据管理员的消息, 来自: %@"
}
},
"zh-Hant-TW" : {
@ -11795,7 +11804,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Display config received: %@"
"value" : "收到显示屏配置: %@"
}
},
"zh-Hant-TW" : {
@ -11829,7 +11838,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "示华氏度"
"value" : "示华氏度"
}
},
"zh-Hant-TW" : {
@ -11995,6 +12004,9 @@
}
}
}
},
"Distance: %@" : {
},
"Documentation" : {
"localizations" : {
@ -12081,7 +12093,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "双击作为按钮"
"value" : "双击代替按钮"
}
},
"zh-Hant-TW" : {
@ -12417,7 +12429,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "回"
"value" : "回"
}
},
"zh-Hant-TW" : {
@ -13399,7 +13411,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "除所有 App 数据?"
"value" : "除所有 App 数据?"
}
},
"zh-Hant-TW" : {
@ -13439,7 +13451,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "除所有设备和 App 数据?"
"value" : "除所有设备和 App 数据?"
}
},
"zh-Hant-TW" : {
@ -14083,7 +14095,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "External Notification module config received: %@"
"value" : "收到外部通知模块配置: %@"
}
},
"zh-Hant-TW" : {
@ -14700,7 +14712,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Finish"
"value" : "完成"
}
},
"zh-Hant-TW" : {
@ -14791,7 +14803,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "固件升级文"
"value" : "固件升级文"
}
},
"zh-Hant-TW" : {
@ -16433,7 +16445,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "GPS Receive GPIO"
"value" : "GPS 接收 GPIO"
}
},
"zh-Hant-TW" : {
@ -16467,7 +16479,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "GPS Transmit GPIO"
"value" : "GPS 发送 GPIO"
}
},
"zh-Hant-TW" : {
@ -17989,7 +18001,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "如果难以访问设备的重置按钮,请在此进入 DFU 模式。"
"value" : "如果难以触及设备的重置按钮,请在此进入 DFU 模式。"
}
},
"zh-Hant-TW" : {
@ -18023,7 +18035,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "如果设置,您发送的任何数据包都会回传到设备。"
"value" : "如果设置,您发送的任何数据包都会回传到设备。"
}
},
"zh-Hant-TW" : {
@ -18611,7 +18623,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "倒置顶栏,用于双色显示"
"value" : "倒置顶栏,用于双色显示"
}
},
"zh-Hant-TW" : {
@ -18925,6 +18937,13 @@
}
}
}
},
"Last seen device:" : {
"comment" : "A label displayed next to the last seen device text in the `DeviceConnectRow`.",
"isCommentAutoGenerated" : true
},
"Last seen device: %@" : {
},
"Latitude" : {
"localizations" : {
@ -20015,7 +20034,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "LoRa config received: %@"
"value" : "收到 LoRa 配置: %@"
}
},
"zh-Hant-TW" : {
@ -20445,6 +20464,9 @@
}
}
}
},
"Manual Connections" : {
},
"Map Data" : {
"localizations" : {
@ -20929,6 +20951,9 @@
}
}
}
},
"Meshtastic does not collect any personal information. We do anonymously collect usage and crash data to improve the app. You can opt out under app settings." : {
},
"Meshtastic Node %@ has shared channels with you" : {
"localizations" : {
@ -21193,7 +21218,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Message received from the text message app."
"value" : "收到来自短信应用的消息。"
}
},
"zh-Hant-TW" : {
@ -22196,7 +22221,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "MyInfo received: %@"
"value" : "收到我的消息: %@"
}
},
"zh-Hant-TW" : {
@ -22556,7 +22581,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Network config received: %@"
"value" : "收到网络配置: %@"
}
},
"zh-Hant-TW" : {
@ -24754,6 +24779,9 @@
}
}
}
},
"Open Compass" : {
},
"Open Settings" : {
"localizations" : {
@ -25742,7 +25770,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "PAX Counter message received for: %@"
"value" : "收到 PAX 计数信息: %@"
}
},
"zh-Hant-TW" : {
@ -27464,7 +27492,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Process"
"value" : "处理"
}
},
"zh-Hant-TW" : {
@ -28470,6 +28498,7 @@
}
},
"Received Ack" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
@ -28532,8 +28561,12 @@
}
}
}
},
"Received Ack: %@" : {
},
"Recipient Ack" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
@ -28596,6 +28629,9 @@
}
}
}
},
"Recipient Ack: %@" : {
},
"Recording route" : {
"localizations" : {
@ -28779,6 +28815,16 @@
}
}
},
"Relayed by %d %@" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Relayed by %1$d %2$@"
}
}
}
},
"Release Notes" : {
"localizations" : {
"it" : {
@ -29228,7 +29274,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Requested Canned Messages Module Messages for node: %@"
"value" : "请求的节点预设消息模块消息: %@"
}
},
"zh-Hant-TW" : {
@ -30356,7 +30402,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Routing received for RequestID: %@ Ack Status: %@"
"value" : "收到请求ID为 %@ 的路由, Ack 状态: %@"
}
},
"zh-Hant-TW" : {
@ -30504,7 +30550,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "RTTTL Ringtone config received: %@"
"value" : "收到 RTTTL 铃声配置: %@"
}
},
"zh-Hant-TW" : {
@ -32306,7 +32352,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sent a Channel for: %@ Channel Index %d"
"value" : "已发送频道: %@ 频道索引 %d"
}
},
"zh-Hant-TW" : {
@ -32370,7 +32416,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sent a LoRa.Config for: %@"
"value" : "发送 LoRa.Config 给: %@"
}
},
"zh-Hant-TW" : {
@ -32435,7 +32481,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sent a Position Packet from the Apple device GPS to node: %@"
"value" : "从苹果设备 GPS 发送定位数据包给节点: %@"
}
},
"zh-Hant-TW" : {
@ -32499,7 +32545,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sent a Trace Route Request to node: %@"
"value" : "发送跟踪路由请求到节点: %@"
}
},
"zh-Hant-TW" : {
@ -32563,7 +32609,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sent a Waypoint Packet from: %@"
"value" : "发送来自的航点数据包: %@"
}
},
"zh-Hant-TW" : {
@ -32627,7 +32673,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sent message %@ from %@ to %@"
"value" : "发送消息 %@ 来自 %@ 给 %@"
}
},
"zh-Hant-TW" : {
@ -32949,7 +32995,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Serial module config received: %@"
"value" : "收到串口模块配置: %@"
}
},
"zh-Hant-TW" : {
@ -35131,7 +35177,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Store & Forward module config received: %@"
"value" : "收到存储和转发模块配置: %@"
}
},
"zh-Hant-TW" : {
@ -35750,7 +35796,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Telemetry module config received: %@"
"value" : "收到遥测模块配置: %@"
}
},
"zh-Hant-TW" : {
@ -36743,7 +36789,12 @@
}
}
},
"These settings will %@" : {
"comment" : "A paragraph below the title that explains what the user is about to do.",
"isCommentAutoGenerated" : true
},
"These settings will %@ channels. The current LoRa Config will be replaced, if there are substantial changes to the LoRa config the device will reboot" : {
"extractionState" : "stale",
"localizations" : {
"it" : {
"stringUnit" : {
@ -38000,7 +38051,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Trace Route request returned: %@"
"value" : "跟踪路由请求回复: %@"
}
},
"zh-Hant-TW" : {
@ -40176,6 +40227,9 @@
}
}
}
},
"User Privacy" : {
},
"User Uploaded" : {
"comment" : "Data source label for user uploaded files",
@ -41027,7 +41081,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Waypoint Packet received from node: %@"
"value" : "收到航点数据包, 来自节点: %@"
}
},
"zh-Hant-TW" : {
@ -41040,10 +41094,6 @@
},
"Waypoints" : {
},
"We anonymously collect usage and crash data to improve the app. This helps us understand how the app is being used and where we can make improvements. The data we collect is non-personally identifiable and cannot be linked to you as an individual. You can opt out of this under app settings." : {
"comment" : "A description of how the app collects and uses user data. Includes a link to the app settings.",
"isCommentAutoGenerated" : true
},
"Weather Conditions" : {
"localizations" : {
@ -41220,7 +41270,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "锁意味着什么?"
"value" : "锁头图标含义"
}
},
"zh-Hant-TW" : {
@ -41260,7 +41310,7 @@
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "什么是 Meshtastic?"
"value" : "Meshtastic 是什么?"
}
},
"zh-Hant-TW" : {
@ -41854,6 +41904,10 @@
}
}
},
"Yes, I control this node" : {
"comment" : "A button label that appears in a confirmation sheet when favoriting a node as a CLIENT_BASE.",
"isCommentAutoGenerated" : true
},
"Yesterday" : {
"localizations" : {
"de" : {
@ -42267,4 +42321,4 @@
}
},
"version" : "1.1"
}
}