mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Merge pull request #733 from meshtastic/2.3.12_Working_Changes
2.3.12 working changes
This commit is contained in:
commit
455cb3f0b8
35 changed files with 22751 additions and 3979 deletions
18
.github/workflows/swiftlint.yml
vendored
Normal file
18
.github/workflows/swiftlint.yml
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
name: SwiftLint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/swiftlint.yml'
|
||||
- '.swiftlint.yml'
|
||||
- '**/*.swift'
|
||||
|
||||
jobs:
|
||||
SwiftLint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: GitHub Action for SwiftLint (Only files changed in the PR)
|
||||
uses: norio-nomura/action-swiftlint@3.2.1
|
||||
env:
|
||||
DIFF_BASE: ${{ github.base_ref }}
|
||||
22408
Localizable.xcstrings
Normal file
22408
Localizable.xcstrings
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -10,9 +10,11 @@
|
|||
259792252C2F114500AD1659 /* ChannelEntityExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD58C5F12919AD3C00D5BEFB /* ChannelEntityExtension.swift */; };
|
||||
259792262C2F114500AD1659 /* PositionEntityExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD5394FD276BA0EF00AD86B1 /* PositionEntityExtension.swift */; };
|
||||
259792272C2F114500AD1659 /* TraceRouteEntityExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDE5B4052B227E3200FCDD05 /* TraceRouteEntityExtension.swift */; };
|
||||
259792282C2F114500AD1659 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25183D452C0A6D97001E31D5 /* Logger.swift */; };
|
||||
25A978BA2C13F8ED0003AAE7 /* MeshtasticProtobufs in Frameworks */ = {isa = PBXBuildFile; productRef = 25A978B92C13F8ED0003AAE7 /* MeshtasticProtobufs */; };
|
||||
25A978BC2C13F90D0003AAE7 /* MeshtasticProtobufs in Frameworks */ = {isa = PBXBuildFile; productRef = 25A978BB2C13F90D0003AAE7 /* MeshtasticProtobufs */; };
|
||||
25AECD4F2C2F723200862C8E /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 25AECD4E2C2F723200862C8E /* Localizable.xcstrings */; };
|
||||
25F26B1E2C2F610D00C9CD9D /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD5BB0C2C285F00007E03CA /* Logger.swift */; };
|
||||
25F26B1F2C2F611300C9CD9D /* AppData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD5BB152C28B1E4007E03CA /* AppData.swift */; };
|
||||
6DA39D8E2A92DC52007E311C /* MeshtasticAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA39D8D2A92DC52007E311C /* MeshtasticAppDelegate.swift */; };
|
||||
6DEDA55A2A957B8E00321D2E /* DetectionSensorLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEDA5592A957B8E00321D2E /* DetectionSensorLog.swift */; };
|
||||
6DEDA55C2A9592F900321D2E /* MessageEntityExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEDA55B2A9592F900321D2E /* MessageEntityExtension.swift */; };
|
||||
|
|
@ -145,14 +147,12 @@
|
|||
DDC94FC129CE063B0082EA6E /* BatteryLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC94FC029CE063B0082EA6E /* BatteryLevel.swift */; };
|
||||
DDC94FC229CE063B0082EA6E /* BatteryLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC94FC029CE063B0082EA6E /* BatteryLevel.swift */; };
|
||||
DDC94FCE29CF55310082EA6E /* RtttlConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC94FCD29CF55310082EA6E /* RtttlConfig.swift */; };
|
||||
DDCDC6CB29481FCC004C1DDA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DDCDC6CD29481FCC004C1DDA /* Localizable.strings */; };
|
||||
DDCE4E2C2869F92900BE9F8F /* UserConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCE4E2B2869F92900BE9F8F /* UserConfig.swift */; };
|
||||
DDD43FE32A78C8900083A3E9 /* MqttClientProxyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD43FE22A78C8900083A3E9 /* MqttClientProxyManager.swift */; };
|
||||
DDD5BB092C285DDC007E03CA /* AppLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD5BB082C285DDC007E03CA /* AppLog.swift */; };
|
||||
DDD5BB0B2C285E45007E03CA /* LogDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD5BB0A2C285E45007E03CA /* LogDetail.swift */; };
|
||||
DDD5BB0D2C285F00007E03CA /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD5BB0C2C285F00007E03CA /* Logger.swift */; };
|
||||
DDD5BB102C285FB3007E03CA /* AppLogFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD5BB0F2C285FB3007E03CA /* AppLogFilter.swift */; };
|
||||
DDD5BB162C28B1E4007E03CA /* AppData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD5BB152C28B1E4007E03CA /* AppData.swift */; };
|
||||
DDD5BB182C2F9C36007E03CA /* OSLogEntryLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD5BB172C2F9C36007E03CA /* OSLogEntryLog.swift */; };
|
||||
DDD6EEAF29BC024700383354 /* Firmware.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD6EEAE29BC024700383354 /* Firmware.swift */; };
|
||||
DDD94A502845C8F5004A87A0 /* DateTimeText.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD94A4F2845C8F5004A87A0 /* DateTimeText.swift */; };
|
||||
DDD9E4E4284B208E003777C5 /* UserEntityExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD9E4E3284B208E003777C5 /* UserEntityExtension.swift */; };
|
||||
|
|
@ -221,10 +221,10 @@
|
|||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
25AECD4E2C2F723200862C8E /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
|
||||
6DA39D8D2A92DC52007E311C /* MeshtasticAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshtasticAppDelegate.swift; sourceTree = "<group>"; };
|
||||
6DEDA5592A957B8E00321D2E /* DetectionSensorLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetectionSensorLog.swift; sourceTree = "<group>"; };
|
||||
6DEDA55B2A9592F900321D2E /* MessageEntityExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageEntityExtension.swift; sourceTree = "<group>"; };
|
||||
A65FA974296876BF00A97686 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
B399E8A32B6F486400E4488E /* RetryButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryButton.swift; sourceTree = "<group>"; };
|
||||
B3E905B02B71F7F300654D07 /* TextMessageField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextMessageField.swift; sourceTree = "<group>"; };
|
||||
C9697F9C279336B700250207 /* LocalMBTileOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalMBTileOverlay.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -267,7 +267,6 @@
|
|||
DD2AD8A7296D2DF9001FF0E7 /* MapViewSwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapViewSwiftUI.swift; sourceTree = "<group>"; };
|
||||
DD2CC2E52ABFE04E00EDFDA7 /* MeshtasticDataModelV19.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV19.xcdatamodel; sourceTree = "<group>"; };
|
||||
DD31B04D2BDC6FD30024FA63 /* MeshtasticDataModelV 36.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 36.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DD31EC492B7F18B7006A3995 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
DD33DB602B3D1ECC003E1EA0 /* MeshtasticDataModelV 23.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 23.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DD33DB612B3D27C7003E1EA0 /* FirmwareApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirmwareApi.swift; sourceTree = "<group>"; };
|
||||
DD3501882852FC3B000FC853 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -386,10 +385,7 @@
|
|||
DDC94FC329CED7280082EA6E /* MeshtasticDataModelV10.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV10.xcdatamodel; sourceTree = "<group>"; };
|
||||
DDC94FCD29CF55310082EA6E /* RtttlConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RtttlConfig.swift; sourceTree = "<group>"; };
|
||||
DDCDC69A29467643004C1DDA /* MeshtasticDataModelV3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV3.xcdatamodel; sourceTree = "<group>"; };
|
||||
DDCDC6CC29481FCC004C1DDA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
DDCDC6CE294821AD004C1DDA /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
DDCE4E2B2869F92900BE9F8F /* UserConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserConfig.swift; sourceTree = "<group>"; };
|
||||
DDD28D362C0CCCD10063CFA3 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
DDD28D372C0CD2670063CFA3 /* MeshtasticDataModelV 37.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 37.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DDD43FE22A78C8900083A3E9 /* MqttClientProxyManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MqttClientProxyManager.swift; sourceTree = "<group>"; };
|
||||
DDD5BB082C285DDC007E03CA /* AppLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLog.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -398,6 +394,7 @@
|
|||
DDD5BB0F2C285FB3007E03CA /* AppLogFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLogFilter.swift; sourceTree = "<group>"; };
|
||||
DDD5BB142C28680D007E03CA /* MeshtasticDataModelV 38.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 38.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DDD5BB152C28B1E4007E03CA /* AppData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppData.swift; sourceTree = "<group>"; };
|
||||
DDD5BB172C2F9C36007E03CA /* OSLogEntryLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSLogEntryLog.swift; sourceTree = "<group>"; };
|
||||
DDD6EEAE29BC024700383354 /* Firmware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Firmware.swift; sourceTree = "<group>"; };
|
||||
DDD94A4F2845C8F5004A87A0 /* DateTimeText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateTimeText.swift; sourceTree = "<group>"; };
|
||||
DDD9E4E3284B208E003777C5 /* UserEntityExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserEntityExtension.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -421,8 +418,6 @@
|
|||
DDDB445329F8AD1600EE2349 /* Data.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = "<group>"; };
|
||||
DDDBC87A2BC62E4E001E8DF7 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
|
||||
DDDBC87C2BC65682001E8DF7 /* MeshtasticDataModelV 34.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 34.xcdatamodel"; sourceTree = "<group>"; };
|
||||
DDDC22312BA76701002C44F1 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
DDDC22322BA76961002C44F1 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
DDDC22372BA92344002C44F1 /* MeshMapContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshMapContent.swift; sourceTree = "<group>"; };
|
||||
DDDCD56F2BB26F5C00BE6B60 /* NodeListFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeListFilter.swift; sourceTree = "<group>"; };
|
||||
DDDCD5712BB3246500BE6B60 /* MeshtasticDataModelV 31.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 31.xcdatamodel"; sourceTree = "<group>"; };
|
||||
|
|
@ -441,12 +436,10 @@
|
|||
DDE9659B2B1C3B6A00531070 /* RouteRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouteRecorder.swift; sourceTree = "<group>"; };
|
||||
DDEE03EC29544A1000FCAD57 /* MeshtasticDataModelV4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV4.xcdatamodel; sourceTree = "<group>"; };
|
||||
DDF45C332BC1A48E005ED5F2 /* MQTTIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MQTTIcon.swift; sourceTree = "<group>"; };
|
||||
DDF45C352BC465B2005ED5F2 /* se */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = se; path = se.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
DDF45C362BC46A5A005ED5F2 /* TimeZone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeZone.swift; sourceTree = "<group>"; };
|
||||
DDF45C382BC46B16005ED5F2 /* MeshtasticDataModelV33.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV33.xcdatamodel; sourceTree = "<group>"; };
|
||||
DDF6B2462A9AEB9E00BA6931 /* MeshtasticDataModelV17.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV17.xcdatamodel; sourceTree = "<group>"; };
|
||||
DDF6B2472A9AEBF500BA6931 /* StoreForwardConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreForwardConfig.swift; sourceTree = "<group>"; };
|
||||
DDF6B24B2A9C2FC800BA6931 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
DDF924C926FBB953009FE055 /* ConnectedDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedDevice.swift; sourceTree = "<group>"; };
|
||||
DDFEB3BA29900C1200EE7472 /* CurrentConditionsCompact.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentConditionsCompact.swift; sourceTree = "<group>"; };
|
||||
DDFFA7462B3A7F3C004730DB /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -710,7 +703,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
DDDBC87A2BC62E4E001E8DF7 /* Settings.bundle */,
|
||||
DDCDC6CD29481FCC004C1DDA /* Localizable.strings */,
|
||||
25AECD4E2C2F723200862C8E /* Localizable.xcstrings */,
|
||||
DD3CC6BA28E366DF00FA9159 /* Meshtastic.xcdatamodeld */,
|
||||
DDC2E15626CE248E0042C5E4 /* Meshtastic */,
|
||||
DDDE59F729AF163D00490C6C /* Widgets */,
|
||||
|
|
@ -886,6 +879,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
DD007BB12AA59B9A00F5FA12 /* CoreData */,
|
||||
DDFFA7462B3A7F3C004730DB /* Bundle.swift */,
|
||||
DDDB444529F8A96500EE2349 /* Character.swift */,
|
||||
DDDB444929F8AA3A00EE2349 /* CLLocationCoordinate2D.swift */,
|
||||
DDDB444B29F8AAA600EE2349 /* Color.swift */,
|
||||
|
|
@ -901,7 +895,7 @@
|
|||
DDB75A0E2A05920E006ED576 /* FileManager.swift */,
|
||||
DDB75A102A059258006ED576 /* Url.swift */,
|
||||
DD1933772B084F4200771CD5 /* Measurement.swift */,
|
||||
DDFFA7462B3A7F3C004730DB /* Bundle.swift */,
|
||||
DDD5BB172C2F9C36007E03CA /* OSLogEntryLog.swift */,
|
||||
DDF45C362BC46A5A005ED5F2 /* TimeZone.swift */,
|
||||
DDD5BB0C2C285F00007E03CA /* Logger.swift */,
|
||||
);
|
||||
|
|
@ -1037,7 +1031,7 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DDC2E15F26CE248F0042C5E4 /* Preview Assets.xcassets in Resources */,
|
||||
DDCDC6CB29481FCC004C1DDA /* Localizable.strings in Resources */,
|
||||
25AECD4F2C2F723200862C8E /* Localizable.xcstrings in Resources */,
|
||||
DDDE5A1329AFEAB900490C6C /* Assets.xcassets in Resources */,
|
||||
DDB75A1A2A05EB67006ED576 /* alpha.png in Resources */,
|
||||
DDC2E15C26CE248F0042C5E4 /* Assets.xcassets in Resources */,
|
||||
|
|
@ -1082,10 +1076,11 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
25F26B1F2C2F611300C9CD9D /* AppData.swift in Sources */,
|
||||
25F26B1E2C2F610D00C9CD9D /* Logger.swift in Sources */,
|
||||
259792252C2F114500AD1659 /* ChannelEntityExtension.swift in Sources */,
|
||||
259792262C2F114500AD1659 /* PositionEntityExtension.swift in Sources */,
|
||||
259792272C2F114500AD1659 /* TraceRouteEntityExtension.swift in Sources */,
|
||||
259792282C2F114500AD1659 /* Logger.swift in Sources */,
|
||||
DDDB444829F8A9C900EE2349 /* String.swift in Sources */,
|
||||
DDFFA7472B3A7F3C004730DB /* Bundle.swift in Sources */,
|
||||
DD457188293C7E63000C49FB /* BLESignalStrengthIndicator.swift in Sources */,
|
||||
|
|
@ -1095,6 +1090,7 @@
|
|||
D93069082B81DF040066FBC8 /* SaveConfigButton.swift in Sources */,
|
||||
DD5E523F298F5A9E00D21B61 /* AirQualityIndex.swift in Sources */,
|
||||
DD964FBF296E76EF007C176F /* WaypointFormMapKit.swift in Sources */,
|
||||
DDD5BB182C2F9C36007E03CA /* OSLogEntryLog.swift in Sources */,
|
||||
DD3501892852FC3B000FC853 /* Settings.swift in Sources */,
|
||||
DDDC22382BA92344002C44F1 /* MeshMapContent.swift in Sources */,
|
||||
DDDB443629F6287000EE2349 /* MapButtons.swift in Sources */,
|
||||
|
|
@ -1273,25 +1269,6 @@
|
|||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
DDCDC6CD29481FCC004C1DDA /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
DDCDC6CC29481FCC004C1DDA /* en */,
|
||||
DDCDC6CE294821AD004C1DDA /* de */,
|
||||
A65FA974296876BF00A97686 /* zh-Hans */,
|
||||
DDF6B24B2A9C2FC800BA6931 /* pl */,
|
||||
DD31EC492B7F18B7006A3995 /* he */,
|
||||
DDDC22312BA76701002C44F1 /* fr */,
|
||||
DDDC22322BA76961002C44F1 /* zh-Hant-TW */,
|
||||
DDF45C352BC465B2005ED5F2 /* se */,
|
||||
DDD28D362C0CCCD10063CFA3 /* pt-PT */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
DDC2E17C26CE248F0042C5E4 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
|
|
@ -1347,6 +1324,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.4;
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
|
|
@ -1404,6 +1382,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.4;
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
|
|
@ -1438,11 +1417,12 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.3.11;
|
||||
MARKETING_VERSION = 2.3.12;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
|
|
@ -1477,6 +1457,7 @@
|
|||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
|
|
@ -1503,7 +1484,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.3.11;
|
||||
MARKETING_VERSION = 2.3.12;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
@ -1536,7 +1517,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.3.11;
|
||||
MARKETING_VERSION = 2.3.12;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ extension MQTTConfigEntity {
|
|||
self.mapPositionPrecision = Int32(config.mapReportSettings.positionPrecision)
|
||||
self.mapPublishIntervalSecs = Int32(config.mapReportSettings.publishIntervalSecs)
|
||||
}
|
||||
|
||||
|
||||
func update(with config: ModuleConfig.MQTTConfig) {
|
||||
enabled = config.enabled
|
||||
proxyToClientEnabled = config.proxyToClientEnabled
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ extension RangeTestConfigEntity {
|
|||
self.enabled = config.enabled
|
||||
self.save = config.save
|
||||
}
|
||||
|
||||
|
||||
func update(with config: ModuleConfig.RangeTestConfig) {
|
||||
sender = Int32(config.sender)
|
||||
enabled = config.enabled
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ extension SerialConfigEntity {
|
|||
self.timeout = Int32(config.timeout)
|
||||
self.mode = Int32(config.mode.rawValue)
|
||||
}
|
||||
|
||||
|
||||
func update(with config: ModuleConfig.SerialConfig) {
|
||||
enabled = config.enabled
|
||||
echo = config.echo
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ extension StoreForwardConfigEntity {
|
|||
self.historyReturnMax = Int32(config.historyReturnMax)
|
||||
self.historyReturnWindow = Int32(config.historyReturnWindow)
|
||||
}
|
||||
|
||||
|
||||
func update(with config: ModuleConfig.StoreForwardConfig) {
|
||||
enabled = config.enabled
|
||||
heartbeat = config.heartbeat
|
||||
|
|
|
|||
|
|
@ -58,17 +58,3 @@ extension Logger {
|
|||
return logs
|
||||
}
|
||||
}
|
||||
|
||||
extension OSLogEntryLog.Level {
|
||||
var description: String {
|
||||
switch self {
|
||||
case .undefined: "undefined"
|
||||
case .debug: "🪲 Debug"
|
||||
case .info: "ℹ️ Info"
|
||||
case .notice: "⚠️ Notice"
|
||||
case .error: "🚨 Error"
|
||||
case .fault: "💥 Fault"
|
||||
@unknown default: "default"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
35
Meshtastic/Extensions/OSLogEntryLog.swift
Normal file
35
Meshtastic/Extensions/OSLogEntryLog.swift
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
//
|
||||
// OSLogEntryLog.swift
|
||||
// Meshtastic
|
||||
//
|
||||
// Copyright(c) Garth Vander Houwen 6/28/24.
|
||||
//
|
||||
|
||||
import OSLog
|
||||
import SwiftUI
|
||||
|
||||
/// Extensions to allow rendering of the emoji string and log leve coloring in the grid of OSLogEntryLog items
|
||||
extension OSLogEntryLog.Level {
|
||||
var description: String {
|
||||
switch self {
|
||||
case .undefined: "undefined"
|
||||
case .debug: "🪲 Debug"
|
||||
case .info: "ℹ️ Info"
|
||||
case .notice: "⚠️ Notice"
|
||||
case .error: "🚨 Error"
|
||||
case .fault: "💥 Fault"
|
||||
@unknown default: "default"
|
||||
}
|
||||
}
|
||||
var color: Color {
|
||||
switch self {
|
||||
case .undefined: .green
|
||||
case .debug: .indigo
|
||||
case .info: .green
|
||||
case .notice: .orange
|
||||
case .error: .red
|
||||
case .fault: .red
|
||||
@unknown default: .green
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -435,12 +435,10 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
|
|||
success = true
|
||||
|
||||
let traceRoute = TraceRouteEntity(context: context!)
|
||||
let nodes: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let nodes = NodeInfoEntity.fetchRequest()
|
||||
nodes.predicate = NSPredicate(format: "num IN %@", [destNum, self.connectedPeripheral.num])
|
||||
do {
|
||||
guard let fetchedNodes = try context!.fetch(nodes) as? [NodeInfoEntity] else {
|
||||
return false
|
||||
}
|
||||
let fetchedNodes = try context!.fetch(nodes)
|
||||
let receivingNode = fetchedNodes.first(where: { $0.num == destNum })
|
||||
let connectedNode = fetchedNodes.first(where: { $0.num == self.connectedPeripheral.num })
|
||||
traceRoute.id = Int64(meshPacket.id)
|
||||
|
|
@ -850,17 +848,17 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
|
|||
invalidVersion = false
|
||||
lastConnectionError = ""
|
||||
isSubscribed = true
|
||||
Logger.mesh.info("[BLE] 🤜 Want Config Complete. ID:\(decodedInfo.configCompleteID)")
|
||||
Logger.mesh.info("🤜 [BLE] Want Config Complete. ID:\(decodedInfo.configCompleteID)")
|
||||
peripherals.removeAll(where: { $0.peripheral.state == CBPeripheralState.disconnected })
|
||||
// Config conplete returns so we don't read the characteristic again
|
||||
|
||||
/// MQTT Client Proxy and RangeTest and Store and Forward interest
|
||||
if connectedPeripheral.num > 0 {
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(connectedPeripheral.num))
|
||||
do {
|
||||
let fetchedNodeInfo = try context?.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] ?? []
|
||||
let fetchedNodeInfo = try context?.fetch(fetchNodeInfoRequest) ?? []
|
||||
if fetchedNodeInfo.count == 1 {
|
||||
// Subscribe to Mqtt Client Proxy if enabled
|
||||
if fetchedNodeInfo[0].mqttConfig != nil && fetchedNodeInfo[0].mqttConfig?.enabled ?? false && fetchedNodeInfo[0].mqttConfig?.proxyToClientEnabled ?? false {
|
||||
|
|
@ -940,24 +938,22 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
|
|||
success = false
|
||||
|
||||
} else {
|
||||
|
||||
guard let context else { return false }
|
||||
let fromUserNum: Int64 = self.connectedPeripheral.num
|
||||
|
||||
let messageUsers: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "UserEntity")
|
||||
let messageUsers = UserEntity.fetchRequest()
|
||||
messageUsers.predicate = NSPredicate(format: "num IN %@", [fromUserNum, Int64(toUserNum)])
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedUsers = try context?.fetch(messageUsers) as? [UserEntity] else {
|
||||
return false
|
||||
}
|
||||
let fetchedUsers = try context.fetch(messageUsers)
|
||||
if fetchedUsers.isEmpty {
|
||||
|
||||
Logger.data.error("🚫 Message Users Not Found, Fail")
|
||||
success = false
|
||||
} else if fetchedUsers.count >= 1 {
|
||||
|
||||
let newMessage = MessageEntity(context: context!)
|
||||
let newMessage = MessageEntity(context: context)
|
||||
newMessage.messageId = Int64(UInt32.random(in: UInt32(UInt8.max)..<UInt32.max))
|
||||
newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970)
|
||||
newMessage.receivedACK = false
|
||||
|
|
@ -1014,18 +1010,17 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
|
|||
|
||||
MeshLogger.log("💬 \(logString)")
|
||||
do {
|
||||
try context!.save()
|
||||
try context.save()
|
||||
Logger.data.info("💾 Saved a new sent message from \(self.connectedPeripheral.num.toHex(), privacy: .public) to \(toUserNum.toHex(), privacy: .public)")
|
||||
success = true
|
||||
|
||||
} catch {
|
||||
context!.rollback()
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
Logger.data.error("Unresolved Core Data error in Send Message Function your database is corrupted running a node db reset should clean up the data. Error: \(nsError, privacy: .public)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch {
|
||||
|
||||
}
|
||||
|
|
@ -1476,10 +1471,10 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
|
|||
for cs in channelSet.settings {
|
||||
if addChannels {
|
||||
// We are trying to add a channel so lets get the last index
|
||||
let fetchMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
let fetchMyInfoRequest = MyInfoEntity.fetchRequest()
|
||||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(connectedPeripheral.num))
|
||||
do {
|
||||
let fetchedMyInfo = try context?.fetch(fetchMyInfoRequest) as? [MyInfoEntity] ?? []
|
||||
let fetchedMyInfo = try context?.fetch(fetchMyInfoRequest) ?? []
|
||||
if fetchedMyInfo.count == 1 {
|
||||
i = Int32(fetchedMyInfo[0].channels?.count ?? -1)
|
||||
myInfo = fetchedMyInfo[0]
|
||||
|
|
@ -1638,7 +1633,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
|
|||
} catch {
|
||||
context!.rollback()
|
||||
let nsError = error as NSError
|
||||
Logger.data.error("Error deleting node from core data: \(nsError)")
|
||||
Logger.data.error("🚫 Error deleting node from core data: \(nsError)")
|
||||
}
|
||||
}
|
||||
return false
|
||||
|
|
@ -3045,18 +3040,19 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
|
|||
}
|
||||
|
||||
public func tryClearExistingChannels() {
|
||||
guard let context else { return }
|
||||
// Before we get started delete the existing channels from the myNodeInfo
|
||||
let fetchMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
let fetchMyInfoRequest = MyInfoEntity.fetchRequest()
|
||||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(connectedPeripheral.num))
|
||||
|
||||
do {
|
||||
let fetchedMyInfo = try context?.fetch(fetchMyInfoRequest) as? [MyInfoEntity] ?? []
|
||||
let fetchedMyInfo = try context.fetch(fetchMyInfoRequest)
|
||||
if fetchedMyInfo.count == 1 {
|
||||
let mutableChannels = fetchedMyInfo[0].channels?.mutableCopy() as? NSMutableOrderedSet
|
||||
mutableChannels?.removeAllObjects()
|
||||
fetchedMyInfo[0].channels = mutableChannels
|
||||
do {
|
||||
try context!.save()
|
||||
try context.save()
|
||||
} catch {
|
||||
Logger.data.error("Failed to clear existing channels from local app database: \(error.localizedDescription, privacy: .public)")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class OfflineTileManager: ObservableObject {
|
|||
}
|
||||
|
||||
init() {
|
||||
Logger.services.debug("Documents Directory = \(self.documentsDirectory.absoluteString, privacy: .public)")
|
||||
Logger.services.info("🗂️ Documents Directory = \(self.documentsDirectory.absoluteString, privacy: .public)")
|
||||
createDirectoriesIfNecessary()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -97,13 +97,11 @@ func myInfoPacket (myInfo: MyNodeInfo, peripheralId: String, context: NSManagedO
|
|||
let logString = String.localizedStringWithFormat("mesh.log.myinfo %@".localized, String(myInfo.myNodeNum))
|
||||
MeshLogger.log("ℹ️ \(logString)")
|
||||
|
||||
let fetchMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
let fetchMyInfoRequest = MyInfoEntity.fetchRequest()
|
||||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(myInfo.myNodeNum))
|
||||
|
||||
do {
|
||||
guard let fetchedMyInfo = try context.fetch(fetchMyInfoRequest) as? [MyInfoEntity] else {
|
||||
return nil
|
||||
}
|
||||
let fetchedMyInfo = try context.fetch(fetchMyInfoRequest)
|
||||
// Not Found Insert
|
||||
if fetchedMyInfo.isEmpty {
|
||||
|
||||
|
|
@ -149,13 +147,11 @@ func channelPacket (channel: Channel, fromNum: Int64, context: NSManagedObjectCo
|
|||
let logString = String.localizedStringWithFormat("mesh.log.channel.received %d %@".localized, channel.index, String(fromNum))
|
||||
MeshLogger.log("🎛️ \(logString)")
|
||||
|
||||
let fetchedMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
let fetchedMyInfoRequest = MyInfoEntity.fetchRequest()
|
||||
fetchedMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", fromNum)
|
||||
|
||||
do {
|
||||
guard let fetchedMyInfo = try context.fetch(fetchedMyInfoRequest) as? [MyInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedMyInfo = try context.fetch(fetchedMyInfoRequest)
|
||||
if fetchedMyInfo.count == 1 {
|
||||
let newChannel = ChannelEntity(context: context)
|
||||
newChannel.id = Int32(channel.index)
|
||||
|
|
@ -206,13 +202,11 @@ func deviceMetadataPacket (metadata: DeviceMetadata, fromNum: Int64, context: NS
|
|||
let logString = String.localizedStringWithFormat("mesh.log.device.metadata.received %@".localized, fromNum.toHex())
|
||||
MeshLogger.log("🏷️ \(logString)")
|
||||
|
||||
let fetchedNodeRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchedNodeRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchedNodeRequest.predicate = NSPredicate(format: "num == %lld", fromNum)
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchedNodeRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchedNodeRequest)
|
||||
let newMetadata = DeviceMetadataEntity(context: context)
|
||||
newMetadata.time = Date()
|
||||
newMetadata.deviceStateVersion = Int32(metadata.deviceStateVersion)
|
||||
|
|
@ -257,13 +251,11 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
|
||||
guard nodeInfo.num > 0 else { return nil }
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeInfo.num))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return nil
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Not Found Insert
|
||||
if fetchedNode.isEmpty && nodeInfo.num > 0 {
|
||||
|
||||
|
|
@ -320,13 +312,11 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
}
|
||||
|
||||
// Look for a MyInfo
|
||||
let fetchMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
let fetchMyInfoRequest = MyInfoEntity.fetchRequest()
|
||||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(nodeInfo.num))
|
||||
|
||||
do {
|
||||
guard let fetchedMyInfo = try context.fetch(fetchMyInfoRequest) as? [MyInfoEntity] else {
|
||||
return nil
|
||||
}
|
||||
let fetchedMyInfo = try context.fetch(fetchMyInfoRequest)
|
||||
if fetchedMyInfo.count > 0 {
|
||||
newNode.myInfo = fetchedMyInfo[0]
|
||||
}
|
||||
|
|
@ -404,13 +394,11 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
|
|||
}
|
||||
|
||||
// Look for a MyInfo
|
||||
let fetchMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
let fetchMyInfoRequest = MyInfoEntity.fetchRequest()
|
||||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(nodeInfo.num))
|
||||
|
||||
do {
|
||||
guard let fetchedMyInfo = try context.fetch(fetchMyInfoRequest) as? [MyInfoEntity] else {
|
||||
return nil
|
||||
}
|
||||
let fetchedMyInfo = try context.fetch(fetchMyInfoRequest)
|
||||
if fetchedMyInfo.count > 0 {
|
||||
fetchedNode[0].myInfo = fetchedMyInfo[0]
|
||||
}
|
||||
|
|
@ -446,13 +434,11 @@ func adminAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
|
|||
let logString = String.localizedStringWithFormat("mesh.log.cannedmessages.messages.received %@".localized, packet.from.toHex())
|
||||
MeshLogger.log("🥫 \(logString)")
|
||||
|
||||
let fetchNodeRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeRequest)
|
||||
if fetchedNode.count == 1 {
|
||||
let messages = String(cmmc.textFormatString())
|
||||
.replacingOccurrences(of: "11: ", with: "")
|
||||
|
|
@ -528,12 +514,10 @@ func adminAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
|
|||
|
||||
func adminResponseAck (packet: MeshPacket, context: NSManagedObjectContext) {
|
||||
|
||||
let fetchedAdminMessageRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MessageEntity")
|
||||
let fetchedAdminMessageRequest = MessageEntity.fetchRequest()
|
||||
fetchedAdminMessageRequest.predicate = NSPredicate(format: "messageId == %lld", packet.decoded.requestID)
|
||||
do {
|
||||
guard let fetchedMessage = try context.fetch(fetchedAdminMessageRequest) as? [MessageEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedMessage = try context.fetch(fetchedAdminMessageRequest)
|
||||
if fetchedMessage.count > 0 {
|
||||
fetchedMessage[0].ackTimestamp = Int32(Date().timeIntervalSince1970)
|
||||
fetchedMessage[0].ackError = Int32(RoutingError.none.rawValue)
|
||||
|
|
@ -558,11 +542,11 @@ func paxCounterPacket (packet: MeshPacket, context: NSManagedObjectContext) {
|
|||
let logString = String.localizedStringWithFormat("mesh.log.paxcounter %@".localized, String(packet.from))
|
||||
MeshLogger.log("🧑🤝🧑 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
|
||||
|
||||
do {
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity]
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
|
||||
if let paxMessage = try? Paxcount(serializedData: packet.decoded.payload) {
|
||||
|
||||
|
|
@ -572,12 +556,12 @@ func paxCounterPacket (packet: MeshPacket, context: NSManagedObjectContext) {
|
|||
newPax.uptime = Int32(truncatingIfNeeded: paxMessage.uptime)
|
||||
newPax.time = Date()
|
||||
|
||||
if fetchedNode?.count ?? 0 > 0 {
|
||||
guard let mutablePax = fetchedNode?[0].pax!.mutableCopy() as? NSMutableOrderedSet else {
|
||||
if fetchedNode.count > 0 {
|
||||
guard let mutablePax = fetchedNode[0].pax!.mutableCopy() as? NSMutableOrderedSet else {
|
||||
return
|
||||
}
|
||||
mutablePax.add(newPax)
|
||||
fetchedNode![0].pax = mutablePax
|
||||
fetchedNode[0].pax = mutablePax
|
||||
do {
|
||||
try context.save()
|
||||
} catch {
|
||||
|
|
@ -602,38 +586,38 @@ func routingPacket (packet: MeshPacket, connectedNodeNum: Int64, context: NSMana
|
|||
let logString = String.localizedStringWithFormat("mesh.log.routing.message %@ %@".localized, String(packet.decoded.requestID), routingErrorString)
|
||||
MeshLogger.log("🕸️ \(logString)")
|
||||
|
||||
let fetchMessageRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MessageEntity")
|
||||
let fetchMessageRequest = MessageEntity.fetchRequest()
|
||||
fetchMessageRequest.predicate = NSPredicate(format: "messageId == %lld", Int64(packet.decoded.requestID))
|
||||
|
||||
do {
|
||||
let fetchedMessage = try context.fetch(fetchMessageRequest) as? [MessageEntity]
|
||||
if fetchedMessage?.count ?? 0 > 0 {
|
||||
let fetchedMessage = try context.fetch(fetchMessageRequest)
|
||||
if fetchedMessage.count > 0 {
|
||||
|
||||
if fetchedMessage![0].toUser != nil {
|
||||
if fetchedMessage[0].toUser != nil {
|
||||
// Real ACK from DM Recipient
|
||||
if packet.to != packet.from {
|
||||
fetchedMessage![0].realACK = true
|
||||
fetchedMessage[0].realACK = true
|
||||
}
|
||||
}
|
||||
fetchedMessage![0].ackError = Int32(routingMessage.errorReason.rawValue)
|
||||
fetchedMessage[0].ackError = Int32(routingMessage.errorReason.rawValue)
|
||||
|
||||
if routingMessage.errorReason == Routing.Error.none {
|
||||
|
||||
fetchedMessage![0].receivedACK = true
|
||||
fetchedMessage[0].receivedACK = true
|
||||
}
|
||||
fetchedMessage![0].ackSNR = packet.rxSnr
|
||||
fetchedMessage![0].ackTimestamp = Int32(truncatingIfNeeded: packet.rxTime)
|
||||
fetchedMessage[0].ackSNR = packet.rxSnr
|
||||
fetchedMessage[0].ackTimestamp = Int32(truncatingIfNeeded: packet.rxTime)
|
||||
|
||||
if fetchedMessage![0].toUser != nil {
|
||||
fetchedMessage![0].toUser!.objectWillChange.send()
|
||||
if fetchedMessage[0].toUser != nil {
|
||||
fetchedMessage[0].toUser!.objectWillChange.send()
|
||||
} else {
|
||||
let fetchMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
let fetchMyInfoRequest = MyInfoEntity.fetchRequest()
|
||||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", connectedNodeNum)
|
||||
do {
|
||||
let fetchedMyInfo = try context.fetch(fetchMyInfoRequest) as? [MyInfoEntity]
|
||||
if fetchedMyInfo?.count ?? 0 > 0 {
|
||||
let fetchedMyInfo = try context.fetch(fetchMyInfoRequest)
|
||||
if fetchedMyInfo.count > 0 {
|
||||
|
||||
for ch in fetchedMyInfo![0].channels!.array as? [ChannelEntity] ?? [] where ch.index == packet.channel {
|
||||
for ch in fetchedMyInfo[0].channels!.array as? [ChannelEntity] ?? [] where ch.index == packet.channel {
|
||||
ch.objectWillChange.send()
|
||||
}
|
||||
}
|
||||
|
|
@ -667,14 +651,11 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage
|
|||
|
||||
let telemetry = TelemetryEntity(context: context)
|
||||
|
||||
let fetchNodeTelemetryRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeTelemetryRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeTelemetryRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeTelemetryRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeTelemetryRequest)
|
||||
if fetchedNode.count == 1 {
|
||||
if telemetryMessage.variant == Telemetry.OneOf_Variant.deviceMetrics(telemetryMessage.deviceMetrics) {
|
||||
// Device Metrics
|
||||
|
|
@ -700,17 +681,18 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage
|
|||
telemetry.snr = packet.rxSnr
|
||||
telemetry.rssi = packet.rxRssi
|
||||
telemetry.time = Date(timeIntervalSince1970: TimeInterval(Int64(telemetryMessage.time)))
|
||||
|
||||
guard let mutableTelemetries = fetchedNode[0].telemetries!.mutableCopy() as? NSMutableOrderedSet else {
|
||||
return
|
||||
}
|
||||
mutableTelemetries.add(telemetry)
|
||||
fetchedNode[0].lastHeard = telemetry.time
|
||||
fetchedNode[0].lastHeard = Date(timeIntervalSince1970: TimeInterval(Int64(packet.rxTime)))
|
||||
fetchedNode[0].telemetries = mutableTelemetries.copy() as? NSOrderedSet
|
||||
}
|
||||
try context.save()
|
||||
// Only log telemetry from the mesh not the connected device
|
||||
if connectedNode != Int64(packet.from) {
|
||||
Logger.data.info("💾 [Telemetry] Saved for Node: \(packet.from.toHex())")
|
||||
Logger.data.info("💾 [TelemetryEntity] Saved for Node: \(packet.from.toHex())")
|
||||
} else if telemetry.metricsType == 0 {
|
||||
// Connected Device Metrics
|
||||
// ------------------------
|
||||
|
|
@ -790,12 +772,10 @@ func textMessageAppPacket(packet: MeshPacket, wantRangeTestPackets: Bool, connec
|
|||
|
||||
MeshLogger.log("💬 \("mesh.log.textmessage.received".localized)")
|
||||
|
||||
let messageUsers: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "UserEntity")
|
||||
let messageUsers = UserEntity.fetchRequest()
|
||||
messageUsers.predicate = NSPredicate(format: "num IN %@", [packet.to, packet.from])
|
||||
do {
|
||||
guard let fetchedUsers = try context.fetch(messageUsers) as? [UserEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedUsers = try context.fetch(messageUsers)
|
||||
let newMessage = MessageEntity(context: context)
|
||||
newMessage.messageId = Int64(packet.id)
|
||||
newMessage.messageTimestamp = Int32(bitPattern: packet.rxTime)
|
||||
|
|
@ -866,13 +846,11 @@ func textMessageAppPacket(packet: MeshPacket, wantRangeTestPackets: Bool, connec
|
|||
}
|
||||
} else if newMessage.fromUser != nil && newMessage.toUser == nil {
|
||||
|
||||
let fetchMyInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MyInfoEntity")
|
||||
let fetchMyInfoRequest = MyInfoEntity.fetchRequest()
|
||||
fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(connectedNode))
|
||||
|
||||
do {
|
||||
guard let fetchedMyInfo = try context.fetch(fetchMyInfoRequest) as? [MyInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedMyInfo = try context.fetch(fetchMyInfoRequest)
|
||||
if !fetchedMyInfo.isEmpty {
|
||||
appState.unreadChannelMessages = fetchedMyInfo[0].unreadMessages
|
||||
UIApplication.shared.applicationIconBadgeNumber = appState.unreadChannelMessages + appState.unreadDirectMessages
|
||||
|
|
@ -919,15 +897,13 @@ func waypointPacket (packet: MeshPacket, context: NSManagedObjectContext) {
|
|||
let logString = String.localizedStringWithFormat("mesh.log.waypoint.received %@".localized, String(packet.from))
|
||||
MeshLogger.log("📍 \(logString)")
|
||||
|
||||
let fetchWaypointRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "WaypointEntity")
|
||||
let fetchWaypointRequest = WaypointEntity.fetchRequest()
|
||||
fetchWaypointRequest.predicate = NSPredicate(format: "id == %lld", Int64(packet.id))
|
||||
|
||||
do {
|
||||
|
||||
if let waypointMessage = try? Waypoint(serializedData: packet.decoded.payload) {
|
||||
guard let fetchedWaypoint = try context.fetch(fetchWaypointRequest) as? [WaypointEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedWaypoint = try context.fetch(fetchWaypointRequest)
|
||||
if fetchedWaypoint.isEmpty {
|
||||
let waypoint = WaypointEntity(context: context)
|
||||
|
||||
|
|
|
|||
|
|
@ -244,13 +244,13 @@ extension NSPersistentContainer {
|
|||
do {
|
||||
try FileManager.default.removeItem(at: directory.appendingPathComponent("Meshtastic.sqlite-shm"))
|
||||
} catch {
|
||||
Logger.services.error("Error Deleting Meshtastic.sqlite-shm file \(error, privacy: .public)")
|
||||
Logger.services.error("🗄 Error Deleting Meshtastic.sqlite-shm file \(error, privacy: .public)")
|
||||
}
|
||||
} catch {
|
||||
Logger.services.error("Error Deleting Meshtastic.sqlite-wal file \(error, privacy: .public)")
|
||||
Logger.services.error("🗄 Error Deleting Meshtastic.sqlite-wal file \(error, privacy: .public)")
|
||||
}
|
||||
} catch {
|
||||
Logger.services.error("Error Deleting Meshtastic.sqlite file \(error, privacy: .public)")
|
||||
Logger.services.error("🗄 Error Deleting Meshtastic.sqlite file \(error, privacy: .public)")
|
||||
throw CopyPersistentStoreErrors.copyStoreError("\(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,13 +9,11 @@ import CoreData
|
|||
|
||||
public func getNodeInfo(id: Int64, context: NSManagedObjectContext) -> NodeInfoEntity? {
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(id))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return nil
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
if fetchedNode.count == 1 {
|
||||
return fetchedNode[0]
|
||||
}
|
||||
|
|
@ -28,15 +26,13 @@ public func getNodeInfo(id: Int64, context: NSManagedObjectContext) -> NodeInfoE
|
|||
public func getStoreAndForwardMessageIds(seconds: Int, context: NSManagedObjectContext) -> [UInt32] {
|
||||
|
||||
let time = seconds * -1
|
||||
let fetchMessagesRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MessageEntity")
|
||||
let fetchMessagesRequest = MessageEntity.fetchRequest()
|
||||
let timeRange = Calendar.current.date(byAdding: .minute, value: time, to: Date())
|
||||
let milleseconds = Int32(timeRange?.timeIntervalSince1970 ?? 0)
|
||||
fetchMessagesRequest.predicate = NSPredicate(format: "receivedTimestamp >= %d", milleseconds)
|
||||
|
||||
do {
|
||||
guard let fetchedMessages = try context.fetch(fetchMessagesRequest) as? [MessageEntity] else {
|
||||
return []
|
||||
}
|
||||
let fetchedMessages = try context.fetch(fetchMessagesRequest)
|
||||
if fetchedMessages.count == 1 {
|
||||
return fetchedMessages.map { UInt32($0.messageId) }
|
||||
}
|
||||
|
|
@ -48,13 +44,11 @@ public func getStoreAndForwardMessageIds(seconds: Int, context: NSManagedObjectC
|
|||
|
||||
public func getTraceRoute(id: Int64, context: NSManagedObjectContext) -> TraceRouteEntity? {
|
||||
|
||||
let fetchTraceRouteRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "TraceRouteEntity")
|
||||
let fetchTraceRouteRequest = TraceRouteEntity.fetchRequest()
|
||||
fetchTraceRouteRequest.predicate = NSPredicate(format: "id == %lld", Int64(id))
|
||||
|
||||
do {
|
||||
guard let fetchedTraceRoute = try context.fetch(fetchTraceRouteRequest) as? [TraceRouteEntity] else {
|
||||
return nil
|
||||
}
|
||||
let fetchedTraceRoute = try context.fetch(fetchTraceRouteRequest)
|
||||
if fetchedTraceRoute.count == 1 {
|
||||
return fetchedTraceRoute[0]
|
||||
}
|
||||
|
|
@ -66,13 +60,11 @@ public func getTraceRoute(id: Int64, context: NSManagedObjectContext) -> TraceRo
|
|||
|
||||
public func getUser(id: Int64, context: NSManagedObjectContext) -> UserEntity {
|
||||
|
||||
let fetchUserRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "UserEntity")
|
||||
let fetchUserRequest = UserEntity.fetchRequest()
|
||||
fetchUserRequest.predicate = NSPredicate(format: "num == %lld", Int64(id))
|
||||
|
||||
do {
|
||||
guard let fetchedUser = try context.fetch(fetchUserRequest) as? [UserEntity] else {
|
||||
return UserEntity(context: context)
|
||||
}
|
||||
let fetchedUser = try context.fetch(fetchUserRequest)
|
||||
if fetchedUser.count == 1 {
|
||||
return fetchedUser[0]
|
||||
}
|
||||
|
|
@ -84,13 +76,11 @@ public func getUser(id: Int64, context: NSManagedObjectContext) -> UserEntity {
|
|||
|
||||
public func getWaypoint(id: Int64, context: NSManagedObjectContext) -> WaypointEntity {
|
||||
|
||||
let fetchWaypointRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "WaypointEntity")
|
||||
let fetchWaypointRequest = WaypointEntity.fetchRequest()
|
||||
fetchWaypointRequest.predicate = NSPredicate(format: "id == %lld", Int64(id))
|
||||
|
||||
do {
|
||||
guard let fetchedWaypoint = try context.fetch(fetchWaypointRequest) as? [WaypointEntity] else {
|
||||
return WaypointEntity(context: context)
|
||||
}
|
||||
let fetchedWaypoint = try context.fetch(fetchWaypointRequest)
|
||||
if fetchedWaypoint.count == 1 {
|
||||
return fetchedWaypoint[0]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,13 +10,11 @@ import OSLog
|
|||
|
||||
public func clearPax(destNum: Int64, context: NSManagedObjectContext) -> Bool {
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(destNum))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return false
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
let newPax = [PaxCounterLog]()
|
||||
fetchedNode[0].pax? = NSOrderedSet(array: newPax)
|
||||
do {
|
||||
|
|
@ -35,13 +33,11 @@ public func clearPax(destNum: Int64, context: NSManagedObjectContext) -> Bool {
|
|||
|
||||
public func clearPositions(destNum: Int64, context: NSManagedObjectContext) -> Bool {
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(destNum))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return false
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
let newPostions = [PositionEntity]()
|
||||
fetchedNode[0].positions? = NSOrderedSet(array: newPostions)
|
||||
do {
|
||||
|
|
@ -60,13 +56,11 @@ public func clearPositions(destNum: Int64, context: NSManagedObjectContext) -> B
|
|||
|
||||
public func clearTelemetry(destNum: Int64, metricsType: Int32, context: NSManagedObjectContext) -> Bool {
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(destNum))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return false
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
let emptyTelemetry = [TelemetryEntity]()
|
||||
fetchedNode[0].telemetries? = NSOrderedSet(array: emptyTelemetry)
|
||||
do {
|
||||
|
|
@ -140,12 +134,12 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext)
|
|||
|
||||
guard packet.from > 0 else { return }
|
||||
|
||||
let fetchNodeInfoAppRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoAppRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoAppRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
|
||||
|
||||
do {
|
||||
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoAppRequest) as? [NodeInfoEntity] ?? []
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoAppRequest)
|
||||
if fetchedNode.count == 0 {
|
||||
// Not Found Insert
|
||||
let newNode = NodeInfoEntity(context: context)
|
||||
|
|
@ -288,7 +282,7 @@ func upsertPositionPacket (packet: MeshPacket, context: NSManagedObjectContext)
|
|||
let logString = String.localizedStringWithFormat("mesh.log.position.received %@".localized, String(packet.from))
|
||||
MeshLogger.log("📍 \(logString)")
|
||||
|
||||
let fetchNodePositionRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodePositionRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodePositionRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
|
||||
|
||||
do {
|
||||
|
|
@ -297,18 +291,14 @@ func upsertPositionPacket (packet: MeshPacket, context: NSManagedObjectContext)
|
|||
|
||||
/// Don't save empty position packets from null island or apple park
|
||||
if (positionMessage.longitudeI != 0 && positionMessage.latitudeI != 0) && (positionMessage.latitudeI != 373346000 && positionMessage.longitudeI != -1220090000) {
|
||||
guard let fetchedNode = try context.fetch(fetchNodePositionRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodePositionRequest)
|
||||
if fetchedNode.count == 1 {
|
||||
|
||||
// Unset the current latest position for this node
|
||||
let fetchCurrentLatestPositionsRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "PositionEntity")
|
||||
let fetchCurrentLatestPositionsRequest = PositionEntity.fetchRequest()
|
||||
fetchCurrentLatestPositionsRequest.predicate = NSPredicate(format: "nodePosition.num == %lld && latest = true", Int64(packet.from))
|
||||
|
||||
guard let fetchedPositions = try context.fetch(fetchCurrentLatestPositionsRequest) as? [PositionEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedPositions = try context.fetch(fetchCurrentLatestPositionsRequest)
|
||||
if fetchedPositions.count > 0 {
|
||||
for position in fetchedPositions {
|
||||
position.latest = false
|
||||
|
|
@ -363,7 +353,7 @@ func upsertPositionPacket (packet: MeshPacket, context: NSManagedObjectContext)
|
|||
|
||||
do {
|
||||
try context.save()
|
||||
Logger.data.info("💾 Updated Node Position Coordinates from Position App Packet For: \(fetchedNode[0].num.toHex(), privacy: .public)")
|
||||
Logger.data.info("💾 [Position] Saved from Position App Packet For: \(fetchedNode[0].num.toHex(), privacy: .public)")
|
||||
} catch {
|
||||
context.rollback()
|
||||
let nsError = error as NSError
|
||||
|
|
@ -430,13 +420,11 @@ func upsertDeviceConfigPacket(config: Config.DeviceConfig, nodeNum: Int64, conte
|
|||
|
||||
let logString = String.localizedStringWithFormat("mesh.log.device.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("📟 \(logString)")
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Device Config
|
||||
if !fetchedNode.isEmpty {
|
||||
if fetchedNode[0].deviceConfig == nil {
|
||||
|
|
@ -486,13 +474,11 @@ func upsertDisplayConfigPacket(config: Config.DisplayConfig, nodeNum: Int64, con
|
|||
let logString = String.localizedStringWithFormat("mesh.log.display.config %@".localized, nodeNum.toHex())
|
||||
MeshLogger.log("🖥️ \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Device Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -552,12 +538,10 @@ func upsertLoRaConfigPacket(config: Config.LoRaConfig, nodeNum: Int64, context:
|
|||
let logString = String.localizedStringWithFormat("mesh.log.lora.config %@".localized, nodeNum.toHex())
|
||||
MeshLogger.log("📻 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", nodeNum)
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save LoRa Config
|
||||
if fetchedNode.count > 0 {
|
||||
if fetchedNode[0].loRaConfig == nil {
|
||||
|
|
@ -619,14 +603,11 @@ func upsertNetworkConfigPacket(config: Config.NetworkConfig, nodeNum: Int64, con
|
|||
let logString = String.localizedStringWithFormat("mesh.log.network.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🌐 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save WiFi Config
|
||||
if !fetchedNode.isEmpty {
|
||||
if fetchedNode[0].networkConfig == nil {
|
||||
|
|
@ -666,14 +647,11 @@ func upsertPositionConfigPacket(config: Config.PositionConfig, nodeNum: Int64, c
|
|||
let logString = String.localizedStringWithFormat("mesh.log.position.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🗺️ \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save LoRa Config
|
||||
if !fetchedNode.isEmpty {
|
||||
if fetchedNode[0].positionConfig == nil {
|
||||
|
|
@ -728,13 +706,11 @@ func upsertPowerConfigPacket(config: Config.PowerConfig, nodeNum: Int64, context
|
|||
let logString = String.localizedStringWithFormat("mesh.log.power.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🗺️ \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Power Config
|
||||
if !fetchedNode.isEmpty {
|
||||
if fetchedNode[0].powerConfig == nil {
|
||||
|
|
@ -778,14 +754,11 @@ func upsertAmbientLightingModuleConfigPacket(config: ModuleConfig.AmbientLightin
|
|||
let logString = String.localizedStringWithFormat("mesh.log.ambientlighting.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🏮 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Ambient Lighting Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -834,14 +807,11 @@ func upsertCannedMessagesModuleConfigPacket(config: ModuleConfig.CannedMessageCo
|
|||
let logString = String.localizedStringWithFormat("mesh.log.cannedmessage.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🥫 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Canned Message Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -898,14 +868,11 @@ func upsertDetectionSensorModuleConfigPacket(config: ModuleConfig.DetectionSenso
|
|||
let logString = String.localizedStringWithFormat("mesh.log.detectionsensor.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🕵️ \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Detection Sensor Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -959,14 +926,11 @@ func upsertExternalNotificationModuleConfigPacket(config: ModuleConfig.ExternalN
|
|||
let logString = String.localizedStringWithFormat("mesh.log.externalnotification.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("📣 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save External Notificaitone Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -1029,14 +993,11 @@ func upsertPaxCounterModuleConfigPacket(config: ModuleConfig.PaxcounterConfig, n
|
|||
let logString = String.localizedStringWithFormat("mesh.log.paxcounter.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🧑🤝🧑 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save PAX Counter Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -1074,14 +1035,11 @@ func upsertRtttlConfigPacket(ringtone: String, nodeNum: Int64, context: NSManage
|
|||
let logString = String.localizedStringWithFormat("mesh.log.ringtone.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("⛰️ \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save RTTTL Config
|
||||
if !fetchedNode.isEmpty {
|
||||
if fetchedNode[0].rtttlConfig == nil {
|
||||
|
|
@ -1113,14 +1071,11 @@ func upsertMqttModuleConfigPacket(config: ModuleConfig.MQTTConfig, nodeNum: Int6
|
|||
let logString = String.localizedStringWithFormat("mesh.log.mqtt.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🌉 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save MQTT Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -1175,14 +1130,11 @@ func upsertRangeTestModuleConfigPacket(config: ModuleConfig.RangeTestConfig, nod
|
|||
let logString = String.localizedStringWithFormat("mesh.log.rangetest.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("⛰️ \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Device Config
|
||||
if !fetchedNode.isEmpty {
|
||||
if fetchedNode[0].rangeTestConfig == nil {
|
||||
|
|
@ -1218,15 +1170,11 @@ func upsertSerialModuleConfigPacket(config: ModuleConfig.SerialConfig, nodeNum:
|
|||
let logString = String.localizedStringWithFormat("mesh.log.serial.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("🤖 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Device Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -1277,14 +1225,11 @@ func upsertStoreForwardModuleConfigPacket(config: ModuleConfig.StoreForwardConfi
|
|||
let logString = String.localizedStringWithFormat("mesh.log.storeforward.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("📬 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Store & Forward Sensor Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
@ -1327,14 +1272,11 @@ func upsertTelemetryModuleConfigPacket(config: ModuleConfig.TelemetryConfig, nod
|
|||
let logString = String.localizedStringWithFormat("mesh.log.telemetry.config %@".localized, String(nodeNum))
|
||||
MeshLogger.log("📈 \(logString)")
|
||||
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum))
|
||||
|
||||
do {
|
||||
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, save Telemetry Config
|
||||
if !fetchedNode.isEmpty {
|
||||
|
||||
|
|
|
|||
|
|
@ -91,12 +91,10 @@ struct Messages: View {
|
|||
self.bleManager.context = context
|
||||
}
|
||||
if UserDefaults.preferredPeripheralId.count > 0 {
|
||||
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(UserDefaults.preferredPeripheralNum))
|
||||
do {
|
||||
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
|
||||
return
|
||||
}
|
||||
let fetchedNode = try context.fetch(fetchNodeInfoRequest)
|
||||
// Found a node, check it for a region
|
||||
if !fetchedNode.isEmpty {
|
||||
node = fetchedNode[0]
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ struct AppData: View {
|
|||
bleManager.disconnectPeripheral(reconnect: false)
|
||||
let container = NSPersistentContainer(name: "Meshtastic")
|
||||
do {
|
||||
clearCoreDataDatabase(context: context, includeRoutes: true)
|
||||
try container.restorePersistentStore(from: file.absoluteURL)
|
||||
let request = MyInfoEntity.fetchRequest()
|
||||
try context.fetch(request)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import SwiftUI
|
|||
import OSLog
|
||||
|
||||
/// Needed for TableColumnForEach
|
||||
@available(iOS 17.4, *)
|
||||
@available(iOS 17.4, macOS 14.4, *)
|
||||
struct AppLog: View {
|
||||
|
||||
@State private var logs: [OSLogEntryLog] = []
|
||||
|
|
@ -40,15 +40,17 @@ struct AppLog: View {
|
|||
Text(value.date.formatted(dateFormatStyle))
|
||||
}
|
||||
.width(min: 125, max: 150)
|
||||
TableColumn("log.category", value: \.category)
|
||||
.width(min: 125, max: 150)
|
||||
TableColumn("log.level") { value in
|
||||
Text(value.level.description)
|
||||
.foregroundStyle(value.level.color)
|
||||
}
|
||||
.width(min: 75, max: 100)
|
||||
.width(min: 85, max: 110)
|
||||
TableColumn("log.category", value: \.category)
|
||||
.width(min: 80, max: 130)
|
||||
}
|
||||
TableColumn("log.message", value: \.composedMessage) { value in
|
||||
Text(value.composedMessage)
|
||||
.foregroundStyle(value.level.color)
|
||||
.font(idiom == .phone ? .caption : .body)
|
||||
}
|
||||
.width(ideal: 200, max: .infinity)
|
||||
|
|
|
|||
|
|
@ -87,13 +87,13 @@ struct AppSettings: View {
|
|||
do {
|
||||
try FileManager.default.removeItem(at: url.appendingPathComponent("Meshtastic.sqlite-shm"))
|
||||
} catch {
|
||||
Logger.services.error("Error Deleting Meshtastic.sqlite-shm file \(error, privacy: .public)")
|
||||
Logger.services.error("🗄 Error Deleting Meshtastic.sqlite-shm file \(error, privacy: .public)")
|
||||
}
|
||||
} catch {
|
||||
Logger.services.error("Error Deleting Meshtastic.sqlite-wal file \(error, privacy: .public)")
|
||||
Logger.services.error("🗄 Error Deleting Meshtastic.sqlite-wal file \(error, privacy: .public)")
|
||||
}
|
||||
} catch {
|
||||
Logger.services.error("Error Deleting Meshtastic.sqlite file \(error, privacy: .public)")
|
||||
Logger.services.error("🗄 Error Deleting Meshtastic.sqlite file \(error, privacy: .public)")
|
||||
}
|
||||
}
|
||||
clearCoreDataDatabase(context: context, includeRoutes: true)
|
||||
|
|
|
|||
|
|
@ -78,6 +78,20 @@ enum LogLevels: Int, CaseIterable, Identifiable {
|
|||
return "💥 Fault"
|
||||
}
|
||||
}
|
||||
var color: Color {
|
||||
switch self {
|
||||
case .debug:
|
||||
return .indigo
|
||||
case .info:
|
||||
return .green
|
||||
case .notice:
|
||||
return .orange
|
||||
case .error:
|
||||
return .red
|
||||
case .fault:
|
||||
return .red
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct AppLogFilter: View {
|
||||
|
|
@ -107,6 +121,7 @@ struct AppLogFilter: View {
|
|||
VStack {
|
||||
List(LogLevels.allCases, selection: $levels) { level in
|
||||
Text(level.description)
|
||||
.foregroundStyle(level.color)
|
||||
}
|
||||
.listStyle(.plain)
|
||||
.environment(\.editMode, $editMode) /// bind it here!
|
||||
|
|
|
|||
|
|
@ -81,6 +81,22 @@ struct LogDetail: View {
|
|||
}
|
||||
.padding(.bottom, 5)
|
||||
.listRowSeparator(.visible)
|
||||
/// Level
|
||||
Label {
|
||||
Text("log.level".localized + ":")
|
||||
.font(idiom == .phone ? .caption : .title)
|
||||
.frame(width: idiom == .phone ? 115 : 190, alignment: .trailing)
|
||||
Text(log.level.description)
|
||||
.font(idiom == .phone ? .caption : .title)
|
||||
.foregroundStyle(log.level.color)
|
||||
} icon: {
|
||||
Image(systemName: "stairs")
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
.font(idiom == .phone ? .caption : .title)
|
||||
.frame(width: 35)
|
||||
}
|
||||
.padding(.bottom, 5)
|
||||
.listRowSeparator(.visible)
|
||||
/// Category
|
||||
Label {
|
||||
Text("log.category".localized + ":")
|
||||
|
|
@ -96,21 +112,7 @@ struct LogDetail: View {
|
|||
}
|
||||
.padding(.bottom, 5)
|
||||
.listRowSeparator(.visible)
|
||||
/// Level
|
||||
Label {
|
||||
Text("log.level".localized + ":")
|
||||
.font(idiom == .phone ? .caption : .title)
|
||||
.frame(width: idiom == .phone ? 115 : 190, alignment: .trailing)
|
||||
Text(log.level.description)
|
||||
.font(idiom == .phone ? .caption : .title)
|
||||
} icon: {
|
||||
Image(systemName: "stairs")
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
.font(idiom == .phone ? .caption : .title)
|
||||
.frame(width: 35)
|
||||
}
|
||||
.padding(.bottom, 5)
|
||||
.listRowSeparator(.visible)
|
||||
|
||||
/// message
|
||||
Label {
|
||||
Text("log.message".localized + ":")
|
||||
|
|
@ -119,6 +121,7 @@ struct LogDetail: View {
|
|||
Text(log.composedMessage)
|
||||
.textSelection(.enabled)
|
||||
.font(idiom == .phone ? .body : .title)
|
||||
.foregroundStyle(log.level.color)
|
||||
.padding(.bottom, 5)
|
||||
} icon: {
|
||||
Image(systemName: "text.bubble")
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ struct Settings: View {
|
|||
@State private var selectedNode: Int = 0
|
||||
@State private var preferredNodeNum: Int = 0
|
||||
@State private var selection: SettingsSidebar = .about
|
||||
|
||||
enum SettingsSidebar {
|
||||
case appSettings
|
||||
case routes
|
||||
|
|
@ -51,8 +52,72 @@ struct Settings: View {
|
|||
case appLog
|
||||
case appData
|
||||
}
|
||||
|
||||
var radioConfigurationSection: some View {
|
||||
Section("radio.configuration") {
|
||||
let node = nodes.first(where: { $0.num == preferredNodeNum })
|
||||
if let node,
|
||||
let loRaConfig = node.loRaConfig,
|
||||
let rc = RegionCodes(rawValue: Int(loRaConfig.regionCode)),
|
||||
let user = node.user,
|
||||
!user.isLicensed,
|
||||
rc.dutyCycle > 0 && rc.dutyCycle < 100 {
|
||||
Label {
|
||||
Text("Hourly Duty Cycle")
|
||||
} icon: {
|
||||
Image(systemName: "clock.arrow.circlepath")
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
.foregroundColor(.red)
|
||||
}
|
||||
Text("Your region has a \(rc.dutyCycle)% hourly duty cycle, your radio will stop sending packets when it reaches the hourly limit.")
|
||||
.foregroundColor(.orange)
|
||||
.font(.caption)
|
||||
Text("Limit all periodic broadcast intervals especially telemetry and position. If you need to increase hops, do it on nodes at the edges, not the ones in the middle. MQTT is not advised when you are duty cycle restricted because the gateway node is then doing all the work.")
|
||||
.font(.caption2)
|
||||
.foregroundColor(.gray)
|
||||
}
|
||||
|
||||
NavigationLink {
|
||||
LoRaConfig(node: nodes.first(where: { $0.num == selectedNode }))
|
||||
} label: {
|
||||
Label {
|
||||
Text("lora")
|
||||
} icon: {
|
||||
Image(systemName: "dot.radiowaves.left.and.right")
|
||||
.rotationEffect(.degrees(-90))
|
||||
}
|
||||
}
|
||||
.tag(SettingsSidebar.loraConfig)
|
||||
|
||||
NavigationLink {
|
||||
Channels(node: node)
|
||||
} label: {
|
||||
Label {
|
||||
Text("channels")
|
||||
} icon: {
|
||||
Image(systemName: "fibrechannel")
|
||||
}
|
||||
}
|
||||
.tag(SettingsSidebar.channelConfig)
|
||||
.disabled(selectedNode > 0 && selectedNode != preferredNodeNum)
|
||||
|
||||
NavigationLink {
|
||||
ShareChannels(node: node)
|
||||
} label: {
|
||||
Label {
|
||||
Text("share.channels")
|
||||
} icon: {
|
||||
Image(systemName: "qrcode")
|
||||
}
|
||||
}
|
||||
.tag(SettingsSidebar.shareChannels)
|
||||
.disabled(selectedNode > 0 && selectedNode != preferredNodeNum)
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationSplitView {
|
||||
let node = nodes.first(where: { $0.num == preferredNodeNum })
|
||||
List {
|
||||
NavigationLink {
|
||||
AboutMeshtastic()
|
||||
|
|
@ -98,7 +163,6 @@ struct Settings: View {
|
|||
.tag(SettingsSidebar.routeRecorder)
|
||||
}
|
||||
|
||||
let node = nodes.first(where: { $0.num == preferredNodeNum })
|
||||
let hasAdmin = node?.myInfo?.adminIndex ?? 0 > 0 ? true : false
|
||||
|
||||
if !(node?.deviceConfig?.isManaged ?? false) {
|
||||
|
|
@ -160,60 +224,7 @@ struct Settings: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
Section("radio.configuration") {
|
||||
if node != nil && node?.loRaConfig != nil {
|
||||
let rc = RegionCodes(rawValue: Int(node?.loRaConfig?.regionCode ?? 0))
|
||||
if rc?.dutyCycle ?? 0 > 0 && rc?.dutyCycle ?? 0 < 100 {
|
||||
|
||||
Label {
|
||||
Text("Hourly Duty Cycle")
|
||||
} icon: {
|
||||
Image(systemName: "clock.arrow.circlepath")
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
.foregroundColor(.red)
|
||||
}
|
||||
Text("Your region has a \(rc?.dutyCycle ?? 0)% hourly duty cycle, your radio will stop sending packets when it reaches the hourly limit.")
|
||||
.foregroundColor(.orange)
|
||||
.font(.caption)
|
||||
Text("Limit all periodic broadcast intervals especially telemetry and position. If you need to increase hops, do it on nodes at the edges, not the ones in the middle. MQTT is not advised when you are duty cycle restricted because the gateway node is then doing all the work.")
|
||||
.font(.caption2)
|
||||
.foregroundColor(.gray)
|
||||
}
|
||||
}
|
||||
NavigationLink {
|
||||
LoRaConfig(node: nodes.first(where: { $0.num == selectedNode }))
|
||||
} label: {
|
||||
Label {
|
||||
Text("lora")
|
||||
} icon: {
|
||||
Image(systemName: "dot.radiowaves.left.and.right")
|
||||
.rotationEffect(.degrees(-90))
|
||||
}
|
||||
}
|
||||
.tag(SettingsSidebar.loraConfig)
|
||||
NavigationLink {
|
||||
Channels(node: nodes.first(where: { $0.num == preferredNodeNum }))
|
||||
} label: {
|
||||
Label {
|
||||
Text("channels")
|
||||
} icon: {
|
||||
Image(systemName: "fibrechannel")
|
||||
}
|
||||
}
|
||||
.tag(SettingsSidebar.channelConfig)
|
||||
.disabled(selectedNode > 0 && selectedNode != preferredNodeNum)
|
||||
NavigationLink {
|
||||
ShareChannels(node: nodes.first(where: { $0.num == preferredNodeNum }))
|
||||
} label: {
|
||||
Label {
|
||||
Text("share.channels")
|
||||
} icon: {
|
||||
Image(systemName: "qrcode")
|
||||
}
|
||||
}
|
||||
.tag(SettingsSidebar.shareChannels)
|
||||
.disabled(selectedNode > 0 && selectedNode != preferredNodeNum)
|
||||
}
|
||||
radioConfigurationSection
|
||||
Section("device.configuration") {
|
||||
NavigationLink {
|
||||
UserConfig(node: nodes.first(where: { $0.num == selectedNode }))
|
||||
|
|
|
|||
|
|
@ -630,6 +630,11 @@ public struct Config {
|
|||
/// I2C address of INA_2XX to use for reading device battery voltage
|
||||
public var deviceBatteryInaAddress: UInt32 = 0
|
||||
|
||||
///
|
||||
/// If non-zero, we want powermon log outputs. With the particular (bitfield) sources enabled.
|
||||
/// Note: we picked an ID of 32 so that lower more efficient IDs can be used for more frequently used options.
|
||||
public var powermonEnables: UInt64 = 0
|
||||
|
||||
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||
|
||||
public init() {}
|
||||
|
|
@ -2079,6 +2084,7 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
7: .standard(proto: "ls_secs"),
|
||||
8: .standard(proto: "min_wake_secs"),
|
||||
9: .standard(proto: "device_battery_ina_address"),
|
||||
32: .standard(proto: "powermon_enables"),
|
||||
]
|
||||
|
||||
public mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||
|
|
@ -2095,6 +2101,7 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
case 7: try { try decoder.decodeSingularUInt32Field(value: &self.lsSecs) }()
|
||||
case 8: try { try decoder.decodeSingularUInt32Field(value: &self.minWakeSecs) }()
|
||||
case 9: try { try decoder.decodeSingularUInt32Field(value: &self.deviceBatteryInaAddress) }()
|
||||
case 32: try { try decoder.decodeSingularUInt64Field(value: &self.powermonEnables) }()
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
|
@ -2125,6 +2132,9 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
if self.deviceBatteryInaAddress != 0 {
|
||||
try visitor.visitSingularUInt32Field(value: self.deviceBatteryInaAddress, fieldNumber: 9)
|
||||
}
|
||||
if self.powermonEnables != 0 {
|
||||
try visitor.visitSingularUInt64Field(value: self.powermonEnables, fieldNumber: 32)
|
||||
}
|
||||
try unknownFields.traverse(visitor: &visitor)
|
||||
}
|
||||
|
||||
|
|
@ -2137,6 +2147,7 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
if lhs.lsSecs != rhs.lsSecs {return false}
|
||||
if lhs.minWakeSecs != rhs.minWakeSecs {return false}
|
||||
if lhs.deviceBatteryInaAddress != rhs.deviceBatteryInaAddress {return false}
|
||||
if lhs.powermonEnables != rhs.powermonEnables {return false}
|
||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||
return true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,17 +22,17 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
|
|||
|
||||
/// Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs).
|
||||
///But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us)
|
||||
struct PowerMon {
|
||||
public struct PowerMon {
|
||||
// SwiftProtobuf.Message conformance is added in an extension below. See the
|
||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||
// methods supported on all messages.
|
||||
|
||||
var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||
|
||||
/// Any significant power changing event in meshtastic should be tagged with a powermon state transition.
|
||||
///If you are making new meshtastic features feel free to add new entries at the end of this definition.
|
||||
enum State: SwiftProtobuf.Enum {
|
||||
typealias RawValue = Int
|
||||
public enum State: SwiftProtobuf.Enum {
|
||||
public typealias RawValue = Int
|
||||
case none // = 0
|
||||
case cpuDeepSleep // = 1
|
||||
case cpuLightSleep // = 2
|
||||
|
|
@ -62,11 +62,11 @@ struct PowerMon {
|
|||
case gpsActive // = 2048
|
||||
case UNRECOGNIZED(Int)
|
||||
|
||||
init() {
|
||||
public init() {
|
||||
self = .none
|
||||
}
|
||||
|
||||
init?(rawValue: Int) {
|
||||
public init?(rawValue: Int) {
|
||||
switch rawValue {
|
||||
case 0: self = .none
|
||||
case 1: self = .cpuDeepSleep
|
||||
|
|
@ -85,7 +85,7 @@ struct PowerMon {
|
|||
}
|
||||
}
|
||||
|
||||
var rawValue: Int {
|
||||
public var rawValue: Int {
|
||||
switch self {
|
||||
case .none: return 0
|
||||
case .cpuDeepSleep: return 1
|
||||
|
|
@ -106,14 +106,14 @@ struct PowerMon {
|
|||
|
||||
}
|
||||
|
||||
init() {}
|
||||
public init() {}
|
||||
}
|
||||
|
||||
#if swift(>=4.2)
|
||||
|
||||
extension PowerMon.State: CaseIterable {
|
||||
// The compiler won't synthesize support with the UNRECOGNIZED case.
|
||||
static let allCases: [PowerMon.State] = [
|
||||
public static let allCases: [PowerMon.State] = [
|
||||
.none,
|
||||
.cpuDeepSleep,
|
||||
.cpuLightSleep,
|
||||
|
|
@ -142,26 +142,26 @@ extension PowerMon.State: @unchecked Sendable {}
|
|||
fileprivate let _protobuf_package = "meshtastic"
|
||||
|
||||
extension PowerMon: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||
static let protoMessageName: String = _protobuf_package + ".PowerMon"
|
||||
static let _protobuf_nameMap = SwiftProtobuf._NameMap()
|
||||
public static let protoMessageName: String = _protobuf_package + ".PowerMon"
|
||||
public static let _protobuf_nameMap = SwiftProtobuf._NameMap()
|
||||
|
||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||
public mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||
while let _ = try decoder.nextFieldNumber() {
|
||||
}
|
||||
}
|
||||
|
||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||
try unknownFields.traverse(visitor: &visitor)
|
||||
}
|
||||
|
||||
static func ==(lhs: PowerMon, rhs: PowerMon) -> Bool {
|
||||
public static func ==(lhs: PowerMon, rhs: PowerMon) -> Bool {
|
||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
extension PowerMon.State: SwiftProtobuf._ProtoNameProviding {
|
||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||
0: .same(proto: "None"),
|
||||
1: .same(proto: "CPU_DeepSleep"),
|
||||
2: .same(proto: "CPU_LightSleep"),
|
||||
|
|
|
|||
|
|
@ -1,352 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Created by Garth Vander Houwen on 12/12/22.
|
||||
|
||||
*/
|
||||
"about"="Über";
|
||||
"about.meshtastic"="Über Meshtastic";
|
||||
"activity"="Activity";
|
||||
"admin"="admin";
|
||||
"admin.log"="Admin Log";
|
||||
"ago"="her";
|
||||
"airtime"="Airtime";
|
||||
"always.on"="Immer an";
|
||||
"ambient.lighting"="Ambient Lighting";
|
||||
"ambient.lighting.config"="Ambient Lighting Config";
|
||||
"appsettings"="App Einstellungen";
|
||||
"appsettings.provide.location"="Standort im Mesh veröffentlichen";
|
||||
"appsettings.smartposition"="Smart Position";
|
||||
"are.you.sure"="Bist Du sicher?";
|
||||
"ascii.capable"="ASCII fähig";
|
||||
"available.radios"="Geräte in der Nähe";
|
||||
"automatic.detection"="Automatische erkennung";
|
||||
"battery.level"="Batterie Ladung";
|
||||
"ble.name"="BLE Name";"ble.connection.timeout %d %@"="Verbindung nach %d Versuchen zu %@ fehlgeschlagen. Evtl. hilft es, die Verbindung unter Einstellungen > Bluetooth manuell zu löschen.";
|
||||
"ble.connection.timeout %d %@"="Verbindung nach %d Versuchen zu %@ fehlgeschlagen. Evtl. hilft es, die Verbindung unter Einstellungen > Bluetooth manuell zu löschen.";
|
||||
"ble.errorcode.6 %@"="%@ Die App wird automatisch zum präferierten Gerät wiederverbinden, sobald es in Reichweite kommt.";
|
||||
"ble.errorcode.14 %@"="%@ Dieser fehler kann üblicherweise behoben werden, in dem man unter Einstellungen > Bluetooth die Verbindung manuell löscht und sich erneut mit dem Gerät verbindet.";
|
||||
"ble.errorcode.pin %@"="%@ Bitte versuche es erneut. achte sorgfältig auf die richtige PIN.";
|
||||
"bluetooth"="Bluetooth";
|
||||
"bluetooth.off"="Bluetooth ist aus";
|
||||
"bluetooth.config"="Bluetooth Konfiguration";
|
||||
"bluetooth.mode.randompin"="Zufällige PIN";
|
||||
"bluetooth.mode.fixedpin"="Feste PIN";
|
||||
"bluetooth.mode.nopin"="Keine PIN (geht einfach)";
|
||||
"bluetooth.pairingmode"="Pairing Modus";
|
||||
"bluetooth.pin.validation"="Die Bluetooth Pin muss 6 Stellen lang sein.";
|
||||
"bytes"="Bytes";
|
||||
"cancel"="Abbrechen";
|
||||
"canned.messages"="Canned Messages";
|
||||
"canned.messages.config"="Canned Messages Config";
|
||||
"canned.messages.preset.manual"="Manuelle Konfiguration";
|
||||
"canned.messages.preset.rakrotary"="RAK Drehimpulsgeber Modul";
|
||||
"canned.messages.preset.cardkb"="M5 Stack Card KB / RAK Tastenfeld";
|
||||
"channel"="Kanal";
|
||||
"channel.role.disabled"="Deaktiviert";
|
||||
"channel.role.primary"="Primär";
|
||||
"channel.role.secondary"="Sekundär";
|
||||
"channel.utilization"="Kanalbelegung";
|
||||
"channels"="Kanäle";
|
||||
"clear.app.data"="App Daten löschen";
|
||||
"clear.log"="Log löschen";
|
||||
"close"="Schließen";
|
||||
"config.power.settings"="Power";
|
||||
"config.power.title"="Power Config";
|
||||
"config.power.section.battery"="Battery";
|
||||
"config.power.section.sleep"="Sleep";
|
||||
"config.power.adc.override"="ADC Override";
|
||||
"config.power.adc.multiplier"="Multiplier";
|
||||
"config.power.ls.secs"="Light Sleep Interval";
|
||||
"config.power.min.wake.secs"="Minimum Wake Interval";
|
||||
"config.power.saving"="Power Saving";
|
||||
"config.power.saving.description"="Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora radio. Don't use this setting if you want to use your device with the phone apps or are using a device without a user button.";
|
||||
"config.power.shutdown.on.power.loss"="Shutdown on Power Loss";
|
||||
"config.power.shutdown.after.secs"="After";
|
||||
"config.power.wait.bluetooth.secs"="Bluetooth Off After";
|
||||
"config.ringtone"="RTTTL Ringtone";
|
||||
"config.ringtone.title"="Ringtone Config";
|
||||
"config.ringtone.label"="Ringtone Transfer Language";
|
||||
"config.ringtone.description"="Ringtone Transfer Language(RTTTL) Ringtone String used by supported buzzers in external notifications.";
|
||||
"config.module.paxcounter.settings"="PAX Counter";
|
||||
"config.module.paxcounter.title"="PAX Counter Config";
|
||||
"config.module.paxcounter.enabled.description"="When enabled the PAX Counter module counts the number of people passing by using WiFi and Bluetooth. Both WiFI and Bluetooth must be disabled for PAX counter to work.";
|
||||
"config.module.paxcounter.updateinterval"="Update Interval";
|
||||
"config.module.paxcounter.updateinterval.description"="How often we can send a message to the mesh when people are detected.";
|
||||
"config.save.confirm"="Nach dem ändern der Einstellungen wird das Gerät neu starten.";
|
||||
"connected.radio"="Verbundenes Gerät";
|
||||
"communicating"="Verbinde mit Gerät...";
|
||||
"connected"="Derzeit verbunden";
|
||||
"connecting"="Verbinde...";
|
||||
"contacts"="Kontakte";
|
||||
"contacts %@"="Kontakte (%@)";
|
||||
"copy"="Kopieren";
|
||||
"current"="Current";
|
||||
"default"="Standard";
|
||||
"delete"="Löschen";
|
||||
"detection.sensor"="Detection Sensor";
|
||||
"device"="Gerät";
|
||||
"device.config"="Gerätekonfiguration";
|
||||
"device.configuration"="Device Configuration";
|
||||
"device.metrics.delete"="Delete all device metrics?";
|
||||
"device.metrics.log"="Device Metrics Log";
|
||||
"device.role.client"="Client (Standard) - Mit App verbundener Client.";
|
||||
"device.role.clientmute"="Client Leise - Das selbe wie Client, außer das die Pakete nicht über diesen Node weitergeleitet werden. Nimmt nicht am Mesh-Routing teil.";
|
||||
"device.role.lostandfound"="Used to automatically send a text message to the mesh with the current position of the device on a frequent interval: \"I'm lost! Position: lat / long\"";
|
||||
"device.role.clienthidden"=" Used for nodes that \"only speak when spoken to\" Turns all of the routine broadcasts but allows for ad-hoc communication. Still rebroadcasts, but with local only rebroadcast mode (known meshes only). Can be used for private operation or to dramatically reduce airtime / power consumption.";
|
||||
"device.role.router"="Router - Mesh Pakete werden bevorzugt über diesen Node gerouted. Dieser Node wird nicht von einer Client App benutzt. WLAN, Bluetooth und Display sind aus.";
|
||||
"device.role.routerclient"="Router Client - Mesh Pakete werden bevorzugt über diesen Node gerouted. Der Router Client kann parallel auch von einer Client-App genutzt werden.";
|
||||
"device.role.repeater"="Repeater - Mesh packets will prefer to be routed over this node. This role eliminates unnecessary overhead such as NodeInfo, DeviceTelemetry, and any other mesh packet, resulting in the device not appearing as part of the network. Please see Rebroadcast Mode for additional settings specific to this role.";
|
||||
"device.role.tracker"="Tracker - For use with devices intended as a GPS tracker. Position packets sent from this device will be higher priority, with position broadcasting every two minutes. Smart Position Broadcast will default to off.";
|
||||
"device.role.lostandfound"="Broadcasts location as message to default channel regularly for to assist with device recovery.";
|
||||
"device.role.sensor"="Broadcasts telemetry packets as priority.";
|
||||
"device.role.tak"="Optimized for ATAK system communication, reduces routine broadcasts.";
|
||||
"device.role.taktracker"="Enables automatic TAK PLI broadcasts and reduces routine broadcasts.";
|
||||
"direct.messages"="Direktnachrichten";
|
||||
"dismiss.keyboard"="Dismiss Keyboard";
|
||||
"display"="Display (Device Screen)";
|
||||
"display.config"="Display Config";
|
||||
"distance"="Entfernung";
|
||||
"disconnect"="Trennen";
|
||||
"echo"="Echo";
|
||||
"email.address"="Email Adresse";
|
||||
"enabled"="Aktiviert";
|
||||
"encrypted"="Verschlüsselt";
|
||||
"export"="Export";
|
||||
"external.notification"="Externe Benachrichtigung";
|
||||
"external.notification.config"="Einstellungen der externen Benachrichtigung";
|
||||
"finish"="Finish";
|
||||
"firmware.version"="Firmware Version";
|
||||
"firmware.version.unsupported"="Nicht unterstützte Firmware Version erkannt. Kann nicht verbinden.";
|
||||
"gas"="Gas";
|
||||
"gas.resistance"="Gas Resistance";
|
||||
"generate.qr.code"="QR Code Erzeugen";
|
||||
"gpsformat.dec"="Dezimalgrad Format";
|
||||
"gpsformat.dms"="Grad Minuten Sekunden";
|
||||
"gpsformat.utm"="Universal Transversal Mercator";
|
||||
"gpsformat.mgrs"="Militärisches Gitternetz-Referenzsystem";
|
||||
"gpsformat.olc"="Open Location Code (aka Plus Codes)";
|
||||
"gpsformat.osgr"="Ordnance Survey Gitterreferenz";
|
||||
"heard"="Gehört";
|
||||
"heard.last"="Zuletzt gehört";
|
||||
"hybrid"="Hybrid";
|
||||
"hybrid.flyover"="Hybrid Flyover";
|
||||
"include"="Include";
|
||||
"incomplete"="Incomplete";
|
||||
"inputevent.none"="Keins";
|
||||
"inputevent.up"="Hoch";
|
||||
"inputevent.down"="Runter";
|
||||
"inputevent.left"="Links";
|
||||
"inputevent.right"="Rechts";
|
||||
"inputevent.select"="Auswählen";
|
||||
"inputevent.back"="Zurück";
|
||||
"inputevent.cancel"="Abbrechen";
|
||||
"interval.one.second"="Eine Sekunde";
|
||||
"interval.two.seconds"="Zwei Sekunden";
|
||||
"interval.three.seconds"="Three Seconds";
|
||||
"interval.four.seconds"="Four Seconds";
|
||||
"interval.five.seconds"="Fünf Sekunden";
|
||||
"interval.ten.seconds"="Zehn Sekunden";
|
||||
"interval.fifteen.seconds"="Fünfzehn Sekunden";
|
||||
"interval.twenty.seconds"="Zwanzig Sekunden";
|
||||
"interval.twentyfive.seconds"="Fünfundzwanzig Sekunden";
|
||||
"interval.thirty.seconds"="Dreißig Sekunden";
|
||||
"interval.fortyfive.seconds"="Forty Five Seconds";
|
||||
"interval.one.minute"="Eine Minute";
|
||||
"interval.two.minutes"="Zwei Minutes";
|
||||
"interval.five.minutes"="Fünf Minutes";
|
||||
"interval.ten.minutes"="Zehn Minutes";
|
||||
"interval.fifteen.minutes"="Fünfzehn Minutes";
|
||||
"interval.thirty.minutes"="Dreißig Minutes";
|
||||
"interval.one.hour"="Eine Stunde";
|
||||
"interval.two.hours"="Two Hours";
|
||||
"interval.three.hours"="Three Hours";
|
||||
"interval.four.hours"="Four Hours";
|
||||
"interval.five.hours"="Five Hours";
|
||||
"interval.six.hours"="Sechs Stunden";
|
||||
"interval.twelve.hours"="Zwölf Stunden";
|
||||
"interval.eighteen.hours"="Eighteen Hours";
|
||||
"interval.twentyfour.hours"="Vierundzwanzig Stunden";
|
||||
"interval.thirtysix.hours"="Thirty Six Hours";
|
||||
"interval.fortyeight.hours"="Forty Eight Hours Hours";
|
||||
"interval.seventytwo.hours"="Seventy Two Hours";
|
||||
"keyboard.type"="Keyboard Typ";
|
||||
"logging"="Logging";
|
||||
"log.time"="Time";
|
||||
"log.subsystem"="Subsystem";
|
||||
"log.process"="Process";
|
||||
"log.category"="Category";
|
||||
"log.level"="Level";
|
||||
"log.message"="Message";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="LoRa Einstellungen";
|
||||
"map"="Mesh Karte";
|
||||
"map.centering"="Centering";
|
||||
"map.tiles.delete"="Delete Cached Map Tiles";
|
||||
"map.recentering"="Automatic Re-centering";
|
||||
"map.use.legacy"="Use Legacy Mesh Map";
|
||||
"map.type"="kartentyp";
|
||||
"map.usertrackingmode"="User tracking mode";
|
||||
"map.usertrackingmode.none"="None";
|
||||
"map.usertrackingmode.follow"="Follow";
|
||||
"map.usertrackingmode.followwithheading"="Follow with heading";
|
||||
"mesh.live.activity"="Mesh Live Activity";
|
||||
"mesh.log"="Mesh Log";
|
||||
"mesh.log.ambientlighting.config %@"="Ambient Lighting module config received: %@";
|
||||
"mesh.log.bluetooth.config %@"="Bluetooth Konfiguration empfangen: %@";
|
||||
"mesh.log.cannedmessage.config %@"="Canned Message module config received: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="Requested Canned Messages Module Messages for node: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="Canned Messages Messages Received For: %@";
|
||||
"mesh.log.channel.sent %@ %d"="Sent a Channel for: %@ Channel Index %d";
|
||||
"mesh.log.channel.received %d %@"="Channel %d received from: %@";
|
||||
"mesh.log.device.config %@"="Geräte Konfiguration empfangen: %@";
|
||||
"mesh.log.display.config %@"="Display Konfiguration empfangen: %@";
|
||||
"mesh.log.devicemetadata %@"="Anforderung der Geräte Metadaten für %@";
|
||||
"mesh.log.device.metadata.received %@"="Device Metadata received from: %@";
|
||||
"mesh.log.detectionsensor.config %@"="Detection Sensor module config received: %@";
|
||||
"mesh.log.externalnotification.config %@"="External Notification module config received: %@";
|
||||
"mesh.log.lora.config %@"="LoRa config received: %@";
|
||||
"mesh.log.lora.config.sent %@"="Sent a LoRa.Config for: %@";
|
||||
"mesh.log.mqtt.config %@"="MQTT module config received: %@";
|
||||
"mesh.log.myinfo %@"="MyInfo received: %@";
|
||||
"mesh.log.network.config %@"="Netzwerk onfiguration empfangen: %@";
|
||||
"mesh.log.nodeinfo.received %@"="Node info empfangen für: %@";
|
||||
"mesh.log.paxcounter %@"="PAX Counter message received for: %@";
|
||||
"mesh.log.position.config %@"="Positions Konfiguration empfangen: %@";
|
||||
"mesh.log.position.received %@"="Positionspaket empfangen von Node: %@";
|
||||
"mesh.log.rangetest.config %@"="Range Test Modul konfiguration empfangen: %@";
|
||||
"mesh.log.ringtone.config %@"="RTTTL Ringtone config received: %@";
|
||||
"mesh.log.routing.message %@ %@"="Routing empfangen für RequestID: %@ Ack Status: %@";
|
||||
"mesh.log.serial.config %@"="Serial Modul Konfiguration empfangen: %@";
|
||||
"mesh.log.sharelocation %@"="Sent a Position Packet from the Apple device GPS to node: %@";
|
||||
"mesh.log.storeforward.config %@"="Store & Forward module config received: %@";
|
||||
"mesh.log.telemetry.config %@"="Telemetrie Modul Konfiguration empfangen: %@";
|
||||
"mesh.log.telemetry.received %@"="Telemetrie empfangen für: %@";
|
||||
"mesh.log.textmessage.received"="Nachricht von der Textnachricht-App empfangen.";
|
||||
"mesh.log.textmessage.send.failed %@"="Nachricht senden fehlgeschlagen. Nicht korrekt verbunden zu %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="Sende Nachricht %@ von %@ an %@";
|
||||
"mesh.log.traceroute.sent %@"="Sende Traceroute Anforderung zu Mode: %@";
|
||||
"mesh.log.traceroute.received.direct %@"="Traceroute Anforderung an node gesendet: %@ wurde direkt empfangen.";
|
||||
"mesh.log.traceroute.received.route %@"="Traceroute Ergebnis: %@";
|
||||
"mesh.log.wantconfig %@"="Issuing Want Config to %@";
|
||||
"mesh.log.waypoint.sent %@"="Sent a Waypoint Packet from: %@";
|
||||
"mesh.log.waypoint.received %@"="Waypoint Packet received from node: %@";
|
||||
"message"="Nachricht";
|
||||
"message.details"="Nachrichtendetails";
|
||||
"messages"="Nachrichten";
|
||||
"mode"="Modus";
|
||||
"module.configuration"="Modul Konfiguration";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="Connect to MQTT";
|
||||
"mqtt.config"="MQTT Config";
|
||||
"mqtt.clientproxy"="MQTT Client Proxy";
|
||||
"mqtt.disconnect"="Disconnect from MQTT";
|
||||
"mqtt.username"="Benutzername";
|
||||
"name"="Name";
|
||||
"network"="Netzwerk";
|
||||
"network.config"="Netzwerkeinstellungen";
|
||||
"nodes"="Nodes";
|
||||
"nodes %@"="Nodes (%@)";
|
||||
"nodelist.filter.distance %@"="up to %@ away";
|
||||
"no.nodes"="Keine Meshtastic Nodes gefunden";
|
||||
"not.connected"="Kein Gerät verbunden";
|
||||
"numbers.punctuation"="Ziffern und Interpunktion";
|
||||
"off"="Aus";
|
||||
"offline"="Offline";
|
||||
"on.boot"="Nur beim Starten";
|
||||
"options"="Optionen";
|
||||
"password"="Passwort";
|
||||
"pause"="Pause";
|
||||
"phone.gps"="Telefon GPS";
|
||||
"phone.gps.interval.description"="Wie häufig das Telefon den Standort an das Gerät sendet. Standortaktualisierungen an das Mesh werden vom Gerät verwaltet.";
|
||||
"position"="Position";
|
||||
"position.config"="Positionseinstellungen";
|
||||
"preferred.radio"="Bevorzugtes Gerät";
|
||||
"radio.configuration"="Geräteeinstellungen";
|
||||
"range.test"="Entfernungstest";
|
||||
"range.test.blocked"="Block Range Test";
|
||||
"range.test.config"="Entfernungstest Konfiguration";
|
||||
"reboot"="Reboot";
|
||||
"reboot.node"="Node neustarten?";
|
||||
"reply"="Antworten";
|
||||
"received.ack"="Empfangsbestätigung";
|
||||
"received.ack.real"="Recipient Ack";
|
||||
"resume"="Resume";
|
||||
"ringtone"="Ringtone";
|
||||
"ringtone.config"="Ringtone Config";
|
||||
"route.recorder"="Route Recorder";
|
||||
"routes"="Routes";
|
||||
"routing.acknowledged"="Bestätigt";
|
||||
"routing.noroute"="Keine Route";
|
||||
"routing.gotnak"="Negative Empfangsbestätigung empfangen";
|
||||
"routing.timeout"="Zeitlimit erreicht";
|
||||
"routing.nointerface"="Kein Interface";
|
||||
"routing.maxretransmit"="Maximale Wiederholungen erreicht";
|
||||
"routing.nochannel"="Kein Kanal";
|
||||
"routing.toolarge"="Das Paket ist zu groß";
|
||||
"routing.noresponse"="Keine Antwort";
|
||||
"routing.dutycyclelimit"="Regionale Einschaltdauergrenze erreicht";
|
||||
"routing.badRequest"="Bad Request";
|
||||
"routing.notauthorized"="Nicht authorisiert";
|
||||
"satellite"="Satellit";
|
||||
"satellite.flyover"="Satellite Flyover";
|
||||
"save"="Speichern";
|
||||
"save.config %@"="Save Config for %@";
|
||||
"serial"="Serial";
|
||||
"serial.config"="Serial Konfiguration";
|
||||
"serial.mode.default"="Standard";
|
||||
"serial.mode.simple"="Einfach";
|
||||
"serial.mode.proto"="Protobufs";
|
||||
"serial.mode.txtmsg"="Text Nachricht";
|
||||
"serial.mode.nmea"="NMEA Positionen";
|
||||
"settings"="Einstellungen";
|
||||
"share.channels"="Kanal QR Code teilen";
|
||||
"share.position"="Position teilen";
|
||||
"subscribed"="Subscribed to mesh";
|
||||
"select.contact"="Kontakt wählen";
|
||||
"select.node"="Node auswählen";
|
||||
"select.menu.item"="Wähle einen Menüeintrag aus";
|
||||
"set.region"="Setze LoRa Region";
|
||||
"standard"="Standard";
|
||||
"standard.muted"="Standard Muted";
|
||||
"start"="Start";
|
||||
"storeforward"="Store & Forward";
|
||||
"storeforward.config"="Store & Forward Config";
|
||||
"storeforward.heartbeat"="Send Heartbeat";
|
||||
"ssid"="SSID";
|
||||
"tapback"="Tapback Response";
|
||||
"tapback.heart"="Gehört";
|
||||
"tapback.thumbsup"="Daumen hoch";
|
||||
"tapback.thumbsdown"="Daumen runter";
|
||||
"tapback.haha"="HaHa";
|
||||
"tapback.exclamation"="Ausrufezeichen";
|
||||
"tapback.question"="Fragezeichen";
|
||||
"tapback.poop"="Kacke";
|
||||
"tapback.wave"="Wave";
|
||||
"telemetry"="Telemetrie (Sensoren)";
|
||||
"telemetry.config"="Telemetrie Einstellungen";
|
||||
"timeout"="Zeitlimit erreicht";
|
||||
"timestamp"="Timestamp";
|
||||
"tip.bluetooth.connect.title"="Connected LoRa Radio";
|
||||
"tip.bluetooth.connect.message"="Shows information for the Lora radio currently connected via bluetooth. You can swipe left to disconnect the radio and long press to view stats or start the live activity.";
|
||||
"tip.channel.admin.title"="Admin Channel";
|
||||
"tip.channel.admin.message"="Admin channel detected: Select a node from the drop down to manage connected or remote devices.";
|
||||
"tip.channels.create.title"="Manage Channels";
|
||||
"tip.channels.create.message"="Most data on your mesh is sent over the primary channel. You can set up secondary channels to create additional messaging groups secured by their own key. [Channel config tips](https://meshtastic.org/docs/configuration/radio/channels/)";
|
||||
"tip.channels.share.title"="Sharing Meshtastic Channels";
|
||||
"tip.channels.share.message"="In a Meshtastic LoRa Mesh there are up to 8 channels. The first one is the Primary channel where most activity happens and is required. If you don't share your primary channel your first shared channel becomes the primary channel on the other network. It talks on its primary and your secondary channel. A channel with the name 'admin' controls nodes remotely. Other channels are for private groups, each with its own key.";
|
||||
"tip.messages.title"="Messages";
|
||||
"tip.messages.message"="You can send and receive channel (group chats) and direct messages. From any message you can long press to see available actions like copy, reply, tapback and delete as well as delivery details.";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="Unknown";
|
||||
"unknown.age"="Unbekanntes alter";
|
||||
"unset"="Unset";
|
||||
"update.firmware"="Update Your Firmware";
|
||||
"update.interval"="Update intervall";
|
||||
"uptime"="Uptime";
|
||||
"user"="Benutzer";
|
||||
"user.details"="Benutzer Details";
|
||||
"voltage"="Voltage";
|
||||
"waiting"="Warte...";
|
||||
"appsettings.newNodeNotifications"="New Node Notifications";
|
||||
|
|
@ -1,383 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Copyright(c) Garth Vander Houwen on 12/12/22.
|
||||
|
||||
*/
|
||||
"about"="About";
|
||||
"about.meshtastic"="About Meshtastic";
|
||||
"activity"="Activity";
|
||||
"admin"="Admin";
|
||||
"admin.log"="Admin Message Log";
|
||||
"ago"="ago";
|
||||
"airtime"="Airtime";
|
||||
"always.on"="Always On";
|
||||
"ambient.lighting"="Ambient Lighting";
|
||||
"ambient.lighting.config"="Ambient Lighting Config";
|
||||
"appsettings"="App Settings";
|
||||
"appsettings.provide.location"="Share location";
|
||||
"appsettings.smartposition"="Smart Position";
|
||||
"are.you.sure"="Are you sure?";
|
||||
"ascii.capable"="ASCII Capable";
|
||||
"available.radios"="Available Radios";
|
||||
"automatic.detection"="Automatic Detection";
|
||||
"battery.level"="Battery Level";
|
||||
"ble.name"="BLE Name";
|
||||
"ble.connection.timeout %d %@"="Connection failed after %d attempts to connect to %@. You may need to forget your device under Settings > Bluetooth.";
|
||||
"ble.errorcode.6 %@"="%@ The app will automatically reconnect to the preferred radio if it comes back in range.";
|
||||
"ble.errorcode.14 %@"="%@ This error usually cannot be fixed without forgetting the device unders Settings > Bluetooth and re-connecting to the radio.";
|
||||
"ble.errorcode.pin %@"="%@ Please try connecting again and check the PIN carefully.";
|
||||
"bluetooth"="Bluetooth";
|
||||
"bluetooth.off"="Bluetooth is off";
|
||||
"bluetooth.config"="Bluetooth Config";
|
||||
"bluetooth.mode.randompin"="Random PIN";
|
||||
"bluetooth.mode.fixedpin"="Fixed PIN";
|
||||
"bluetooth.mode.nopin"="No PIN (Just Works)";
|
||||
"bluetooth.pairingmode"="Pairing Mode";
|
||||
"bluetooth.pin.validation"="BLE Pin must be 6 digits long.";
|
||||
"bytes"="Bytes";
|
||||
"cancel"="Cancel";
|
||||
"canned.messages"="Canned Messages";
|
||||
"canned.messages.config"="Canned Messages Config";
|
||||
"canned.messages.preset.manual"="Manual Configuration";
|
||||
"canned.messages.preset.rakrotary"="RAK Rotary Encoder Module";
|
||||
"canned.messages.preset.cardkb"="M5 Stack Card KB / RAK Keypad";
|
||||
"channel"="Channel";
|
||||
"channel.role.disabled"="Disabled";
|
||||
"channel.role.primary"="Primary";
|
||||
"channel.role.secondary"="Secondary";
|
||||
"channel.utilization"="Channel Utilization";
|
||||
"channels"="Channels";
|
||||
"clear.app.data"="Clear App Data";
|
||||
"clear.log"="Clear";
|
||||
"close"="Close";
|
||||
"config.power.settings"="Power";
|
||||
"config.power.title"="Power Config";
|
||||
"config.power.section.battery"="Battery";
|
||||
"config.power.section.sleep"="Sleep";
|
||||
"config.power.adc.override"="ADC Override";
|
||||
"config.power.adc.multiplier"="Multiplier";
|
||||
"config.power.ls.secs"="Light Sleep Interval";
|
||||
"config.power.min.wake.secs"="Minimum Wake Interval";
|
||||
"config.power.saving"="Power Saving";
|
||||
"config.power.saving.description"="Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora radio. Don't use this setting if you want to use your device with the phone apps or are using a device without a user button.";
|
||||
"config.power.shutdown.on.power.loss"="Shutdown on Power Loss";
|
||||
"config.power.shutdown.after.secs"="After";
|
||||
"config.power.wait.bluetooth.secs"="Bluetooth Off After";
|
||||
"config.ringtone"="RTTTL Ringtone";
|
||||
"config.ringtone.title"="Ringtone Config";
|
||||
"config.ringtone.label"="Ringtone Transfer Language";
|
||||
"config.ringtone.description"="Ringtone Transfer Language(RTTTL) Ringtone String used by supported buzzers in external notifications.";
|
||||
"config.module.paxcounter.settings"="PAX Counter";
|
||||
"config.module.paxcounter.title"="PAX Counter Config";
|
||||
"config.module.paxcounter.enabled.description"="When enabled the PAX Counter module counts the number of people passing by using WiFi and Bluetooth. Both WiFI and Bluetooth must be disabled for PAX counter to work.";
|
||||
"config.module.paxcounter.updateinterval"="Update Interval";
|
||||
"config.module.paxcounter.updateinterval.description"="How often we can send a message to the mesh when people are detected.";
|
||||
"config.save.confirm"="After config values save the node will reboot.";
|
||||
"communicating"="Communicating with device. .";
|
||||
"connected.radio"="Connected Radio";
|
||||
"connected"="Bluetooth Connected";
|
||||
"connecting"="Connecting . .";
|
||||
"contacts"="Contacts";
|
||||
"contacts %@"="Contacts (%@)";
|
||||
"copy"="Copy";
|
||||
"current"="Current";
|
||||
"default"="Default";
|
||||
"delete"="Delete";
|
||||
"detection.sensor"="Detection Sensor";
|
||||
"detection.sensor.config"="Detection Sensor Config";
|
||||
"detection.sensor.log"="Detection Sensor Log";
|
||||
"device"="Device";
|
||||
"device.config"="Device Config";
|
||||
"device.configuration"="Device Configuration";
|
||||
"device.metrics.delete"="Delete all device metrics?";
|
||||
"device.metrics.log"="Device Metrics Log";
|
||||
"device.role.client"="App connected or stand alone messaging device.";
|
||||
"device.role.clientmute"="Device that does not forward packets from other devices.";
|
||||
"device.role.clienthidden"="Device that only broadcasts as needed for stealth or power savings.";
|
||||
"device.role.tracker"="Broadcasts GPS position packets as priority.";
|
||||
"device.role.lostandfound"="Broadcasts location as message to default channel regularly for to assist with device recovery.";
|
||||
"device.role.sensor"="Broadcasts telemetry packets as priority.";
|
||||
"device.role.tak"="Optimized for ATAK system communication, reduces routine broadcasts.";
|
||||
"device.role.taktracker"="Enables automatic TAK PLI broadcasts and reduces routine broadcasts.";
|
||||
"device.role.repeater"="Infrastructure node for extending network coverage by relaying messages with minimal overhead. Not visible in Nodes list.";
|
||||
"device.role.router"="Infrastructure node for extending network coverage by relaying messages. Visible in Nodes list.";
|
||||
"device.role.routerclient"="Combination of both ROUTER and CLIENT. Not for mobile devices.";
|
||||
"direct.messages"="Direct Messages";
|
||||
"dismiss.keyboard"="Dismiss";
|
||||
"display"="Display";
|
||||
"display.config"="Display Config";
|
||||
"distance"="Distance";
|
||||
"disconnect"="Disconnect";
|
||||
"echo"="Echo";
|
||||
"email.address"="Email Address";
|
||||
"enabled"="Enabled";
|
||||
"encrypted"="Encrypted";
|
||||
"export"="Export";
|
||||
"external.notification"="External Notification";
|
||||
"external.notification.config"="External Notification Config";
|
||||
"finish"="Finish";
|
||||
"firmware.version"="Firmware Version";
|
||||
"firmware.version.unsupported"="Unsupported Firmware Version Detected, unable to connect to device.";
|
||||
"gas"="Gas";
|
||||
"gas.resistance"="Gas Resistance";
|
||||
"generate.qr.code"="Generate QR Code";
|
||||
"gpsformat.dec"="Decimal Degrees Format";
|
||||
"gpsformat.dms"="Degrees Minutes Seconds";
|
||||
"gpsformat.utm"="Universal Transverse Mercator";
|
||||
"gpsformat.mgrs"="Military Grid Reference System";
|
||||
"gpsformat.olc"="Open Location Code (aka Plus Codes)";
|
||||
"gpsformat.osgr"="Ordnance Survey Grid Reference";
|
||||
"gpsmode.disabled"="Disabled";
|
||||
"gpsmode.enabled"="Enabled";
|
||||
"gpsmode.notPresent"="Not Present";
|
||||
"heard"="Heard";
|
||||
"heard.last"="Last Heard";
|
||||
"hybrid"="Hybrid";
|
||||
"hybrid.flyover"="Hybrid Flyover";
|
||||
"include"="Include";
|
||||
"incomplete"="Incomplete";
|
||||
"inputevent.none"="None";
|
||||
"inputevent.up"="Up";
|
||||
"inputevent.down"="Down";
|
||||
"inputevent.left"="Left";
|
||||
"inputevent.right"="Right";
|
||||
"inputevent.select"="Select";
|
||||
"inputevent.back"="Back";
|
||||
"inputevent.cancel"="Cancel";
|
||||
"interval.one.second"="One Second";
|
||||
"interval.two.seconds"="Two Seconds";
|
||||
"interval.three.seconds"="Three Seconds";
|
||||
"interval.four.seconds"="Four Seconds";
|
||||
"interval.five.seconds"="Five Seconds";
|
||||
"interval.ten.seconds"="Ten Seconds";
|
||||
"interval.fifteen.seconds"="Fifteen Seconds";
|
||||
"interval.twenty.seconds"="Twenty Seconds";
|
||||
"interval.twentyfive.seconds"="Twenty Five Seconds";
|
||||
"interval.thirty.seconds"="Thirty Seconds";
|
||||
"interval.fortyfive.seconds"="Forty Five Seconds";
|
||||
"interval.one.minute"="One Minute";
|
||||
"interval.two.minutes"="Two Minutes";
|
||||
"interval.five.minutes"="Five Minutes";
|
||||
"interval.ten.minutes"="Ten Minutes";
|
||||
"interval.fifteen.minutes"="Fifteen Minutes";
|
||||
"interval.thirty.minutes"="Thirty Minutes";
|
||||
"interval.one.hour"="One Hour";
|
||||
"interval.two.hours"="Two Hours";
|
||||
"interval.three.hours"="Three Hours";
|
||||
"interval.four.hours"="Four Hours";
|
||||
"interval.five.hours"="Five Hours";
|
||||
"interval.six.hours"="Six Hours";
|
||||
"interval.twelve.hours"="Twelve Hours";
|
||||
"interval.eighteen.hours"="Eighteen Hours";
|
||||
"interval.twentyfour.hours"="Twenty Four Hours";
|
||||
"interval.thirtysix.hours"="Thirty Six Hours";
|
||||
"interval.fortyeight.hours"="Forty Eight Hours";
|
||||
"interval.seventytwo.hours"="Seventy Two Hours";
|
||||
"keyboard.type"="Keyboard Type";
|
||||
"logging"="Logging";
|
||||
"log.time"="Time";
|
||||
"log.subsystem"="Subsystem";
|
||||
"log.process"="Process";
|
||||
"log.category"="Category";
|
||||
"log.level"="Level";
|
||||
"log.message"="Message";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="LoRa Config";
|
||||
"map"="Mesh Map";
|
||||
"map.type"="Default Type";
|
||||
"map.centering"="Centering Mode";
|
||||
"map.tiles.delete"="Delete All Map Tiles";
|
||||
"map.recentering"="Automatic Re-centering";
|
||||
"map.use.legacy"="Use Legacy Mesh Map";
|
||||
"map.usertrackingmode"="User tracking mode";
|
||||
"map.usertrackingmode.follow"="Follow";
|
||||
"map.usertrackingmode.followwithheading"="Follow with heading";
|
||||
"map.usertrackingmode.none"="None";
|
||||
"mesh.live.activity"="Mesh Live Activity";
|
||||
"mesh.log"="Mesh Log";
|
||||
"mesh.log.ambientlighting.config %@"="Ambient Lighting module config received: %@";
|
||||
"mesh.log.bluetooth.config %@"="Bluetooth config received: %@";
|
||||
"mesh.log.cannedmessage.config %@"="Canned Message module config received: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="Requested Canned Messages Module Messages for node: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="Canned Messages Messages Received For: %@";
|
||||
"mesh.log.channel.sent %@ %d"="Sent a Channel for: %@ Channel Index %d";
|
||||
"mesh.log.channel.received %d %@"="Channel %d received from: %@";
|
||||
"mesh.log.device.config %@"="Device config received: %@";
|
||||
"mesh.log.display.config %@"="Display config received: %@";
|
||||
"mesh.log.devicemetadata %@"="Requesting Device Metadata for %@";
|
||||
"mesh.log.device.metadata.received %@"="Device Metadata received from: %@";
|
||||
"mesh.log.detectionsensor.config %@"="Detection Sensor module config received: %@";
|
||||
"mesh.log.externalnotification.config %@"="External Notification module config received: %@";
|
||||
"mesh.log.lora.config %@"="LoRa config received: %@";
|
||||
"mesh.log.lora.config.sent %@"="Sent a LoRa.Config for: %@";
|
||||
"mesh.log.mqtt.config %@"="MQTT module config received: %@";
|
||||
"mesh.log.myinfo %@"="MyInfo received: %@";
|
||||
"mesh.log.network.config %@"="Network config received: %@";
|
||||
"mesh.log.nodeinfo.received %@"="Node info received for: %@";
|
||||
"mesh.log.paxcounter %@"="PAX Counter message received from: %@";
|
||||
"mesh.log.paxcounter.config %@"="PAX Counter config received: %@";
|
||||
"mesh.log.position.config %@"="Positon config received: %@";
|
||||
"mesh.log.position.received %@"="Position Packet received from node: %@";
|
||||
"mesh.log.power.config %@"="Power config received: %@";
|
||||
"mesh.log.rangetest.config %@"="Range Test module config received: %@";
|
||||
"mesh.log.ringtone.config %@"="RTTTL Ringtone config received: %@";
|
||||
"mesh.log.routing.message %@ %@"="Routing received for RequestID: %@ Ack Status: %@";
|
||||
"mesh.log.serial.config %@"="Serial module config received: %@";
|
||||
"mesh.log.sharelocation %@"="Sent a Position Packet from the Apple device GPS to node: %@";
|
||||
"mesh.log.storeforward.config %@"="Store & Forward module config received: %@";
|
||||
"mesh.log.telemetry.config %@"="Telemetry module config received: %@";
|
||||
"mesh.log.telemetry.received %@"="Telemetry received for: %@";
|
||||
"mesh.log.textmessage.received"="Message received from the text message app.";
|
||||
"mesh.log.textmessage.send.failed %@"="Message Send Failed, not properly connected to %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="Sent message %@ from %@ to %@";
|
||||
"mesh.log.traceroute.received.direct %@"="Trace Route request sent to node: %@ was recieived directly.";
|
||||
"mesh.log.traceroute.received.route %@"="Trace Route request returned: %@";
|
||||
"mesh.log.traceroute.sent %@"="Sent a Trace Route Request to node: %@";
|
||||
"mesh.log.wantconfig %@"="Issuing Want Config to %@";
|
||||
"mesh.log.waypoint.sent %@"="Sent a Waypoint Packet from: %@";
|
||||
"mesh.log.waypoint.received %@"="Waypoint Packet received from node: %@";
|
||||
"message"="Message";
|
||||
"message.details"="Message Details";
|
||||
"messages"="Messages";
|
||||
"mode"="Mode";
|
||||
"module.configuration"="Module Configuration";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="Connect to MQTT";
|
||||
"mqtt.config"="MQTT Config";
|
||||
"mqtt.clientproxy"="MQTT Client Proxy";
|
||||
"mqtt.disconnect"="Disconnect from MQTT";
|
||||
"mqtt.username"="Username";
|
||||
"name"="Name";
|
||||
"network"="Network";
|
||||
"network.config"="Network Config";
|
||||
"nodes"="Nodes";
|
||||
"nodes %@"="Nodes (%@)";
|
||||
"nodelist.filter.distance %@"="up to %@ away";
|
||||
"save.config %@"="Save Config for %@";
|
||||
"no.nodes"="No Meshtastic Nodes Found";
|
||||
"not.connected"="No device connected";
|
||||
"numbers.punctuation"="Numbers and Punctuation";
|
||||
"off"="Off";
|
||||
"offline"="Offline";
|
||||
"on.boot"="On Boot Only";
|
||||
"options"="Options";
|
||||
"password"="Password";
|
||||
"pause"="Pause";
|
||||
"paxcounter.ble"="BLE";
|
||||
"paxcounter.delete"="Delete all pax data?";
|
||||
"paxcounter.wifi"="WiFi";
|
||||
"paxcounter.content.unavailable"="No PAX Counter Logs";
|
||||
"paxcounter.log"="PAX Counter Log";
|
||||
"paxcounter.total"="Total PAX";
|
||||
"phone.gps"="Phone GPS";
|
||||
"phone.gps.interval.description"="How frequently your phone will send your location to the device, location updates to the mesh are managed by the device.";
|
||||
"position"="Position";
|
||||
"position.config"="Position Config";
|
||||
"position.precision %@"="Within %@";
|
||||
"preferred.radio"="Preferred Radio";
|
||||
"radio.configuration"="Radio Configuration";
|
||||
"range.test"="Range Test";
|
||||
"range.test.blocked"="Block Range Test";
|
||||
"range.test.config"="Range Test Config";
|
||||
"reply"="Reply";
|
||||
"reboot"="Reboot";
|
||||
"reboot.node"="Reboot node?";
|
||||
"received.ack"="Received Ack";
|
||||
"received.ack.real"="Recipient Ack";
|
||||
"relativetimeofday.morning"="Morning";
|
||||
"relativetimeofday.midday"="Midday";
|
||||
"relativetimeofday.afternoon"="Afternoon";
|
||||
"relativetimeofday.evening"="Evening";
|
||||
"relativetimeofday.nighttime"="Nighttime";
|
||||
"resume"="Resume";
|
||||
"ringtone"="Ringtone";
|
||||
"ringtone.config"="Ringtone Config";
|
||||
"route.recorder"="Route Recorder";
|
||||
"routes"="Routes";
|
||||
"routes.activitytype.walking"="Walking";
|
||||
"routes.activitytype.hiking"="Hiking";
|
||||
"routes.activitytype.biking"="Biking";
|
||||
"routes.activitytype.driving"="Driving";
|
||||
"routes.activitytype.overlanding"="Overlanding";
|
||||
"routes.activitytype.skiing"="Skiing";
|
||||
"routes.activitytype.filename.walking"="walk";
|
||||
"routes.activitytype.filename.hiking"="hike";
|
||||
"routes.activitytype.filename.biking"="bike tour";
|
||||
"routes.activitytype.filename.driving"="drive";
|
||||
"routes.activitytype.filename.overlanding"="overland drive";
|
||||
"routes.activitytype.filename.skiing"="ski tour";
|
||||
"routing.acknowledged"="Acknowledged";
|
||||
"routing.noroute"="No Route";
|
||||
"routing.gotnak"="Received a negative acknowledgment";
|
||||
"routing.timeout"="Timeout";
|
||||
"routing.nointerface"="No Interface";
|
||||
"routing.maxretransmit"="Max Retransmission Reached";
|
||||
"routing.nochannel"="No Channel";
|
||||
"routing.toolarge"="The packet is too large";
|
||||
"routing.noresponse"="No Response";
|
||||
"routing.dutycyclelimit"="Regional Duty Cycle Limit Reached";
|
||||
"routing.badRequest"="Bad Request";
|
||||
"routing.notauthorized"="Not Authorized";
|
||||
"satellite"="Satellite";
|
||||
"satellite.flyover"="Satellite Flyover";
|
||||
"save"="Save";
|
||||
"save.config %@"="Save Config for %@";
|
||||
"serial"="Serial";
|
||||
"serial.config"="Serial Config";
|
||||
"serial.mode.default"="Default";
|
||||
"serial.mode.simple"="Simple";
|
||||
"serial.mode.proto"="Protobufs";
|
||||
"serial.mode.txtmsg"="Text Message";
|
||||
"serial.mode.nmea"="NMEA Positions";
|
||||
"settings"="Settings";
|
||||
"share.channels"="Share QR Code";
|
||||
"share.position"="Share Position";
|
||||
"subscribed"="Subscribed to mesh";
|
||||
"select.contact"="Select a Contact";
|
||||
"select.node"="Select a Node";
|
||||
"select.menu.item"="Select an item from the menu";
|
||||
"set.region"="Set LoRa Region";
|
||||
"standard"="Standard";
|
||||
"standard.muted"="Standard Muted";
|
||||
"start"="Start";
|
||||
"storeforward"="Store & Forward";
|
||||
"storeforward.config"="Store & Forward Config";
|
||||
"storeforward.heartbeat"="Send Heartbeat";
|
||||
"ssid"="SSID";
|
||||
"tapback"="Tapback Response";
|
||||
"tapback.heart"="Heart";
|
||||
"tapback.thumbsup"="Thumbs Up";
|
||||
"tapback.thumbsdown"="Thumbs Down";
|
||||
"tapback.haha"="HaHa";
|
||||
"tapback.exclamation"="Exclamation Mark";
|
||||
"tapback.question"="Question Mark";
|
||||
"tapback.poop"="Poop";
|
||||
"tapback.wave"="Wave";
|
||||
"telemetry"="Telemetry (Sensors)";
|
||||
"telemetry.config"="Telemetry Config";
|
||||
"timeout"="Timeout";
|
||||
"timestamp"="Timestamp";
|
||||
"tip.bluetooth.connect.title"="Connected Radio";
|
||||
"tip.bluetooth.connect.message"="Shows information for the Lora radio connected via bluetooth. You can swipe left to disconnect the radio and long press to view stats or start the live activity.";
|
||||
"tip.channel.admin.title"="Admin Channel";
|
||||
"tip.channel.admin.message"="Admin channel detected: Select a node from the drop down to manage connected or remote devices.";
|
||||
"tip.channels.create.title"="Manage Channels";
|
||||
"tip.channels.create.message"="Most data on your mesh is sent over the primary channel. You can set up secondary channels to create additional messaging groups secured by their own key. [Channel config tips](https://meshtastic.org/docs/configuration/tips/)";
|
||||
"tip.channels.share.title"="Sharing Meshtastic Channels";
|
||||
"tip.channels.share.message"="A Meshtastic QR code contains the LoRa config and channel values needed for radios to communicate. You can share a complete channel configuration using the Replace Channels option, if you choose Add Channels your shared channels will be added to the channels on the receiving radio.";
|
||||
"tip.messages.title"="Messages";
|
||||
"tip.messages.message"="You can send and receive channel (group chats) and direct messages. From any message you can long press to see available actions like copy, reply, tapback and delete as well as delivery details.";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="Unknown";
|
||||
"unknown.age"="Unknown Age";
|
||||
"unset"="Unset";
|
||||
"update.firmware"="Update Your Firmware";
|
||||
"update.interval"="Update Interval";
|
||||
"uptime"="Uptime";
|
||||
"user"="User";
|
||||
"user.details"="User Details";
|
||||
"voltage"="Voltage";
|
||||
"waiting"="Waiting. . .";
|
||||
"appsettings.newNodeNotifications"="New Node Notifications";
|
||||
|
|
@ -1,331 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Copyright(c) Garth Vander Houwen on 12/12/22.
|
||||
|
||||
*/
|
||||
"about"="À propos";
|
||||
"about.meshtastic"="À propos de Meshtastic";
|
||||
"activity"="Activity";
|
||||
"admin"="Administrateur";
|
||||
"admin.log"="Journal des messages d'administration";
|
||||
"ago"="auparavant";
|
||||
"airtime"="Temps d'émission";
|
||||
"always.on"="En permanence";
|
||||
"ambient.lighting"="Lumière ambiante";
|
||||
"ambient.lighting.config"="Configuration de la lumière ambiante";
|
||||
"appsettings"="Réglages de l'application";
|
||||
"appsettings.provide.location"="Partager la position";
|
||||
"appsettings.smartposition"="Position intelligente";
|
||||
"are.you.sure"="Êtes-vous sûr ?";
|
||||
"ascii.capable"="ASCII Compatible";
|
||||
"available.radios"="Radios disponibles";
|
||||
"automatic.detection"="Détection automatique";
|
||||
"battery.level"="Niveau de batterie";
|
||||
"ble.name"="Nom du BLE";
|
||||
"ble.connection.timeout %d %@"="Connexion impossible après %d essais avec %@. Allez dans Réglages > Bluetooth et essayez de faire de faire > Oublier cet appareil.";
|
||||
"ble.errorcode.6 %@"="%@ L'application se reconnectera automatiquement à la radio en favori dès qu'elle sera à nouveau disponible.";
|
||||
"ble.errorcode.14 %@"="%@ Cette erreur ne peut généralement pas être corrigée sans aller dans Réglages > Bluetooth et faire > Oublier cet appareil, puis reconnecter la radio.";
|
||||
"ble.errorcode.pin %@"="%@ Merci d'essayer à nouveau en vérifiant bien le code PIN.";
|
||||
"bluetooth"="Bluetooth";
|
||||
"bluetooth.off"="Le Bluetooth est arrêté";
|
||||
"bluetooth.config"="Configuration Bluetooth";
|
||||
"bluetooth.mode.randompin"="Code PIN aléatoire";
|
||||
"bluetooth.mode.fixedpin"="Code PIN fixe";
|
||||
"bluetooth.mode.nopin"="Sans code PIN (connexion directe)";
|
||||
"bluetooth.pairingmode"="Mode d'appairage";
|
||||
"bluetooth.pin.validation"="Le code pin BLE doit avoir 6 chiffres.";
|
||||
"bytes"="Octets";
|
||||
"cancel"="Annuler";
|
||||
"canned.messages"="Messages préformatés";
|
||||
"canned.messages.config"="Configuration des messages préformatés";
|
||||
"canned.messages.preset.manual"="Configuration manuelle";
|
||||
"canned.messages.preset.rakrotary"="Module d'encodage rotatif RAK";
|
||||
"canned.messages.preset.cardkb"="Clavier M5 Stack Card KB / RAK";
|
||||
"channel"="Canal";
|
||||
"channel.role.disabled"="Désactivé";
|
||||
"channel.role.primary"="Principal";
|
||||
"channel.role.secondary"="Secondaire";
|
||||
"channel.utilization"="Utilisation du canal";
|
||||
"channels"="Canaux";
|
||||
"clear.app.data"="Effacer les données de l'application";
|
||||
"clear.log"="Effacer";
|
||||
"close"="Fermer";
|
||||
"config.save.confirm"="Une fois la configuration sauvegardée, le noeud redémarrera.";
|
||||
"communicating"="Communication avec l'appareil en cours. .";
|
||||
"connected.radio"="Radio connectée";
|
||||
"connected"="Bluetooth connecté";
|
||||
"connecting"="Connexion . .";
|
||||
"contacts"="Contacts";
|
||||
"contacts %@"="Contacts (%@)";
|
||||
"copy"="Copier";
|
||||
"current"="Actuel";
|
||||
"default"="Par défaut";
|
||||
"delete"="Effacer";
|
||||
"detection.sensor"="Capteur de détection";
|
||||
"detection.sensor.config"="Configuration du capteur de détection";
|
||||
"detection.sensor.log"="Journal du capteur de détection";
|
||||
"device"="Appareil";
|
||||
"device.config"="Configuration de l'appareil";
|
||||
"device.metrics.delete"="Effacer toutes les mesures de l’appareil?";
|
||||
"device.metrics.log"="Journal des mesures de l'appareil";
|
||||
"device.role.client"="Application connectée ou appareil de messagerie autonome.";
|
||||
"device.role.clientmute"="Appareil ne transmettant pas les paquets provenant d'autres appareils.";
|
||||
"device.role.clienthidden"="Appareil ne diffusant que si nécessaire pour la discrétion et l'économie d'énergie.";
|
||||
"device.role.tracker"="Transmet les paquets de positions GPS en priorité.";
|
||||
"device.role.lostandfound"="Transmet régulièrement la position par message dans le canal par défaut pour vous aider à retrouver l'appareil.";
|
||||
"device.role.sensor"="Transmet les paquets de télémétrie en priorité.";
|
||||
"device.role.tak"="Optimisé pour le système de communication ATAK, diminue les émissions de routine.";
|
||||
"device.role.taktracker"="Enables automatic TAK PLI broadcasts and reduces routine broadcasts.";
|
||||
"device.role.repeater"="Noeud d'infrastructure qui étend la couverture du réseau en relayant les messages avec un minimum de surcharge. Invisible dans la liste des noeuds.";
|
||||
"device.role.router"="Noeud d'infrastructure qui étend la couverture du réseau en relayant les messages. Visible dans la liste des noeuds.";
|
||||
"device.role.routerclient"="Combinaison des modes ROUTER et CLIENT. Pas pour les appareils mobiles.";
|
||||
"direct.messages"="Messages directs";
|
||||
"dismiss.keyboard"="Annuler";
|
||||
"display"="Écran";
|
||||
"display.config"="Configuration de l'écran";
|
||||
"distance"="Distance";
|
||||
"disconnect"="Déconnecter";
|
||||
"echo"="Écho";
|
||||
"email.address"="Adresse mail";
|
||||
"enabled"="Activé";
|
||||
"encrypted"="Encrypté";
|
||||
"export"="Export";
|
||||
"external.notification"="Notification extérieure";
|
||||
"external.notification.config"="Configuration de la notification extérieure";
|
||||
"finish"="Terminer";
|
||||
"firmware.version"="Version du firmware";
|
||||
"firmware.version.unsupported"="Version non supportée du firmware détectée, impossible de se connecter à l'appareil.";
|
||||
"gas"="Gaz";
|
||||
"gas.resistance"="Résistence du gaz";
|
||||
"generate.qr.code"="Générer un QR Code";
|
||||
"gpsformat.dec"="Format décimal pour les degrés";
|
||||
"gpsformat.dms"="Degrés Minutes Secondes";
|
||||
"gpsformat.utm"="Projection Mercator Transverse Universelle";
|
||||
"gpsformat.mgrs"="Military Grid Reference System";
|
||||
"gpsformat.olc"="Open Location Code (alias Plus Codes)";
|
||||
"gpsformat.osgr"="Ordnance Survey Grid Reference";
|
||||
"gpsmode.disabled"="Désactivé";
|
||||
"gpsmode.enabled"="Activé";
|
||||
"gpsmode.notPresent"="Absent";
|
||||
"heard"="Capté";
|
||||
"heard.last"="Capté pour la dernière fois";
|
||||
"hybrid"="Hybride";
|
||||
"hybrid.flyover"="Flyover hybride";
|
||||
"include"="Inclure";
|
||||
"incomplete"="Incomplete";
|
||||
"inputevent.none"="Aucun";
|
||||
"inputevent.up"="Haut";
|
||||
"inputevent.down"="Bas";
|
||||
"inputevent.left"="Gauche";
|
||||
"inputevent.right"="Droite";
|
||||
"inputevent.select"="Sélectionner";
|
||||
"inputevent.back"="Retour";
|
||||
"inputevent.cancel"="Annuler";
|
||||
"interval.one.second"="Une seconde";
|
||||
"interval.two.seconds"="Deux secondes";
|
||||
"interval.three.seconds"="Trois secondes";
|
||||
"interval.four.seconds"="Quatre secondes";
|
||||
"interval.five.seconds"="Cinq secondes";
|
||||
"interval.ten.seconds"="Dix secondes";
|
||||
"interval.fifteen.seconds"="Quinze secondes";
|
||||
"interval.twenty.seconds"="Vingt secondes";
|
||||
"interval.twentyfive.seconds"="Vingt cinq secondes";
|
||||
"interval.thirty.seconds"="Trente secondes";
|
||||
"interval.fortyfive.seconds"="Quarante cinq secondes";
|
||||
"interval.one.minute"="Une minute";
|
||||
"interval.two.minutes"="Deux minutes";
|
||||
"interval.five.minutes"="Cinq minutes";
|
||||
"interval.ten.minutes"="Dix minutes";
|
||||
"interval.fifteen.minutes"="Quinze minutes";
|
||||
"interval.thirty.minutes"="Trente minutes";
|
||||
"interval.one.hour"="Une heure";
|
||||
"interval.two.hours"="Deux heures";
|
||||
"interval.three.hours"="Trois heures";
|
||||
"interval.four.hours"="Quatre heures";
|
||||
"interval.five.hours"="Cinq heures";
|
||||
"interval.six.hours"="Six heures";
|
||||
"interval.twelve.hours"="Douze heures";
|
||||
"interval.eighteen.hours"="Dix huit heures";
|
||||
"interval.twentyfour.hours"="Vingt quatre heures";
|
||||
"interval.thirtysix.hours"="Trente six heures";
|
||||
"interval.fortyeight.hours"="Quarante huit heures";
|
||||
"interval.seventytwo.hours"="Soixante douze heures";
|
||||
"keyboard.type"="Type de clavier";
|
||||
"logging"="Enregistrement";
|
||||
"log.time"="Time";
|
||||
"log.subsystem"="Subsystem";
|
||||
"log.process"="Process";
|
||||
"log.category"="Category";
|
||||
"log.level"="Level";
|
||||
"log.message"="Message";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="Configuration LoRa";
|
||||
"map"="Carte de maillage";
|
||||
"map.type"="Type par défaut";
|
||||
"map.centering"="Mode centré";
|
||||
"map.tiles.delete"="Supprimer toutes les tuiles de carte";
|
||||
"map.recentering"="Recentrage automatique";
|
||||
"map.use.legacy"="Utiliser l'ancienne génération de carte de maillage";
|
||||
"map.usertrackingmode"="Mode suivre l'utilisateur";
|
||||
"map.usertrackingmode.follow"="Suivre";
|
||||
"map.usertrackingmode.followwithheading"="Suivre avec le cap";
|
||||
"map.usertrackingmode.none"="Aucun";
|
||||
"mesh.live.activity"="Activité en direct du maillage";
|
||||
"mesh.log"="Journal du maillage";
|
||||
"mesh.log.ambientlighting.config %@"="Configuration du module lumière ambiante reçue : %@";
|
||||
"mesh.log.bluetooth.config %@"="Configuration Bluetooth reçue : %@";
|
||||
"mesh.log.cannedmessage.config %@"="Configuration du module messages préformatés reçue : %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="Messages du module messages préformatés demandés pour le noeud : %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="Messages préformatés reçus pour : %@";
|
||||
"mesh.log.channel.sent %@ %d"="Canal envoyé pour : %@ Canal index %d";
|
||||
"mesh.log.channel.received %d %@"="Canal %d reçu de : %@";
|
||||
"mesh.log.device.config %@"="Configuration de l'appareil reçue : %@";
|
||||
"mesh.log.display.config %@"="Configuration de l'écran reçue : %@";
|
||||
"mesh.log.devicemetadata %@"="Demande des metadatas de l'appareil à %@";
|
||||
"mesh.log.device.metadata.received %@"="Metadatas de l'appareil reçues de : %@";
|
||||
"mesh.log.detectionsensor.config %@"="Configuration du module capteur de détection reçue : %@";
|
||||
"mesh.log.externalnotification.config %@"="Configuration du module notification extérieure reçue : %@";
|
||||
"mesh.log.lora.config %@"="Configuration LoRa reçue : %@";
|
||||
"mesh.log.lora.config.sent %@"="Configuration LoRa envoyée à : %@";
|
||||
"mesh.log.mqtt.config %@"="Configuration du module MQTT reçue : %@";
|
||||
"mesh.log.myinfo %@"="MesInfos reçues : %@";
|
||||
"mesh.log.network.config %@"="Configuration du réseau reçue : %@";
|
||||
"mesh.log.nodeinfo.received %@"="Information du noeud reçue pour : %@";
|
||||
"mesh.log.position.config %@"="Configuration de la position reçue : %@";
|
||||
"mesh.log.position.received %@"="Paquet de la position reçu du noeud : %@";
|
||||
"mesh.log.rangetest.config %@"="Configuration du module test deportée reçue : %@";
|
||||
"mesh.log.ringtone.config %@"="Configuration de la sonnerie RTTTL reçue : %@";
|
||||
"mesh.log.routing.message %@ %@"="Routage reçu pour la demande numéro : %@ Status de l'accusé de réception : %@";
|
||||
"mesh.log.serial.config %@"="Configuration du module série reçue : %@";
|
||||
"mesh.log.sharelocation %@"="Paquet envoyé avec la position GPS de l'appareil Apple vers le noeud : %@";
|
||||
"mesh.log.storeforward.config %@"="Configuration du module Stocker et Transmettre reçue : %@";
|
||||
"mesh.log.telemetry.config %@"="Configuration du module télémetrie reçue : %@";
|
||||
"mesh.log.telemetry.received %@"="Télémetrie reçue pour : %@";
|
||||
"mesh.log.textmessage.received"="Message reçu depuis l'application de messagerie texte.";
|
||||
"mesh.log.textmessage.send.failed %@"="Erreur d'envoi du message, mauvaise connexion à %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="Envoi du message %@ de %@ à %@";
|
||||
"mesh.log.traceroute.received.direct %@"="La demande de Trace Route envoyée au noeud : %@ a été directement reçue.";
|
||||
"mesh.log.traceroute.received.route %@"="La demande de Trace Route est revenue : %@";
|
||||
"mesh.log.traceroute.sent %@"="Envoi d'une demande de Trace Route au noeud : %@";
|
||||
"mesh.log.wantconfig %@"="Envoi d'un Want Config à %@";
|
||||
"mesh.log.waypoint.sent %@"="Paquet Waypoint envoyé depuis : %@";
|
||||
"mesh.log.waypoint.received %@"="Paquet Waypoint reçu du noeud : %@";
|
||||
"message"="Message";
|
||||
"message.details"="Détails du message";
|
||||
"messages"="Messages";
|
||||
"mode"="Mode";
|
||||
"module.configuration"="Configuration du module";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="Connecter à MQTT";
|
||||
"mqtt.config"="Configuration MQTT";
|
||||
"mqtt.clientproxy"="Proxy client MQTT";
|
||||
"mqtt.disconnect"="Déconnecter le MQTT";
|
||||
"mqtt.username"="Nom d'utilisateur";
|
||||
"name"="Nom";
|
||||
"network"="Réseau";
|
||||
"network.config"="Configuration du réseau";
|
||||
"nodes"="Noeuds";
|
||||
"nodes %@"="Noeuds (%@)";
|
||||
"nodelist.filter.distance %@"="up to %@ away";
|
||||
"no.nodes"="Aucun noeud Meshtastic trouvé";
|
||||
"not.connected"="Aucun appareil connecté";
|
||||
"numbers.punctuation"="Nombres and Ponctuation";
|
||||
"off"="Éteint";
|
||||
"offline"="Hors ligne";
|
||||
"on.boot"="Uniquement au démarrage";
|
||||
"options"="Options";
|
||||
"password"="Mot de passe";
|
||||
"pause"="Pause";
|
||||
"phone.gps"="GPS du téléphone";
|
||||
"phone.gps.interval.description"="La fréquence à laquelle votre téléphone envoie votre position à l'appareil, les mises à jour de la position vers le maillage sont gérées par l'appareil.";
|
||||
"position"="Position";
|
||||
"position.config"="Configuration de la position";
|
||||
"preferred.radio"="Radio favorie";
|
||||
"radio.configuration"="Configuration de la radio";
|
||||
"range.test"="Test de portée";
|
||||
"range.test.blocked"="Test de portée bloqué";
|
||||
"range.test.config"="Configuration du test de portée";
|
||||
"reply"="Répondre";
|
||||
"reboot"="Redémarrer";
|
||||
"reboot.node"="Redémarrer le noeud ?";
|
||||
"received.ack"="Accusé de réception reçu";
|
||||
"received.ack.real"="Accusé de réception du destinataire";
|
||||
"resume"="Reprendre";
|
||||
"ringtone"="Sonnerie";
|
||||
"ringtone.config"="Configuration de la sonnerie";
|
||||
"route.recorder"="Enregistreur de route";
|
||||
"routes"="Routes";
|
||||
"routing.acknowledged"="Confirmé";
|
||||
"routing.noroute"="Pas de route";
|
||||
"routing.gotnak"="Accusé de réception négatif reçu";
|
||||
"routing.timeout"="Délai d'expiration";
|
||||
"routing.nointerface"="Pas d'interface";
|
||||
"routing.maxretransmit"="Nombre maximum de retransmissions atteint";
|
||||
"routing.nochannel"="Pas de canal";
|
||||
"routing.toolarge"="Le paquet est trop grand";
|
||||
"routing.noresponse"="Pas de réponse";
|
||||
"routing.dutycyclelimit"="Limite du cycle de service régional atteinte";
|
||||
"routing.badRequest"="Requête incorrecte";
|
||||
"routing.notauthorized"="Non autorisé";
|
||||
"satellite"="Satellite";
|
||||
"satellite.flyover"="Flyover par satellite";
|
||||
"save"="Sauvegarder";
|
||||
"save.config %@"="Sauvegarder la configuration pour %@";
|
||||
"serial"="Série";
|
||||
"serial.config"="Configuration série";
|
||||
"serial.mode.default"="Défaut";
|
||||
"serial.mode.simple"="Simple";
|
||||
"serial.mode.proto"="Protobufs";
|
||||
"serial.mode.txtmsg"="Message texte";
|
||||
"serial.mode.nmea"="Positions NMEA";
|
||||
"settings"="Réglages";
|
||||
"share.channels"="Partager le QR Code";
|
||||
"share.position"="Partager la position";
|
||||
"subscribed"="Abonné au maillage";
|
||||
"select.contact"="Sélectioner un contact";
|
||||
"select.node"="Sélectioner un noeud";
|
||||
"select.menu.item"="Sélectioner un item du menu";
|
||||
"set.region"="Définir la région LoRa";
|
||||
"standard"="Standard";
|
||||
"standard.muted"="Standard en sourdine";
|
||||
"start"="Démarrer";
|
||||
"storeforward"="Stocker et Transmettre";
|
||||
"storeforward.config"="Configuration de Stocker et Transmettre";
|
||||
"storeforward.heartbeat"="Envoyer une impulsion";
|
||||
"ssid"="SSID";
|
||||
"tapback"="Réponse de Tapback";
|
||||
"tapback.heart"="Coeur";
|
||||
"tapback.thumbsup"="Pouce levé";
|
||||
"tapback.thumbsdown"="Pouce baissé";
|
||||
"tapback.haha"="HaHa";
|
||||
"tapback.exclamation"="Point d'exclamation";
|
||||
"tapback.question"="Point d'interrogation";
|
||||
"tapback.poop"="Caca";
|
||||
"tapback.wave"="Wave";
|
||||
"telemetry"="Télémetrie (Capteurs)";
|
||||
"telemetry.config"="Configuration de télémetrie";
|
||||
"timeout"="Délai d'expiration";
|
||||
"timestamp"="Horodatage";
|
||||
"tip.bluetooth.connect.title"="Radio connectée";
|
||||
"tip.bluetooth.connect.message"="Affiche les informations de la radio Lora connectée via le bluetooth. Vous pouvez faire un glissé vers la gauche pour déconnecter la radio et un appui long pour voir les statistiques ou démarrer l'activité en direct.";
|
||||
"tip.channels.create.title"="Gérer les canaux";
|
||||
"tip.channels.create.message"="La pluspart des données de votre maillage sont envoyées sur le canal principal. Vous pouvez définir des canaux secondaires pour créer des groupes de messagerie additionnelle sécurisés avec leur propre clé. [Conseils de configuration du canal](https://meshtastic.org/docs/configuration/tips/)";
|
||||
"tip.channel.admin.title"="Admin Channel";
|
||||
"tip.channel.admin.message"="Admin channel detected: Select a node from the drop down to manage connected or remote devices.";
|
||||
"tip.channels.share.title"="Partage des canaux Meshtastic";
|
||||
"tip.channels.share.message"="Un code QR Meshtastic contient la configuration LoRa et les valeurs de canal nécessaires pour communiquer. La plupart des activités du maillage ont lieu sur le canal principal requis. Si vous ne partagez pas votre canal principal, votre premier canal partagé devient le canal principal de l’autre réseau. Les autres canaux sont pour les groupes privés, chacun avec sa propre clé.";
|
||||
"tip.messages.title"="Messages";
|
||||
"tip.messages.message"="Vous pouvez envoyer et recevoir des canaux (chats de groupe) et des messages directs. Depuis n’importe quel message, vous pouvez faire un appui long pour voir les actions possibles comme copier, répondre, tapback et supprimer ainsi que les détails de l'envoi.";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="Inconnu";
|
||||
"unknown.age"="Age inconnu";
|
||||
"unset"="Désactivé";
|
||||
"update.firmware"="Mettre à jour votre Firmware";
|
||||
"update.interval"="Intervale de mise à jour";
|
||||
"user"="Utilisateur";
|
||||
"user.details"="Détails de l'utilisateur";
|
||||
"voltage"="Tension";
|
||||
"waiting"="En attente . . .";
|
||||
"appsettings.newNodeNotifications"="New Node Notifications";
|
||||
|
|
@ -1,355 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Copyright(c) Garth Vander Houwen on 12/12/22.
|
||||
|
||||
*/
|
||||
"about"="אודות";
|
||||
"about.meshtastic"="אודות משטסטיק";
|
||||
"activity"="Activity";
|
||||
"admin"="אדמין";
|
||||
"admin.log"="היסטוריית הודעות אדמין";
|
||||
"ago"="עברו";
|
||||
"airtime"="זמן אוויר";
|
||||
"always.on"="תמיד דלוק";
|
||||
"ambient.lighting"="תאורת סביבה";
|
||||
"ambient.lighting.config"="הגדרות תאורת סביבה";
|
||||
"appsettings"="הגדרות אפליקציה";
|
||||
"appsettings.provide.location"="שתף מיקום";
|
||||
"appsettings.smartposition"="מיקום חכם";
|
||||
"are.you.sure"="האם אתה בטוח?";
|
||||
"ascii.capable"="בעל יכולת ASCII";
|
||||
"available.radios"="מכשירים זמינים";
|
||||
"automatic.detection"="זיהוי אוטומטי";
|
||||
"battery.level"="רמת סוללה";
|
||||
"ble.name"="שם בלוטוס";
|
||||
"ble.connection.timeout %d %@"="התחברות נכשלה לאחר %d נסיונות להתחבר ל%@. יתכן ויש צורך 'לשכוח' את המכשיר בהגדרות מכשיר > בלוטוס.";
|
||||
"ble.errorcode.6 %@"="%@ האפליקציה תנסה אוטומטית להתחבר מחדש למכשיר המועדף אם ייראה.";
|
||||
"ble.errorcode.14 %@"="%@ שגיאה זו בדרך כלל אינה ניתנת לתיקון ללא שכחחת המכשיר בהגדרות מכשיר > בלוטוס ואז להתחבר מחדש למכשיר.";
|
||||
"ble.errorcode.pin %@"="%@ בבקשה נסה שנית להתחבר למכשיר ובדוק את הקוד.";
|
||||
"bluetooth"="בלוטוס";
|
||||
"bluetooth.off"="בלוטוס כבוי";
|
||||
"bluetooth.config"="הגדרות בלוטוס";
|
||||
"bluetooth.mode.randompin"="קוד אקראי";
|
||||
"bluetooth.mode.fixedpin"="קוד קבוע";
|
||||
"bluetooth.mode.nopin"="ללא קוד (פשוט עובד)";
|
||||
"bluetooth.pairingmode"="מצב הצמדה";
|
||||
"bluetooth.pin.validation"="קוד בלוטוס חייבת להיות בת 6 ספרות.";
|
||||
"bytes"="בייטים";
|
||||
"cancel"="בטל";
|
||||
"canned.messages"="הודעות קבועות";
|
||||
"canned.messages.config"="הגדרות הודעות קבועות";
|
||||
"canned.messages.preset.manual"="הגדרה ידנית";
|
||||
"canned.messages.preset.rakrotary"="RAK Rotary Encoder Module"; /* left untranslated for clarity */
|
||||
"canned.messages.preset.cardkb"="M5 Stack Card KB / RAK Keypad"; /* left untranslated for clarity */
|
||||
"channel"="ערוץ";
|
||||
"channel.role.disabled"="כבוי";
|
||||
"channel.role.primary"="עיקרי";
|
||||
"channel.role.secondary"="משני";
|
||||
"channel.utilization"="שימוש ערוץ";
|
||||
"channels"="ערוצים";
|
||||
"clear.app.data"="אפס הגדרות אפליקציה";
|
||||
"clear.log"="נקה";
|
||||
"close"="סגור";
|
||||
"config.power.settings"="Power";
|
||||
"config.power.title"="Power Config";
|
||||
"config.power.section.battery"="Battery";
|
||||
"config.power.section.sleep"="Sleep";
|
||||
"config.power.adc.override"="ADC Override";
|
||||
"config.power.adc.multiplier"="Multiplier";
|
||||
"config.power.ls.secs"="Light Sleep Interval";
|
||||
"config.power.min.wake.secs"="Minimum Wake Interval";
|
||||
"config.power.saving"="Power Saving";
|
||||
"config.power.saving.description"="Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora radio. Don't use this setting if you want to use your device with the phone apps or are using a device without a user button.";
|
||||
"config.power.shutdown.on.power.loss"="Shutdown on Power Loss";
|
||||
"config.power.shutdown.after.secs"="After";
|
||||
"config.power.wait.bluetooth.secs"="Bluetooth Off After";
|
||||
"config.ringtone"="RTTTL Ringtone";
|
||||
"config.ringtone.title"="Ringtone Config";
|
||||
"config.ringtone.label"="Ringtone Transfer Language";
|
||||
"config.ringtone.description"="Ringtone Transfer Language(RTTTL) Ringtone String used by supported buzzers in external notifications.";
|
||||
"config.module.paxcounter.settings"="PAX Counter";
|
||||
"config.module.paxcounter.title"="PAX Counter Config";
|
||||
"config.module.paxcounter.enabled.description"="When enabled the PAX Counter module counts the number of people passing by using WiFi and Bluetooth. Both WiFI and Bluetooth must be disabled for PAX counter to work.";
|
||||
"config.module.paxcounter.updateinterval"="Update Interval";
|
||||
"config.module.paxcounter.updateinterval.description"="How often we can send a message to the mesh when people are detected.";
|
||||
"config.save.confirm"="לאחר שמירת הגדרות המכשיר יתחיל מחדש.";
|
||||
"communicating"="מתקשר עם מכשיר. .";
|
||||
"connected.radio"="מכשיר מחובר";
|
||||
"connected"="מחובר בבלוטוס";
|
||||
"connecting"="מתחבר . .";
|
||||
"contacts"="אנשי קשר";
|
||||
"contacts %@"="אנשי קשר (%@)";
|
||||
"copy"="העתק";
|
||||
"current"="נוכחי";
|
||||
"default"="ברירת מחדל";
|
||||
"delete"="מחק";
|
||||
"detection.sensor"="חיישן זיהוי";
|
||||
"detection.sensor.config"="הגדרות חיישן זיהוי";
|
||||
"detection.sensor.log"="יומן חיישן זיהוי";
|
||||
"device"="מכשיר";
|
||||
"device.config"="הגדרות מכשיר";
|
||||
"device.configuration"="Device Configuration";
|
||||
"device.metrics.delete"="נקה יומן מכשיר?";
|
||||
"device.metrics.log"="יומן מכשיר";
|
||||
"device.role.client"="אפליקציה מחוברת או מכשיר תקשורת עצמאי.";
|
||||
"device.role.clientmute"="מכשיר שאינו מעביר הודעות ממכשירים אחרים הלאה.";
|
||||
"device.role.clienthidden"="מכשיר שרק משדר לפי צורך בכדי לחסוך בחשמל או לשמור על חשאיות.";
|
||||
"device.role.tracker"="משדר מיקום GPS בעדיפות גבוהה.";
|
||||
"device.role.lostandfound"="משדר מיקום כהודעה לערוץ ברירת מחדל לעיתים קבועות בכדי לסייע במציאת המכשיר.";
|
||||
"device.role.sensor"="משדר טלמטריה בעדיפות גבוהה.";
|
||||
"device.role.tak"="מותאם למערכת ATAK, מקטין תקשורת קבועה.";
|
||||
"device.role.taktracker"="Enables automatic TAK PLI broadcasts and reduces routine broadcasts.";
|
||||
"device.role.repeater"="מכשיר תשתית להרחבת המש על ידי העברת הודעות עם דאטה נוסף מינימלי.";
|
||||
"device.role.router"="מכשיר תשתית להרחבת המש על ידי העברת הודעות. מופיע ברשימת מכשירים.";
|
||||
"device.role.routerclient"="קומבינציה של ROUTER וCLIENT. לא למכשירים ניידים.";
|
||||
"direct.messages"="הודעה פרטית";
|
||||
"dismiss.keyboard"="סגור מקלדת";
|
||||
"display"="צג מכשיר";
|
||||
"display.config"="הגדרות צג";
|
||||
"distance"="מרחק";
|
||||
"disconnect"="התנתק";
|
||||
"echo"="הד";
|
||||
"email.address"="כתובת דואר אלקטרוני";
|
||||
"enabled"="מופעל";
|
||||
"encrypted"="מוצפן";
|
||||
"export"="Export";
|
||||
"external.notification"="נוטיפיקציה חיצונית";
|
||||
"external.notification.config"="הגדרות נוטיפיקציה חיצונית";
|
||||
"finish"="סיים";
|
||||
"firmware.version"="גרסת קושחה";
|
||||
"firmware.version.unsupported"="גרסת קושחה אינה נתמכת, לא ניתן להתחבר למכשיר.";
|
||||
"gas"="דלק";
|
||||
"gas.resistance"="Gas Resistance"; /* left untranslated for clarity */
|
||||
"generate.qr.code"="צור קוד QR";
|
||||
"gpsformat.dec"="פורמט קואורדינטות";
|
||||
"gpsformat.dms"="מעלות דקות שניות";
|
||||
"gpsformat.utm"="Universal Transverse Mercator"; /* left untranslated for clarity. A translation exists but is frankly indecipherable */
|
||||
"gpsformat.mgrs"="Military Grid Reference System"; /* left untranslated for clarity. A translation exists but is frankly indecipherable */
|
||||
"gpsformat.olc"="Open Location Code (aka Plus Codes)"; /* left untranslated for clarity. A translation exists but is frankly indecipherable */
|
||||
"gpsformat.osgr"="Ordnance Survey Grid Reference"; /* left untranslated for clarity. A translation exists but is frankly indecipherable */
|
||||
"gpsmode.disabled"="כבוי";
|
||||
"gpsmode.enabled"="מופעל";
|
||||
"gpsmode.notPresent"="לא קיים";
|
||||
"heard"="נשמע";
|
||||
"heard.last"="נשמע לאחרונה";
|
||||
"hybrid"="היברידי";
|
||||
"hybrid.flyover"="היברידי מלמעלה";
|
||||
"include"="כלול";
|
||||
"incomplete"="Incomplete";
|
||||
"inputevent.none"="ללא";
|
||||
"inputevent.up"="למעלה";
|
||||
"inputevent.down"="למטה";
|
||||
"inputevent.left"="שמאלה";
|
||||
"inputevent.right"="ימינה";
|
||||
"inputevent.select"="בחר";
|
||||
"inputevent.back"="אחרוה";
|
||||
"inputevent.cancel"="בטל";
|
||||
"interval.one.second"="שניה אחת";
|
||||
"interval.two.seconds"="שתי שניות";
|
||||
"interval.three.seconds"="שלוש שניות";
|
||||
"interval.four.seconds"="ארבע שניות";
|
||||
"interval.five.seconds"="חמש שניות";
|
||||
"interval.ten.seconds"="עשר שניות";
|
||||
"interval.fifteen.seconds"="חמש עשרה שניות";
|
||||
"interval.twenty.seconds"="עשרים שניות";
|
||||
"interval.twentyfive.seconds"="עשרים וחמש שניות";
|
||||
"interval.thirty.seconds"="שלושים שניות";
|
||||
"interval.fortyfive.seconds"="ארבעים וחמש שניות";
|
||||
"interval.one.minute"="דקה אחת";
|
||||
"interval.two.minutes"="שתי דקות";
|
||||
"interval.five.minutes"="חמש דקות";
|
||||
"interval.ten.minutes"="עשר דקות";
|
||||
"interval.fifteen.minutes"="חמש עשרה דקות";
|
||||
"interval.thirty.minutes"="שלושים דקות";
|
||||
"interval.one.hour"="שעה אחת";
|
||||
"interval.two.hours"="שעתיים";
|
||||
"interval.three.hours"="שלוש שעות";
|
||||
"interval.four.hours"="ארבע שעות";
|
||||
"interval.five.hours"="חמש שעות";
|
||||
"interval.six.hours"="שש שעות";
|
||||
"interval.twelve.hours"="שניים עשר שעות";
|
||||
"interval.eighteen.hours"="שמונה עשר שעות";
|
||||
"interval.twentyfour.hours"="עשרים וארבע שעות";
|
||||
"interval.thirtysix.hours"="שלושים ושש שעות";
|
||||
"interval.fortyeight.hours"="ארבעים ושמונה שעות";
|
||||
"interval.seventytwo.hours"="שבעים ושתיים שעות";
|
||||
"keyboard.type"="סוג מקלדת";
|
||||
"logging"="רישום";
|
||||
"log.time"="Time";
|
||||
"log.subsystem"="Subsystem";
|
||||
"log.process"="Process";
|
||||
"log.category"="Category";
|
||||
"log.level"="Level";
|
||||
"log.message"="Message";
|
||||
"lora"="לורה";
|
||||
"lora.config"="הגדרות לורה";
|
||||
"map"="מפת מש";
|
||||
"map.type"="סוג ברירת מחדל";
|
||||
"map.centering"="מכשיר במרכז";
|
||||
"map.tiles.delete"="מחק כל חלקי מפה שמורים";
|
||||
"map.recentering"="מרכז מפה אוטומטית";
|
||||
"map.use.legacy"="השתמש במפה מדור קודם";
|
||||
"map.usertrackingmode"="מצב מעקב אחר משתמש";
|
||||
"map.usertrackingmode.follow"="עקוב";
|
||||
"map.usertrackingmode.followwithheading"="עקוב עם כיוון";
|
||||
"map.usertrackingmode.none"="ללא";
|
||||
"mesh.live.activity"="פעילות מש חיה";
|
||||
"mesh.log"="יומן מש";
|
||||
"mesh.log.ambientlighting.config %@"="הגדרות מודולת תאורת סביבה התקבלו: %@";
|
||||
"mesh.log.bluetooth.config %@"="הגדרות בלוטוס התקבלו: %@";
|
||||
"mesh.log.cannedmessage.config %@"="הגדרות מודולת תגובות שמורות התקבלו: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="התבקשו הודעות מודולת הודעות שמורות עבור מכשיר: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="הודעות עבור הודעות שמורות התקבלו מ-%@";
|
||||
"mesh.log.channel.sent %@ %d"="נשלח ערוץ עבור: %@ אינדקס ערוצים %d";
|
||||
"mesh.log.channel.received %d %@"="ערוץ %d התקבל מ-%@";
|
||||
"mesh.log.device.config %@"="הגדרות מכשיר התקבלו: %@";
|
||||
"mesh.log.display.config %@"="הגדרות תצוגה התקבלו: %@";
|
||||
"mesh.log.devicemetadata %@"="מבקש מטא-דאטה עבור %@";
|
||||
"mesh.log.device.metadata.received %@"="מטא-דאטה של מכשיר התקבל מ-%@";
|
||||
"mesh.log.detectionsensor.config %@"="הגדרות מודולת חיישן זיהוי התקבלו: %@";
|
||||
"mesh.log.externalnotification.config %@"="הגדרות מודולת נוטיפיקציה חיצונית התקבלו: %@";
|
||||
"mesh.log.lora.config %@"="הגדרות לורה התקבלו: %@";
|
||||
"mesh.log.lora.config.sent %@"="נשלחו הגדרות לורה עבור: %@";
|
||||
"mesh.log.mqtt.config %@"="הגדרות מודולת MQTT התקבלו: %@";
|
||||
"mesh.log.myinfo %@"="MyInfo התקבל: %@";
|
||||
"mesh.log.network.config %@"="הגדרות רשת התקבלו: %@";
|
||||
"mesh.log.nodeinfo.received %@"="מידע אודות מכשיר התקבל: %@";
|
||||
"mesh.log.paxcounter %@"="PAX Counter packet received for: %@";
|
||||
"mesh.log.position.config %@"="הגדרות מיקום התקבלו: %@";
|
||||
"mesh.log.position.received %@"="הודעת מיקום התקבלו מ-%@";
|
||||
"mesh.log.rangetest.config %@"="הגדרות מודולת בדיקת טווח התקבלו: %@";
|
||||
"mesh.log.ringtone.config %@"="הגדרות RTTTL רינגטון התקבלו: %@";
|
||||
"mesh.log.routing.message %@ %@"="התקבל מסלול עבור בקשה: %@ מצב שליחה: %@";
|
||||
"mesh.log.serial.config %@"="הגדרות מודולת תקשורת סיריאלית התקבלו: %@";
|
||||
"mesh.log.sharelocation %@"="נשלח מיקום ממכשיר האפל למכשיר המשטסטיק: %@";
|
||||
"mesh.log.storeforward.config %@"="הגדרות מודולת שמירה ושליחה התקבלו: %@";
|
||||
"mesh.log.telemetry.config %@"="הגדרות מודולת טלמטריה התקבלו: %@";
|
||||
"mesh.log.telemetry.received %@"="התקבל טלמטריה עבור: %@";
|
||||
"mesh.log.textmessage.received"="הודעת טקסט התקבלה.";
|
||||
"mesh.log.textmessage.send.failed %@"="שליחת הודעה נכשלה, אין חיבוריות ל-%@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="נשלחה הודעה %@ מ-%@ ל-%@";
|
||||
"mesh.log.traceroute.received.direct %@"="בקשת בדיקת מסלול נשלחה למכשיר: %@ התקבל ישירות.";
|
||||
"mesh.log.traceroute.received.route %@"="בקשת בדיקת מסלול הצליחה: %@";
|
||||
"mesh.log.traceroute.sent %@"="נשלחה בקשת בדיקת מסלול למכשיר: %@";
|
||||
"mesh.log.wantconfig %@"="שולח בקשת הגדרות ל-%@";
|
||||
"mesh.log.waypoint.sent %@"="נשלחה נקודת ציון מ-%@";
|
||||
"mesh.log.waypoint.received %@"="נקודת ציון התקבלה מ-%@";
|
||||
"message"="הודעה";
|
||||
"message.details"="פרטי הודעה";
|
||||
"messages"="הודעות";
|
||||
"mode"="מצב";
|
||||
"module.configuration"="הגדרות מודולה";
|
||||
"mqtt"="MQTT"; /*left untranslated for clarity */
|
||||
"mqtt.connect"="התחבר ל-MQTT";
|
||||
"mqtt.config"="הגדרות MQTT";
|
||||
"mqtt.clientproxy"="MQTT Client Proxy"; /*left untranslated for clarity */
|
||||
"mqtt.disconnect"="התנתק מ-MQTT";
|
||||
"mqtt.username"="שם משתמש";
|
||||
"name"="שם";
|
||||
"network"="רשת";
|
||||
"network.config"="הגדרות רשת";
|
||||
"nodes"="מכשירים";
|
||||
"nodes %@"="מכשירים (%@)";
|
||||
"nodelist.filter.distance %@"="up to %@ away";
|
||||
"no.nodes"="לא נמצאו מכשירי משטסטיק";
|
||||
"not.connected"="אין מכשיר מחובר";
|
||||
"numbers.punctuation"="מספרים וסימני פיסוק ";
|
||||
"off"="כבוי";
|
||||
"offline"="מנותק";
|
||||
"on.boot"="רק בעת הדלקה";
|
||||
"options"="הגדרות";
|
||||
"password"="סיסמא";
|
||||
"pause"="הפסק";
|
||||
"phone.gps"="GPS מהטלפון";
|
||||
"phone.gps.interval.description"="כל כמה זמן מכשיר הטלפון ישלח את מיקומך למכשיר המשטסטיק. עדכוני מיקום למש מנוהלות על ידי המכשיר.";
|
||||
"position"="מיקום";
|
||||
"position.config"="הגדרות מיקום";
|
||||
"preferred.radio"="רדיו מועדף";
|
||||
"radio.configuration"="הגדרות רדיו";
|
||||
"range.test"="בדיקת טווח";
|
||||
"range.test.blocked"="חסום בדיקות טווח";
|
||||
"range.test.config"="הגדרות בדיקת טווח";
|
||||
"reply"="תגובה";
|
||||
"reboot"="התחל מחדש";
|
||||
"reboot.node"="התחל מכשיר מחדש??";
|
||||
"received.ack"="התקבל אישור מסירה";
|
||||
"received.ack.real"="התקבל אישור מסירה מהנמען";
|
||||
"resume"="החל מחדש";
|
||||
"ringtone"="רינגטון";
|
||||
"ringtone.config"="הגדרות רינגטון";
|
||||
"route.recorder"="מקליט מסלול";
|
||||
"routes"="מסלולים";
|
||||
"routing.acknowledged"="מאשר";
|
||||
"routing.noroute"="אין מסלול";
|
||||
"routing.gotnak"="התקבל אישור מסירה שלילי";
|
||||
"routing.timeout"="נגמר הזמן";
|
||||
"routing.nointerface"="אין ממשק";
|
||||
"routing.maxretransmit"="הגיע למקסימום השליחות מדש";
|
||||
"routing.nochannel"="אין ערוץ";
|
||||
"routing.toolarge"="ההודעה ארוכה/גדולה מידי";
|
||||
"routing.noresponse"="אין תגובה";
|
||||
"routing.dutycyclelimit"="הגיע למקסימום שימוש אזורי לשעה זו";
|
||||
"routing.badRequest"="בקשה לא תקינה";
|
||||
"routing.notauthorized"="לא מאושר";
|
||||
"satellite"="לווין";
|
||||
"satellite.flyover"="לווין בשמיים";
|
||||
"save"="שמור";
|
||||
"save.config %@"="שמור הגדרות עבור %@";
|
||||
"serial"="סיריאלי";
|
||||
"serial.config"="'הגדרות מודולה 'סיריאלי";
|
||||
"serial.mode.default"="ברירת מחדל";
|
||||
"serial.mode.simple"="פשוט";
|
||||
"serial.mode.proto"="Protobufs"; /*left untranslated for clarity */
|
||||
"serial.mode.txtmsg"="הודעת טקסט";
|
||||
"serial.mode.nmea"="מיקומי NMEA";
|
||||
"settings"="הגדרות";
|
||||
"share.channels"="שתף ערוצים באמצעות קוד QR";
|
||||
"share.position"="שתף מיקום";
|
||||
"subscribed"="מחובר למש";
|
||||
"select.contact"="בחר איש קשר";
|
||||
"select.node"="בחר מכשיר";
|
||||
"select.menu.item"="בחר מהתפריט";
|
||||
"set.region"="בחר אזור לורה";
|
||||
"standard"="סטנדרטי";
|
||||
"standard.muted"="סטנדרתי-השתק";
|
||||
"start"="החל";
|
||||
"storeforward"="שמירה ושליחה";
|
||||
"storeforward.config"="הגדרות שמירה ושליחה";
|
||||
"storeforward.heartbeat"="שלח דופק";
|
||||
"ssid"="שם רשת וויפי";
|
||||
"tapback"="תגובה מהירה";
|
||||
"tapback.heart"="לב";
|
||||
"tapback.thumbsup"="אגודל למעלה";
|
||||
"tapback.thumbsdown"="אגודל למטה";
|
||||
"tapback.haha"="חחח";
|
||||
"tapback.exclamation"="סימן קריאה";
|
||||
"tapback.question"="סימן שאלה";
|
||||
"tapback.poop"="חרא";
|
||||
"tapback.wave"="Wave";
|
||||
"telemetry"="טלמטריה (חיישנים)";
|
||||
"telemetry.config"="הגדרות טלמטריה";
|
||||
"timeout"="זמן קצוב";
|
||||
"timestamp"="שעה/תאריך";
|
||||
"tip.bluetooth.connect.title"="מכשיר מחובר";
|
||||
"tip.bluetooth.connect.message"="מראה מידע אודות מכשיר המשטסטיק המחובר כעת לבלוטוס. ניתן לגרור שמאלה להתנתקות או לחיצה ארוכה לראות סטטיסטיקה או להתחיל פעילות.";
|
||||
"tip.channel.admin.title"="Admin Channel";
|
||||
"tip.channel.admin.message"="Admin channel detected: Select a node from the drop down to manage connected or remote devices.";
|
||||
"tip.channels.create.title"="Manage Channels";
|
||||
"tip.channels.create.message"="Most data on your mesh is sent over the primary channel. You can set up secondary channels to create additional messaging groups secured by their own key. [Channel config tips](https://meshtastic.org/docs/configuration/radio/channels/)";
|
||||
"tip.channels.share.title"="משתף ערוצי משטסטיק";
|
||||
"tip.channels.share.message"="במשטסטיק יש עד 8 ערוצים. הראשון הינו הראשי והינו היכן שרוב הפעילות מתבצעת והכרחי. אם לא תשתף את הערוץ הראשי שלך הערוץ הראשון שלך נהיה הערוץ הראשי ברשת השניה. הוא מדבר בערוץ הראשי שלו במשני שלך. ערוץ בעל השם 'admin' הינו לשליטה מרחוק. ערוצים נוספים הינם לקבוצות פרטיות, כל אחת עם מפתח הצפנה משלה.";
|
||||
"tip.messages.title"="הודעות";
|
||||
"tip.messages.message"="ניתן לשלוח הודעות ערוץ (קבוצות צ'אט) והודעות פרטיות. על הודעה ניתן לעשות לחיצה ארוכה בכדי לראות פעולות אפשריות כגון העתק, הגב, תגובה מהירה, מחק ובנוסף לראות מצב שליחה.";
|
||||
"twitter"="טוויטר";
|
||||
"unknown"="לא ידוע";
|
||||
"unknown.age"="גיל לא ידוע";
|
||||
"unset"="לא נקבע";
|
||||
"update.firmware"="עדכן קושחה";
|
||||
"update.interval"="זמן בין עדכונים";
|
||||
"user"="משתמש";
|
||||
"user.details"="פרטי משתמש";
|
||||
"voltage"="וולטז'";
|
||||
"waiting"="ממתין. . .";
|
||||
"appsettings.newNodeNotifications"="New Node Notifications";
|
||||
|
|
@ -1,352 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Copyright(r) Garth Vander Houwen 12/12/22.
|
||||
|
||||
Created by Shiv Kokroo ( @kokroo ) on 27/08/23, with contributions from @Marek_SP5ISZ
|
||||
|
||||
*/
|
||||
"about"="O programie";
|
||||
"about.meshtastic"="O Meshtastic";
|
||||
"activity"="Activity";
|
||||
"admin"="Administrator";
|
||||
"admin.log"="Log administratora";
|
||||
"ago"="temu";
|
||||
"airtime"="Czas nadawania";
|
||||
"always.on"="Zawsze włączone";
|
||||
"ambient.lighting"="Ambient Lighting";
|
||||
"ambient.lighting.config"="Ambient Lighting Config";
|
||||
"appsettings"="Ustawienia aplikacji";
|
||||
"appsettings.provide.location"="Udostępnij lokalizację";
|
||||
"appsettings.smartposition"="Smart Position";
|
||||
"are.you.sure"="Jesteś pewny?";
|
||||
"ascii.capable"="Zgodny z ASCII";
|
||||
"available.radios"="Dostępne radia";
|
||||
"automatic.detection"="Automatyczne wykrywanie";
|
||||
"battery.level"="Poziom naładowania baterii";
|
||||
"ble.name"="Nazwa BLE";
|
||||
"ble.connection.timeout %d %@"="Połączenie nie powiodło się po %d próbach połączenia z %@. Zapomnij o urządzeniu w Ustawienia > Bluetooth.";
|
||||
"ble.errorcode.6 %@"="%@ Aplikacja automatycznie ponownie połączy się z preferowanym radiem, jeśli wróci w zasięg.";
|
||||
"ble.errorcode.14 %@"="%@ Ten błąd zwykle nie może być naprawiony bez zapomnienia urządzenia w Ustawienia > Bluetooth i ponownego połączenia z radiem.";
|
||||
"ble.errorcode.pin %@"="%@ Spróbuj połączyć się ponownie i dokładnie sprawdź PIN.";
|
||||
"bluetooth"="Bluetooth";
|
||||
"bluetooth.off"="Bluetooth jest wyłączony";
|
||||
"bluetooth.config"="Konfiguracja Bluetooth";
|
||||
"bluetooth.mode.randompin"="Losowy PIN";
|
||||
"bluetooth.mode.fixedpin"="Stały PIN";
|
||||
"bluetooth.mode.nopin"="Brak PINu (po prostu działa)";
|
||||
"bluetooth.pairingmode"="Tryb parowania";
|
||||
"bluetooth.pin.validation"="Pin BLE musi mieć długość 6 cyfr.";
|
||||
"bytes"="Bajty";
|
||||
"cancel"="Anuluj";
|
||||
"canned.messages"="Gotowe wiadomości";
|
||||
"canned.messages.config"="Konfiguracja gotowych wiadomości";
|
||||
"canned.messages.preset.manual"="Konfiguracja ręczna";
|
||||
"canned.messages.preset.rakrotary"="Moduł kodera obrotowego RAK";
|
||||
"canned.messages.preset.cardkb"="M5 Stack Card KB / RAK Keypad";
|
||||
"channel"="Kanał";
|
||||
"channel.role.disabled"="Wyłączony";
|
||||
"channel.role.primary"="Podstawowy";
|
||||
"channel.role.secondary"="Wtórny";
|
||||
"channel.utilization"="Wykorzystanie kanału";
|
||||
"channels"="Kanały";
|
||||
"clear.app.data"="Wyczyść dane aplikacji";
|
||||
"clear.log"="Wyczyść";
|
||||
"close"="Zamknij";
|
||||
"config.power.settings"="Power";
|
||||
"config.power.title"="Power Config";
|
||||
"config.power.section.battery"="Battery";
|
||||
"config.power.section.sleep"="Sleep";
|
||||
"config.power.adc.override"="ADC Override";
|
||||
"config.power.adc.multiplier"="Multiplier";
|
||||
"config.power.ls.secs"="Light Sleep Interval";
|
||||
"config.power.min.wake.secs"="Minimum Wake Interval";
|
||||
"config.power.saving"="Power Saving";
|
||||
"config.power.saving.description"="Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora radio. Don't use this setting if you want to use your device with the phone apps or are using a device without a user button.";
|
||||
"config.power.shutdown.on.power.loss"="Shutdown on Power Loss";
|
||||
"config.power.shutdown.after.secs"="After";
|
||||
"config.power.wait.bluetooth.secs"="Bluetooth Off After";
|
||||
"config.ringtone"="RTTTL Ringtone";
|
||||
"config.ringtone.title"="Ringtone Config";
|
||||
"config.ringtone.label"="Ringtone Transfer Language";
|
||||
"config.ringtone.description"="Ringtone Transfer Language(RTTTL) Ringtone String used by supported buzzers in external notifications.";
|
||||
"config.module.paxcounter.settings"="PAX Counter";
|
||||
"config.module.paxcounter.title"="PAX Counter Config";
|
||||
"config.module.paxcounter.enabled.description"="When enabled the PAX Counter module counts the number of people passing by using WiFi and Bluetooth. Both WiFI and Bluetooth must be disabled for PAX counter to work.";
|
||||
"config.module.paxcounter.updateinterval"="Update Interval";
|
||||
"config.module.paxcounter.updateinterval.description"="How often we can send a message to the mesh when people are detected.";
|
||||
"config.save.confirm"="Po zapisaniu wartości konfiguracji węzeł zostanie zrestartowany.";
|
||||
"communicating"="Komunikowanie z urządzeniem. .";
|
||||
"connected.radio"="Podłączone radio";
|
||||
"connected"="Podłączony";
|
||||
"connecting"="Łączenie . .";
|
||||
"contacts"="Kontakty";
|
||||
"contacts %@"="Kontakty (%@)";
|
||||
"copy"="Kopiuj";
|
||||
"current"="Bieżący";
|
||||
"default"="Domyślny";
|
||||
"delete"="Usuń";
|
||||
"detection.sensor"="Detection Sensor";
|
||||
"device"="Urządzenie";
|
||||
"device.config"="Konfiguracja urządzenia";
|
||||
"device.configuration"="Device Configuration";
|
||||
"device.metrics.delete"="Usunąć wszystkie metryki urządzenia?";
|
||||
"device.metrics.log"="Dziennik metryk urządzenia";
|
||||
"device.role.client"="Klient (domyślnie) - Klient połączony z aplikacją.";
|
||||
"device.role.clientmute"="Wyciszenie klienta - To samo, co klient, z wyjątkiem pakietów, które nie przeskakują przez ten węzeł, nie przyczynia się do routingu pakietów dla siatki.";
|
||||
"device.role.clienthidden"=" Used for nodes that \"only speak when spoken to\" Turns all of the routine broadcasts but allows for ad-hoc communication. Still rebroadcasts, but with local only rebroadcast mode (known meshes only). Can be used for private operation or to dramatically reduce airtime / power consumption.";
|
||||
"device.role.lostandfound"="Used to automatically send a text message to the mesh with the current position of the device on a frequent interval: \"I'm lost! Position: lat / long\"";
|
||||
"device.role.router"="Router - Pakiety siatki będą preferować trasowanie przez ten węzeł. Zakłada, że urządzenie będzie działać samodzielnie, umieszczone w miejscu z przewagą zasięgu. UWAGA: Radia BLE/Wi-Fi i ekran OLED zostaną uśpione.";
|
||||
"device.role.routerclient"="Router Client - Hybryda ról klienta i routera. Podobnie jak w przypadku routera, z tym że Router Client może być używany zarówno jako router, jak i klient połączony z aplikacją. Radia BLE/Wi-Fi i ekran OLED nie zostaną uśpione.";
|
||||
"device.role.repeater"="Przekaźnik - Pakiety siatki będą preferować trasowanie przez ten węzeł. Ta rola eliminuje niepotrzebny nadmiar, taki jak NodeInfo, DeviceTelemetry i inne pakiety siatki, skutkując tym, że urządzenie nie będzie widoczne jako część sieci. Proszę zobaczyć tryb Rebroadcast dla dodatkowych ustawień specyficznych dla tej roli.";
|
||||
"device.role.tracker"="Tracker - Do użytku z urządzeniami przeznaczonymi jako śledzenie GPS. Pakiety pozycyjne wysyłane z tego urządzenia będą miały wyższy priorytet, z nadawaniem pozycji co dwie minuty. Inteligentna transmisja pozycji będzie domyślnie wyłączona.";
|
||||
"device.role.lostandfound"="Broadcasts location as message to default channel regularly for to assist with device recovery.";
|
||||
"device.role.sensor"="Broadcasts telemetry packets as priority.";
|
||||
"device.role.tak"="Optimized for ATAK system communication, reduces routine broadcasts.";
|
||||
"device.role.taktracker"="Enables automatic TAK PLI broadcasts and reduces routine broadcasts.";
|
||||
"direct.messages"="Bezpośrednie Wiadomości";
|
||||
"dismiss.keyboard"="Zamknij";
|
||||
"display"="Wyświetlacz (Ekran Urządzenia)";
|
||||
"display.config"="Konfiguracja Wyświetlacza";
|
||||
"distance"="Odległość";
|
||||
"disconnect"="Rozłącz";
|
||||
"echo"="Echo";
|
||||
"email.address"="Adres Email";
|
||||
"enabled"="Włączony";
|
||||
"encrypted"="Zaszyfrowany";
|
||||
"export"="Export";
|
||||
"external.notification"="Zewnętrzne Powiadomienie";
|
||||
"external.notification.config"="Konfiguracja Zewnętrznego Powiadomienia";
|
||||
"finish"="Finish";
|
||||
"firmware.version"="Wersja Oprogramowania";
|
||||
"firmware.version.unsupported"="Wykryto nieobsługiwany wersję oprogramowania, brak możliwości połączenia z urządzeniem.";
|
||||
"gas"="Gaz";
|
||||
"gas.resistance"="Odporność na Gaz";
|
||||
"generate.qr.code"="Generuj Kod QR";
|
||||
"gpsformat.dec"="Format Dziesiętny Stopni";
|
||||
"gpsformat.dms"="Stopnie Minuty Sekundy";
|
||||
"gpsformat.utm"="Uniwersalny Układ Transwersalny Mercatora";
|
||||
"gpsformat.mgrs"="Wojskowa siatka odniesienia";
|
||||
"gpsformat.olc"="Otwarty Kod Lokalizacji (tzw. Plus Kody)";
|
||||
"gpsformat.osgr"="Brytyjski Układ Odniesienia";
|
||||
"heard"="Usłyszano";
|
||||
"heard.last"="Ostatnio Słyszane";
|
||||
"hybrid"="Hybrydowy";
|
||||
"hybrid.flyover"="Hybrydowy Przelot";
|
||||
"include"="Dołącz";
|
||||
"incomplete"="Incomplete";
|
||||
"inputevent.none"="Brak";
|
||||
"inputevent.up"="W Górę";
|
||||
"inputevent.down"="W Dół";
|
||||
"inputevent.left"="W Lewo";
|
||||
"inputevent.right"="W Prawo";
|
||||
"inputevent.select"="Wybierz";
|
||||
"inputevent.back"="Wstecz";
|
||||
"inputevent.cancel"="Anuluj";
|
||||
"interval.one.second"="Jedna Sekunda";
|
||||
"interval.two.seconds"="Dwie Sekundy";
|
||||
"interval.three.seconds"="Trzy Sekundy";
|
||||
"interval.four.seconds"="Cztery Sekundy";
|
||||
"interval.five.seconds"="Pięć Sekund";
|
||||
"interval.ten.seconds"="Dziesięć Sekund";
|
||||
"interval.fifteen.seconds"="Piętnaście Sekund";
|
||||
"interval.twenty.seconds"="Dwadzieścia Sekund";
|
||||
"interval.twentyfive.seconds"="Dwadzieścia Pięć Sekund";
|
||||
"interval.thirty.seconds"="Trzydzieści Sekund";
|
||||
"interval.fortyfive.seconds"="Czterdzieści Pięć Sekund";
|
||||
"interval.one.minute"="Jedna Minuta";
|
||||
"interval.two.minutes"="Dwie Minuty";
|
||||
"interval.five.minutes"="Pięć Minut";
|
||||
"interval.ten.minutes"="Dziesięć Minut";
|
||||
"interval.fifteen.minutes"="Piętnaście Minut";
|
||||
"interval.thirty.minutes"="Trzydzieści Minut";
|
||||
"interval.one.hour"="Jedna Godzina";
|
||||
"interval.two.hours"="Dwie Godziny";
|
||||
"interval.three.hours"="Trzy Godziny";
|
||||
"interval.four.hours"="Cztery Godziny";
|
||||
"interval.five.hours"="Pięć Godzin";
|
||||
"interval.six.hours"="Sześć Godzin";
|
||||
"interval.twelve.hours"="Dwanaście Godzin";
|
||||
"interval.eighteen.hours"="Osiemnaście Godzin";
|
||||
"interval.twentyfour.hours"="Dwadzieścia Cztery Godziny";
|
||||
"interval.thirtysix.hours"="Trzydzieści Sześć Godzin";
|
||||
"interval.fortyeight.hours"="Czterdzieści Osiem Godzin";
|
||||
"interval.seventytwo.hours"="Siedemdziesiąt Dwie Godziny";
|
||||
"keyboard.type"="Typ Klawiatury";
|
||||
"logging"="Rejestracja";
|
||||
"log.time"="Time";
|
||||
"log.subsystem"="Subsystem";
|
||||
"log.process"="Process";
|
||||
"log.category"="Category";
|
||||
"log.level"="Level";
|
||||
"log.message"="Message";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="Konfiguracja LoRa";
|
||||
"map"="Mapa Sieci";
|
||||
"map.type"="Domyślny Typ";
|
||||
"map.centering"="Tryb Wyśrodkowania";
|
||||
"map.tiles.delete"="Usuń Wszystkie Kafle Mapy";
|
||||
"map.recentering"="Automatyczne Wyśrodkowywanie";
|
||||
"map.use.legacy"="Use Legacy Mesh Map";
|
||||
"map.usertrackingmode"="Tryb śledzenia użytkownika";
|
||||
"map.usertrackingmode.follow"="Śledź";
|
||||
"map.usertrackingmode.followwithheading"="Śledź z kierunkiem";
|
||||
"map.usertrackingmode.none"="Brak";
|
||||
"mesh.live.activity"="Aktywność na Żywo";
|
||||
"mesh.log"="Dziennik Sieci";
|
||||
"mesh.log.ambientlighting.config %@"="Ambient Lighting module config received: %@";
|
||||
"mesh.log.bluetooth.config %@"="Otrzymano konfigurację Bluetooth: %@";
|
||||
"mesh.log.cannedmessage.config %@"="Otrzymano konfigurację modułu wiadomości gotowych: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="Zażądano Wiadomości z Modułu Wiadomości Gotowych dla węzła: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="Otrzymano Wiadomości Gotowe Dla: %@";
|
||||
"mesh.log.channel.sent %@ %d"="Wysłano kanał dla: %@ Indeks kanału %d";
|
||||
"mesh.log.channel.received %d %@"="Odebrano kanał %d od: %@";
|
||||
"mesh.log.device.config %@"="Otrzymano konfigurację urządzenia: %@";
|
||||
"mesh.log.display.config %@"="Otrzymano konfigurację wyświetlacza: %@";
|
||||
"mesh.log.devicemetadata %@"="Żądanie metadanych urządzenia dla %@";
|
||||
"mesh.log.device.metadata.received %@"="Otrzymano metadane urządzenia od: %@";
|
||||
"mesh.log.detectionsensor.config %@"="Detection Sensor module config received: %@";
|
||||
"mesh.log.externalnotification.config %@"="Otrzymano konfigurację modułu zewnętrznych powiadomień: %@";
|
||||
"mesh.log.lora.config %@"="Otrzymano konfigurację LoRa: %@";
|
||||
"mesh.log.lora.config.sent %@"="Wysłano konfigurację LoRa dla: %@";
|
||||
"mesh.log.mqtt.config %@"="Otrzymano konfigurację modułu MQTT: %@";
|
||||
"mesh.log.myinfo %@"="Otrzymano Moje Informacje: %@";
|
||||
"mesh.log.network.config %@"="Odebrano konfigurację sieci: %@";
|
||||
"mesh.log.nodeinfo.received %@"="Odebrano informacje o węźle dla: %@";
|
||||
"mesh.log.paxcounter %@"="PAX Counter packet received for: %@";
|
||||
"mesh.log.position.config %@"="Odebrano konfigurację pozycji: %@";
|
||||
"mesh.log.position.received %@"="Odebrano pakiet pozycji od węzła: %@";
|
||||
"mesh.log.rangetest.config %@"="Odebrano konfigurację modułu testu zasięgu: %@";
|
||||
"mesh.log.ringtone.config %@"="Odebrano konfigurację dzwonka RTTTL: %@";
|
||||
"mesh.log.routing.message %@ %@"="Odebrano trasowanie dla RequestID: %@ Ack Status: %@";
|
||||
"mesh.log.serial.config %@"="Odebrano konfigurację modułu szeregowego: %@";
|
||||
"mesh.log.sharelocation %@"="Wysłano pakiet pozycji z GPS urządzenia Apple do węzła: %@";
|
||||
"mesh.log.storeforward.config %@"="Store & Forward module config received: %@";
|
||||
"mesh.log.telemetry.config %@"="Odebrano konfigurację modułu telemetrii: %@";
|
||||
"mesh.log.telemetry.received %@"="Telemetria odebrana dla: %@";
|
||||
"mesh.log.textmessage.received"="Wiadomość odebrana z aplikacji do wysyłania wiadomości tekstowych.";
|
||||
"mesh.log.textmessage.send.failed %@"="Nieudane wysłanie wiadomości, brak prawidłowego połączenia z %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="Wysłano wiadomość %@ od %@ do %@";
|
||||
"mesh.log.traceroute.received.direct %@"="Żądanie śledzenia trasy wysłane do węzła: %@ zostało odebrane bezpośrednio.";
|
||||
"mesh.log.traceroute.received.route %@"="Żądanie śledzenia trasy zwrócone: %@";
|
||||
"mesh.log.traceroute.sent %@"="Wysłano żądanie śledzenia trasy do węzła: %@";
|
||||
"mesh.log.wantconfig %@"="Wydawanie Want Config to %@";
|
||||
"mesh.log.waypoint.sent %@"="Wysłano pakiet punktu orientacyjnego z: %@";
|
||||
"mesh.log.waypoint.received %@"="Odebrano pakiet punktu orientacyjnego od węzła: %@";
|
||||
"message"="Wiadomość";
|
||||
"message.details"="Szczegóły wiadomości";
|
||||
"messages"="Wiadomości";
|
||||
"mode"="Tryb";
|
||||
"module.configuration"="Konfiguracja modułu";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="Connect to MQTT";
|
||||
"mqtt.config"="Konfiguracja MQTT";
|
||||
"mqtt.clientproxy"="Klient Proxy MQTT";
|
||||
"mqtt.disconnect"="Disconnect from MQTT";
|
||||
"mqtt.username"="Nazwa użytkownika";
|
||||
"name"="Nazwa";
|
||||
"network"="Sieć";
|
||||
"network.config"="Konfiguracja sieci";
|
||||
"nodes %@"="Węzły (%@)";
|
||||
"nodelist.filter.distance %@"="up to %@ away";
|
||||
"no.nodes"="Nie znaleziono węzłów Meshtastic";
|
||||
"not.connected"="Brak podłączonych urządzeń";
|
||||
"numbers.punctuation"="Cyfry i interpunkcja";
|
||||
"off"="Wyłączony";
|
||||
"offline"="Offline";
|
||||
"on.boot"="Tylko przy uruchomieniu";
|
||||
"options"="Opcje";
|
||||
"password"="Hasło";
|
||||
"pause"="Pause";
|
||||
"phone.gps"="GPS telefonu";
|
||||
"phone.gps.interval.description"="Jak często Twój telefon będzie wysyłał swoją lokalizację do urządzenia, aktualizacje lokalizacji w sieci są zarządzane przez urządzenie.";
|
||||
"position"="Pozycja";
|
||||
"position.config"="Konfiguracja pozycji";
|
||||
"preferred.radio"="Preferowane radio";
|
||||
"radio.configuration"="Konfiguracja radia";
|
||||
"range.test"="Test zasięgu";
|
||||
"range.test.blocked"="Block Range Test";
|
||||
"range.test.config"="Konfiguracja testu zasięgu";
|
||||
"reply"="Odpowiedz";
|
||||
"reboot"="Uruchom ponownie";
|
||||
"reboot.node"="Uruchomić ponownie węzeł?";
|
||||
"received.ack"="Odebrano potwierdzenie";
|
||||
"received.ack.real"="Odbiorca potwierdzenia";
|
||||
"resume"="Resume";
|
||||
"ringtone"="Dzwonek";
|
||||
"ringtone.config"="Konfiguracja dzwonka";
|
||||
"route.recorder"="Route Recorder";
|
||||
"routes"="Routes";
|
||||
"routing.acknowledged"="Potwierdzono";
|
||||
"routing.noroute"="Brak trasy";
|
||||
"routing.gotnak"="Otrzymano negatywne potwierdzenie";
|
||||
"routing.timeout"="Limit czasu";
|
||||
"routing.nointerface"="Brak interfejsu";
|
||||
"routing.maxretransmit"="Osiągnięto limit retransmisji";
|
||||
"routing.nochannel"="Brak kanału";
|
||||
"routing.toolarge"="Pakiet jest zbyt duży";
|
||||
"routing.noresponse"="Brak odpowiedzi";
|
||||
"routing.dutycyclelimit"="Osiągnięto regionalny limit cyklu pracy";
|
||||
"routing.badRequest"="Złe żądanie";
|
||||
"routing.notauthorized"="Nieautoryzowany";
|
||||
"satellite"="Satelita";
|
||||
"satellite.flyover"="Przelot satelity";
|
||||
"save"="Zapisz";
|
||||
"save.config %@"="Zapisz konfigurację dla %@";
|
||||
"serial"="Seryjny";
|
||||
"serial.config"="Konfiguracja seryjna";
|
||||
"serial.mode.default"="Domyślny";
|
||||
"serial.mode.simple"="Prosty";
|
||||
"serial.mode.proto"="Protobufy";
|
||||
"serial.mode.txtmsg"="Wiadomość tekstowa";
|
||||
"serial.mode.nmea"="Pozycje NMEA";
|
||||
"settings"="Ustawienia";
|
||||
"share.channels"="Udostępnij kod QR kanałów";
|
||||
"share.position"="Udostępnij pozycję";
|
||||
"subscribed"="Zapisano do siatki";
|
||||
"select.contact"="Wybierz kontakt";
|
||||
"select.node"="Wybierz węzeł";
|
||||
"select.menu.item"="Wybierz element z menu";
|
||||
"set.region"="Ustaw region LoRa";
|
||||
"standard"="Standardowy";
|
||||
"standard.muted"="Standardowy wyłączony";
|
||||
"start"="Start";
|
||||
"storeforward"="Store & Forward";
|
||||
"storeforward.config"="Store & Forward Config";
|
||||
"storeforward.heartbeat"="Send Heartbeat";
|
||||
"ssid"="SSID";
|
||||
"tapback"="Odpowiedź na stuknięcie";
|
||||
"tapback.heart"="Serce";
|
||||
"tapback.thumbsup"="Kciuk w górę";
|
||||
"tapback.thumbsdown"="Kciuk w dół";
|
||||
"tapback.haha"="HaHa";
|
||||
"tapback.exclamation"="Wykrzyknik";
|
||||
"tapback.question"="Znak zapytania";
|
||||
"tapback.poop"="Kupa";
|
||||
"tapback.wave"="Wave";
|
||||
"telemetry"="Telemetria (czujniki)";
|
||||
"telemetry.config"="Konfiguracja telemetrii";
|
||||
"timeout"="Limit czasu";
|
||||
"timestamp"="Znacznik czasu";
|
||||
"tip.bluetooth.connect.title"="Connected LoRa Radio";
|
||||
"tip.bluetooth.connect.message"="Shows information for the Lora radio currently connected via bluetooth. You can swipe left to disconnect the radio and long press to view stats or start the live activity.";
|
||||
"tip.channel.admin.title"="Admin Channel";
|
||||
"tip.channel.admin.message"="Admin channel detected: Select a node from the drop down to manage connected or remote devices.";
|
||||
"tip.channels.create.title"="Manage Channels";
|
||||
"tip.channels.create.message"="Most data on your mesh is sent over the primary channel. You can set up secondary channels to create additional messaging groups secured by their own key. [Channel config tips](https://meshtastic.org/docs/configuration/radio/channels/)";
|
||||
"tip.channels.share.title"="Sharing Meshtastic Channels";
|
||||
"tip.channels.share.message"="In a Meshtastic LoRa Mesh there are up to 8 channels. The first one is the Primary channel where most activity happens and is required. If you don't share your primary channel your first shared channel becomes the primary channel on the other network. It talks on its primary and your secondary channel. A channel with the name 'admin' controls nodes remotely. Other channels are for private groups, each with its own key.";
|
||||
"tip.messages.title"="Messages";
|
||||
"tip.messages.message"="You can send and receive channel (group chats) and direct messages. From any message you can long press to see available actions like copy, reply, tapback and delete as well as delivery details.";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="Nieznany";
|
||||
"unknown.age"="Nieznany wiek";
|
||||
"unset"="Nieustawiony";
|
||||
"update.firmware"="Zaktualizuj firmware";
|
||||
"update.interval"="Interwał aktualizacji";
|
||||
"user"="Użytkownik";
|
||||
"user.details"="Szczegóły użytkownika";
|
||||
"voltage"="Napięcie";
|
||||
"waiting"="Czekam. . .";
|
||||
"appsettings.newNodeNotifications"="New Node Notifications";
|
||||
|
|
@ -1,382 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Copyright©️ Garth Vander Houwen on 12/12/22. Translated from English to Portuguese by Philip Rosa-Leeke 2024
|
||||
|
||||
*/
|
||||
"about"="Sobre";
|
||||
"about.meshtastic"="Sobre Meshtastic";
|
||||
"activity"="Actividade";
|
||||
"admin"="Admin";
|
||||
"admin.log"="Log das Mensagens do Admin";
|
||||
"ago"="há";
|
||||
"airtime"="Tempo ao Ár";
|
||||
"always.on"="Sempre Ligado";
|
||||
"ambient.lighting"="Iluminação Ambiental";
|
||||
"ambient.lighting.config"="Configuração Iluminação Ambiental";
|
||||
"appsettings"="Definições do App";
|
||||
"appsettings.provide.location"="Partilha localização";
|
||||
"appsettings.smartposition"="Posição Inteligente";
|
||||
"are.you.sure"="Tem a certeza?";
|
||||
"ascii.capable"="Capacidade ASCII";
|
||||
"available.radios"="Rádios Disponíveis";
|
||||
"automatic.detection"="Deteção Automático";
|
||||
"battery.level"="Nível de Bataria";
|
||||
"ble.name"="Nome BLE";
|
||||
"ble.connection.timeout %d %@"="Falha de conexão após %d tentativas de conectar a %@. Você pode precisar esquecer seu dispositivo em Configurações > Bluetooth.";
|
||||
"ble.errorcode.6 %@"="%@ O App vai reconetar automaticamente ao rádio preferido se ele voltar ao alcance.";
|
||||
"ble.errorcode.14 %@"="%@ Esse erro geralmente não pode ser corrigido sem esquecer o dispositivo em Configurações > Bluetooth e reconetar ao rádio.";
|
||||
"ble.errorcode.pin %@"="%@ Por favor, tente conectar novamente e verifique cuidadosamente o PIN.";
|
||||
"bluetooth"="Bluetooth";
|
||||
"bluetooth.off"="Bluetooth está desligado";
|
||||
"bluetooth.config"="Configuração Bluetooth";
|
||||
"bluetooth.mode.randompin"="PIN Aleatório";
|
||||
"bluetooth.mode.fixedpin"="PIN fixo";
|
||||
"bluetooth.mode.nopin"="Sem PIN (Simplesmente Funciona)";
|
||||
"bluetooth.pairingmode"="Modo Pairing";
|
||||
"bluetooth.pin.validation"="O Pin do BLE deve ter 6 dígitos.";
|
||||
"bytes"="Bytes";
|
||||
"cancel"="Cancelar";
|
||||
"canned.messages"="Mensagens Enlatados";
|
||||
"canned.messages.config"="Configuração dos Mensagens Enlatados";
|
||||
"canned.messages.preset.manual"="Configuração Manual";
|
||||
"canned.messages.preset.rakrotary"="Module Codificador do RAK Rotary";
|
||||
"canned.messages.preset.cardkb"="M5 Stack Card KB / Teclado RAK";
|
||||
"channel"="Canal";
|
||||
"channel.role.disabled"="Desativado";
|
||||
"channel.role.primary"="Primário";
|
||||
"channel.role.secondary"="Secundária";
|
||||
"channel.utilization"="Utilização do Canal";
|
||||
"channels"="Canais";
|
||||
"clear.app.data"="Apagar os dados do App";
|
||||
"clear.log"="Apagar";
|
||||
"close"="Fechar";
|
||||
"config.power.settings"="Energia";
|
||||
"config.power.title"="Configuração de Energia";
|
||||
"config.power.section.battery"="Bataria";
|
||||
"config.power.section.sleep"="Dormir";
|
||||
"config.power.adc.override"="Substituir ADC";
|
||||
"config.power.adc.multiplier"="Multiplicador";
|
||||
"config.power.ls.secs"="Intervalo de Dormir Leve";
|
||||
"config.power.min.wake.secs"="Intervalo Mínimo de Despertar";
|
||||
"config.power.saving"="Poupar a Energia";
|
||||
"config.power.saving.description"="Vai por dormir o máximo possível, para o papel do rastreador e o papel do sensor isso incluirá também o rádio lora. Não use essa configuração se deseja usar seu dispositivo com os aplicativos do telefone ou está usando um dispositivo sem um botão do usuário.";
|
||||
"config.power.shutdown.on.power.loss"="Desligar em caso de Perda de Energia";
|
||||
"config.power.shutdown.after.secs"="Após";
|
||||
"config.power.wait.bluetooth.secs"="Desligar o Bluetooth Após";
|
||||
"config.ringtone"="Toque RTTTL";
|
||||
"config.ringtone.title"="Configuração de Toque";
|
||||
"config.ringtone.label"="dioma de Transferência de Toque";
|
||||
"config.ringtone.description"="Idioma de Transferência de Toque (RTTTL) Sequência de Toque usada por campainhas suportadas em notificações externas.";
|
||||
"config.module.paxcounter.settings"="Contador de PAX";
|
||||
"config.module.paxcounter.title"="onfiguração do Contador de PAX";
|
||||
"config.module.paxcounter.enabled.description"="Quando ativado, o módulo de Contador de PAX conta o número de pessoas que passam usando Wi-Fi e Bluetooth. Tanto o Wi-Fi quanto o Bluetooth devem estar desativados para que o contador de PAX funcione.";
|
||||
"config.module.paxcounter.updateinterval"="Intervalo de Atualização";
|
||||
"config.module.paxcounter.updateinterval.description"="Com que frequência podemos enviar uma mensagem para a malha quando as pessoas são detectadas.";
|
||||
"config.save.confirm"="Após salvar os valores de configuração, o nó reiniciará";
|
||||
"communicating"="Comunicando com dispositivo. .";
|
||||
"connected.radio"="Rádio Conectado";
|
||||
"connected"="Bluetooth Connectado";
|
||||
"connecting"="Conectando . .";
|
||||
"contacts"="Contactos";
|
||||
"contacts %@"="Contactos (%@)";
|
||||
"copy"="Copiar";
|
||||
"current"="Atual";
|
||||
"default"="Padrão";
|
||||
"delete"="Apagar";
|
||||
"detection.sensor"="Sensor de Detecção";
|
||||
"detection.sensor.config"="Configuração do Sensor de Detecção";
|
||||
"detection.sensor.log"="Log Sensor de Detecção";
|
||||
"device"="Dispositivo";
|
||||
"device.config"="Configuração do Dispositivo";
|
||||
"device.configuration"="Configuração do Dispositivo";
|
||||
"device.metrics.delete"="Apagar todas as métricas do dispositivo?";
|
||||
"device.metrics.log"="Log g de Métricas do Dispositivo";
|
||||
"device.role.client"="Dispositivo conectado ao App ou independente para mensagens.";
|
||||
"device.role.clientmute"="Dispositivo que não encaminha pacotes de outros dispositivos.";
|
||||
"device.role.clienthidden"="Dispositivo que apenas transmite conforme necessário em modo furtivo ou economia de energia.";
|
||||
"device.role.tracker"="Transmite pacotes de posição GPS como prioridade.";
|
||||
"device.role.lostandfound"="Transmite a localização como mensagem para o canal padrão regularmente para auxiliar na recuperação do dispositivo.";
|
||||
"device.role.sensor"="Transmite pacotes de telemetria como prioridade.";
|
||||
"device.role.tak"="Otimizado para comunicação do sistema ATAK, reduz transmissões rotineiras.";
|
||||
"device.role.taktracker"="Permite transmissões automáticas de TAK PLI e reduz transmissões rotineiras.";
|
||||
"device.role.repeater"="Nó de infraestrutura para ampliar a cobertura da rede transmitindo mensagens com sobrecarga mínima. Não visível na lista de Nós.";
|
||||
"device.role.router"="Nó de infraestrutura para ampliar a cobertura da rede transmitindo mensagens. Visível na lista de Nós.";
|
||||
"device.role.routerclient"="Combinação de ROTEADOR e CLIENTE. Não para dispositivos móveis.";
|
||||
"direct.messages"="Mensagens Directas";
|
||||
"dismiss.keyboard"="Dispensar";
|
||||
"display"="Icrã";
|
||||
"display.config"="Configuração do Icrãn";
|
||||
"distance"="Distância";
|
||||
"disconnect"="Desconectar";
|
||||
"echo"="Eco";
|
||||
"email.address"="Endereço de Email";
|
||||
"enabled"="Activado";
|
||||
"encrypted"="Encriptado";
|
||||
"export"="Exportar";
|
||||
"external.notification"="Notificação Externa";
|
||||
"external.notification.config"="Configuração de Notificação Externa";
|
||||
"finish"="Terminar";
|
||||
"firmware.version"="Versão do Firmware";
|
||||
"firmware.version.unsupported"="Versão de Firmware não suportada detetada, impossível conectar ao dispositivo.";
|
||||
"gas"="Gas";
|
||||
"gas.resistance"="Resistência ao Gas";
|
||||
"generate.qr.code"="Gerar Código QR";
|
||||
"gpsformat.dec"="Formato de Graus Decimais";
|
||||
"gpsformat.dms"="Graus Minutos Segundos";
|
||||
"gpsformat.utm"="Universal Transverse Mercator";
|
||||
"gpsformat.mgrs"="Sistema de Referência de Grelha Militar";
|
||||
"gpsformat.olc"="Código de Localização Aberto (também conhecido como Plus Codes)";
|
||||
"gpsformat.osgr"="Referência de Grelha da Ordnance Survey";
|
||||
"gpsmode.disabled"="Desativado";
|
||||
"gpsmode.enabled"="Ativado";
|
||||
"gpsmode.notPresent"="Não Presente";
|
||||
"heard"="Ouvido";
|
||||
"heard.last"="Último Ouvido";
|
||||
"hybrid"="Híbrido";
|
||||
"hybrid.flyover"="Híbrido o de Sobrevoo";
|
||||
"include"="Incluir";
|
||||
"inputevent.none"="Nenhum";
|
||||
"inputevent.up"="Para Cima";
|
||||
"inputevent.down"="Para Baixo";
|
||||
"inputevent.left"="Esquerda";
|
||||
"inputevent.right"="Direita";
|
||||
"inputevent.select"="Selecionar";
|
||||
"inputevent.back"="Voltar";
|
||||
"inputevent.cancel"="Cancelar";
|
||||
"interval.one.second"="Um Segundo";
|
||||
"interval.two.seconds"="Dois Segundos";
|
||||
"interval.three.seconds"="Três Segundos";
|
||||
"interval.four.seconds"="Quatro Segundos";
|
||||
"interval.five.seconds"="Cinco Segundos";
|
||||
"interval.ten.seconds"="Dez Segundos";
|
||||
"interval.fifteen.seconds"="Quinze Segundos";
|
||||
"interval.twenty.seconds"="Vinte Segundos";
|
||||
"interval.twentyfive.seconds"="Vinte e Cinco Segundos";
|
||||
"interval.thirty.seconds"="Trinta Segundos";
|
||||
"interval.fortyfive.seconds"="Quarenta e Cinco Segundos";
|
||||
"interval.one.minute"="Um Minuto";
|
||||
"interval.two.minutes"="Dois Minutos";
|
||||
"interval.five.minutes"="Cinco Minutos";
|
||||
"interval.ten.minutes"="Dez Minutos";
|
||||
"interval.fifteen.minutes"="Quinze Minutos";
|
||||
"interval.thirty.minutes"="Trinta Minutos";
|
||||
"interval.one.hour"="Uma Hora";
|
||||
"interval.two.hours"="Duas Horas";
|
||||
"interval.three.hours"="Três Horas";
|
||||
"interval.four.hours"="Quatro Horas";
|
||||
"interval.five.hours"="Cinco Horas";
|
||||
"interval.six.hours"="Seis Horas";
|
||||
"interval.twelve.hours"="Doze Horas";
|
||||
"interval.eighteen.hours"="Dezoito Horas";
|
||||
"interval.twentyfour.hours"="Vinte e Quatro Horas";
|
||||
"interval.thirtysix.hours"="Trinta e Seis Horas";
|
||||
"interval.fortyeight.hours"="Quarenta e Oito Horas";
|
||||
"interval.seventytwo.hours"="Setenta e Duas Horas";
|
||||
"keyboard.type"="Tipo de Teclado";
|
||||
"logging"="Registo";
|
||||
"log.time"="Tempo"
|
||||
"log.subsystem"="Subsistema";
|
||||
"log.process"="Processo";
|
||||
"log.category"="Categoria";
|
||||
"log.level"="Nivél";
|
||||
"log.message"="Mensagem";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="Configuração LoRa";
|
||||
"map"="Mapa do Mesh";
|
||||
"map.type"="Tipo Padrão";
|
||||
"map.centering"="Modo de Centralização";
|
||||
"map.tiles.delete"="Apagar Todas as Imagens da Mapa";
|
||||
"map.recentering"="Re-centralização Automática";
|
||||
"map.use.legacy"="Utilizar Mapa do Mesh Antigo";
|
||||
"map.usertrackingmode"="Modo de Rastreamento do Utilizador";
|
||||
"map.usertrackingmode.follow"="Seguir";
|
||||
"map.usertrackingmode.followwithheading"="Seguir com Direção";
|
||||
"map.usertrackingmode.none"="Nenhum";
|
||||
"mesh.live.activity"="Atividade Ao Vivo do Mesh";
|
||||
"mesh.log"="Log do Mesh";
|
||||
"mesh.log.ambientlighting.config %@"="Configuração do módulo de Iluminação Ambiente recebida: %@";
|
||||
"mesh.log.bluetooth.config %@"="Configuração Bluetooth recebida: %@";
|
||||
"mesh.log.cannedmessage.config %@"="Configuração do módulo de Mensagens Padrão recebida: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="Mensagens Padrão solicitadas para o módulo de mensagens para o nó: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="Mensagens Padrão recebidas para: %@";
|
||||
"mesh.log.channel.sent %@ %d"="Um Canal Enviado para: %@ Índice do Canal %d";
|
||||
"mesh.log.channel.received %d %@"="Canal %d recebido de: %@";
|
||||
"mesh.log.device.config %@"="Configuração do dispositivo recebida: %@";
|
||||
"mesh.log.display.config %@"="Configuração do icrãn recebida: %@";
|
||||
"mesh.log.devicemetadata %@"="Solicitando os Metadados do Dispositivo para %@";
|
||||
"mesh.log.device.metadata.received %@"="Os Metadados do dispositivo recebidos de: %@";
|
||||
"mesh.log.detectionsensor.config %@"="Configuração do módulo de sensor de detecção recebida: %@";
|
||||
"mesh.log.externalnotification.config %@"="Configuração do módulo de notificação externa recebida: %@";
|
||||
"mesh.log.lora.config %@"="Configuração LoRa recebida: %@";
|
||||
"mesh.log.lora.config.sent %@"="Configuração do LoRa Enviado para: %@";
|
||||
"mesh.log.mqtt.config %@"="Configuração do módulo MQTT recebida: %@";
|
||||
"mesh.log.myinfo %@"="MyInfo recebido: %@";
|
||||
"mesh.log.network.config %@"="Configuração de rede recebida: %@";
|
||||
"mesh.log.nodeinfo.received %@"="Informações do nó recebidas para: %@";
|
||||
"mesh.log.paxcounter %@"="Mensagem do Contador PAX recebida de: %@";
|
||||
"mesh.log.paxcounter.config %@"="Configuração do Contador PAX recebida: %@";
|
||||
"mesh.log.position.config %@"="Configuração de posição recebida: %@";
|
||||
"mesh.log.position.received %@"="Pacote de posição recebido do nó: %@";
|
||||
"mesh.log.power.config %@"="Configuração de energia recebida: %@";
|
||||
"mesh.log.rangetest.config %@"="Configuração do módulo de teste de alcance recebida: %@";
|
||||
"mesh.log.ringtone.config %@"="Configuração de toque RTTTL recebida: %@";
|
||||
"mesh.log.routing.message %@ %@"="Roteamento recebido para RequestID: %@ Estado de Ack: %@";
|
||||
"mesh.log.serial.config %@"="Configuração do módulo serial recebida: %@";
|
||||
"mesh.log.sharelocation %@"="Enviado um Pacote de Posição do GPS do dispositivo Apple para o nó: %@";
|
||||
"mesh.log.storeforward.config %@"="Configuração do módulo Store & Forward recebida: %@";
|
||||
"mesh.log.telemetry.config %@"="Configuração do módulo de telemetria recebida: %@";
|
||||
"mesh.log.telemetry.received %@"="Telemetria recebida para: %@";
|
||||
"mesh.log.textmessage.received"="Mensagem recebida do App de mensagem de texto.";
|
||||
"mesh.log.textmessage.send.failed %@"="Falha no envio da mensagem, não conectado corretamente a %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="Mensagem enviada %@ de %@ para %@";
|
||||
"mesh.log.traceroute.received.direct %@"="Solicitação de Rastreamento enviada para o nó: %@ foi recebida diretamente.";
|
||||
"mesh.log.traceroute.received.route %@"="Solicitação de Rastreamento retornada: %@";
|
||||
"mesh.log.traceroute.sent %@"="Enviei uma solicitação de Rastreamento para o nó: %@";
|
||||
"mesh.log.wantconfig %@"="Emitindo Configuração Desejada para %@";
|
||||
"mesh.log.waypoint.sent %@"="Enviado um Pacote de Ponto de Referência de: %@";
|
||||
"mesh.log.waypoint.received %@"="Pacote de Ponto de Referência recebido do nó: %@";
|
||||
"message"="Mensagem";
|
||||
"message.details"="Dados de Mensagem";
|
||||
"messages"="Mensagens";
|
||||
"mode"="Modo";
|
||||
"module.configuration"="Configuração do Módulo";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="Conectar ao MQTT";
|
||||
"mqtt.config"="Configuração MQTT";
|
||||
"mqtt.clientproxy"="Proxy do Cliente MQTT";
|
||||
"mqtt.disconnect"="Desconectar do MQTT";
|
||||
"mqtt.username"="Nome de Utilizador";
|
||||
"name"="Nome";
|
||||
"network"="Rede";
|
||||
"network.config"="Configuração de Rede";
|
||||
"nodes"="Nós";
|
||||
"nodes %@"="Nós (%@)";
|
||||
"nodelist.filter.distance %@"="até %@ de distância";
|
||||
"save.config %@"="Salvar Configuração para %@";
|
||||
"no.nodes"="Nenhum Nó Meshtastic Encontrado";
|
||||
"not.connected"="Nenhum dispositivo conectado";
|
||||
"numbers.punctuation"="Números e Pontuação";
|
||||
"off"="Desligado";
|
||||
"offline"="Offline";
|
||||
"on.boot"="No arranque";
|
||||
"options"="Opções";
|
||||
"password"="Senha";
|
||||
"pause"="Pausa";
|
||||
"paxcounter.ble"="BLE";
|
||||
"paxcounter.delete"="Apagar todos os dados de pax?";
|
||||
"paxcounter.wifi"="WiFi";
|
||||
"paxcounter.content.unavailable"="Nenhum Log do Contador PAX Disponível";
|
||||
"paxcounter.log"="Log do Contador PAX";
|
||||
"paxcounter.total"="Total de PAX";
|
||||
"phone.gps"="GPS do Telefone";
|
||||
"phone.gps.interval.description"="Com que frequência seu telefone enviará sua localização para o dispositivo, as atualizações de localização no mesh são geridas pelo dispositivo.";
|
||||
"position"="Posição";
|
||||
"position.config"="Configuração de Posição";
|
||||
"position.precision %@"="Dentro de %@";
|
||||
"preferred.radio"="Rádio Preferido";
|
||||
"radio.configuration"="Configuração de Rádio";
|
||||
"range.test"="Teste de Alcance";
|
||||
"range.test.blocked"="Bloquear Teste de Alcance";
|
||||
"range.test.config"="Configuração do teste de Alcance";
|
||||
"reply"="Responder";
|
||||
"reboot"="Reiniciar";
|
||||
"reboot.node"="Reiniciar nó?";
|
||||
"received.ack"="Ack Recebido";
|
||||
"received.ack.real"="Ack do Destinário";
|
||||
"relativetimeofday.morning"="Manhã";
|
||||
"relativetimeofday.midday"="Meio-dia";
|
||||
"relativetimeofday.afternoon"="Tarde";
|
||||
"relativetimeofday.evening"="Noite";
|
||||
"relativetimeofday.nighttime"="Noite";
|
||||
"resume"="Continuar";
|
||||
"ringtone"="Toque";
|
||||
"ringtone.config"="Configuração de Toque";
|
||||
"route.recorder"="Gravador de Rotas";
|
||||
"routes"="Rotas";
|
||||
"routes.activitytype.walking"="Caminhada";
|
||||
"routes.activitytype.hiking"="Caminhada na Montanha";
|
||||
"routes.activitytype.biking"="Passeio de Bicicleta";
|
||||
"routes.activitytype.driving"="Conduzir";
|
||||
"routes.activitytype.overlanding"="Overlanding";
|
||||
"routes.activitytype.skiing"="Esqui";
|
||||
"routes.activitytype.filename.walking"="Caminhar";
|
||||
"routes.activitytype.filename.hiking"="Caminhar na Montanha";
|
||||
"routes.activitytype.filename.biking"="Passeio de Bicicleta";
|
||||
"routes.activitytype.filename.driving"="Conduzir";
|
||||
"routes.activitytype.filename.overlanding"="Caminhar overland";
|
||||
"routes.activitytype.filename.skiing"="Passeio de esqui";
|
||||
"routing.acknowledged"="Reconhecido";
|
||||
"routing.noroute"="Sem Rota";
|
||||
"routing.gotnak"="Recebido um reconhecimento negativo";
|
||||
"routing.timeout"="Tempo Esgotado";
|
||||
"routing.nointerface"="Sem Interface";
|
||||
"routing.maxretransmit"="Máximo de Retransmissão Alcançado";
|
||||
"routing.nochannel"="Sem Canal";
|
||||
"routing.toolarge"="O pacote é grande de mais";
|
||||
"routing.noresponse"="Sem Resposta";
|
||||
"routing.dutycyclelimit"="O limite do Regional Duty Cycle foi abrangido";
|
||||
"routing.badRequest"="=Pedido Ruim";
|
||||
"routing.notauthorized"="Não Autorizado";
|
||||
"satellite"="Satéllite";
|
||||
"satellite.flyover"="Passagem de Satélite";
|
||||
"save"="Salvar";
|
||||
"save.config %@"="Salvar a Configuração para %@";
|
||||
"serial"="Serial";
|
||||
"serial.config"="Configuração Serial";
|
||||
"serial.mode.default"="Padrão";
|
||||
"serial.mode.simple"="Simples";
|
||||
"serial.mode.proto"="Protobufs";
|
||||
"serial.mode.txtmsg"="Mensagem de Texto";
|
||||
"serial.mode.nmea"="Posições NMEA";
|
||||
"settings"="Definições";
|
||||
"share.channels"="Partilhar o Código do QR";
|
||||
"share.position"="Partilhar o Posição";
|
||||
"subscribed"="Inscrito no mesh";
|
||||
"select.contact"="Seleciona a Contacto";
|
||||
"select.node"="Seleciona a Nó";
|
||||
"select.menu.item"="Seleciona um opção do menu";
|
||||
"set.region"="Seleciona o Região da LoRa";
|
||||
"standard"="Padrão";
|
||||
"standard.muted"="Padrão Silenciado";
|
||||
"start"="Iniciar";
|
||||
"storeforward"="Armazenar e Encaminhar";
|
||||
"storeforward.config"="Configuração de Armazenar e Encaminhar";
|
||||
"storeforward.heartbeat"="Enviar Batimento Cardíaco";
|
||||
"ssid"="SSID";
|
||||
"tapback"="Resposta Tapback";
|
||||
"tapback.heart"="Coração";
|
||||
"tapback.thumbsup"="Polegar para Cima";
|
||||
"tapback.thumbsdown"="Polegar para Baixo";
|
||||
"tapback.haha"="HaHa";
|
||||
"tapback.exclamation"="Ponto de Exclamação";
|
||||
"tapback.question"="Ponto de Interrogação";
|
||||
"tapback.poop"="Cocó";
|
||||
"tapback.wave"="Adeus";
|
||||
"telemetry"="Telemetria (Sensores)";
|
||||
"telemetry.config"="Configuração Telemetria";
|
||||
"timeout"="Tempo Limite";
|
||||
"timestamp"="Carimbo de Data/Hora";
|
||||
"tip.bluetooth.connect.title"="Rádio Conectado";
|
||||
"tip.bluetooth.connect.message"="Mostra informações para o rádio LoRa conectado via bluetooth. Você pode deslizar para a esquerda para desconectar o rádio e pressionar por um longo período para ver estatísticas ou iniciar a atividade ao vivo.";
|
||||
"tip.channel.admin.title"="Canal de Administração";
|
||||
"tip.channel.admin.message"="Canal de administração detectado: Selecione um nó do menu suspenso para gerir dispositivos conectados ou remotos.";
|
||||
"tip.channels.create.title"="Gerir Canais";
|
||||
"tip.channels.create.message"="A maioria dos dados na sua malha é enviada pelo canal principal. Você pode configurar canais secundários para criar grupos de mensagens adicionais protegidos por sua própria chave. [Channel config tips](https://meshtastic.org/docs/configuration/tips/)";
|
||||
"tip.channels.share.title"="=Compartilhando Canais Meshtastis";
|
||||
"tip.channels.share.message"="Um código QR Meshtastic contém a configuração LoRa e os valores do canal necessários para os rádios se comunicarem. Você pode compartilhar uma configuração completa do canal usando a opção Substituir Canais; se você escolher Adicionar Canais, seus canais compartilhados serão adicionados aos canais no rádio receptor.";
|
||||
"tip.messages.title"="Mensagens";
|
||||
"tip.messages.message"="Você pode enviar e receber mensagens de canal (conversas em grupo) e mensagens diretas. De qualquer mensagem, você pode pressionar por um longo período para ver ações disponíveis como copiar, responder, tapback e excluir, bem como detalhes de entrega.";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="Desconhecido";
|
||||
"unknown.age"="Idade Desconhecido";
|
||||
"unset"="Não Definido";
|
||||
"update.firmware"="Atualiza o Seu Firmware";
|
||||
"update.interval"="Intervalo de Atualização";
|
||||
"uptime"="Tempo No Ár";
|
||||
"user"="Utilizador";
|
||||
"user.details"="Dados do Utilizador";
|
||||
"voltage"="Tensão";
|
||||
"waiting"="À Espera. . .";
|
||||
"appsettings.newNodeNotifications"="Notificações de Nó Novo";
|
||||
|
|
@ -1,376 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Copyright(c) Garth Vander Houwen on 12/12/22. Translated from English to Portuguese by Philip Rosa-Leeke 2024
|
||||
|
||||
*/
|
||||
"about"="Sobre";
|
||||
"about.meshtastic"="Sobre Meshtastic";
|
||||
"activity"="Actividade";
|
||||
"admin"="Admin";
|
||||
"admin.log"="Log das Mensagens do Admin";
|
||||
"ago"="há";
|
||||
"airtime"="Tempo ao Ár";
|
||||
"always.on"="Sempre Ligado";
|
||||
"ambient.lighting"="Iluminação Ambiental";
|
||||
"ambient.lighting.config"="Configuração Iluminação Ambiental";
|
||||
"appsettings"="Definições do App";
|
||||
"appsettings.provide.location"="Partilha localização";
|
||||
"appsettings.smartposition"="Posição Inteligente";
|
||||
"are.you.sure"="Tem a certeza?";
|
||||
"ascii.capable"="Capacidade ASCII";
|
||||
"available.radios"="Rádios Disponíveis";
|
||||
"automatic.detection"="Deteção Automático";
|
||||
"battery.level"="Nível de Bataria";
|
||||
"ble.name"="Nome BLE";
|
||||
"ble.connection.timeout %d %@"="Falha de conexão após %d tentativas de conectar a %@. Você pode precisar esquecer seu dispositivo em Configurações > Bluetooth.";
|
||||
"ble.errorcode.6 %@"="%@ O App vai reconetar automaticamente ao rádio preferido se ele voltar ao alcance.";
|
||||
"ble.errorcode.14 %@"="%@ Esse erro geralmente não pode ser corrigido sem esquecer o dispositivo em Configurações > Bluetooth e reconetar ao rádio.";
|
||||
"ble.errorcode.pin %@"="%@ Por favor, tente conectar novamente e verifique cuidadosamente o PIN.";
|
||||
"bluetooth"="Bluetooth";
|
||||
"bluetooth.off"="Bluetooth está desligado";
|
||||
"bluetooth.config"="Configuração Bluetooth";
|
||||
"bluetooth.mode.randompin"="PIN Aleatório";
|
||||
"bluetooth.mode.fixedpin"="PIN fixo";
|
||||
"bluetooth.mode.nopin"="Sem PIN (Simplesmente Funciona)";
|
||||
"bluetooth.pairingmode"="Modo Pairing";
|
||||
"bluetooth.pin.validation"="O Pin do BLE deve ter 6 dígitos.";
|
||||
"bytes"="Bytes";
|
||||
"cancel"="Cancelar";
|
||||
"canned.messages"="Mensagens Enlatados";
|
||||
"canned.messages.config"="Configuração dos Mensagens Enlatados";
|
||||
"canned.messages.preset.manual"="Configuração Manual";
|
||||
"canned.messages.preset.rakrotary"="Module Codificador do RAK Rotary";
|
||||
"canned.messages.preset.cardkb"="M5 Stack Card KB / Teclado RAK";
|
||||
"channel"="Canal";
|
||||
"channel.role.disabled"="Desativado";
|
||||
"channel.role.primary"="Primário";
|
||||
"channel.role.secondary"="Secundária";
|
||||
"channel.utilization"="Utilização do Canal";
|
||||
"channels"="Canais";
|
||||
"clear.app.data"="Apagar os dados do App";
|
||||
"clear.log"="Apagar";
|
||||
"close"="Fechar";
|
||||
"config.power.settings"="Energia";
|
||||
"config.power.title"="Configuração de Energia";
|
||||
"config.power.section.battery"="Bataria";
|
||||
"config.power.section.sleep"="Dormir";
|
||||
"config.power.adc.override"="Substituir ADC";
|
||||
"config.power.adc.multiplier"="Multiplicador";
|
||||
"config.power.ls.secs"="Intervalo de Dormir Leve";
|
||||
"config.power.min.wake.secs"="Intervalo Mínimo de Despertar";
|
||||
"config.power.saving"="Poupar a Energia";
|
||||
"config.power.saving.description"="Vai por dormir o máximo possível, para o papel do rastreador e o papel do sensor isso incluirá também o rádio lora. Não use essa configuração se deseja usar seu dispositivo com os aplicativos do telefone ou está usando um dispositivo sem um botão do usuário.";
|
||||
"config.power.shutdown.on.power.loss"="Desligar em caso de Perda de Energia";
|
||||
"config.power.shutdown.after.secs"="Após";
|
||||
"config.power.wait.bluetooth.secs"="Desligar o Bluetooth Após";
|
||||
"config.ringtone"="="Toque RTTTL";
|
||||
"config.ringtone.title"="="Configuração de Toque";
|
||||
"config.ringtone.label"="="Idioma de Transferência de Toque";
|
||||
"config.ringtone.description"="="Idioma de Transferência de Toque (RTTTL) Sequência de Toque usada por campainhas suportadas em notificações externas.";
|
||||
"config.module.paxcounter.settings"="="Contador de PAX";
|
||||
"config.module.paxcounter.title"="="Configuração do Contador de PAX";
|
||||
"config.module.paxcounter.enabled.description"="="Quando ativado, o módulo de Contador de PAX conta o número de pessoas que passam usando Wi-Fi e Bluetooth. Tanto o Wi-Fi quanto o Bluetooth devem estar desativados para que o contador de PAX funcione.";
|
||||
"config.module.paxcounter.updateinterval"="="Intervalo de Atualização";
|
||||
"config.module.paxcounter.updateinterval.description"="="Com que frequência podemos enviar uma mensagem para a malha quando as pessoas são detectadas.";
|
||||
"config.save.confirm"="="Após salvar os valores de configuração, o nó reiniciará";
|
||||
"communicating"="="Comunicando com dispositivo. .";
|
||||
"connected.radio"="="Rádio Conectado";
|
||||
"connected"="Bluetooth Connectado";
|
||||
"connecting"="="Conectando . .";
|
||||
"contacts"="Contactos";
|
||||
"contacts %@"="Contactos (%@)";
|
||||
"copy"="Copiar";
|
||||
"current"="Atual";
|
||||
"default"="Padrão";
|
||||
"delete"="Apagar";
|
||||
"detection.sensor"="Sensor de Detecção";
|
||||
"detection.sensor.config"="="Configuração do Sensor de Detecção";
|
||||
"detection.sensor.log"="Log Sensor de Detecção";
|
||||
"device"="="Dispositivo";
|
||||
"device.config"="="Configuração do Dispositivo";
|
||||
"device.configuration"="Configuração do Dispositivo";
|
||||
"device.metrics.delete"="="Apagar todas as métricas do dispositivo?";
|
||||
"device.metrics.log"="Log g de Métricas do Dispositivo";
|
||||
"device.role.client"="="Dispositivo conectado ao App ou independente para mensagens.";
|
||||
"device.role.clientmute"="="Dispositivo que não encaminha pacotes de outros dispositivos.";
|
||||
"device.role.clienthidden"="="Dispositivo que apenas transmite conforme necessário em modo furtivo ou economia de energia.";
|
||||
"device.role.tracker"="Transmite pacotes de posição GPS como prioridade.";
|
||||
"device.role.lostandfound"="="Transmite a localização como mensagem para o canal padrão regularmente para auxiliar na recuperação do dispositivo.";
|
||||
"device.role.sensor"="="="Transmite pacotes de telemetria como prioridade.";
|
||||
"device.role.tak"="Otimizado para comunicação do sistema ATAK, reduz transmissões rotineiras.";
|
||||
"device.role.taktracker"="="="Permite transmissões automáticas de TAK PLI e reduz transmissões rotineiras.";
|
||||
"device.role.repeater"="="Nó de infraestrutura para ampliar a cobertura da rede transmitindo mensagens com sobrecarga mínima. Não visível na lista de Nós.";
|
||||
"device.role.router"="="Nó de infraestrutura para ampliar a cobertura da rede transmitindo mensagens. Visível na lista de Nós.";
|
||||
"device.role.routerclient"="="Combinação de ROTEADOR e CLIENTE. Não para dispositivos móveis.";
|
||||
"direct.messages"="Mensagens Directas";
|
||||
"dismiss.keyboard"="Dispensar";
|
||||
"display"="Icrã";
|
||||
"display.config"="Configuração do Icrãn";
|
||||
"distance"="Distância";
|
||||
"disconnect"="Desconectar";
|
||||
"echo"="Eco";
|
||||
"email.address"="Endereço de Email";
|
||||
"enabled"="Activado";
|
||||
"encrypted"="Encriptado";
|
||||
"export"="Exportar";
|
||||
"external.notification"="Notificação Externa";
|
||||
"external.notification.config"="Configuração de Notificação Externa";
|
||||
"finish"="Terminar";
|
||||
"firmware.version"="Versão do Firmware";
|
||||
"firmware.version.unsupported"=" "Versão de Firmware não suportada detetada, impossível conectar ao dispositivo.";
|
||||
"gas"="Gas";
|
||||
"gas.resistance"=" "Resistência ao Gas";
|
||||
"generate.qr.code"=" "Gerar Código QR";
|
||||
"gpsformat.dec"=" "Formato de Graus Decimais";
|
||||
"gpsformat.dms"=" "Graus Minutos Segundos";
|
||||
"gpsformat.utm"="Universal Transverse Mercator";
|
||||
"gpsformat.mgrs"=" "Sistema de Referência de Grelha Militar";
|
||||
"gpsformat.olc"=" "Código de Localização Aberto (também conhecido como Plus Codes)";
|
||||
"gpsformat.osgr"=" "Referência de Grelha da Ordnance Survey";
|
||||
"gpsmode.disabled"=" "Desativado";
|
||||
"gpsmode.enabled"=" "Ativado";
|
||||
"gpsmode.notPresent"="Não Presente";
|
||||
"heard"="Ouvido";
|
||||
"heard.last"="Último Ouvido";
|
||||
"hybrid"="Híbrido";
|
||||
"hybrid.flyover"="Híbrido o de Sobrevoo";
|
||||
"include"="Incluir";
|
||||
"inputevent.none"="Nenhum";
|
||||
"inputevent.up"="Para Cima";
|
||||
"inputevent.down"="Para Baixo";
|
||||
"inputevent.left"="Esquerda";
|
||||
"inputevent.right"="Direita";
|
||||
"inputevent.select"="Selecionar";
|
||||
"inputevent.back"="Voltar";
|
||||
"inputevent.cancel"="Cancelar";
|
||||
"interval.one.second"="Um Segundo";
|
||||
"interval.two.seconds"="Dois Segundos";
|
||||
"interval.three.seconds"="Três Segundos";
|
||||
"interval.four.seconds"="Quatro Segundos";
|
||||
"interval.five.seconds"="Cinco Segundos";
|
||||
"interval.ten.seconds"="Dez Segundos";
|
||||
"interval.fifteen.seconds"="Quinze Segundos";
|
||||
"interval.twenty.seconds"="Vinte Segundos";
|
||||
"interval.twentyfive.seconds"="Vinte e Cinco Segundos";
|
||||
"interval.thirty.seconds"="Trinta Segundos";
|
||||
"interval.fortyfive.seconds"="Quarenta e Cinco Segundos";
|
||||
"interval.one.minute"="Um Minuto";
|
||||
"interval.two.minutes"="Dois Minutos";
|
||||
"interval.five.minutes"="Cinco Minutos";
|
||||
"interval.ten.minutes"="Dez Minutos";
|
||||
"interval.fifteen.minutes"="Quinze Minutos";
|
||||
"interval.thirty.minutes"="Trinta Minutos";
|
||||
"interval.one.hour"="Uma Hora";
|
||||
"interval.two.hours"="Duas Horas";
|
||||
"interval.three.hours"="Três Horas";
|
||||
"interval.four.hours"="Quatro Horas";
|
||||
"interval.five.hours"="Cinco Horas";
|
||||
"interval.six.hours"="Seis Horas";
|
||||
"interval.twelve.hours"="Doze Horas";
|
||||
"interval.eighteen.hours"="Dezoito Horas";
|
||||
"interval.twentyfour.hours"="Vinte e Quatro Horas";
|
||||
"interval.thirtysix.hours"="Trinta e Seis Horas";
|
||||
"interval.fortyeight.hours"="Quarenta e Oito Horas";
|
||||
"interval.seventytwo.hours"="Setenta e Duas Horas";
|
||||
"keyboard.type"="Tipo de Teclado";
|
||||
"logging"="Registo";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="Configuração LoRa";
|
||||
"map"="Mapa do Mesh";
|
||||
"map.type"="Tipo Padrão";
|
||||
"map.centering"=" "Modo de Centralização";
|
||||
"map.tiles.delete"="Apagar Todas as Imagens da Mapa";
|
||||
"map.recentering"=" "Re-centralização Automática";
|
||||
"map.use.legacy"=" "Utilizar Mapa do Mesh Antigo";
|
||||
"map.usertrackingmode"=" "Modo de Rastreamento do Utilizador";
|
||||
"map.usertrackingmode.follow"=" "Seguir";
|
||||
"map.usertrackingmode.followwithheading"=" "Seguir com Direção";
|
||||
"map.usertrackingmode.none"="Nenhum";
|
||||
"mesh.live.activity"=" "Atividade Ao Vivo do Mesh";
|
||||
"mesh.log"="Log do Mesh";
|
||||
"mesh.log.ambientlighting.config %@"=" "Configuração do módulo de Iluminação Ambiente recebida: %@";
|
||||
"mesh.log.bluetooth.config %@"=" "Configuração Bluetooth recebida: %@";
|
||||
"mesh.log.cannedmessage.config %@"=" "Configuração do módulo de Mensagens Padrão recebida: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"=" "Mensagens Padrão solicitadas para o módulo de mensagens para o nó: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"=" "Mensagens Padrão recebidas para: %@";
|
||||
"mesh.log.channel.sent %@ %d"=" "Um Canal Enviado para: %@ Índice do Canal %d";
|
||||
"mesh.log.channel.received %d %@"=" "Canal %d recebido de: %@";
|
||||
"mesh.log.device.config %@"=" "Configuração do dispositivo recebida: %@";
|
||||
"mesh.log.display.config %@"=" "Configuração do icrãn recebida: %@";
|
||||
"mesh.log.devicemetadata %@"=" "Solicitando os Metadados do Dispositivo para %@";
|
||||
"mesh.log.device.metadata.received %@"=" "Os Metadados do dispositivo recebidos de: %@";
|
||||
"mesh.log.detectionsensor.config %@"=" "Configuração do módulo de sensor de detecção recebida: %@";
|
||||
"mesh.log.externalnotification.config %@"=" "Configuração do módulo de notificação externa recebida: %@";
|
||||
"mesh.log.lora.config %@"=" "Configuração LoRa recebida: %@";
|
||||
"mesh.log.lora.config.sent %@"="Configuração do LoRa Enviado para: %@";
|
||||
"mesh.log.mqtt.config %@"=" "Configuração do módulo MQTT recebida: %@";
|
||||
"mesh.log.myinfo %@"="MyInfo recebido: %@";
|
||||
"mesh.log.network.config %@"=" "Configuração de rede recebida: %@";
|
||||
"mesh.log.nodeinfo.received %@"=" "Informações do nó recebidas para: %@";
|
||||
"mesh.log.paxcounter %@"=" "Mensagem do Contador PAX recebida de: %@";
|
||||
"mesh.log.paxcounter.config %@"=" "Configuração do Contador PAX recebida: %@";
|
||||
"mesh.log.position.config %@"=" "Configuração de posição recebida: %@";
|
||||
"mesh.log.position.received %@"=" "Pacote de posição recebido do nó: %@";
|
||||
"mesh.log.power.config %@"=" "Configuração de energia recebida: %@";
|
||||
"mesh.log.rangetest.config %@"=" "Configuração do módulo de teste de alcance recebida: %@";
|
||||
"mesh.log.ringtone.config %@"=" "Configuração de toque RTTTL recebida: %@";
|
||||
"mesh.log.routing.message %@ %@"=" "Roteamento recebido para RequestID: %@ Estado de Ack: %@";
|
||||
"mesh.log.serial.config %@"=" "Configuração do módulo serial recebida: %@";
|
||||
"mesh.log.sharelocation %@"=" "Enviado um Pacote de Posição do GPS do dispositivo Apple para o nó: %@";
|
||||
"mesh.log.storeforward.config %@"=" "Configuração do módulo Store & Forward recebida: %@";
|
||||
"mesh.log.telemetry.config %@"=" "Configuração do módulo de telemetria recebida: %@";
|
||||
"mesh.log.telemetry.received %@"=" "Telemetria recebida para: %@";
|
||||
"mesh.log.textmessage.received"=" "Mensagem recebida do App de mensagem de texto.";
|
||||
"mesh.log.textmessage.send.failed %@"=" "Falha no envio da mensagem, não conectado corretamente a %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"=" "Mensagem enviada %@ de %@ para %@";
|
||||
"mesh.log.traceroute.received.direct %@"=" "Solicitação de Rastreamento enviada para o nó: %@" foi recebida diretamente.";
|
||||
"mesh.log.traceroute.received.route %@"=" "Solicitação de Rastreamento retornada: %@";
|
||||
"mesh.log.traceroute.sent %@"=" "Enviei uma solicitação de Rastreamento para o nó: %@";
|
||||
"mesh.log.wantconfig %@"=" "Emitindo Configuração Desejada para %@";
|
||||
"mesh.log.waypoint.sent %@"=" "Enviado um Pacote de Ponto de Referência de: %@";
|
||||
"mesh.log.waypoint.received %@"=" "Pacote de Ponto de Referência recebido do nó: %@";
|
||||
"message"="Mensagem";
|
||||
"message.details"="Dados de Mensagem";
|
||||
"messages"="Mensagens";
|
||||
"mode"="Modo";
|
||||
"module.configuration"="Configuração do Módulo";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="Conectar ao MQTT";
|
||||
"mqtt.config"="Configuração MQTT";
|
||||
"mqtt.clientproxy"=" "Proxy do Cliente MQTT";
|
||||
"mqtt.disconnect"=" "Desconectar do MQTT";
|
||||
"mqtt.username"=" "Nome de Utilizador";
|
||||
"name"="Nome";
|
||||
"network"="Rede";
|
||||
"network.config"="Configuração de Rede";
|
||||
"nodes"="Nós";
|
||||
"nodes %@"="Nós (%@)";
|
||||
"nodelist.filter.distance %@"="até %@ de distância";
|
||||
"save.config %@"="Salvar Configuração para %@";
|
||||
"no.nodes"="Nenhum Nó Meshtastic Encontrado";
|
||||
"not.connected"=" "Nenhum dispositivo conectado";
|
||||
"numbers.punctuation"=" "Números e Pontuação";
|
||||
"off"="Desligado";
|
||||
"offline"="Offline";
|
||||
"on.boot"=" "No arranque";
|
||||
"options"="Opções";
|
||||
"password"="Senha";
|
||||
"pause"="Pausa";
|
||||
"paxcounter.ble"="BLE";
|
||||
"paxcounter.delete"=" "Apagar todos os dados de pax?";
|
||||
"paxcounter.wifi"="WiFi";
|
||||
"paxcounter.content.unavailable"=" "Nenhum Log do Contador PAX Disponível";
|
||||
"paxcounter.log"=" "Log do Contador PAX";
|
||||
"paxcounter.total"="Total de PAX";
|
||||
"phone.gps"="GPS do Telefone";
|
||||
"phone.gps.interval.description"=" "Com que frequência seu telefone enviará sua localização para o dispositivo, as atualizações de localização no mesh são geridas pelo dispositivo.";
|
||||
"position"="Posição";
|
||||
"position.config"="Configuração de Posição";
|
||||
"position.precision %@"="Dentro de %@";
|
||||
"preferred.radio"="Rádio Preferido";
|
||||
"radio.configuration"="Configuração de Rádio";
|
||||
"range.test"="Teste de Alcance";
|
||||
"range.test.blocked"=" "Bloquear Teste de Alcance";
|
||||
"range.test.config"="Configuração do teste de Alcance";
|
||||
"reply"="Responder";
|
||||
"reboot"="Reiniciar";
|
||||
"reboot.node"="Reiniciar nó?";
|
||||
"received.ack"="Ack Recebido";
|
||||
"received.ack.real"="Ack do Destinário";
|
||||
"relativetimeofday.morning"="Manhã";
|
||||
"relativetimeofday.midday"="Meio-dia";
|
||||
"relativetimeofday.afternoon"="Tarde";
|
||||
"relativetimeofday.evening"="Noite";
|
||||
"relativetimeofday.nighttime"="Noite";
|
||||
"resume"="Continuar";
|
||||
"ringtone"="Toque";
|
||||
"ringtone.config"="Configuração de Toque";
|
||||
"route.recorder"="Gravador de Rotas";
|
||||
"routes"="Rotas";
|
||||
"routes.activitytype.walking"="Caminhada";
|
||||
"routes.activitytype.hiking"="Caminhada na Montanha";
|
||||
"routes.activitytype.biking"=" "Passeio de Bicicleta";
|
||||
"routes.activitytype.driving"="Conduzir";
|
||||
"routes.activitytype.overlanding"="Overlanding";
|
||||
"routes.activitytype.skiing"="Esqui";
|
||||
"routes.activitytype.filename.walking"="Caminhar";
|
||||
"routes.activitytype.filename.hiking"="Caminhar na Montanha";
|
||||
"routes.activitytype.filename.biking"="Passeio de Bicicleta";
|
||||
"routes.activitytype.filename.driving"="Conduzir";
|
||||
"routes.activitytype.filename.overlanding"="Caminhar overland";
|
||||
"routes.activitytype.filename.skiing"="Passeio de esqui";
|
||||
"routing.acknowledged"=" "Reconhecido";
|
||||
"routing.noroute"="Sem Rota";
|
||||
"routing.gotnak"=" "Recebido um reconhecimento negativo";
|
||||
"routing.timeout"=" "Tempo Esgotado";
|
||||
"routing.nointerface"="Sem Interface";
|
||||
"routing.maxretransmit"=" "Máximo de Retransmissão Alcançado";
|
||||
"routing.nochannel"="Sem Canal";
|
||||
"routing.toolarge"="O pacote é grande de mais";
|
||||
"routing.noresponse"="Sem Resposta";
|
||||
"routing.dutycyclelimit"="O limite do Regional Duty Cycle foi abrangido";
|
||||
"routing.badRequest"="="Pedido Ruim";
|
||||
"routing.notauthorized"="Não Autorizado";
|
||||
"satellite"="Satéllite";
|
||||
"satellite.flyover"="Passagem de Satélite";
|
||||
"save"="Salvar";
|
||||
"save.config %@"="Salvar a Configuração para %@";
|
||||
"serial"="Serial";
|
||||
"serial.config"="Configuração Serial";
|
||||
"serial.mode.default"="Padrão";
|
||||
"serial.mode.simple"="Simples";
|
||||
"serial.mode.proto"="Protobufs";
|
||||
"serial.mode.txtmsg"="Mensagem de Texto";
|
||||
"serial.mode.nmea"="Posições NMEA";
|
||||
"settings"="Definições";
|
||||
"share.channels"="Partilhar o Código do QR";
|
||||
"share.position"="Partilhar o Posição";
|
||||
"subscribed"="Inscrito no mesh";
|
||||
"select.contact"="Seleciona a Contacto";
|
||||
"select.node"="Seleciona a Nó";
|
||||
"select.menu.item"="Seleciona um opção do menu";
|
||||
"set.region"="Seleciona o Região da LoRa";
|
||||
"standard"="Padrão";
|
||||
"standard.muted"="Padrão Silenciado";
|
||||
"start"="Iniciar";
|
||||
"storeforward"="="Armazenar e Encaminhar";
|
||||
"storeforward.config"="Configuração de Armazenar e Encaminhar";
|
||||
"storeforward.heartbeat"="="Enviar Batimento Cardíaco";
|
||||
"ssid"="SSID";
|
||||
"tapback"="Resposta Tapback";
|
||||
"tapback.heart"="Coração";
|
||||
"tapback.thumbsup"="="Polegar para Cima";
|
||||
"tapback.thumbsdown"="Polegar para Baixo";
|
||||
"tapback.haha"="HaHa";
|
||||
"tapback.exclamation"="Ponto de Exclamação";
|
||||
"tapback.question"="Ponto de Interrogação";
|
||||
"tapback.poop"="Cocó";
|
||||
"tapback.wave"="Adeus";
|
||||
"telemetry"="Telemetria (Sensores)";
|
||||
"telemetry.config"="Configuração Telemetria";
|
||||
"timeout"="Tempo Limite";
|
||||
"timestamp"="Carimbo de Data/Hora";
|
||||
"tip.bluetooth.connect.title"="Rádio Conectado";
|
||||
"tip.bluetooth.connect.message"="="Mostra informações para o rádio LoRa conectado via bluetooth. Você pode deslizar para a esquerda para desconectar o rádio e pressionar por um longo período para ver estatísticas ou iniciar a atividade ao vivo.";
|
||||
"tip.channel.admin.title"="="Canal de Administração";
|
||||
"tip.channel.admin.message"="="Canal de administração detectado: Selecione um nó do menu suspenso para gerir dispositivos conectados ou remotos.";
|
||||
"tip.channels.create.title"="="Gerir Canais";
|
||||
"tip.channels.create.message"="="A maioria dos dados na sua malha é enviada pelo canal principal. Você pode configurar canais secundários para criar grupos de mensagens adicionais protegidos por sua própria chave. [Channel config tips](https://meshtastic.org/docs/configuration/tips/)";
|
||||
"tip.channels.share.title"="="Compartilhando Canais Meshtastis";
|
||||
"tip.channels.share.message"="="Um código QR Meshtastic contém a configuração LoRa e os valores do canal necessários para os rádios se comunicarem. Você pode compartilhar uma configuração completa do canal usando a opção Substituir Canais; se você escolher Adicionar Canais, seus canais compartilhados serão adicionados aos canais no rádio receptor.";
|
||||
"tip.messages.title"="Mensagens";
|
||||
"tip.messages.message"="="Você pode enviar e receber mensagens de canal (conversas em grupo) e mensagens diretas. De qualquer mensagem, você pode pressionar por um longo período para ver ações disponíveis como copiar, responder, tapback e excluir, bem como detalhes de entrega.";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="Desconhecido";
|
||||
"unknown.age"="Idade Desconhecido";
|
||||
"unset"="="Não Definido";
|
||||
"update.firmware"="Atualiza o Seu Firmware";
|
||||
"update.interval"="Intervalo de Atualização";
|
||||
"uptime"="Tempo No Ár";
|
||||
"user"="Utilizador";
|
||||
"user.details"="Dados do Utilizador";
|
||||
"voltage"="Tensão";
|
||||
"waiting"="À Espara. . .";
|
||||
"appsettings.newNodeNotifications"="Notificações de Nó Novo";
|
||||
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
# simple sanity checking for repo
|
||||
if [ ! -d "./protobufs" ]; then
|
||||
echo 'Please check out the protobuf submodule by running: `git submodule update --init`'
|
||||
exit
|
||||
git submodule update --init
|
||||
else
|
||||
git submodule update
|
||||
fi
|
||||
|
||||
# simple sanity checking for executable
|
||||
if [ ! -x "$(which protoc)" ]; then
|
||||
echo 'Please install swift-protobuf by running: `brew install swift-protobuf`'
|
||||
exit
|
||||
brew install swift-protobuf
|
||||
fi
|
||||
|
||||
protoc --proto_path=./protobufs --swift_opt=Visibility=Public --swift_out=./MeshtasticProtobufs/Sources ./protobufs/meshtastic/*.proto
|
||||
|
|
|
|||
|
|
@ -1,366 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Copyright(c) Garth Vander Houwen on 12/12/22.
|
||||
|
||||
*/
|
||||
"about"="Om";
|
||||
"about.meshtastic"="Om Meshtastic";
|
||||
"activity"="Activity";
|
||||
"admin"="Administratör";
|
||||
"admin.log"="Administratörsmeddelandelogg";
|
||||
"ago"="sedan";
|
||||
"airtime"="Sändningstid";
|
||||
"always.on"="Alltid på";
|
||||
"ambient.lighting"="Omgivningsbelysning";
|
||||
"ambient.lighting.config"="Konfiguration av omgivningsbelysning";
|
||||
"appsettings"="Appinställningar";
|
||||
"appsettings.provide.location"="Dela plats";
|
||||
"appsettings.smartposition"="Smart position";
|
||||
"are.you.sure"="Är du säker?";
|
||||
"ascii.capable"="ASCII-kompatibel";
|
||||
"available.radios"="Tillgängliga radioapparater";
|
||||
"automatic.detection"="Automatisk upptäckt";
|
||||
"battery.level"="Batterinivå";
|
||||
"ble.name"="BLE-namn";
|
||||
"ble.connection.timeout %d %@"="Anslutningen misslyckades efter %d försök att ansluta till %@. Du kan behöva glömma din enhet under Inställningar > Bluetooth.";
|
||||
"ble.errorcode.6 %@"="%@ Appen kommer automatiskt att återansluta till den föredragna radion om den kommer inom räckhåll igen.";
|
||||
"ble.errorcode.14 %@"="%@ Detta fel kan vanligtvis inte åtgärdas utan att glömma enheten under Inställningar > Bluetooth och återansluta till radion.";
|
||||
"ble.errorcode.pin %@"="%@ Försök att ansluta igen och kontrollera PIN-koden noggrant.";
|
||||
"bluetooth"="Bluetooth";
|
||||
"bluetooth.off"="Bluetooth är avstängt";
|
||||
"bluetooth.config"="Bluetooth-konfiguration";
|
||||
"bluetooth.mode.randompin"="Slumpmässig PIN";
|
||||
"bluetooth.mode.fixedpin"="Fast PIN";
|
||||
"bluetooth.mode.nopin"="Ingen PIN (Bara fungerar)";
|
||||
"bluetooth.pairingmode"="Parläge";
|
||||
"bluetooth.pin.validation"="BLE-PIN måste vara 6 siffror lång.";
|
||||
"bytes"="Bytes";
|
||||
"cancel"="Avbryt";
|
||||
"canned.messages"="Fördefinierade meddelanden";
|
||||
"canned.messages.config"="Konfiguration av fördefinierade meddelanden";
|
||||
"canned.messages.preset.manual"="Manuell konfiguration";
|
||||
"canned.messages.preset.rakrotary"="RAK Rotary Encoder-modul";
|
||||
"canned.messages.preset.cardkb"="M5 Stack Card KB / RAK Keypad";
|
||||
"channel"="Kanal";
|
||||
"channel.role.disabled"="Inaktiverad";
|
||||
"channel.role.primary"="Primär";
|
||||
"channel.role.secondary"="Sekundär";
|
||||
"channel.utilization"="Kanalutnyttjande";
|
||||
"channels"="Kanaler";
|
||||
"clear.app.data"="Rensa appdata";
|
||||
"clear.log"="Rensa";
|
||||
"close"="Stäng";
|
||||
"config.power.settings"="Ström";
|
||||
"config.power.title"="Strömkonfiguration";
|
||||
"config.power.section.battery"="Batteri";
|
||||
"config.power.section.sleep"="Sömn";
|
||||
"config.power.adc.override"="ADC-överskrivning";
|
||||
"config.power.adc.multiplier"="Multiplikator";
|
||||
"config.power.ls.secs"="Intervall för Ljussömn";
|
||||
"config.power.min.wake.secs"="Minsta Väckningsintervall";
|
||||
"config.power.saving"="Strömsparläge";
|
||||
"config.power.saving.description"="Sätter allt i viloläge så mycket som möjligt, för spårnings- och sensorläge kommer detta också inkludera LoRa-radion. Använd inte denna inställning om du vill använda din enhet med mobilappar eller använder en enhet utan en användarknapp.";
|
||||
"config.power.shutdown.on.power.loss"="Stäng av vid Strömförlust";
|
||||
"config.power.shutdown.after.secs"="Efter";
|
||||
"config.power.wait.bluetooth.secs"="Bluetooth Stängs Av Efter";
|
||||
"config.ringtone"="RTTTL Ringsignal";
|
||||
"config.ringtone.title"="Ringsignalskonfiguration";
|
||||
"config.ringtone.label"="Språk för Överföring av Ringsignal";
|
||||
"config.ringtone.description"="Ringsignalöverföringsspråk (RTTTL) Ringsignalsträng som används av stödda buzzers i externa notifikationer.";
|
||||
"config.module.paxcounter.settings"="PAX Räknare";
|
||||
"config.module.paxcounter.title"="PAX Räknare Konfiguration";
|
||||
"config.module.paxcounter.enabled.description"="När aktiverad räknar PAX-räknarmodulen antalet personer som passerar med WiFi och Bluetooth. Både WiFi och Bluetooth måste vara aktiverade för att PAX-räknaren ska fungera.";
|
||||
"config.module.paxcounter.updateinterval"="Uppdateringsintervall";
|
||||
"config.module.paxcounter.updateinterval.description"="Hur ofta vi kan skicka ett meddelande till mesh-nätverket när personer upptäcks.";
|
||||
"config.save.confirm"="Efter att konfigurationsvärdena sparats kommer noden att starta om.";
|
||||
"communicating"="Kommunicerar med enheten...";
|
||||
"connected.radio"="Ansluten Radio";
|
||||
"connected"="Bluetooth Ansluten";
|
||||
"connecting"="Ansluter...";
|
||||
"contacts"="Kontakter";
|
||||
"contacts %@"="Kontakter (%@)";
|
||||
"copy"="Kopiera";
|
||||
"current"="Aktuell";
|
||||
"default"="Standard";
|
||||
"delete"="Ta bort";
|
||||
"detection.sensor"="Detektionssensor";
|
||||
"detection.sensor.config"="Konfiguration av Detektionssensor";
|
||||
"detection.sensor.log"="Logg för Detektionssensor";
|
||||
"device"="Enhet";
|
||||
"device.config"="Enhetskonfiguration";
|
||||
"device.configuration"="Enhetsinställningar";
|
||||
"device.metrics.delete"="Ta bort alla enhetsmätvärden?";
|
||||
"device.metrics.log"="Logg för Enhetsmätvärden";
|
||||
"device.role.client"="Appansluten eller fristående meddelandeenhet.";
|
||||
"device.role.clientmute"="Enhet som inte vidarebefordrar paket från andra enheter.";
|
||||
"device.role.clienthidden"="Enhet som endast sänder ut när det behövs för stealth eller energibesparing.";
|
||||
"device.role.tracker"="Sänder ut GPS-positionspaket som prioritet.";
|
||||
"device.role.lostandfound"="Sänder regelbundet ut plats som meddelande till standardkanalen för att underlätta återhämtning av enheten.";
|
||||
"device.role.sensor"="Sänder ut telemetripaket som prioritet.";
|
||||
"device.role.tak"="Optimerad för kommunikation med ATAK-systemet, minskar rutinutsändningar.";
|
||||
"device.role.taktracker"="Aktiverar automatiska TAK PLI-utsändningar och minskar rutinutsändningar.";
|
||||
"device.role.repeater"="Infrastrukturnod för att utöka nätverkstäckningen genom att vidarebefordra meddelanden med minimal overhead. Syns inte i Noder-listan.";
|
||||
"device.role.router"="Infrastrukturnod för att utöka nätverkstäckningen genom att vidarebefordra meddelanden. Synlig i Noder-listan.";
|
||||
"device.role.routerclient"="Kombination av både ROUTER och CLIENT. Inte för mobila enheter.";
|
||||
"direct.messages"="Direktmeddelanden";
|
||||
"dismiss.keyboard"="Stäng";
|
||||
"display"="Skärm";
|
||||
"display.config"="Skärmkonfiguration";
|
||||
"distance"="Distans";
|
||||
"disconnect"="Koppla från";
|
||||
"echo"="Eko";
|
||||
"email.address"="E-postadress";
|
||||
"enabled"="Aktiverad";
|
||||
"encrypted"="Krypterad";
|
||||
"export"="Export";
|
||||
"external.notification"="Extern Notifikation";
|
||||
"external.notification.config"="Konfiguration av Extern Notifikation";
|
||||
"finish"="Avsluta";
|
||||
"firmware.version"="Firmwareversion";
|
||||
"firmware.version.unsupported"="Okänd Firmwareversion upptäckt, kan inte ansluta till enheten.";
|
||||
"gas"="Gas";
|
||||
"gas.resistance"="Gasmotstånd";
|
||||
"generate.qr.code"="Generera QR-kod";
|
||||
"gpsformat.dec"="Decimalgrader";
|
||||
"gpsformat.dms"="Grader Minuter Sekunder";
|
||||
"gpsformat.utm"="Universal Transversal Mercator";
|
||||
"gpsformat.mgrs"="Militärt rutnätsreferenssystem";
|
||||
"gpsformat.olc"="Öppen Platskod (även känd som Pluskoder)";
|
||||
"gpsformat.osgr"="Ordnance Survey Rutnätsreferens";
|
||||
"gpsmode.disabled"="Inaktiverad";
|
||||
"gpsmode.enabled"="Aktiverad";
|
||||
"gpsmode.notPresent"="Inte närvarande";
|
||||
"heard"="Hörd";
|
||||
"heard.last"="Senast Hörd";
|
||||
"hybrid"="Hybrid";
|
||||
"hybrid.flyover"="Hybrid Flygöversikt";
|
||||
"include"="Inkludera";
|
||||
"incomplete"="Incomplete";
|
||||
"inputevent.none"="Ingen";
|
||||
"inputevent.up"="Upp";
|
||||
"inputevent.down"="Ner";
|
||||
"inputevent.left"="Vänster";
|
||||
"inputevent.right"="Höger";
|
||||
"inputevent.select"="Välj";
|
||||
"inputevent.back"="Bakåt";
|
||||
"inputevent.cancel"="Avbryt";
|
||||
"interval.one.second"="En Sekund";
|
||||
"interval.two.seconds"="Två Sekunder";
|
||||
"interval.three.seconds"="Tre Sekunder";
|
||||
"interval.four.seconds"="Fyra Sekunder";
|
||||
"interval.five.seconds"="Fem Sekunder";
|
||||
"interval.ten.seconds"="Tio Sekunder";
|
||||
"interval.fifteen.seconds"="Femton Sekunder";
|
||||
"interval.twenty.seconds"="Tjugo Sekunder";
|
||||
"interval.twentyfive.seconds"="Tjugofem Sekunder";
|
||||
"interval.thirty.seconds"="Trettio Sekunder";
|
||||
"interval.fortyfive.seconds"="Fyrtiofem Sekunder";
|
||||
"interval.one.minute"="En Minut";
|
||||
"interval.two.minutes"="Två Minuter";
|
||||
"interval.five.minutes"="Fem Minuter";
|
||||
"interval.ten.minutes"="Tio Minuter";
|
||||
"interval.fifteen.minutes"="Femton Minuter";
|
||||
"interval.thirty.minutes"="Trettio Minuter";
|
||||
"interval.one.hour"="En Timme";
|
||||
"interval.two.hours"="Två Timmar";
|
||||
"interval.three.hours"="Tre Timmar";
|
||||
"interval.four.hours"="Fyra Timmar";
|
||||
"interval.five.hours"="Fem Timmar";
|
||||
"interval.six.hours"="Sex Timmar";
|
||||
"interval.twelve.hours"="Tolv Timmar";
|
||||
"interval.eighteen.hours"="Arton Timmar";
|
||||
"interval.twentyfour.hours"="Tjugofyra Timmar";
|
||||
"interval.thirtysix.hours"="Trettiosex Timmar";
|
||||
"interval.fortyeight.hours"="Fyrtioåtta Timmar";
|
||||
"interval.seventytwo.hours"="Sjuttiotvå Timmar";
|
||||
"keyboard.type"="Tangentbordstyp";
|
||||
"logging"="Loggning";
|
||||
"log.time"="Time";
|
||||
"log.subsystem"="Subsystem";
|
||||
"log.process"="Process";
|
||||
"log.category"="Category";
|
||||
"log.level"="Level";
|
||||
"log.message"="Message";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="LoRa Konfiguration";
|
||||
"map"="Mesh Karta";
|
||||
"map.type"="Standardtyp";
|
||||
"map.centering"="Centreringsläge";
|
||||
"map.tiles.delete"="Radera Alla Kartplattor";
|
||||
"map.recentering"="Automatisk Centrering";
|
||||
"map.use.legacy"="Använd Äldre Mesh Karta";
|
||||
"map.usertrackingmode"="Spårningsläge för användare";
|
||||
"map.usertrackingmode.follow"="Följ";
|
||||
"map.usertrackingmode.followwithheading"="Följ med riktning";
|
||||
"map.usertrackingmode.none"="Ingen";
|
||||
"mesh.live.activity"="Mesh Live Aktivitet";
|
||||
"mesh.log"="Mesh-logg";
|
||||
"mesh.log.ambientlighting.config %@"="Konfiguration för omgivningsbelysningsmodulen mottagen: %@";
|
||||
"mesh.log.bluetooth.config %@"="Bluetooth-konfiguration mottagen: %@";
|
||||
"mesh.log.cannedmessage.config %@"="Konfiguration för modulen med fördefinierade meddelanden mottagen: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="Begärda meddelanden för modulen med fördefinierade meddelanden för nod: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="Mottagna meddelanden för fördefinierade meddelanden För: %@";
|
||||
"mesh.log.channel.sent %@ %d"="Skickade en kanal för: %@ Kanalindex %d";
|
||||
"mesh.log.channel.received %d %@"="Kanal %d mottagen från: %@";
|
||||
"mesh.log.device.config %@"="Enhetskonfiguration mottagen: %@";
|
||||
"mesh.log.display.config %@"="Skärmkonfiguration mottagen: %@";
|
||||
"mesh.log.devicemetadata %@"="Begär metadata för enhet för %@";
|
||||
"mesh.log.device.metadata.received %@"="Metadata för enhet mottagen från: %@";
|
||||
"mesh.log.detectionsensor.config %@"="Konfiguration för detektionssensormodulen mottagen: %@";
|
||||
"mesh.log.externalnotification.config %@"="Konfiguration för modulen för externa notifikationer mottagen: %@";
|
||||
"mesh.log.lora.config %@"="LoRa-konfiguration mottagen: %@";
|
||||
"mesh.log.lora.config.sent %@"="Skickade en LoRa.Konfiguration för: %@";
|
||||
"mesh.log.mqtt.config %@"="MQTT-modulkonfiguration mottagen: %@";
|
||||
"mesh.log.myinfo %@"="Min info mottagen: %@";
|
||||
"mesh.log.network.config %@"="Nätverkskonfiguration mottagen: %@";
|
||||
"mesh.log.nodeinfo.received %@"="Nodinformation mottagen för: %@";
|
||||
"mesh.log.paxcounter %@"="PAX-räknarmeddelande mottaget från: %@";
|
||||
"mesh.log.paxcounter.config %@"="PAX-räknarkonfiguration mottagen: %@";
|
||||
"mesh.log.position.config %@"="Positionskonfiguration mottagen: %@";
|
||||
"mesh.log.position.received %@"="Positionspaket mottaget från nod: %@";
|
||||
"mesh.log.power.config %@"="Strömkonfiguration mottagen: %@";
|
||||
"mesh.log.rangetest.config %@"="Konfiguration för räckviddstestmodulen mottagen: %@";
|
||||
"mesh.log.ringtone.config %@"="Konfiguration för RTTTL-ringsignal mottagen: %@";
|
||||
"mesh.log.routing.message %@ %@"="Routing mottagen för RequestID: %@ Ack Status: %@";
|
||||
"mesh.log.serial.config %@"="Seriekonfigurationsmodul mottagen: %@";
|
||||
"mesh.log.sharelocation %@"="Skickade ett positionspaket från Apple-enhetens GPS till nod: %@";
|
||||
"mesh.log.storeforward.config %@"="Konfiguration för Store & Forward-modulen mottagen: %@";
|
||||
"mesh.log.telemetry.config %@"="Telemetrimodulkonfiguration mottagen: %@";
|
||||
"mesh.log.telemetry.received %@"="Telemetri mottagen för: %@";
|
||||
"mesh.log.textmessage.received"="Meddelande mottaget från textmeddelandeappen.";
|
||||
"mesh.log.textmessage.send.failed %@"="Misslyckades med att skicka meddelande, inte korrekt ansluten till %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="Skickade meddelande %@ från %@ till %@";
|
||||
"mesh.log.traceroute.received.direct %@"="Spårruttförfrågan skickad till nod: %@ mottogs direkt.";
|
||||
"mesh.log.traceroute.received.route %@"="Spårruttförfrågan returnerade: %@";
|
||||
"mesh.log.traceroute.sent %@"="Skickade en spårruttförfrågan till nod: %@";
|
||||
"mesh.log.wantconfig %@"="Utfärdar Want Config till %@";
|
||||
"mesh.log.waypoint.sent %@"="Skickade en vägpunktspaket från: %@";
|
||||
"mesh.log.waypoint.received %@"="Vägpunktspaket mottaget från nod: %@";
|
||||
"message"="Meddelande";
|
||||
"message.details"="Meddelandedetaljer";
|
||||
"messages"="Meddelanden";
|
||||
"mode"="Läge";
|
||||
"module.configuration"="Modulkonfiguration";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="Anslut till MQTT";
|
||||
"mqtt.config"="MQTT-konfiguration";
|
||||
"mqtt.clientproxy"="MQTT-klientproxy";
|
||||
"mqtt.disconnect"="Koppla från MQTT";
|
||||
"mqtt.username"="Användarnamn";
|
||||
"name"="Namn";
|
||||
"network"="Nätverk";
|
||||
"network.config"="Nätverkskonfiguration";
|
||||
"nodes"="Noder";
|
||||
"nodes %@"="Noder (%@)";
|
||||
"nodelist.filter.distance %@"="upp till %@ bort";
|
||||
"save.config %@"="Spara konfiguration för %@";
|
||||
"no.nodes"="Inga Meshtastic-noder hittades";
|
||||
"not.connected"="Ingen enhet ansluten";
|
||||
"numbers.punctuation"="Siffror och skiljetecken";
|
||||
"off"="Av";
|
||||
"offline"="Offline";
|
||||
"on.boot"="Endast vid uppstart";
|
||||
"options"="Alternativ";
|
||||
"password"="Lösenord";
|
||||
"pause"="Pausa";
|
||||
"paxcounter.ble"="BLE";
|
||||
"paxcounter.delete"="Radera all paxdata?";
|
||||
"paxcounter.wifi"="WiFi";
|
||||
"paxcounter.content.unavailable"="Inga loggar för PAX-räknare";
|
||||
"paxcounter.log"="PAX-räknarens logg";
|
||||
"paxcounter.total"="Totalt PAX";
|
||||
"phone.gps"="Telefon-GPS";
|
||||
"phone.gps.interval.description"="Hur ofta din telefon skickar din plats till enheten, platsuppdateringar till mesh-nätverket hanteras av enheten.";
|
||||
"position"="Position";
|
||||
"position.config"="Positionskonfiguration";
|
||||
"position.precision %@"="Inom %@";
|
||||
"preferred.radio"="Föredragen Radio";
|
||||
"radio.configuration"="Radioinställningar";
|
||||
"range.test"="Räckviddstest";
|
||||
"range.test.blocked"="Blockera räckviddstest";
|
||||
"range.test.config"="Konfiguration av räckviddstest";
|
||||
"reply"="Svara";
|
||||
"reboot"="Starta om";
|
||||
"reboot.node"="Starta om nod?";
|
||||
"received.ack"="Mottaget kvitto";
|
||||
"received.ack.real"="Mottagarkvitto";
|
||||
"resume"="Återuppta";
|
||||
"ringtone"="Ringsignal";
|
||||
"ringtone.config"="Ringsignalsinställningar";
|
||||
"route.recorder"="Ruttinspelare";
|
||||
"routes"="Rutter";
|
||||
"routing.acknowledged"="Bekräftad";
|
||||
"routing.noroute"="Ingen rutt";
|
||||
"routing.gotnak"="Mottog ett negativt kvitto";
|
||||
"routing.timeout"="Tidsgräns överskriden";
|
||||
"routing.nointerface"="Inget gränssnitt";
|
||||
"routing.maxretransmit"="Max antal omsändningar nått";
|
||||
"routing.nochannel"="Ingen kanal";
|
||||
"routing.toolarge"="Paketet är för stort";
|
||||
"routing.noresponse"="Inget svar";
|
||||
"routing.dutycyclelimit"="Regionala sändningsgränsen nådd";
|
||||
"routing.badRequest"="Felaktig begäran";
|
||||
"routing.notauthorized"="Inte auktoriserad";
|
||||
"satellite"="Satellit";
|
||||
"satellite.flyover"="Satellitöverflygning";
|
||||
"save"="Spara";
|
||||
"save.config %@"="Spara konfiguration för %@";
|
||||
"serial"="Serie";
|
||||
"serial.config"="Seriekonfiguration";
|
||||
"serial.mode.default"="Standard";
|
||||
"serial.mode.simple"="Enkel";
|
||||
"serial.mode.proto"="Protobufs";
|
||||
"serial.mode.txtmsg"="Textmeddelande";
|
||||
"serial.mode.nmea"="NMEA-positioner";
|
||||
"settings"="Inställningar";
|
||||
"share.channels"="Dela QR-kod";
|
||||
"share.position"="Dela position";
|
||||
"subscribed"="Prenumererar på mesh";
|
||||
"select.contact"="Välj en kontakt";
|
||||
"select.node"="Välj en nod";
|
||||
"select.menu.item"="Välj ett alternativ från menyn";
|
||||
"set.region"="Ställ in LoRa-region";
|
||||
"standard"="Standard";
|
||||
"standard.muted"="Standard Muted";
|
||||
"start"="Start";
|
||||
"storeforward"="Lagra & Videresänd";
|
||||
"storeforward.config"="Konfiguration för Lagra & Videresänd";
|
||||
"storeforward.heartbeat"="Skicka hjärtslag";
|
||||
"ssid"="SSID";
|
||||
"tapback"="Svarsreaktion";
|
||||
"tapback.heart"="Hjärta";
|
||||
"tapback.thumbsup"="Tummen upp";
|
||||
"tapback.thumbsdown"="Tummen ner";
|
||||
"tapback.haha"="HaHa";
|
||||
"tapback.exclamation"="Utropstecken";
|
||||
"tapback.question"="Frågetecken";
|
||||
"tapback.poop"="Bajs";
|
||||
"tapback.wave"="Vinka";
|
||||
"telemetry"="Telemetri (Sensorer)";
|
||||
"telemetry.config"="Telemetriinställningar";
|
||||
"timeout"="Tidsgräns överskriden";
|
||||
"timestamp"="Tidsstämpel";
|
||||
"tip.bluetooth.connect.title"="Ansluten Radio";
|
||||
"tip.bluetooth.connect.message"="Visar information för LoRa-radion ansluten via bluetooth. Du kan svepa åt vänster för att koppla från radion och långtryck för att visa statistik eller starta liveaktivitet.";
|
||||
"tip.channel.admin.title"="Administratörskanal";
|
||||
"tip.channel.admin.message"="Administratörskanal upptäckt: Välj en nod från rullgardinsmenyn för att hantera anslutna eller fjärranslutna enheter.";
|
||||
"tip.channels.create.title"="Hantera Kanaler";
|
||||
"tip.channels.create.message"="De flesta data i ditt mesh-nätverk skickas över primärkanalen. Du kan ställa in sekundära kanaler för att skapa ytterligare meddelandegrupper skyddade av sin egen nyckel. Tips för kanalkonfiguration";
|
||||
"tip.channels.share.title"="Dela Meshtastic-kanaler";
|
||||
"tip.channels.share.message"="En Meshtastic QR-kod innehåller LoRa-konfigurationen och kanalvärden som behövs för kommunikation. De flesta aktiviteter i mesh-nätverket sker på den obligatoriska primärkanalen. Om du inte delar din primärkanal blir din första delade kanal primärkanalen på det andra nätverket. Andra kanaler är för privata grupper, varje med sin egen nyckel.";
|
||||
"tip.messages.title"="Meddelanden";
|
||||
"tip.messages.message"="Du kan skicka och ta emot kanalmeddelanden (gruppchatt) och direkta meddelanden. Från alla meddelanden kan du långtrycka för att se tillgängliga åtgärder som kopiera, svara, tapback och radera samt leveransdetaljer.";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="Okänd";
|
||||
"unknown.age"="Okänd ålder";
|
||||
"unset"="Återställ";
|
||||
"update.firmware"="Uppdatera din firmware";
|
||||
"update.interval"="Uppdateringsintervall";
|
||||
"uptime"="Drifttid";
|
||||
"user"="Användare";
|
||||
"user.details"="Användaruppgifter";
|
||||
"voltage"="Spänning";
|
||||
"waiting"="Väntar...";
|
||||
"appsettings.newNodeNotifications"="New Node Notifications";
|
||||
|
|
@ -1,351 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Created by BG6TNB on 01/06/23.
|
||||
|
||||
*/
|
||||
"about"="关于";
|
||||
"about.meshtastic"="关于 Meshtastic";
|
||||
"activity"="活动";
|
||||
"admin"="管理员";
|
||||
"admin.log"="管理员消息日志";
|
||||
"ago"="之前";
|
||||
"airtime"="广播时间";
|
||||
"always.on"="常亮";
|
||||
"ambient.lighting"="氛围灯";
|
||||
"ambient.lighting.config"="氛围灯配置";
|
||||
"appsettings"="通用设置";
|
||||
"appsettings.provide.location"="提供定位到 Mesh 网络";
|
||||
"appsettings.smartposition"="智能定位";
|
||||
"are.you.sure"="是否确认?";
|
||||
"ascii.capable"="ASCII 兼容";
|
||||
"available.radios"="可以连接的电台";
|
||||
"automatic.detection"="自动识别";
|
||||
"battery.level"="电池电量";
|
||||
"ble.name"="蓝牙名称";
|
||||
"ble.connection.timeout %d %@"="尝试连接%@失败,你可能需要在系统设置的蓝牙选项中忽略该电台。";
|
||||
"ble.errorcode.6 %@"="%@ 如果在首选电台的旁边,App 将会自动重连。";
|
||||
"ble.errorcode.14 %@"="%@ 这个错误通常无法自动修复,你需要在系统设置的蓝牙选项中忽略该电台并重新配对。";
|
||||
"ble.errorcode.pin %@"="%@ 请再次尝试连接并仔细检查 PIN 码。";
|
||||
"bluetooth"="蓝牙";
|
||||
"bluetooth.off"="蓝牙已关闭";
|
||||
"bluetooth.config"="蓝牙配置";
|
||||
"bluetooth.mode.randompin"="随机 PIN 码";
|
||||
"bluetooth.mode.fixedpin"="固定 PIN 码";
|
||||
"bluetooth.mode.nopin"="不使用 PIN 码(直接配对)";
|
||||
"bluetooth.pairingmode"="配对模式";
|
||||
"bluetooth.pin.validation"="蓝牙 PIN 码必须是 6 位数字。";
|
||||
"bytes"="字节";
|
||||
"cancel"="取消";
|
||||
"canned.messages"="快捷消息";
|
||||
"canned.messages.config"="快捷消息配置";
|
||||
"canned.messages.preset.manual"="手动配置";
|
||||
"canned.messages.preset.rakrotary"="RAK 旋转编码器";
|
||||
"canned.messages.preset.cardkb"="M5Stack 卡片键盘 / RAK 键盘";
|
||||
"channel"="频道";
|
||||
"channel.role.disabled"="禁用";
|
||||
"channel.role.primary"="主要";
|
||||
"channel.role.secondary"="次要";
|
||||
"channel.utilization"="频道利用率";
|
||||
"channels"="频道";
|
||||
"clear.app.data"="清除 App 数据";
|
||||
"clear.log"="清除日志";
|
||||
"close"="关闭";
|
||||
"config.power.settings"="电源";
|
||||
"config.power.title"="电源配置";
|
||||
"config.power.section.battery"="电池";
|
||||
"config.power.section.sleep"="休眠";
|
||||
"config.power.adc.override"="ADC 修改";
|
||||
"config.power.adc.multiplier"="ADC 放大";
|
||||
"config.power.ls.secs"="轻度睡眠间隔";
|
||||
"config.power.min.wake.secs"="最小唤醒间隔";
|
||||
"config.power.saving"="省电模式";
|
||||
"config.power.saving.description"="尽可能将所有部件都置于休眠状态,对于跟踪器和传感器功能,这还包括 LoRa 无线电。如果您要使用手机应用程序或者使用没有用户按钮的设备,请不要使用这个设置。";
|
||||
"config.power.shutdown.on.power.loss"="断电时关机";
|
||||
"config.power.shutdown.after.secs"="After";
|
||||
"config.power.wait.bluetooth.secs"="蓝牙关闭 After";
|
||||
"config.ringtone"="RTTTL 铃声";
|
||||
"config.ringtone.title"="铃声配置";
|
||||
"config.ringtone.label"="铃声传输语言";
|
||||
"config.ringtone.description"="支持外部通知中使用的铃声传输语言 (RTTTL) 铃声字符串。";
|
||||
"config.module.paxcounter.settings"="PAX 计数器";
|
||||
"config.module.paxcounter.title"="PAX 计数器配置";
|
||||
"config.module.paxcounter.enabled.description"="启用 PAX 计数器模块时,通过使用 WiFi 和蓝牙来计算经过的人数。为了使 PAX 计数器正常工作,必须将 WiFi 和蓝牙都禁用。";
|
||||
"config.module.paxcounter.updateinterval"="更新间隔";
|
||||
"config.module.paxcounter.updateinterval.description"="检测到人员时,我们可以隔多久发送一条消息到 Mesh";
|
||||
"config.save.confirm"="电台将会在配置保存后重启。";
|
||||
"connected.radio"="已连接的电台";
|
||||
"communicating"="与电台进行通讯中...";
|
||||
"connected"="已连接到电台";
|
||||
"connecting"="连接中...";
|
||||
"contacts"="联系人";
|
||||
"contacts %@"="联系人 (%@)";
|
||||
"copy"="复制";
|
||||
"current"="当前";
|
||||
"default"="默认";
|
||||
"delete"="删除";
|
||||
"detection.sensor"="检测传感器";
|
||||
"device"="电台";
|
||||
"device.config"="电台配置";
|
||||
"device.configuration"="设备配置";
|
||||
"device.metrics.delete"="删除所有电台指标?";
|
||||
"device.metrics.log"="电台指标日志";
|
||||
"device.role.client"="标准模式 - App 可以连接到电台进行收发操作,并且会自动转发 Mesh 网络中其他节点的消息。";
|
||||
"device.role.clientmute"="静默模式 - 与标准模式类似,App 可以连接到电台进行收发操作,但不会转发 Mesh 网络中其他节点的消息。";
|
||||
"device.role.clienthidden"="用于\"只有在被请求时才发言\"的节点。关闭所有常规广播,但允许临时通信。仍然会进行转发,但采用本地转发模式(仅限已知的网络)。可用于私密操作或大幅减少空中时间/功耗。";
|
||||
"device.role.lostandfound"="用于定期自动向 Mesh 发送包含设备当前位置的文本消息的功能:\"I'm lost! Position: lat / long\"";
|
||||
"device.role.router"="纯路由模式 - 自动转发 Mesh 网络中其他节点的消息,中继模式下屏幕会熄灭,Wi-Fi 和蓝牙将会进入睡眠模式,App 将无法连接到电台进行收发操作。";
|
||||
"device.role.routerclient"="路由客户端模式 - 优先转发 Mesh 网络中其他节点的消息,App 也可以连接到电台进行收发操作。";
|
||||
"device.role.repeater"="中继模式 - Mesh 网络数据包将优先通过此节点路由。此模式可消除不必要的开销,如节点信息、设备遥测和任何其他 Mesh 数据包,从而使设备不显示为 Mesh 网络的一部分。有关此角色的其他特定设置,请参阅转播模式。";
|
||||
"device.role.tracker"="定位模式 - 用于作为 GPS 跟踪器。从该设备发送的定位数据包优先级较高,每两分钟广播一次。智能位置广播默认为关闭。";
|
||||
"device.role.lostandfound"="定期向默认通道广播位置信息,以帮助寻回设备。";
|
||||
"device.role.sensor"="将遥测数据包优先广播。";
|
||||
"device.role.tak"="针对 ATAK 系统通信进行优化,减少常规广播。";
|
||||
"device.role.taktracker"="启用自动 TAK PLI(Position Location Information)广播,并减少常规广播。";
|
||||
"direct.messages"="直频消息";
|
||||
"dismiss.keyboard"="隐藏键盘";
|
||||
"display"="屏幕(电台屏幕)";
|
||||
"display.config"="屏幕配置";
|
||||
"distance"="距离";
|
||||
"disconnect"="断开连接";
|
||||
"echo"="回声";
|
||||
"email.address"="邮件地址";
|
||||
"enabled"="启用";
|
||||
"encrypted"="加密";
|
||||
"export"="Export";
|
||||
"external.notification"="外部通知";
|
||||
"external.notification.config"="外部通知配置";
|
||||
"finish"="Finish";
|
||||
"firmware.version"="固件版本";
|
||||
"firmware.version.unsupported"="检测到不支持的固件版本,无法连接到电台。";
|
||||
"gas"="气体";
|
||||
"gas.resistance"="气体阻抗";
|
||||
"generate.qr.code"="生成二维码";
|
||||
"gpsformat.dec"="十进制";
|
||||
"gpsformat.dms"="度分秒";
|
||||
"gpsformat.utm"="通用横轴墨卡托投影";
|
||||
"gpsformat.mgrs"="军事网格参考系统";
|
||||
"gpsformat.olc"="开放的位置代码(又称加码)";
|
||||
"gpsformat.osgr"="英国国土测量局网格参考";
|
||||
"heard"="收到";
|
||||
"heard.last"="最后收到";
|
||||
"hybrid"="混合";
|
||||
"hybrid.flyover"="混合视图";
|
||||
"include"="包含";
|
||||
"incomplete"="Incomplete";
|
||||
"inputevent.none"="无";
|
||||
"inputevent.up"="上";
|
||||
"inputevent.down"="下";
|
||||
"inputevent.left"="左";
|
||||
"inputevent.right"="右";
|
||||
"inputevent.select"="选择";
|
||||
"inputevent.back"="后退";
|
||||
"inputevent.cancel"="取消";
|
||||
"interval.one.second"="一秒";
|
||||
"interval.two.seconds"="两秒";
|
||||
"interval.three.seconds"="三秒";
|
||||
"interval.four.seconds"="四秒";
|
||||
"interval.five.seconds"="五秒";
|
||||
"interval.ten.seconds"="十秒";
|
||||
"interval.fifteen.seconds"="十五秒";
|
||||
"interval.twenty.seconds"="二十秒";
|
||||
"interval.twentyfive.seconds"="二十五秒";
|
||||
"interval.thirty.seconds"="三十秒";
|
||||
"interval.fortyfive.seconds"="四十五秒";
|
||||
"interval.one.minute"="一分钟";
|
||||
"interval.two.minutes"="两分钟";
|
||||
"interval.five.minutes"="五分钟";
|
||||
"interval.ten.minutes"="十分钟";
|
||||
"interval.fifteen.minutes"="十五分钟";
|
||||
"interval.thirty.minutes"="三十分钟";
|
||||
"interval.one.hour"="一小时";
|
||||
"interval.two.hours"="两小时";
|
||||
"interval.three.hours"="三小时";
|
||||
"interval.four.hours"="四小时";
|
||||
"interval.five.hours"="五小时";
|
||||
"interval.six.hours"="六小时";
|
||||
"interval.twelve.hours"="十二小时";
|
||||
"interval.eighteen.hours"="十八小时";
|
||||
"interval.twentyfour.hours"="二十四小时";
|
||||
"interval.thirtysix.hours"="三十六小时";
|
||||
"interval.tyeight.hours"="四十八小时小时";
|
||||
"interval.eventytwo.hours"="七十二小时";
|
||||
"keyboard.type"="键盘类型";
|
||||
"logging"="加载中";
|
||||
"log.time"="Time";
|
||||
"log.subsystem"="Subsystem";
|
||||
"log.process"="Process";
|
||||
"log.category"="Category";
|
||||
"log.level"="Level";
|
||||
"log.message"="Message";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="LoRa 配置";
|
||||
"map"="Mesh 地图";
|
||||
"map.centering"="居中";
|
||||
"map.tiles.delete"="删除已缓存的地图区块";
|
||||
"map.recentering"="自动重新居中";
|
||||
"map.use.legacy"="使用传统网状地图";
|
||||
"map.type"="地图类型";
|
||||
"map.usertrackingmode"="用户跟随模式";
|
||||
"map.usertrackingmode.none"="无";
|
||||
"map.usertrackingmode.follow"="跟随";
|
||||
"map.usertrackingmode.followwithheading"="跟随航向";
|
||||
"mesh.live.activity"="Mesh 实时活动";
|
||||
"mesh.log"="Mesh 日志";
|
||||
"mesh.log.ambientlighting.config %@"="Ambient Lighting module config received: %@";
|
||||
"mesh.log.bluetooth.config %@"="Bluetooth config received: %@";
|
||||
"mesh.log.cannedmessage.config %@"="Canned Message module config received: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="Requested Canned Messages Module Messages for node: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="Canned Messages Messages Received For: %@";
|
||||
"mesh.log.channel.sent %@ %d"="Sent a Channel for: %@ Channel Index %d";
|
||||
"mesh.log.channel.received %d %@"="Channel %d received from: %@";
|
||||
"mesh.log.device.config %@"="Device config received: %@";
|
||||
"mesh.log.display.config %@"="Display config received: %@";
|
||||
"mesh.log.devicemetadata %@"="Requesting Device Metadata for %@";
|
||||
"mesh.log.device.metadata.received %@"="Device Metadata admin message received from: %@";
|
||||
"mesh.log.detectionsensor.config %@"="Detection Sensor module config received: %@";
|
||||
"mesh.log.externalnotification.config %@"="External Notification module config received: %@";
|
||||
"mesh.log.lora.config %@"="LoRa config received: %@";
|
||||
"mesh.log.lora.config.sent %@"="Sent a LoRa.Config for: %@";
|
||||
"mesh.log.mqtt.config %@"="MQTT module config received: %@";
|
||||
"mesh.log.myinfo %@"="MyInfo received: %@";
|
||||
"mesh.log.network.config %@"="Network config received: %@";
|
||||
"mesh.log.nodeinfo.received %@"="Node info received for: %@";
|
||||
"mesh.log.paxcounter %@"="PAX Counter message received for: %@";
|
||||
"mesh.log.position.config %@"="Positon config received: %@";
|
||||
"mesh.log.position.received %@"="Position Packet received from node: %@";
|
||||
"mesh.log.rangetest.config %@"="Range Test module config received: %@";
|
||||
"mesh.log.ringtone.config %@"="RTTTL Ringtone config received: %@";
|
||||
"mesh.log.routing.message %@ %@"="Routing received for RequestID: %@ Ack Status: %@";
|
||||
"mesh.log.serial.config %@"="Serial module config received: %@";
|
||||
"mesh.log.sharelocation %@"="Sent a Position Packet from the Apple device GPS to node: %@";
|
||||
"mesh.log.storeforward.config %@"="Store & Forward module config received: %@";
|
||||
"mesh.log.telemetry.config %@"="Telemetry module config received: %@";
|
||||
"mesh.log.telemetry.received %@"="Telemetry received for: %@";
|
||||
"mesh.log.textmessage.received"="Message received from the text message app.";
|
||||
"mesh.log.textmessage.send.failed %@"="Message Send Failed, not properly connected to %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="Sent message %@ from %@ to %@";
|
||||
"mesh.log.traceroute.received.direct %@"="Trace Route request sent to node: %@ was recieived directly.";
|
||||
"mesh.log.traceroute.received.route %@"="Trace Route request returned: %@";
|
||||
"mesh.log.traceroute.sent %@"="Sent a Trace Route Request to node: %@";
|
||||
"mesh.log.wantconfig %@"="Issuing Want Config to %@";
|
||||
"mesh.log.waypoint.sent %@"="Sent a Waypoint Packet from: %@";
|
||||
"mesh.log.waypoint.received %@"="Waypoint Packet received from node: %@";
|
||||
"message"="消息";
|
||||
"message.details"="消息详情";
|
||||
"messages"="消息";
|
||||
"mode"="模式";
|
||||
"module.configuration"="模块配置";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="连接至 MQTT";
|
||||
"mqtt.config"="MQTT 配置";
|
||||
"mqtt.clientproxy"="MQTT 客户端代理";
|
||||
"mqtt.disconnect"="断开 MQTT 连接";
|
||||
"mqtt.username"="用户名称";
|
||||
"name"="名称";
|
||||
"network"="网络";
|
||||
"network.config"="网络配置";
|
||||
"nodes"="节点";
|
||||
"nodes %@"="节点 (%@)";
|
||||
"nodelist.filter.distance %@"="最远距离 %@";
|
||||
"no.nodes"="未找到 Meshtastic 节点";
|
||||
"not.connected"="未连接到电台";
|
||||
"numbers.punctuation"="数字和标点符号";
|
||||
"off"="关闭";
|
||||
"offline"="离线";
|
||||
"on.boot"="仅在启动时";
|
||||
"options"="选项";
|
||||
"password"="密码";
|
||||
"pause"="暂停";
|
||||
"phone.gps"="手机 GPS";
|
||||
"phone.gps.interval.description"="电台通过手机获取定位的时间间隔,但是向 Mesh 网络中刷新定位的时间间隔由电台控制。";
|
||||
"position"="定位";
|
||||
"position.config"="定位配置";
|
||||
"preferred.radio"="首选电台";
|
||||
"radio.configuration"="电台配置";
|
||||
"range.test"="拉距测试";
|
||||
"range.test.blocked"="区块范围测试";
|
||||
"range.test.config"="拉距测试配置";
|
||||
"reply"="回复";
|
||||
"reboot"="重启";
|
||||
"reboot.node"="重启节点?";
|
||||
"received.ack"="收到确认";
|
||||
"received.ack.real"="收件人确认";
|
||||
"resume"="恢复";
|
||||
"ringtone"="铃声";
|
||||
"ringtone.config"="铃声设置";
|
||||
"route.recorder"="路径记录器";
|
||||
"routes"="路径";
|
||||
"routing.acknowledged"="确认";
|
||||
"routing.noroute"="找不到目标";
|
||||
"routing.gotnak"="收到否认";
|
||||
"routing.timeout"="超时";
|
||||
"routing.nointerface"="无连接";
|
||||
"routing.maxretransmit"="已达到最大重试次数";
|
||||
"routing.nochannel"="没有频道";
|
||||
"routing.toolarge"="数据包过大";
|
||||
"routing.noresponse"="无响应";
|
||||
"routing.dutycyclelimit"="已达到当前区域循环周期发射上限";
|
||||
"routing.badRequest"="错误请求";
|
||||
"routing.notauthorized"="未授权";
|
||||
"satellite"="卫星";
|
||||
"satellite.flyover"="卫星视图";
|
||||
"save"="保存";
|
||||
"save.config %@"="保存%@的配置";
|
||||
"serial"="串口";
|
||||
"serial.config"="串口配置";
|
||||
"serial.mode.default"="默认";
|
||||
"serial.mode.simple"="简单";
|
||||
"serial.mode.proto"="Protobufs";
|
||||
"serial.mode.txtmsg"="文本消息";
|
||||
"serial.mode.nmea"="NMEA 位置";
|
||||
"settings"="设置";
|
||||
"share.channels"="分享频道二维码";
|
||||
"share.position"="分享位置";
|
||||
"subscribed"="连接到 Mesh 网络";
|
||||
"select.contact"="选择一名联系人";
|
||||
"select.node"="选择一个节点";
|
||||
"select.menu.item"="从菜单选择一个选项";
|
||||
"set.region"="设置 LoRa 区域";
|
||||
"standard"="标准";
|
||||
"standard.muted"="标准静音";
|
||||
"start"="开始";
|
||||
"ssid"="SSID";
|
||||
"storeforward"="储存 & 转发";
|
||||
"storeforward.config"="储存 & 转发设置";
|
||||
"storeforward.heartbeat"="发送心跳包";
|
||||
"tapback"="响应";
|
||||
"tapback.heart"="心";
|
||||
"tapback.thumbsup"="竖大拇指";
|
||||
"tapback.thumbsdown"="倒大拇指";
|
||||
"tapback.haha"="哈哈";
|
||||
"tapback.exclamation"="感叹号";
|
||||
"tapback.question"="问号";
|
||||
"tapback.poop"="便便";
|
||||
"tapback.wave"="Wave";
|
||||
"telemetry"="遥测(传感器)";
|
||||
"telemetry.config"="遥测配置";
|
||||
"timeout"="超时";
|
||||
"timestamp"="时间戳";
|
||||
"tip.bluetooth.connect.title"="连接到 LoRa 电台";
|
||||
"tip.bluetooth.connect.message"="显示当前通过蓝牙连接的 Lora 电台的信息。您可以向左滑动断开电台,长按查看统计信息或开始实时活动。";
|
||||
"tip.channel.admin.title"="admin 频道";
|
||||
"tip.channel.admin.message"="检测到 admin 频道:请从下拉菜单中选择一个节点,来管理已连接或远程设备。";
|
||||
"tip.channels.create.title"="管理频道";
|
||||
"tip.channels.create.message"="大多数 Mesh 上的数据都通过主要频道发送。您可以设置次要频道,以创建额外的消息组,并通过其自己的密钥进行安全保护。 [频道配置提示](https://meshtastic.org/docs/configuration/radio/channels/)";
|
||||
"tip.channels.share.title"="共享 Meshtastic 频道";
|
||||
"tip.channels.share.message"="在 Meshtastic 网络中最多有 8 个频道。第一个频道是主频道,大多数活动都发生在这里,也是必需的。如果您不共享主频道,您的第一个共享频道就会成为其他网络的主频道。它会在其主频道和您的辅助频道上对话。名称为 admin 的频道可远程控制节点。其他频道用于私人群组,每个群组都有自己的密钥。";
|
||||
"tip.messages.title"="消息";
|
||||
"tip.messages.message"="您可以发送和接收直频消息和群聊。在任何信息中,您都可以长按查看可用的操作,如复制、回复、拍一拍、删除以及详情。";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="未知";
|
||||
"unknown.age"="未知时间";
|
||||
"unset"="未设置";
|
||||
"update.firmware"="更新你的固件";
|
||||
"update.interval"="更新间隔";
|
||||
"user"="用户";
|
||||
"user.details"="用户信息";
|
||||
"voltage"="电压";
|
||||
"waiting"="等待中...";
|
||||
"appsettings.newNodeNotifications"="新节点通知";
|
||||
|
|
@ -1,351 +0,0 @@
|
|||
/*
|
||||
Localizable.strings
|
||||
Meshtastic
|
||||
|
||||
Created by BM6HIP on 2024/3/2
|
||||
Updated by Oliver on 2024/5/9
|
||||
|
||||
*/
|
||||
"about"="關於";
|
||||
"about.meshtastic"="關於 Meshtastic";
|
||||
"activity"="Activity";
|
||||
"admin"="管理員";
|
||||
"admin.log"="管理員消息紀錄檔";
|
||||
"ago"="ago";
|
||||
"airtime"="廣播時間";
|
||||
"always.on"="常亮";
|
||||
"ambient.lighting"="環境照明";
|
||||
"ambient.lighting.config"="環境照明設定";
|
||||
"appsettings"="設定";
|
||||
"appsettings.provide.location"="提供定位到 Mesh 網路";
|
||||
"appsettings.smartposition"="智能定位";
|
||||
"are.you.sure"="是否確定?";
|
||||
"ascii.capable"="支援 ASCII";
|
||||
"available.radios"="可以連接的設備";
|
||||
"automatic.detection"="自動識別";
|
||||
"battery.level"="電池電量";
|
||||
"ble.name"="藍芽名稱";
|
||||
"ble.connection.timeout %d %@"="嘗試連接%@失敗,你可能需要在系统設定的藍芽選項中忽略該電台。";
|
||||
"ble.errorcode.6 %@"="%@ 如果在首選電台的旁邊,App 將會自動重連。";
|
||||
"ble.errorcode.14 %@"="%@ 這個錯誤通常無法自動修復,你需要在系統設定的藍芽選項中忽略該電台並重新配對。";
|
||||
"ble.errorcode.pin %@"="%@ 請再次嘗試連接並仔細檢查 PIN 碼。";
|
||||
"bluetooth"="藍芽";
|
||||
"bluetooth.off"="藍芽已關閉";
|
||||
"bluetooth.config"="藍芽設置";
|
||||
"bluetooth.mode.randompin"="隨機 PIN 碼";
|
||||
"bluetooth.mode.fixedpin"="固定 PIN 碼";
|
||||
"bluetooth.mode.nopin"="不使用 PIN 碼(直接配對)";
|
||||
"bluetooth.pairingmode"="配對模式";
|
||||
"bluetooth.pin.validation"="藍芽 PIN 碼必須是 6 位數字。";
|
||||
"bytes"="位元組";
|
||||
"cancel"="取消";
|
||||
"canned.messages"="罐頭訊息";
|
||||
"canned.messages.config"="通知設定";
|
||||
"canned.messages.preset.manual"="手動設定";
|
||||
"canned.messages.preset.rakrotary"="RAK 旋轉編碼器";
|
||||
"canned.messages.preset.cardkb"="M5Stack 卡片鍵盤 / RAK 鍵盤";
|
||||
"channel"="頻道";
|
||||
"channel.role.disabled"="關閉";
|
||||
"channel.role.primary"="主要";
|
||||
"channel.role.secondary"="次要";
|
||||
"channel.utilization"="頻道利用率";
|
||||
"channels"="頻道";
|
||||
"clear.app.data"="清除 App 資料";
|
||||
"clear.log"="清除紀錄檔";
|
||||
"close"="關閉";
|
||||
"config.power.settings"="電源";
|
||||
"config.power.title"="電源設定";
|
||||
"config.power.section.battery"="電池";
|
||||
"config.power.section.sleep"="休眠";
|
||||
"config.power.adc.override"="ADC校正";
|
||||
"config.power.adc.multiplier"="修正倍數";
|
||||
"config.power.ls.secs"="輕度休眠間隔";
|
||||
"config.power.min.wake.secs"="最小的喚醒間隔時間";
|
||||
"config.power.saving"="省電模式";
|
||||
"config.power.saving.description"="為了追蹤器和感測器的角色,這將包括將 LoRa 無線電設備盡可能地進入睡眠模式。如果您想要使用手機應用程式操作您的設備,或者使用沒有用戶按鈕的設備,請不要使用此設定。";
|
||||
"config.power.shutdown.on.power.loss"="失去電源後關機";
|
||||
"config.power.shutdown.after.secs"="之後";
|
||||
"config.power.wait.bluetooth.secs"="等待藍芽";
|
||||
"config.ringtone"="RTTTL 鈴聲";
|
||||
"config.ringtone.title"="鈴聲";
|
||||
"config.ringtone.label"="鈴聲傳輸語言(RTTTL)";
|
||||
"config.ringtone.description"="RTTTL 鈴聲字串(Ringtone Transfer Language)被用於外部通知中支援的蜂鳴器。";
|
||||
"config.module.paxcounter.settings"="人流計數器";
|
||||
"config.module.paxcounter.title"="人流計數器設定";
|
||||
"config.module.paxcounter.enabled.description"="啟用後,人流計數器模組將透過 WiFi 和藍牙計算經過的人數。必須停用 WiFi 和藍牙才能讓 PAX 計數器正常工作。";
|
||||
"config.module.paxcounter.updateinterval"="更新時間間隔";
|
||||
"config.module.paxcounter.updateinterval.description"="當檢測到人員時,我們可以多久發送一次訊息到網狀網路。";
|
||||
"config.save.confirm"="電台將會在設定儲存後重啟。";
|
||||
"connected.radio"="已連接的電台";
|
||||
"communicating"="與電台進行通訊中...";
|
||||
"connected"="已連接";
|
||||
"connecting"="連接中...";
|
||||
"contacts"="聯絡人";
|
||||
"contacts %@"="聯絡人 (%@)";
|
||||
"copy"="複製";
|
||||
"current"="目前";
|
||||
"default"="預設";
|
||||
"delete"="刪除";
|
||||
"detection.sensor"="檢測感測器";
|
||||
"device"="設備";
|
||||
"device.config"="電台設定";
|
||||
"device.configuration"="設備設定";
|
||||
"device.metrics.delete"="刪除所有電台指標??";
|
||||
"device.metrics.log"="電台指標紀錄檔";
|
||||
"device.role.client"="標準模式 - App 可以連接到電台進行收發操作,並且會自動轉發 Mesh 網路中其他中繼點的消息。";
|
||||
"device.role.clientmute"="靜音模式 - 與標準模式類似,App 可以連接到電台進行收發操作,但不會轉發 Mesh 網路中其他中繼點的消息。";
|
||||
"device.role.clienthidden"="隱藏模式 - 用於那些\"只在被問到時才回答\"的節點,關閉所有常規廣播,但允許臨時通訊。依然會進行轉播,但只在本地轉播模式下進行(僅限已知的網狀網路)。可以用於私密操作或顯著減少空中時間/功耗。";
|
||||
"device.role.lostandfound"="遺失物模式 - 用於自動頻繁地向網狀網路發送一條包含設備當前位置的短信:\"I'm lost! Position: lat / long\"";
|
||||
"device.role.router"="纯路由模式 - 自動轉發 Mesh 網路中其他中繼點的消息,中繼模式下螢幕會熄滅,Wi-Fi 和藍芽將會進入睡眠模式,App 將無法連接到電台進行收發操作。";
|
||||
"device.role.routerclient"="路由客户端模式 - 優先轉發 Mesh 網路中其他中繼點的消息,App 也可以連接到電台進行收發操作。";
|
||||
"device.role.repeater"="中繼模式 - Mesh 網路數據包將優先通過此中繼點路由。此模式可消除不必要的開銷,如 NodeInfo、DeviceTelemetry 和任何其他 Mesh 數據包,從而使設備不顯示為 Mesh 網路的一部分。有關此角色的其他特定設置,請參閱轉播模式。";
|
||||
"device.role.tracker"="追蹤模式 - 用於作為 GPS 追蹤器。從該設備發送的定位數據包優先級較高,每兩分鐘廣播一次。智能位置廣播預設為關閉。";
|
||||
"device.role.sensor"="傳感器模式 - 優先廣播傳感器數據包";
|
||||
"device.role.tak"="TAK模式 - 優化了 ATAK 系統通訊,減少常規廣播。";
|
||||
"device.role.taktracker"="TAK TRACKER追蹤器 - 啟用自動 TAK PLI 廣播並減少常規廣播。";
|
||||
"direct.messages"="聊天";
|
||||
"dismiss.keyboard"="隱藏鍵盤";
|
||||
"display"="螢幕(電台螢幕)";
|
||||
"display.config"="螢幕設定";
|
||||
"distance"="距離";
|
||||
"disconnect"="斷開連接";
|
||||
"echo"="echo";
|
||||
"email.address"="電子信箱";
|
||||
"enabled"="啟用";
|
||||
"encrypted"="加密";
|
||||
"export"="匯出";
|
||||
"external.notification"="外部通知";
|
||||
"external.notification.config"="外部通知設定";
|
||||
"finish"="完成";
|
||||
"firmware.version"="韌體版本";
|
||||
"firmware.version.unsupported"="檢測到不支援的韌體版本,無法連接到電台。";
|
||||
"gas"="Gas";
|
||||
"gas.resistance"="Gas Resistance";
|
||||
"generate.qr.code"="生成QRcode";
|
||||
"gpsformat.dec"="十進制";
|
||||
"gpsformat.dms"="度分秒";
|
||||
"gpsformat.utm"="通用橫軸墨卡托投影";
|
||||
"gpsformat.mgrs"="軍事網格參考系統";
|
||||
"gpsformat.olc"="開放位置代碼";
|
||||
"gpsformat.osgr"="英國國土測量局網格參考系統";
|
||||
"heard"="收到";
|
||||
"heard.last"="最後收到";
|
||||
"hybrid"="混合";
|
||||
"hybrid.flyover"="混合視圖";
|
||||
"include"="包含";
|
||||
"incomplete"="Incomplete";
|
||||
"inputevent.none"="無";
|
||||
"inputevent.up"="上";
|
||||
"inputevent.down"="下";
|
||||
"inputevent.left"="左";
|
||||
"inputevent.right"="右";
|
||||
"inputevent.select"="選擇";
|
||||
"inputevent.back"="返回";
|
||||
"inputevent.cancel"="取消";
|
||||
"interval.one.second"="一秒";
|
||||
"interval.two.seconds"="兩秒";
|
||||
"interval.three.seconds"="三秒";
|
||||
"interval.four.seconds"="四秒";
|
||||
"interval.five.seconds"="五秒";
|
||||
"interval.ten.seconds"="十秒";
|
||||
"interval.fifteen.seconds"="十五秒";
|
||||
"interval.twenty.seconds"="二十秒";
|
||||
"interval.twentyfive.seconds"="二十五秒";
|
||||
"interval.thirty.seconds"="三十秒";
|
||||
"interval.fortyfive.seconds"="四十五秒";
|
||||
"interval.one.minute"="一分鐘";
|
||||
"interval.two.minutes"="兩分鐘";
|
||||
"interval.five.minutes"="五分鐘";
|
||||
"interval.ten.minutes"="十分鐘";
|
||||
"interval.fifteen.minutes"="十五分鐘";
|
||||
"interval.thirty.minutes"="三十分鐘";
|
||||
"interval.one.hour"="一小時";
|
||||
"interval.two.hours"="兩小時";
|
||||
"interval.three.hours"="三小時";
|
||||
"interval.four.hours"="四小時";
|
||||
"interval.five.hours"="五小時";
|
||||
"interval.six.hours"="六小時";
|
||||
"interval.twelve.hours"="十二小時";
|
||||
"interval.eighteen.hours"="十八小時";
|
||||
"interval.twentyfour.hours"="二十四小時";
|
||||
"interval.thirtysix.hours"="三十六小時";
|
||||
"interval.tyeight.hours"="四十八小时小時";
|
||||
"interval.eventytwo.hours"="七十二小時";
|
||||
"keyboard.type"="鍵盤類型";
|
||||
"logging"="加載中";
|
||||
"log.time"="Time";
|
||||
"log.subsystem"="Subsystem";
|
||||
"log.process"="Process";
|
||||
"log.category"="Category";
|
||||
"log.level"="Level";
|
||||
"log.message"="Message";
|
||||
"lora"="LoRa";
|
||||
"lora.config"="LoRa 設定";
|
||||
"map"="Mesh 地圖";
|
||||
"map.centering"="置中";
|
||||
"map.tiles.delete"="刪除已緩存的地圖區塊";
|
||||
"map.recentering"="自動重新居中";
|
||||
"map.use.legacy"="使用傳統Mesh地圖";
|
||||
"map.type"="地圖類型";
|
||||
"map.usertrackingmode"="使用者跟隨模式";
|
||||
"map.usertrackingmode.none"="無";
|
||||
"map.usertrackingmode.follow"="跟隨";
|
||||
"map.usertrackingmode.followwithheading"="跟隨與方向";
|
||||
"mesh.live.activity"="Mesh 即時活動";
|
||||
"mesh.log"="Mesh 紀錄檔";
|
||||
"mesh.log.ambientlighting.config %@"="Ambient Lighting module config received: %@";
|
||||
"mesh.log.bluetooth.config %@"="Bluetooth config received: %@";
|
||||
"mesh.log.cannedmessage.config %@"="Canned Message module config received: %@";
|
||||
"mesh.log.cannedmessages.messages.get %@"="Requested Canned Messages Module Messages for node: %@";
|
||||
"mesh.log.cannedmessages.messages.received %@"="Canned Messages Messages Received For: %@";
|
||||
"mesh.log.channel.sent %@ %d"="Sent a Channel for: %@ Channel Index %d";
|
||||
"mesh.log.channel.received %d %@"="Channel %d received from: %@";
|
||||
"mesh.log.device.config %@"="收到裝置設定: %@";
|
||||
"mesh.log.display.config %@"="收到顯示模組設定: %@";
|
||||
"mesh.log.devicemetadata %@"="請求設備元數據:%@";
|
||||
"mesh.log.device.metadata.received %@"="從 %@ 收到設備元數據管理消息";
|
||||
"mesh.log.detectionsensor.config %@"="收到偵測感應器模組配置:%@";
|
||||
"mesh.log.externalnotification.config %@"="收到外部通知模組配置:%@";
|
||||
"mesh.log.lora.config %@"="收到LoRa設定: %@";
|
||||
"mesh.log.lora.config.sent %@"="發送LoRa配置給:%@";
|
||||
"mesh.log.mqtt.config %@"="收到MQTT模組配置:%@";
|
||||
"mesh.log.myinfo %@"="收到我的資訊:%@";
|
||||
"mesh.log.network.config %@"="收到網路設定: %@";
|
||||
"mesh.log.nodeinfo.received %@"="收到中繼點訊息: %@";
|
||||
"mesh.log.paxcounter %@"="為 %@ 收到PAX計數器消息";
|
||||
"mesh.log.position.config %@"="收到位置配置:%@";
|
||||
"mesh.log.position.received %@"="從中繼點接收到定位封包: %@";
|
||||
"mesh.log.rangetest.config %@"="收到拉距測試模組設定: %@";
|
||||
"mesh.log.ringtone.config %@"="收到RTTTL鈴聲配置:%@";
|
||||
"mesh.log.routing.message %@ %@"="為請求ID: %@ 收到路由 Ack狀態: %@";
|
||||
"mesh.log.serial.config %@"="收到串列模組配置:%@";
|
||||
"mesh.log.sharelocation %@"="傳送iOS裝置的GPS定位封包到中繼點上: %@";
|
||||
"mesh.log.storeforward.config %@"="收到儲存與轉發模組配置:%@";
|
||||
"mesh.log.telemetry.config %@"="收到遠測模組設定: %@";
|
||||
"mesh.log.telemetry.received %@"="收到遠測資料: %@";
|
||||
"mesh.log.textmessage.received"="從文字消息應用程序收到消息。";
|
||||
"mesh.log.textmessage.send.failed %@"="訊息傳送失敗, 沒有正確連接到 %@";
|
||||
"mesh.log.textmessage.sent %@ %@ %@"="傳送訊息 %@ 從 %@ 到 %@";
|
||||
"mesh.log.traceroute.received.direct %@"="直接收到發送至節點的追蹤路由請求:%@";
|
||||
"mesh.log.traceroute.received.route %@"="返回的追蹤路由請求:%@";
|
||||
"mesh.log.traceroute.sent %@"="發送追蹤路由請求至節點:%@";
|
||||
"mesh.log.wantconfig %@"="對 %@ 發出配置請求";
|
||||
"mesh.log.waypoint.sent %@"="從 %@ 發送航點封包";
|
||||
"mesh.log.waypoint.received %@"="從節點收到航點封包:%@";
|
||||
"message"="訊息";
|
||||
"message.details"="詳細訊息";
|
||||
"messages"="訊息";
|
||||
"mode"="模式";
|
||||
"module.configuration"="模塊設定";
|
||||
"mqtt"="MQTT";
|
||||
"mqtt.connect"="連線到 MQTT";
|
||||
"mqtt.config"="MQTT 設定";
|
||||
"mqtt.clientproxy"="MQTT 客户端代理";
|
||||
"mqtt.disconnect"="是否與 MQTT 連接";
|
||||
"mqtt.username"="用戶名稱";
|
||||
"name"="名稱";
|
||||
"network"="網路";
|
||||
"network.config"="網路設定";
|
||||
"nodes"="中繼點";
|
||||
"nodes %@"="中繼點 (%@)";
|
||||
"nodelist.filter.distance %@"="距離達 %@ 以內";
|
||||
"no.nodes"="未找到 Meshtastic 中繼點";
|
||||
"not.connected"="未連接到電台";
|
||||
"numbers.punctuation"="數字和標點符號";
|
||||
"off"="關閉";
|
||||
"offline"="離線";
|
||||
"on.boot"="只在啟動時";
|
||||
"options"="選項";
|
||||
"password"="密碼";
|
||||
"pause"="暫停";
|
||||
"phone.gps"="手機 GPS";
|
||||
"phone.gps.interval.description"="電台通過手機獲得定位的時間間隔,但是向 Mesh 網路中更新定位的時間間隔由電台控制。";
|
||||
"position"="定位";
|
||||
"position.config"="定位設定";
|
||||
"preferred.radio"="首選電台";
|
||||
"radio.configuration"="電台設定";
|
||||
"range.test"="拉距測試";
|
||||
"range.test.blocked"="區塊範圍測試";
|
||||
"range.test.config"="拉距測試設定";
|
||||
"reply"="回復";
|
||||
"reboot"="重新啟動";
|
||||
"reboot.node"="重啟中繼點";
|
||||
"received.ack"="收到確認";
|
||||
"received.ack.real"="收件人確認";
|
||||
"resume"="恢復";
|
||||
"ringtone"="鈴聲";
|
||||
"ringtone.config"="鈴聲設定";
|
||||
"route.recorder"="路線錄製";
|
||||
"routes"="路線";
|
||||
"routing.acknowledged"="確認";
|
||||
"routing.noroute"="找不到目標";
|
||||
"routing.gotnak"="收到否認";
|
||||
"routing.timeout"="逾時";
|
||||
"routing.nointerface"="無連接";
|
||||
"routing.maxretransmit"="已達到最大重試次數";
|
||||
"routing.nochannel"="没有頻道";
|
||||
"routing.toolarge"="數據包過大";
|
||||
"routing.noresponse"="無回應";
|
||||
"routing.dutycyclelimit"="已達到頻道占用循環週期發射上限";
|
||||
"routing.badRequest"="錯誤請求";
|
||||
"routing.notauthorized"="未授權";
|
||||
"satellite"="衛星";
|
||||
"satellite.flyover"="衛星識圖";
|
||||
"save"="儲存";
|
||||
"save.config %@"="儲存%@的設定";
|
||||
"serial"="串口";
|
||||
"serial.config"="串口設定";
|
||||
"serial.mode.default"="預設";
|
||||
"serial.mode.simple"="簡單";
|
||||
"serial.mode.proto"="Protobufs";
|
||||
"serial.mode.txtmsg"="文本訊息";
|
||||
"serial.mode.nmea"="NMEA 位置";
|
||||
"settings"="設定";
|
||||
"share.channels"="分享頻道QRcode";
|
||||
"share.position"="分享位置";
|
||||
"subscribed"="連接到 Mesh 網路";
|
||||
"select.contact"="選擇聯絡人";
|
||||
"select.node"="選擇中繼點";
|
||||
"select.menu.item"="從菜單選擇項目";
|
||||
"set.region"="設定 LoRa 區域";
|
||||
"standard"="標準";
|
||||
"standard.muted"="標準靜音";
|
||||
"start"="開始";
|
||||
"ssid"="SSID";
|
||||
"storeforward"="儲存 & 轉發";
|
||||
"storeforward.config"="儲存 & 轉發設定";
|
||||
"storeforward.heartbeat"="發送心跳包";
|
||||
"tapback"="響應";
|
||||
"tapback.heart"="心";
|
||||
"tapback.thumbsup"="豎大拇指";
|
||||
"tapback.thumbsdown"="倒大拇指";
|
||||
"tapback.haha"="哈哈";
|
||||
"tapback.exclamation"="驚嘆號";
|
||||
"tapback.question"="問號";
|
||||
"tapback.poop"="便便";
|
||||
"tapback.wave"="招手";
|
||||
"telemetry"="遠測(傳感器)";
|
||||
"telemetry.config"="遠側設定";
|
||||
"timeout"="超時";
|
||||
"timestamp"="時間戳記";
|
||||
"tip.bluetooth.connect.title"="連接到 LoRa 電台";
|
||||
"tip.bluetooth.connect.message"="顯示目前通過藍芽連接的 Lora 電台的信息。您可以向左滑動斷開電台,長按查看統計訊息或開始即時活動。";
|
||||
"tip.channel.admin.title"="管理頻道";
|
||||
"tip.channel.admin.message"="偵測到管理頻道:從下拉選單中選擇一個節點來管理連接或遠端設備。";
|
||||
"tip.channels.create.title"="管理頻道";
|
||||
"tip.channels.create.message"="現在 Mesh 上的資料會通過主通道發送。您可以設定輔助通道來建立由自己的金鑰保護的其他訊息組 [頻道設定提示](https://meshtastic.org/docs/configuration/radio/channels/)";
|
||||
"tip.channels.share.title"="共享 Meshtastic 頻道";
|
||||
"tip.channels.share.message"="在 Meshtastic 網路中最多有 8 個頻道。第一個頻道是主頻道,大多數活動都發生在這裡,也是必需的。如果您不共享主頻道,您的第一個共享頻道就會成為其他網路的主頻道。它會在其主頻道和您的輔助頻道上對話。名稱為 admin 的頻道可遠端控制中繼點。其他頻道用於私人群组,每個群組都有自己的密鑰。";
|
||||
"tip.messages.title"="消息";
|
||||
"tip.messages.message"="您可以發送和接收1對1聊天和群聊。在任何訊息中,您都可以長按查看可用的操作,如複製、回復、拍一拍、刪除以及詳情。";
|
||||
"twitter"="Twitter";
|
||||
"unknown"="未知";
|
||||
"unknown.age"="未知時間";
|
||||
"unset"="未設置";
|
||||
"update.firmware"="更新韌體";
|
||||
"update.interval"="更新間隔";
|
||||
"user"="使用者";
|
||||
"user.details"="使用者資料";
|
||||
"voltage"="電壓";
|
||||
"waiting"="等待中...";
|
||||
"appsettings.newNodeNotifications"="新節點通知";
|
||||
Loading…
Add table
Add a link
Reference in a new issue