Update localization files and improve path map UI

- Added new localization strings for Swedish, Ukrainian, and Chinese languages in app_sv.arb, app_uk.arb, and app_zh.arb respectively.
- Enhanced the path map UI in channel_message_path_screen.dart for better readability and interaction.
- Improved message retry logic in message_retry_service.dart to prevent double-pumping of queues.
- Bumped version number in pubspec.yaml to 9.5.0+13.
- Cleared untranslated strings in untranslated.json to reflect current localization status.
This commit is contained in:
zjs81
2026-06-13 01:58:42 -07:00
parent 815534d409
commit 760d8e1db3
39 changed files with 8823 additions and 7212 deletions
+13 -10
View File
@@ -4459,24 +4459,27 @@ class MeshCoreConnector extends ChangeNotifier {
secondsSinceLastRx: secSinceRx,
);
if (mlTimeout != null) {
// Use device est_timeout as an additional ceiling when available —
// the firmware computed it from real airtime, so it's better than
// a physics guess built on a 50 ms fallback.
final ceiling = deviceTimeoutMs != null && deviceTimeoutMs > physicsMin
// Use device est_timeout as a baseline floor when available —
// the firmware computed it from real airtime. Let the learned ML
// estimate widen above it up to the hard cap, but never below it.
final floor = deviceTimeoutMs != null && deviceTimeoutMs > physicsMin
? deviceTimeoutMs.clamp(physicsMin, _hardMaxTimeoutMs)
: physicsMax;
: physicsMin.clamp(0, _hardMaxTimeoutMs);
if (pathLength < 0) {
// Flood: trust ML, only enforce firmware formula as floor
if (mlTimeout < physicsMin) {
return physicsMin.clamp(0, _hardMaxTimeoutMs);
// Flood: trust ML, only enforce firmware estimate as floor
if (mlTimeout < floor) {
return floor.clamp(0, _hardMaxTimeoutMs);
}
}
return mlTimeout.clamp(physicsMin, ceiling).clamp(0, _hardMaxTimeoutMs);
return mlTimeout.clamp(floor, _hardMaxTimeoutMs);
}
// No ML data — prefer device est_timeout (it used real airtime), then physics.
// Cap the floor to the hard maximum so slow-flood physicsMin cannot exceed
// the upper bound and make clamp() throw.
if (deviceTimeoutMs != null && deviceTimeoutMs > 0) {
return deviceTimeoutMs.clamp(physicsMin, _hardMaxTimeoutMs);
final floor = physicsMin.clamp(0, _hardMaxTimeoutMs);
return deviceTimeoutMs.clamp(floor, _hardMaxTimeoutMs);
}
return physicsMax.clamp(0, _hardMaxTimeoutMs);
}
+337 -243
View File
File diff suppressed because it is too large Load Diff
+537 -337
View File
File diff suppressed because it is too large Load Diff
+471 -271
View File
File diff suppressed because it is too large Load Diff
+425 -204
View File
File diff suppressed because it is too large Load Diff
+1123 -1029
View File
File diff suppressed because it is too large Load Diff
+514 -239
View File
File diff suppressed because it is too large Load Diff
+562 -366
View File
File diff suppressed because it is too large Load Diff
+367 -174
View File
@@ -5,8 +5,8 @@
"nav_channels": "채널",
"nav_map": "지도",
"common_cancel": "취소",
"common_ok": "알겠습니다",
"common_connect": "연결",
"common_ok": "확인",
"common_connect": "연결하기",
"common_unknownDevice": "알 수 없는 장치",
"common_save": "저장",
"common_delete": "삭제",
@@ -16,21 +16,21 @@
"common_add": "추가",
"common_settings": "설정",
"common_disconnect": "연결 해제",
"common_connected": "연결",
"common_disconnected": "단절",
"common_create": "만들",
"common_connected": "연결",
"common_disconnected": "연결 해제됨",
"common_create": "만들",
"common_continue": "계속",
"common_share": "공유",
"common_copy": "복사",
"common_retry": "다시 시도",
"common_hide": "숨기",
"common_hide": "숨기",
"common_remove": "제거",
"common_enable": "활성화",
"common_disable": "비활성화",
"common_enable": "사용",
"common_disable": "사용 안 함",
"common_autoRefresh": "자동 새로고침",
"common_interval": "간격",
"common_reboot": "재부팅",
"common_loading": "로딩 중...",
"common_loading": "불러오는 중...",
"common_notAvailable": "—",
"common_voltageValue": "{volts} V",
"@common_voltageValue": {
@@ -48,16 +48,16 @@
}
}
},
"scanner_title": "MeshCore 공개",
"scanner_title": "MeshCore Open",
"connectionChoiceUsbLabel": "USB",
"connectionChoiceBluetoothLabel": "블루투스",
"connectionChoiceTcpLabel": "TCP",
"tcpScreenTitle": "TCP를 통해 연결",
"tcpHostLabel": "IP 주소",
"tcpHostHint": "192.168.40.10",
"tcpPortLabel": "",
"tcpHostHint": "192.168.40.10 / example.com",
"tcpPortLabel": "포트",
"tcpPortHint": "5000",
"tcpStatus_notConnected": "목적지 주소 입력 후 연결",
"tcpStatus_notConnected": "엔드포인트를 입력한 뒤 연결하세요.",
"tcpStatus_connectingTo": "{endpoint}에 연결 중...",
"@tcpStatus_connectingTo": {
"placeholders": {
@@ -80,21 +80,21 @@
},
"usbScreenTitle": "USB를 통해 연결",
"usbScreenSubtitle": "감지된 시리얼 장치를 선택하고 MeshCore 노드에 직접 연결하십시오.",
"usbScreenStatus": "USB 장치를 선택합니다.",
"usbScreenNote": "USB 직렬 통신은 지원되는 안드로이드 장치 및 데스크톱 플랫폼에서 활성화됩니다.",
"usbScreenEmptyState": "USB 장치가 탐지되지 않았습니다. USB 장치를 연결하고 다시 시도해 보세요.",
"usbScreenStatus": "USB 장치를 선택하세요.",
"usbScreenNote": "USB 직렬 통신은 지원되는 Android 기기 및 데스크톱 플랫폼에서 사용할 수 있습니다.",
"usbScreenEmptyState": "USB 장치가 없습니다. 하나 연결한 뒤 새로고침하세요.",
"usbErrorPermissionDenied": "USB 접근 권한이 거부되었습니다.",
"usbErrorDeviceMissing": "선택한 USB 장치 더 이상 사용 불가능합니다.",
"usbErrorDeviceMissing": "선택한 USB 장치 더 이상 사용할 수 없습니다.",
"usbErrorInvalidPort": "유효한 USB 장치를 선택하세요.",
"usbErrorBusy": "다른 USB 연결 요청이 이미 진행 중입니다.",
"usbErrorBusy": "다른 USB 연결 요청이 이미 진행 중입니다.",
"usbErrorNotConnected": "USB 장치가 연결되지 않았습니다.",
"usbErrorOpenFailed": "선택한 USB 장치를 열 수 없습니다.",
"usbErrorConnectFailed": "선택한 USB 장치에 연결에 실패했습니다.",
"usbErrorConnectFailed": "선택한 USB 장치에 연결하지 못했습니다.",
"usbErrorUnsupported": "이 플랫폼에서는 USB 직렬 통신을 지원하지 않습니다.",
"usbErrorAlreadyActive": "USB 연결이 이미 활성화되어 있습니다.",
"usbErrorAlreadyActive": "USB 연결이 이미 활성 상태입니다.",
"usbErrorNoDeviceSelected": "USB 장치가 선택되지 않았습니다.",
"usbErrorPortClosed": "USB 연결이 활성화되지 않습니다.",
"usbErrorConnectTimedOut": "연결 시간 초과되었습니다. 장치 USB Companion 펌웨어를 가지고 있는지 확인해 주세요.",
"usbErrorPortClosed": "USB 연결이 열려 있지 않습니다.",
"usbErrorConnectTimedOut": "연결 시간 초과되었습니다. 장치 USB Companion 펌웨어 있는지 확인세요.",
"usbFallbackDeviceName": "웹 시리얼 장치",
"usbStatus_notConnected": "USB 장치를 선택합니다.",
"usbStatus_connecting": "USB 장치에 연결 중...",
@@ -131,13 +131,13 @@
},
"scanner_stop": "멈춰",
"scanner_scan": "스캔",
"scanner_bluetoothOff": "블루투스 꺼져 있습니다.",
"scanner_bluetoothOffMessage": "블루투스를 켜서 장치를 검색해주세요.",
"scanner_chromeRequired": "크롬 브라우저 필요",
"scanner_chromeRequiredMessage": "이 웹 애플리케이션은 블루투 지원을 위해 Google Chrome 또는 Chromium 기반 브라우저가 필요합니다.",
"scanner_enableBluetooth": "블루투스 활성화",
"scanner_bluetoothOff": "블루투스 꺼져 있습니다.",
"scanner_bluetoothOffMessage": "기기를 검색하려면 블루투스를 켜세요.",
"scanner_chromeRequired": "Chrome 브라우저 필요",
"scanner_chromeRequiredMessage": "이 웹 은 블루투 지원을 위해 Google Chrome 또는 Chromium 기반 브라우저가 필요합니다.",
"scanner_enableBluetooth": "블루투스 켜기",
"device_quickSwitch": "빠른 전환",
"device_meshcore": "메쉬코어",
"device_meshcore": "MeshCore",
"settings_title": "설정",
"settings_deviceInfo": "장치 정보",
"settings_appSettings": "앱 설정",
@@ -148,7 +148,7 @@
"settings_nodeNameHint": "노드 이름을 입력하세요",
"settings_nodeNameUpdated": "이름 변경",
"settings_radioSettings": "라디오 설정",
"settings_radioSettingsSubtitle": "주파수, 전력, 스펙트럼",
"settings_radioSettingsSubtitle": "주파수, 전력, 확산 계수",
"settings_radioSettingsUpdated": "라디오 설정이 업데이트되었습니다.",
"settings_location": "위치",
"settings_locationSubtitle": "GPS 좌표",
@@ -169,26 +169,26 @@
"settings_privacyModeEnabled": "개인 정보 보호 모드 활성화",
"settings_privacyModeDisabled": "개인 정보 보호 모드 비활성화",
"settings_actions": "행동",
"settings_deleteAllPaths": "Delete All Paths",
"settings_deleteAllPathsSubtitle": "Clear all path data from contacts.",
"settings_deleteAllPaths": "모든 경로 삭제",
"settings_deleteAllPathsSubtitle": "연락처의 모든 경로 데이터를 지웁니다.",
"settings_sendAdvertisement": "광고 전송",
"settings_sendAdvertisementSubtitle": "방송 활동",
"settings_advertisementSent": "광고 전송",
"settings_syncTime": "동기화 시간",
"settings_sendAdvertisementSubtitle": "현재 존재를 방송합니다.",
"settings_advertisementSent": "광고 전송되었습니다.",
"settings_syncTime": "시간 동기화",
"settings_syncTimeSubtitle": "장치 시계를 휴대폰 시간으로 설정",
"settings_timeSynchronized": "시간 동기화",
"settings_refreshContacts": "연락처 갱신",
"settings_timeSynchronized": "시간 동기화되었습니다.",
"settings_refreshContacts": "연락처 새로고침",
"settings_refreshContactsSubtitle": "장치에서 연락처 목록을 다시 불러오기",
"settings_rebootDevice": "장치 재부팅",
"settings_rebootDeviceSubtitle": "MeshCore 장치를 재부팅하세요.",
"settings_rebootDeviceConfirm": "정말 장치를 재부팅하시겠습니까? 이 경우 연결이 끊어집니다.",
"settings_debug": "디버",
"settings_rebootDeviceSubtitle": "MeshCore 장치를 재부팅합니다.",
"settings_rebootDeviceConfirm": "정말 장치를 재부팅하시겠습니까? 연결이 끊어집니다.",
"settings_debug": "디버",
"settings_bleDebugLog": "BLE 디버그 로그",
"settings_bleDebugLogSubtitle": "BLE 명령, 응답 및 원시 데이터",
"settings_appDebugLog": "앱 디버 로그",
"settings_appDebugLogSubtitle": "애플리케이션 디버 메시지",
"settings_about": "소개",
"settings_aboutVersion": "MeshCore Open {version} 버전",
"settings_bleDebugLogSubtitle": "BLE 명령, 응답 및 원시 데이터",
"settings_appDebugLog": "앱 디버 로그",
"settings_appDebugLogSubtitle": "애플리케이션 디버 메시지",
"settings_about": "정보",
"settings_aboutVersion": "MeshCore Open v{version}",
"@settings_aboutVersion": {
"placeholders": {
"version": {
@@ -196,8 +196,8 @@
}
}
},
"settings_aboutLegalese": "2026 MeshCore 오픈 소스 프로젝트",
"settings_aboutDescription": "MeshCore LoRa 메시 네트워크 장치를 위한 오픈 소스 Flutter 클라이언트.",
"settings_aboutLegalese": "2026 MeshCore 오픈 소스 프로젝트",
"settings_aboutDescription": "MeshCore LoRa 메시 네트워크 장치를 위한 오픈소스 Flutter 클라이언트.",
"settings_aboutOpenMeteoAttribution": "LOS 고도 데이터: Open-Meteo (CC BY 4.0)",
"settings_infoName": "이름",
"settings_infoId": "ID",
@@ -206,19 +206,19 @@
"settings_infoPublicKey": "공개 키",
"settings_infoContactsCount": "연락처 수",
"settings_infoChannelCount": "채널 수",
"settings_presets": "기본 설정",
"settings_presets": "프리셋",
"settings_frequency": "주파수 (MHz)",
"settings_frequencyHelper": "300.0 - 2500.0",
"settings_frequencyInvalid": "유효하지 않은 주파수 (300-2500 MHz)",
"settings_bandwidth": "대역폭",
"settings_spreadingFactor": "분산 계수",
"settings_codingRate": "코딩 속도",
"settings_txPower": "TX 전력 (dBm)",
"settings_txPower": "송신 전력 (dBm)",
"settings_txPowerHelper": "0 - 22",
"settings_txPowerInvalid": "유효하지 않은 TX 전력 (0-22 dBm)",
"settings_txPowerInvalid": "유효하지 않은 송신 전력 (0-22 dBm)",
"settings_clientRepeat": "오프그리드 반복",
"settings_clientRepeatSubtitle": "이 장치가 다른 사람들을 위해 메시 패킷을 반복하도록 허용합니다.",
"settings_clientRepeatFreqWarning": "오프그리드(무전력) 시스템 재연결에는 433MHz, 869MHz, 또는 918MHz 주파수가 필요합니다.",
"settings_clientRepeatSubtitle": "이 장치가 다른 장치의 메시 패킷을 반복하도록 허용합니다.",
"settings_clientRepeatFreqWarning": "오프그리드 반복에는 433MHz, 869MHz 또는 918MHz 주파수가 필요합니다.",
"settings_error": "오류: {message}",
"@settings_error": {
"placeholders": {
@@ -228,36 +228,36 @@
}
},
"appSettings_title": "앱 설정",
"appSettings_appearance": "외관",
"appSettings_theme": "주제",
"appSettings_themeSystem": "기본 설정",
"appSettings_themeLight": "",
"appSettings_themeDark": "어둡다",
"appSettings_appearance": "모양",
"appSettings_theme": "테마",
"appSettings_themeSystem": "시스템 기본값",
"appSettings_themeLight": "밝음",
"appSettings_themeDark": "어두움",
"appSettings_language": "언어",
"appSettings_languageSystem": "기본 설정",
"appSettings_languageEn": "영어",
"appSettings_languageFr": "프랑스어",
"appSettings_languageEs": "스페인어",
"appSettings_languageDe": "독일어",
"appSettings_languagePl": "폴란드",
"appSettings_languagePl": "폴란드",
"appSettings_languageSl": "슬로베니아어",
"appSettings_languagePt": "포르투갈어",
"appSettings_languageIt": "이탈리아어",
"appSettings_languageZh": "중국어",
"appSettings_languageSv": "스웨덴어",
"appSettings_languageNl": "네덜란드어",
"appSettings_languageSk": "슬로베니아어",
"appSettings_languageBg": "불가리",
"appSettings_languageSk": "슬로바키아어",
"appSettings_languageBg": "불가리아어",
"appSettings_languageRu": "러시아어",
"appSettings_languageUk": "우크라이나",
"appSettings_languageUk": "우크라이나",
"appSettings_enableMessageTracing": "메시지 추적 기능 활성화",
"appSettings_enableMessageTracingSubtitle": "메시지에 대한 상세한 경로 및 시간 정보를 표시",
"appSettings_notifications": "알림",
"appSettings_enableNotifications": "알림 활성화",
"appSettings_enableNotificationsSubtitle": "메시지와 광고에 대한 알림을 받으세요.",
"appSettings_notificationPermissionDenied": "알림 권한 거부",
"appSettings_notificationsEnabled": "알림 기능 활성화",
"appSettings_notificationsDisabled": "알림 기능 끄기",
"appSettings_notificationsEnabled": "알림 사용",
"appSettings_notificationsDisabled": "알림 사용 안 함",
"appSettings_messageNotifications": "메시지 알림",
"appSettings_messageNotificationsSubtitle": "새로운 메시지를 받을 때 알림 표시",
"appSettings_channelMessageNotifications": "채널 메시지 알림",
@@ -265,22 +265,22 @@
"appSettings_advertisementNotifications": "광고 알림",
"appSettings_advertisementNotificationsSubtitle": "새 노드가 발견되었을 때 알림 표시",
"appSettings_messaging": "메시징",
"appSettings_clearPathOnMaxRetry": "Max 재시도 시 경로 명확하게 설정",
"appSettings_clearPathOnMaxRetrySubtitle": "5번의 전송 시도가 실패하면 연락 경로를 재설정",
"appSettings_pathsWillBeCleared": "5번의 시도 실패 후, 해당 경로가 확보될 것입니다.",
"appSettings_pathsWillNotBeCleared": "경로 자동으로 정리되지 않습니다.",
"appSettings_clearPathOnMaxRetry": "최대 재시도 시 경로 지우기",
"appSettings_clearPathOnMaxRetrySubtitle": "전송 시도가 5번 실패하면 연락 경로를 재설정합니다.",
"appSettings_pathsWillBeCleared": "5번 실패하면 해당 경로를 지웁니다.",
"appSettings_pathsWillNotBeCleared": "경로 자동으로 지우지 않습니다.",
"appSettings_autoRouteRotation": "자동 경로 순환",
"appSettings_autoRouteRotationSubtitle": "최적 경로와 방수 모드 사이를 전환",
"appSettings_autoRouteRotationSubtitle": "최적 경로와 플러드 모드 사이를 전환합니다.",
"appSettings_autoRouteRotationEnabled": "자동 경로 순환 기능 활성화",
"appSettings_autoRouteRotationDisabled": "자동 경로 순환 기능 비활성화",
"appSettings_maxRouteWeight": "최대 경로 무게",
"appSettings_maxRouteWeightSubtitle": "한 경로가 성공적인 송을 통해 누적할 수 있는 최대 무게",
"appSettings_maxRouteWeight": "최대 경로 가중치",
"appSettings_maxRouteWeightSubtitle": "한 경로가 성공적인 송을 통해 누적할 수 있는 최대 가중치",
"appSettings_initialRouteWeight": "초기 경로 가중치",
"appSettings_initialRouteWeightSubtitle": "새롭게 발견된 경로의 초기 무게",
"appSettings_routeWeightSuccessIncrement": "성공 횟수 증가",
"appSettings_routeWeightSuccessIncrementSubtitle": "성공적으로 송된 경로에 추가된 무게",
"appSettings_routeWeightFailureDecrement": "오류 가중치 감소",
"appSettings_routeWeightFailureDecrementSubtitle": "송 실패 후 경로에서 제거된 무게",
"appSettings_initialRouteWeightSubtitle": "새 발견된 경로의 초기 가중치",
"appSettings_routeWeightSuccessIncrement": "성공 증가",
"appSettings_routeWeightSuccessIncrementSubtitle": "성공적으로 송된 경로에 추가되는 가중치",
"appSettings_routeWeightFailureDecrement": "실패 시 감소",
"appSettings_routeWeightFailureDecrementSubtitle": "송 실패 후 경로에서 제거되는 가중치",
"appSettings_maxMessageRetries": "최대 메시지 재시도 횟수",
"appSettings_maxMessageRetriesSubtitle": "메시지를 실패로 처리하기 전 시도 횟수",
"path_routeWeight": "{weight}/{max}",
@@ -295,8 +295,8 @@
}
},
"appSettings_battery": "배터리",
"appSettings_batteryChemistry": "배터리 화학",
"appSettings_batteryChemistryPerDevice": "{deviceName} 당분간",
"appSettings_batteryChemistry": "배터리 종류",
"appSettings_batteryChemistryPerDevice": "{deviceName}",
"@appSettings_batteryChemistryPerDevice": {
"placeholders": {
"deviceName": {
@@ -304,20 +304,20 @@
}
}
},
"appSettings_batteryChemistryConnectFirst": "장치를 선택하기 위해 연결",
"appSettings_batteryChemistryConnectFirst": "배터리 종류를 선택하려면 먼저 장치를 연결하세요.",
"appSettings_batteryNmc": "18650 NMC (3.0-4.2V)",
"appSettings_batteryLifepo4": "LiFePO4 (2.6-3.65V)",
"appSettings_batteryLipo": "리튬 폴리머 (3.0-4.2V)",
"appSettings_mapDisplay": "지도 표시",
"appSettings_showRepeaters": "반복 기능 표시",
"appSettings_showRepeatersSubtitle": "지도에 반복자 노드를 표시",
"appSettings_showRepeaters": "리피터 표시",
"appSettings_showRepeatersSubtitle": "지도에 리피터 노드를 표시",
"appSettings_showChatNodes": "채팅 노드 표시",
"appSettings_showChatNodesSubtitle": "지도에 채팅 노드를 표시",
"appSettings_showOtherNodes": "다른 노드 표시",
"appSettings_showOtherNodesSubtitle": "지도에 다른 노드 유형을 표시",
"appSettings_showOtherNodesSubtitle": "지도에 다른 노드 유형을 표시",
"appSettings_timeFilter": "시간 필터",
"appSettings_timeFilterShowAll": "모든 노드 표시",
"appSettings_timeFilterShowLast": "지난 {hours} 시간 동안의 노드 표시",
"appSettings_timeFilterShowLast": "최근 {hours}시간 동안의 노드 표시",
"@appSettings_timeFilterShowLast": {
"placeholders": {
"hours": {
@@ -325,17 +325,17 @@
}
}
},
"appSettings_mapTimeFilter": "지도 필터",
"appSettings_showNodesDiscoveredWithin": "다음 내역에서 발견된 노드 표시:",
"appSettings_allTime": "모든 시간",
"appSettings_lastHour": "지난 시간",
"appSettings_mapTimeFilter": "지도 시간 필터",
"appSettings_showNodesDiscoveredWithin": "다음 기간 내에 발견된 노드 표시:",
"appSettings_allTime": "전체 기간",
"appSettings_lastHour": "지난 1시간",
"appSettings_last6Hours": "지난 6시간",
"appSettings_last24Hours": "지난 24시간",
"appSettings_lastWeek": "지난 주",
"appSettings_offlineMapCache": "오프라인 지도 캐시",
"appSettings_unitsTitle": "단위",
"appSettings_unitsMetric": "단위 (m / km)",
"appSettings_unitsImperial": "제국 (피트/마일)",
"appSettings_unitsMetric": "미터법 (m / km)",
"appSettings_unitsImperial": "영국식 (ft / mi)",
"appSettings_noAreaSelected": "선택된 영역 없음",
"appSettings_areaSelectedZoom": "선택된 영역 (줌 레벨: {minZoom} - {maxZoom})",
"@appSettings_areaSelectedZoom": {
@@ -348,9 +348,9 @@
}
}
},
"appSettings_debugCard": "디버",
"appSettings_appDebugLogging": "앱 디버 로깅",
"appSettings_appDebugLoggingSubtitle": "로그 앱 디버 메시지 (문제 해결을 위한)",
"appSettings_debugCard": "디버",
"appSettings_appDebugLogging": "앱 디버 로깅",
"appSettings_appDebugLoggingSubtitle": "문제 해결을 위한 앱 디버 메시지를 기록합니다.",
"appSettings_appDebugLoggingEnabled": "앱 디버깅 로깅 활성화",
"appSettings_appDebugLoggingDisabled": "앱 디버깅 로깅 비활성화",
"contacts_title": "연락처",
@@ -454,7 +454,7 @@
"contacts_noContactsMatchFilter": "입력하신 검색 조건과 일치하는 연락처가 없습니다.",
"contacts_noMembers": "회원 없음",
"contacts_lastSeenNow": "최근",
"contacts_lastSeenMinsAgo": "~ {minutes} min.",
"contacts_lastSeenMinsAgo": "~ {minutes}",
"@contacts_lastSeenMinsAgo": {
"placeholders": {
"minutes": {
@@ -463,7 +463,7 @@
}
},
"contacts_lastSeenHourAgo": "약 1시간",
"contacts_lastSeenHoursAgo": "~ {hours} hours",
"contacts_lastSeenHoursAgo": "~ {hours}시간",
"@contacts_lastSeenHoursAgo": {
"placeholders": {
"hours": {
@@ -721,7 +721,7 @@
}
},
"debugFrame_textTypeCli": "명령줄 인터페이스 (CLI)",
"debugFrame_textTypePlain": "단순한",
"debugFrame_textTypePlain": "일반 텍스트",
"debugFrame_text": "- 텍스트: \"{text}\"",
"@debugFrame_text": {
"placeholders": {
@@ -735,7 +735,7 @@
"chat_ShowAllPaths": "모든 경로 표시",
"chat_routingMode": "라우팅 방식",
"chat_autoUseSavedPath": "자동 (저장된 경로 사용)",
"chat_forceFloodMode": "강수 모드 활성화",
"chat_forceFloodMode": "플러드 모드 활성화",
"chat_recentAckPaths": "최근 사용한 ACK 경로 (사용하려면 탭):",
"chat_pathHistoryFull": "이력 기록은 이미 가득 차 있습니다. 항목을 삭제하여 새로운 항목을 추가할 수 있습니다.",
"chat_hopSingular": "점프",
@@ -748,20 +748,20 @@
}
}
},
"chat_successes": "성공 사례",
"chat_successes": "성공",
"chat_removePath": "경로 제거",
"chat_noPathHistoryYet": "아직 경로 기록이 없습니다.\n경로를 찾기 위해 메시지를 보내세요.",
"chat_pathActions": "경로 작업:",
"chat_setCustomPath": "사용자 지정 경로 설정",
"chat_setCustomPathSubtitle": "수동으로 경로를 지정",
"chat_clearPath": "명확한 길",
"chat_clearPathSubtitle": "다음 전송 시, 강제 재전송 설정",
"chat_clearPath": "경로 지우기",
"chat_clearPathSubtitle": "다음 전송 시 강제로 새 경로를 찾습니다.",
"chat_pathCleared": "경로가 확보되었습니다. 다음 메시지는 경로를 다시 찾을 것입니다.",
"chat_floodModeSubtitle": "앱 바에서 라우팅 스위치를 사용",
"chat_floodModeEnabled": "홍수 모드 활성화. 앱 바의 경로 아이콘을 사용하여 다시 전환할 수 있습니다.",
"chat_floodModeSubtitle": "앱 바 라우팅 스위치를 사용하세요.",
"chat_floodModeEnabled": "플러드 모드 활성화되었습니다. 앱 바의 경로 아이콘으로 다시 전환할 수 있습니다.",
"chat_fullPath": "전체 경로",
"chat_pathDetailsNotAvailable": "경로 정보는 아직 제공되지 않습니다. 메시지를 보내어 다시 시도해 보세요.",
"chat_pathSetHops": "Path set: {hopCount} {hopCount, plural, =1{hop} other{hops}} - {status}",
"chat_pathSetHops": "경로 설정: {hopCount} {hopCount, plural, =1{} other{}} - {status}",
"@chat_pathSetHops": {
"placeholders": {
"hopCount": {
@@ -772,16 +772,16 @@
}
}
},
"chat_pathSavedLocally": "로컬에 저장. 동기화 연결",
"chat_pathDeviceConfirmed": "장치 확인 완료.",
"chat_pathSavedLocally": "로컬에 저장되었습니다. 동기화할 장치에 연결하세요.",
"chat_pathDeviceConfirmed": "장치 확인되었습니다.",
"chat_pathDeviceNotConfirmed": "기기가 아직 확인되지 않았습니다.",
"chat_type": "종류",
"chat_type": "유형",
"chat_path": "경로",
"chat_publicKey": "공개 키",
"chat_compressOutgoingMessages": "전송되는 메시지 압축",
"chat_floodForced": "홍수 (강제)",
"chat_directForced": "직접적인 (강제적인)",
"chat_hopsForced": "{count}번 띄우기 (강제)",
"chat_floodForced": "플러드 (강제)",
"chat_directForced": "직접 (강제)",
"chat_hopsForced": "{count} (강제)",
"@chat_hopsForced": {
"placeholders": {
"count": {
@@ -789,7 +789,7 @@
}
}
},
"chat_floodAuto": "홍수 (자동)",
"chat_floodAuto": "플러드 (자동)",
"chat_direct": "직접",
"chat_poiShared": "공유된 POI",
"chat_unread": "읽지 않음: {count}",
@@ -905,7 +905,7 @@
}
}
},
"mapCache_cachedTilesWithFailed": "Cached {downloaded} tiles ({failed} failed)",
"mapCache_cachedTilesWithFailed": "캐시된 타일 {downloaded} ({failed}개 실패)",
"@mapCache_cachedTilesWithFailed": {
"placeholders": {
"downloaded": {
@@ -931,7 +931,7 @@
}
}
},
"mapCache_downloadedTiles": "Downloaded {completed} / {total}",
"mapCache_downloadedTiles": "다운로드됨 {completed} / {total}",
"@mapCache_downloadedTiles": {
"placeholders": {
"completed": {
@@ -978,7 +978,7 @@
}
}
},
"time_hoursAgo": "{hours}h ago",
"time_hoursAgo": "{hours}시간 전",
"@time_hoursAgo": {
"placeholders": {
"hours": {
@@ -1040,8 +1040,8 @@
}
},
"login_failedMessage": "로그인에 실패했습니다. 비밀번호가 잘못되었거나, 연결이 되지 않는 것 같습니다.",
"common_reload": "다시 로드",
"common_clear": "명확하게",
"common_reload": "다시 불러오기",
"common_clear": "지우기",
"path_currentPath": "현재 경로: {path}",
"@path_currentPath": {
"placeholders": {
@@ -1050,7 +1050,7 @@
}
}
},
"path_usingHopsPath": "Using {count} {count, plural, =1{hop} other{hops}} path",
"path_usingHopsPath": "{count} {count, plural, =1{} other{홉}} 경로 사용 중",
"@path_usingHopsPath": {
"placeholders": {
"count": {
@@ -1577,7 +1577,7 @@
}
}
},
"neighbors_heardAgo": "Heard: {time} ago",
"neighbors_heardAgo": "수신: {time} ",
"@neighbors_heardAgo": {
"placeholders": {
"time": {
@@ -1641,7 +1641,7 @@
}
}
},
"channelPath_observedSomeOf": "{observed} of {total} hops",
"channelPath_observedSomeOf": "{observed}/{total} 홉 관찰됨",
"@channelPath_observedSomeOf": {
"placeholders": {
"observed": {
@@ -1877,7 +1877,7 @@
}
}
},
"losAntennaB": "Antenna B: {value} {unit}",
"losAntennaB": "안테나 B: {value} {unit}",
"@losAntennaB": {
"placeholders": {
"value": {
@@ -1890,7 +1890,7 @@
},
"losRun": "LOS (Loss of Signal) 상태로 전환",
"losNoElevationData": "고도 정보 없음",
"losProfileClear": "{distance} {distanceUnit}, clear LOS, min clearance {clearance} {heightUnit}",
"losProfileClear": "{distance} {distanceUnit}, LOS 확보, 최소 여유 {clearance} {heightUnit}",
"@losProfileClear": {
"placeholders": {
"distance": {
@@ -1907,7 +1907,7 @@
}
}
},
"losProfileBlocked": "{distance} {distanceUnit}, blocked by {obstruction} {heightUnit}",
"losProfileBlocked": "{distance} {distanceUnit}, {obstruction} {heightUnit}에 의해 차단됨",
"@losProfileBlocked": {
"placeholders": {
"distance": {
@@ -2305,10 +2305,10 @@
"repeater_cliHelpStatsPackets": "(전송 속도만 표시) 패킷 수준의 통계 정보를 보여줍니다.",
"repeater_cliHelpStatsRadio": "(특정 시리즈만 해당) 라디오 통계 정보를 표시합니다.",
"repeater_cliHelpStatsCore": "(시리얼 번호만 표시) 핵심 펌웨어 통계 정보를 보여줍니다.",
"common_done": "Done",
"background_serviceTitle": "MeshCore running",
"background_serviceText": "Keeping BLE connected",
"appSettings_translationModelDeleted": "Deleted {name}",
"common_done": "완료",
"background_serviceTitle": "MeshCore 실행 중",
"background_serviceText": "BLE 연결 유지 중",
"appSettings_translationModelDeleted": "{name} 삭제됨",
"@appSettings_translationModelDeleted": {
"placeholders": {
"name": {
@@ -2316,7 +2316,7 @@
}
}
},
"appSettings_translationModelDeleteFailed": "Failed to delete: {error}",
"appSettings_translationModelDeleteFailed": "삭제 실패: {error}",
"@appSettings_translationModelDeleteFailed": {
"placeholders": {
"error": {
@@ -2324,7 +2324,7 @@
}
}
},
"channels_channelUpdateFailed": "Failed to update channel: {error}",
"channels_channelUpdateFailed": "채널 업데이트 실패: {error}",
"@channels_channelUpdateFailed": {
"placeholders": {
"error": {
@@ -2332,19 +2332,19 @@
}
}
},
"map_type": "Type",
"map_path": "Path",
"map_location": "Location",
"map_estLocation": "Est. Location",
"map_publicKey": "Public Key",
"map_publicKeyPrefixHint": "e.g. ab12",
"contact_typeChat": "Chat",
"contact_typeRepeater": "Repeater",
"contact_typeRoom": "Room",
"contact_typeSensor": "Sensor",
"contact_typeUnknown": "Unknown",
"channels_via": "via {path}",
"chat_score": "Score",
"map_type": "유형",
"map_path": "경로",
"map_location": "위치",
"map_estLocation": "추정 위치",
"map_publicKey": "공개 키",
"map_publicKeyPrefixHint": "예: ab12",
"contact_typeChat": "채팅",
"contact_typeRepeater": "리피터",
"contact_typeRoom": "",
"contact_typeSensor": "센서",
"contact_typeUnknown": "알 수 없음",
"channels_via": "{path} 경유",
"chat_score": "점수",
"settings_multiAck": "다중 ACK",
"map_sharedAt": "공유됨",
"@losBlockedSpotChip": {
@@ -2386,7 +2386,7 @@
"losBlockedSpotsTitle": "차단된 공간",
"losSelectedObstructionTitle": "선택된 장애물",
"losBlockedSpotChip": "{distance} {distanceUnit} • {obstruction} {heightUnit}",
"losSelectedObstructionDetails": "Blocked by {obstruction} {heightUnit}, {distanceFromA} from A and {distanceFromB} from B ({distanceUnit}).",
"losSelectedObstructionDetails": "{obstruction} {heightUnit}에 의해 차단됨, A에서 {distanceFromA}, B에서 {distanceFromB} ({distanceUnit})",
"settings_companionDebugLog": "동반 디버깅 로그",
"chat_newMessages": "새로운 메시지",
"settings_companionDebugLogSubtitle": "BLE/TCP/USB 명령어, 응답 및 원시 데이터",
@@ -2433,56 +2433,249 @@
"messageStatus_pending": "발송",
"messageStatus_sent": "발송",
"messageStatus_delivered": "배송 완료",
"common_undo": "취소",
"messageStatus_failed": "실패",
"messageStatus_repeated": "반복적으로 들었습니다",
"common_undo": "되돌리기",
"messageStatus_pending": "",
"messageStatus_sent": "전송됨",
"messageStatus_delivered": "전달됨",
"messageStatus_failed": "전송 실패",
"messageStatus_repeated": "반복 수신됨",
"contacts_searchOpen": "연락처 검색",
"contacts_moreOptions": "더 많은 옵션",
"contacts_searchClose": "검색 닫기",
"routing_title": "라우팅",
"routing_modeAuto": "자동",
"routing_modeFlood": "홍수",
"routing_modeManual": "사용 설명서",
"routing_modeAutoHint": "가장 잘 알려진 경로를 자동으로 선택하고, 경로가 없을 경우에는 무작위로 경로를 선택합니다.",
"routing_modeFloodHint": "모든 증폭기를 통해 방송니다. 가장 안정적이지만, 더 많은 시간을 사용합니다.",
"routing_modeManualHint": "항상 설정하신 정확한 경로를 따라 이동합니다.",
"routing_modeFlood": "플러드",
"routing_modeManual": "수동",
"routing_modeAutoHint": "가장 잘 알려진 경로를 자동으로 선택하고, 경로가 없으면 플러드로 전환합니다.",
"routing_modeFloodHint": "모든 중계기를 통해 방송니다. 가장 안정적이지만 송 시간을 더 많이 사용합니다.",
"routing_modeManualHint": "항상 지정한 정확한 경로를 따니다.",
"routing_currentRoute": "현재 경로",
"routing_directNoHops": "직접 연결 중계 장치 사용 없이",
"routing_directNoHops": "직접 연결 - 중계 없음",
"routing_noPathYet": "아직 경로가 없습니다. 다음 메시지가 도착할 때까지 계속 탐색합니다.",
"routing_floodBroadcast": "모든 증폭기를 통해 방송",
"routing_floodBroadcast": "모든 중계기를 통해 방송",
"routing_editPath": "경로 편집",
"routing_forgetPath": "길을 잊어라",
"routing_forgetPath": "경로 지우기",
"routing_knownPaths": "알려진 경로",
"routing_knownPathsHint": "해당 항목으로 전환하기 위한 경로를 선택합니다.",
"routing_knownPathsHint": "전환할 경로를 선택하세요.",
"routing_inUse": "사용 중",
"routing_qualityStrong": "강력한 첫 번째 단계",
"routing_qualityGood": "좋은 첫 시작",
"routing_qualityFair": "처음 시도",
"routing_qualityWorked": "완료됨",
"routing_qualityFlood": "홍수 피해 상황을 통해 들었습니다.",
"routing_qualityUntested": "검증되지 않음",
"routing_lastWorked": "{when}에 일했습니다",
"routing_neverWorked": "확인되지 않음",
"routing_floodDelivery": "홍수 피해 지역 배송",
"routing_qualityStrong": "매우 좋음",
"routing_qualityGood": "좋",
"routing_qualityFair": "보통",
"routing_qualityWorked": "작동함",
"routing_qualityFlood": "플러드로 수신됨",
"routing_qualityUntested": "검증",
"routing_lastWorked": "{when}에 작동",
"routing_neverWorked": "아직 작동한 적 없음",
"routing_floodDelivery": "플러드 전송",
"pathEditor_title": "경로 만들기",
"pathEditor_hopCounter": "64개의 홉 중 {count}",
"pathEditor_noHops": "현재 추가되지 않았습니다. 아래 탭을 사용하여 순서대로 추가하거나, 홉 없이 바로 전송하려면 \"홉 없음\"으로 저장하십시오.",
"pathEditor_addHops": "홉을 순서대로 첨가해주세요.",
"pathEditor_searchRepeaters": "반복 검색",
"pathEditor_advancedHex": "고급: 원시 헥스 경로",
"pathEditor_hexLabel": "헥스 접두사",
"pathEditor_hexHelper": "각 홉마다 2개의 6자리 숫자, 쉼표로 구분",
"pathEditor_hopCounter": "64개 중 {count}",
"pathEditor_noHops": "아직 추가되지 않았습니다. 아래 탭을 사용 순서대로 추가하거나, 홉 없이 바로 보내려면 \"홉 없음\"으로 저장하세요.",
"pathEditor_addHops": "홉을 순서대로 추가하세요.",
"pathEditor_searchRepeaters": "리피터 검색",
"pathEditor_advancedHex": "고급: 원시 HEX 경로",
"pathEditor_hexLabel": "HEX 접두사",
"pathEditor_hexHelper": "각 홉마다 2개의 16진수 바이트, 쉼표로 구분",
"pathEditor_invalidTokens": "유효하지 않음: {tokens}",
"pathEditor_tooManyHops": "최대 64개의 홉",
"pathEditor_usePath": "이 경로 사용하세요",
"pathEditor_usePath": "이 경로 사용",
"pathEditor_removeHop": "홉 제거",
"pathEditor_unknownHop": "알 수 없는 중계기",
"map_zoomIn": "줌 인",
"routing_deliveryCounts": "{successes} delivered, {failures} failed",
"map_zoomOut": "줌 아웃",
"map_centerMap": "중심 지도",
"chrome_bluetoothRequiresChromium": "웹 블루투스는 크롬 브라우저가 필요합니다.",
"map_zoomIn": "확대",
"routing_deliveryCounts": "{successes}건 성공, {failures}건 실패",
"map_zoomOut": "축소",
"map_centerMap": "지도 중앙 맞추기",
"chrome_bluetoothRequiresChromium": "웹 블루투스는 Chromium 기반 브라우저가 필요합니다.",
"channels_communityShortId": "ID: {id}...",
"pathTrace_legendGpsConfirmed": "GPS 확인 완료",
"pathTrace_legendInferred": "추된 위치"
"pathTrace_legendGpsConfirmed": "GPS 확인",
"pathTrace_legendInferred": "추된 위치",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_activity": "활동",
"map_searchHint": "노드 이름 또는 ID 검색",
"map_online": "온라인",
"scanner_bluetoothWebUnsupported": "브라우저에서는 블루투스를 사용할 수 없습니다. 대신 USB로 연결하세요.",
"map_recent": "최근",
"map_stale": "오래됨",
"map_visible": "보임",
"map_hidden": "숨김",
"map_centerOnNode": "노드 중심으로 보기",
"map_details": "세부 정보",
"map_noGps": "GPS 없음",
"map_noResults": "일치하는 노드가 없습니다.",
"pathMap_viewSingle": "단일",
"pathMap_viewCombined": "결합",
"pathMap_play": "재생",
"pathMap_pause": "일시 정지",
"pathMap_replay": "다시 재생",
"pathMap_stepBack": "이전 홉",
"pathMap_stepForward": "다음 홉",
"pathMap_animationOn": "패킷 애니메이션 표시",
"pathMap_animationOff": "패킷 애니메이션 숨기기",
"pathMap_hopOf": "{current}/{total} 홉",
"pathMap_observedPaths": "관찰된 경로: {count}",
"pathMap_primary": "주 경로",
"pathMap_alternate": "대체 {index}",
"pathMap_hopCount": "{count, plural, =1{1 홉} other{{count} 홉}}",
"pathMap_legendShared": "공유 구간",
"pathMap_legendEstimated": "추정 구간",
"pathMap_sharedNodeCount": "{count}개의 경로에서 사용됨",
"pathMap_partialAnimation": "{count, plural, =1{1 홉은 위치가 없어 표시된 경로가 일부입니다} other{{count} 홉은 위치가 없어 표시된 경로가 일부입니다}}",
"pathMap_showAllPaths": "모두 보기",
"pathMap_hidePath": "경로 숨기기",
"pathMap_showPath": "경로 표시",
"pathMap_collapsePanel": "패널 접기",
"pathMap_expandPanel": "패널 펼치기",
"pathMap_noLocation": "위치 없음",
"pathMap_followPacket": "패킷 고정",
"pathMap_unfollowPacket": "패킷 고정 해제",
"pathMap_gpsCount": "{confirmed}/{total} GPS",
"@channels_cyr2latSettingsDialogWrongJSON": {
"placeholders": {
"error": {}
}
},
"@channels_via": {
"placeholders": {
"path": {
"type": "String"
}
}
},
"@settings_cyr2latProfileDeleteDscr": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"@telemetry_altitudeValue": {
"placeholders": {
"meters": {
"type": "String"
}
}
},
"@telemetry_analogValue": {
"placeholders": {
"value": {
"type": "String"
}
}
},
"@telemetry_concentrationValue": {
"placeholders": {
"ppm": {
"type": "String"
}
}
},
"@telemetry_directionValue": {
"placeholders": {
"degrees": {
"type": "String"
}
}
},
"@telemetry_distanceValue": {
"placeholders": {
"meters": {
"type": "String"
}
}
},
"@telemetry_energyValue": {
"placeholders": {
"kilowattHours": {
"type": "String"
}
}
},
"@telemetry_frequencyValue": {
"placeholders": {
"hertz": {
"type": "String"
}
}
},
"@telemetry_luminosityValue": {
"placeholders": {
"lux": {
"type": "String"
}
}
},
"@telemetry_percentageValue": {
"placeholders": {
"percent": {
"type": "String"
}
}
},
"@telemetry_powerValue": {
"placeholders": {
"watts": {
"type": "String"
}
}
},
"@telemetry_pressureValue": {
"placeholders": {
"hpa": {
"type": "String"
}
}
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+36 -35
View File
@@ -319,7 +319,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
'Bluetooth is niet beschikbaar in de browser. Verbind dan via USB.';
@override
String get device_quickSwitch => 'Snelle overschakeling';
@@ -1726,10 +1726,10 @@ class AppLocalizationsNl extends AppLocalizations {
String get map_title => 'Kaart van de knopen';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => 'Zoek op naam of ID van de knoop';
@override
String get map_activity => 'Activity';
String get map_activity => 'Activiteit';
@override
String get map_online => 'Online';
@@ -1738,25 +1738,25 @@ class AppLocalizationsNl extends AppLocalizations {
String get map_recent => 'Recent';
@override
String get map_stale => 'Stale';
String get map_stale => 'Verouderd';
@override
String get map_visible => 'Visible';
String get map_visible => 'Zichtbaar';
@override
String get map_hidden => 'Hidden';
String get map_hidden => 'Verborgen';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => 'Centreer op node';
@override
String get map_details => 'Details';
@override
String get map_noGps => 'No GPS';
String get map_noGps => 'Geen GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => 'Geen overeenkomende nodes';
@override
String get map_lineOfSight => 'Zichtlijn';
@@ -4502,48 +4502,48 @@ class AppLocalizationsNl extends AppLocalizations {
String get pathTrace_legendInferred => 'Afgeleide positie';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => 'Enkel';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => 'Gezamenlijk';
@override
String get pathMap_play => 'Play';
String get pathMap_play => 'Afspelen';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => 'Pauze';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => 'Herhalen';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => 'Vorige hop';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => 'Volgende hop';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => 'Pakketanimatie tonen';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => 'Pakketanimatie verbergen';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return 'Hop $current van $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return 'Waargenomen paden: $count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => 'Primair';
@override
String pathMap_alternate(int index) {
return 'Alt $index';
return 'Alternatief $index';
}
@override
@@ -4563,14 +4563,14 @@ class AppLocalizationsNl extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => 'Gedeeld segment';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => 'Geschat segment';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return 'Gebruikt door $count paden';
}
@override
@@ -4578,33 +4578,34 @@ class AppLocalizationsNl extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no locationthe shown path is partial',
other:
'$count hops hebben geen locatie — het weergegeven pad is onvolledig',
one: '1 hop heeft geen locatie — het weergegeven pad is onvolledig',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => 'Toon alles';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => 'Verberg pad';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => 'Toon pad';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => 'Paneel inklappen';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => 'Paneel uitklappen';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => 'Geen locatie';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => 'Weergave vergrendelen op pakket';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => 'Weergave ontgrendelen van pakket';
}
+46 -39
View File
@@ -324,7 +324,7 @@ class AppLocalizationsPl extends AppLocalizations {
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
'Bluetooth nie jest dostępny w przeglądarce. Połącz się przez USB.';
@override
String get device_quickSwitch => 'Szybka zmiana';
@@ -1755,37 +1755,37 @@ class AppLocalizationsPl extends AppLocalizations {
String get map_title => 'Mapa węzłów';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => 'Wyszukaj nazwę lub identyfikator węzła';
@override
String get map_activity => 'Activity';
String get map_activity => 'Aktywność';
@override
String get map_online => 'Online';
@override
String get map_recent => 'Recent';
String get map_recent => 'Ostatnie';
@override
String get map_stale => 'Stale';
String get map_stale => 'Nieaktualne';
@override
String get map_visible => 'Visible';
String get map_visible => 'Widoczny';
@override
String get map_hidden => 'Hidden';
String get map_hidden => 'Ukryty';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => 'Wyśrodkuj na węźle';
@override
String get map_details => 'Details';
String get map_details => 'Szczegóły';
@override
String get map_noGps => 'No GPS';
String get map_noGps => 'Brak GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => 'Brak pasujących węzłów';
@override
String get map_lineOfSight => 'Linia wzroku';
@@ -4540,48 +4540,48 @@ class AppLocalizationsPl extends AppLocalizations {
String get pathTrace_legendInferred => 'Wywnioskowana pozycja';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => 'Pojedyncza';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => 'Połączone';
@override
String get pathMap_play => 'Play';
String get pathMap_play => 'Odtwórz';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => 'Wstrzymaj';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => 'Odtwórz ponownie';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => 'Poprzedni skok';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => 'Następny skok';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => 'Pokaż animację pakietu';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => 'Ukryj animację pakietu';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return 'Skok $current z $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return 'Obserwowane trasy: $count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => 'Główna';
@override
String pathMap_alternate(int index) {
return 'Alt $index';
return 'Alt. $index';
}
@override
@@ -4589,8 +4589,10 @@ class AppLocalizationsPl extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops',
one: '1 hop',
other: '$count skoku',
many: '$count skoków',
few: '$count skoki',
one: '1 skok',
);
return '$_temp0';
}
@@ -4601,14 +4603,14 @@ class AppLocalizationsPl extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => 'Wspólny segment';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => 'Szacunkowy segment';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return 'Wykorzystywane przez $count ścieżek';
}
@override
@@ -4616,33 +4618,38 @@ class AppLocalizationsPl extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no location — the shown path is partial',
other:
'$count skoku nie ma lokalizacji — pokazana ścieżka jest niekompletna',
many:
'$count skoków nie ma lokalizacji — pokazana ścieżka jest niekompletna',
few:
'$count skoki nie mają lokalizacji — pokazana ścieżka jest niekompletna',
one: '1 skok nie ma lokalizacji — pokazana ścieżka jest niekompletna',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => 'Pokaż wszystkie';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => 'Ukryj ścieżkę';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => 'Wyświetl trasę';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => 'Zwiń panel';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => 'Rozwiń panel';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => 'Brak lokalizacji';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => 'Śledź pakiet';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => 'Przestań śledzić pakiet';
}
+38 -38
View File
@@ -322,7 +322,7 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
'A funcionalidade Bluetooth não está disponível no navegador. Conecte-se via USB em vez disso.';
@override
String get device_quickSwitch => 'Mudar rapidamente';
@@ -1739,37 +1739,37 @@ class AppLocalizationsPt extends AppLocalizations {
String get map_title => 'Mapa de Nós';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => 'Pesquisar por nome ou ID do nó';
@override
String get map_activity => 'Activity';
String get map_activity => 'Atividade';
@override
String get map_online => 'Online';
@override
String get map_recent => 'Recent';
String get map_recent => 'Recente';
@override
String get map_stale => 'Stale';
String get map_stale => 'Vencido';
@override
String get map_visible => 'Visible';
String get map_visible => 'Visível';
@override
String get map_hidden => 'Hidden';
String get map_hidden => 'Escondido';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => 'Centralizar no nó';
@override
String get map_details => 'Details';
String get map_details => 'Detalhes';
@override
String get map_noGps => 'No GPS';
String get map_noGps => 'Sem GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => 'Nenhum nó encontrado';
@override
String get map_lineOfSight => 'Linha de visão';
@@ -4519,44 +4519,44 @@ class AppLocalizationsPt extends AppLocalizations {
String get pathTrace_legendInferred => 'Posição inferida';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => 'Único';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => 'Combinado';
@override
String get pathMap_play => 'Play';
String get pathMap_play => 'Reproduzir';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => 'Pausa';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => 'Repetir';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => 'Salto anterior';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => 'Próximo salto';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => 'Exibir animação do pacote';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => 'Ocultar a animação do pacote';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return 'Salto $current de $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return 'Caminhos observados: $count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => 'Primário';
@override
String pathMap_alternate(int index) {
@@ -4568,8 +4568,8 @@ class AppLocalizationsPt extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops',
one: '1 hop',
other: '$count saltos',
one: '1 salto',
);
return '$_temp0';
}
@@ -4580,14 +4580,14 @@ class AppLocalizationsPt extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => 'Segmento compartilhado';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => 'Segmento estimado';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return 'Utilizado em $count caminhos';
}
@override
@@ -4595,33 +4595,33 @@ class AppLocalizationsPt extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no location — the shown path is partial',
other: '$count saltos não têm localização — o caminho mostrado é parcial',
one: '1 salto não tem localização — o caminho mostrado é parcial',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => 'Mostrar tudo';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => 'Esconder caminho';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => 'Mostrar o caminho';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => 'Recolher painel';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => 'Expandir painel';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => 'Sem localização';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => 'Fixar vista no pacote';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => 'Liberar vista do pacote';
}
+44 -40
View File
@@ -322,7 +322,7 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
'Bluetooth недоступен в браузере. Подключитесь через USB.';
@override
String get device_quickSwitch => 'Быстрое переключение';
@@ -1744,37 +1744,37 @@ class AppLocalizationsRu extends AppLocalizations {
String get map_title => 'Карта нод';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => 'Поиск по имени или ID узла';
@override
String get map_activity => 'Activity';
String get map_activity => 'Активность';
@override
String get map_online => 'Online';
String get map_online => 'Онлайн';
@override
String get map_recent => 'Recent';
String get map_recent => 'Недавно';
@override
String get map_stale => 'Stale';
String get map_stale => 'Устаревший';
@override
String get map_visible => 'Visible';
String get map_visible => 'Видимый';
@override
String get map_hidden => 'Hidden';
String get map_hidden => 'Скрытый';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => 'Центрировать на узле';
@override
String get map_details => 'Details';
String get map_details => 'Детали';
@override
String get map_noGps => 'No GPS';
String get map_noGps => 'Без GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => 'Не найдено соответствующих узлов';
@override
String get map_lineOfSight => 'Линия видимости';
@@ -4535,48 +4535,48 @@ class AppLocalizationsRu extends AppLocalizations {
String get pathTrace_legendInferred => 'Выведенная позиция';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => 'Одиночный';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => 'Объединённые';
@override
String get pathMap_play => 'Play';
String get pathMap_play => 'Воспроизвести';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => 'Пауза';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => 'Повтор';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => 'Предыдущий хоп';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => 'Следующий хоп';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => 'Показать анимацию пакета';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => 'Скрыть анимацию пакета';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return 'Хоп $current из $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return 'Наблюдаемые маршруты: $count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => 'Основной';
@override
String pathMap_alternate(int index) {
return 'Alt $index';
return 'Альт $index';
}
@override
@@ -4584,8 +4584,10 @@ class AppLocalizationsRu extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops',
one: '1 hop',
other: '$count хопов',
many: '$count хопов',
few: '$count хопа',
one: '$count хоп',
);
return '$_temp0';
}
@@ -4596,14 +4598,14 @@ class AppLocalizationsRu extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => 'Общий сегмент';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => 'Расчётный сегмент';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return 'Используется в $count маршрутах';
}
@override
@@ -4611,33 +4613,35 @@ class AppLocalizationsRu extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no location — the shown path is partial',
other: '$count хопов не имеют координат — показанный путь неполный',
many: '$count хопов не имеют координат — показанный путь неполный',
few: '$count хопа не имеют координат — показанный путь неполный',
one: '$count хоп не имеет координат — показанный путь неполный',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => 'Показать всё';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => 'Скрыть путь';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => 'Показать маршрут';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => 'Скрыть панель';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => 'Расширить панель';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => 'Нет координат';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => 'Следить за пакетом';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => 'Не следить за пакетом';
}
+41 -39
View File
@@ -321,7 +321,7 @@ class AppLocalizationsSk extends AppLocalizations {
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
'Funkcia Bluetooth nie je dostupná v prehliadači. Prepojte sa pomocou USB.';
@override
String get device_quickSwitch => 'Rýchle prepínač';
@@ -1731,37 +1731,37 @@ class AppLocalizationsSk extends AppLocalizations {
String get map_title => 'Mapa uzlov';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => 'Vyhľadajte podľa názvu alebo ID uzla';
@override
String get map_activity => 'Activity';
String get map_activity => 'Aktivita';
@override
String get map_online => 'Online';
@override
String get map_recent => 'Recent';
String get map_recent => 'Nedávne';
@override
String get map_stale => 'Stale';
String get map_stale => 'Neaktuálne';
@override
String get map_visible => 'Visible';
String get map_visible => 'Viditeľný';
@override
String get map_hidden => 'Hidden';
String get map_hidden => 'Skrytý';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => 'Nacentrovať na uzol';
@override
String get map_details => 'Details';
String get map_details => 'Podrobnosti';
@override
String get map_noGps => 'No GPS';
String get map_noGps => 'Bez GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => 'Nenašli sa žiadne zodpovedajúce uzly.';
@override
String get map_lineOfSight => 'Úroveň výhľadu';
@@ -4501,48 +4501,48 @@ class AppLocalizationsSk extends AppLocalizations {
String get pathTrace_legendInferred => 'Odvodená poloha';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => 'Jednotlivý';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => 'Spojené';
@override
String get pathMap_play => 'Play';
String get pathMap_play => 'Prehrať';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => 'Pozastaviť';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => 'Prehrať znova';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => 'Predchádzajúci skok';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => 'Nasledujúci skok';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => 'Zobraziť animáciu paketu';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => 'Skryť animáciu paketu';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return 'Skok $current z $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return 'Pozorované cesty: $count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => 'Primárna';
@override
String pathMap_alternate(int index) {
return 'Alt $index';
return 'Alternatívny $index';
}
@override
@@ -4550,8 +4550,9 @@ class AppLocalizationsSk extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops',
one: '1 hop',
other: '$count skokov',
few: '$count skoky',
one: '1 skok',
);
return '$_temp0';
}
@@ -4562,14 +4563,14 @@ class AppLocalizationsSk extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => 'Spoločný segment';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => 'Odhadovaný segment';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return 'Používané $count cestami';
}
@override
@@ -4577,33 +4578,34 @@ class AppLocalizationsSk extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no location — the shown path is partial',
other: '$count skokov nemá polohu — zobrazená trasa je neúplná',
few: '$count skoky nemajú polohu — zobrazená trasa je neúplná',
one: '1 skok nemá polohu — zobrazená trasa je neúplná',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => 'Zobraziť všetky';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => 'Skryť cestu';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => 'Zobraziť trasu';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => 'Zatvoriť panel';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => 'Rozbaliť panel';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => 'Bez polohy';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => 'Uzamknúť pohľad na paket';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => 'Odomknúť pohľad od paketu';
}
+44 -40
View File
@@ -320,7 +320,7 @@ class AppLocalizationsSl extends AppLocalizations {
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
'Funkcija Bluetooth v brskalniku ni na voljo. Povežite se preko USB-ja namesto tega.';
@override
String get device_quickSwitch => 'Hitro preklop';
@@ -1724,37 +1724,37 @@ class AppLocalizationsSl extends AppLocalizations {
String get map_title => 'Mapa omrežja';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => 'Iščite ime ali ID vozlišča';
@override
String get map_activity => 'Activity';
String get map_activity => 'Dejavnost';
@override
String get map_online => 'Online';
String get map_online => 'V omrežju';
@override
String get map_recent => 'Recent';
String get map_recent => 'Nedavni';
@override
String get map_stale => 'Stale';
String get map_stale => 'Zastarelo';
@override
String get map_visible => 'Visible';
String get map_visible => 'Vidno';
@override
String get map_hidden => 'Hidden';
String get map_hidden => 'Skrit';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => 'Centriraj na vozlišče';
@override
String get map_details => 'Details';
String get map_details => 'Podrobnosti';
@override
String get map_noGps => 'No GPS';
String get map_noGps => 'Brez GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => 'Ni ujemajočih se vozlišč';
@override
String get map_lineOfSight => 'Linija vida';
@@ -4500,48 +4500,48 @@ class AppLocalizationsSl extends AppLocalizations {
String get pathTrace_legendInferred => 'Izpeljana lokacija';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => 'Posamično';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => 'Skupno';
@override
String get pathMap_play => 'Play';
String get pathMap_play => 'Predvajaj';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => 'Premor';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => 'Ponovitev';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => 'Prejšnji skok';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => 'Naslednji skok';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => 'Prikaži animacijo paketa';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => 'Skrij animacijo paketa';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return 'Skok $current od $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return 'Opazovane poti: $count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => 'Primarna';
@override
String pathMap_alternate(int index) {
return 'Alt $index';
return 'Alternativa $index';
}
@override
@@ -4549,8 +4549,10 @@ class AppLocalizationsSl extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops',
one: '1 hop',
other: '$count skokov',
few: '$count skoki',
two: '2 skoka',
one: '1 skok',
);
return '$_temp0';
}
@@ -4561,14 +4563,14 @@ class AppLocalizationsSl extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => 'Deljen segment';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => 'Ocenjen segment';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return 'Uporablja $count poti';
}
@override
@@ -4576,33 +4578,35 @@ class AppLocalizationsSl extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no location — the shown path is partial',
other: '$count skokov nima lokacije — prikazana pot je delna',
few: '$count skoki nimajo lokacije — prikazana pot je delna',
two: '2 skoka nimata lokacije — prikazana pot je delna',
one: '1 skok nima lokacije — prikazana pot je delna',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => 'Pokaži vse';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => 'Skrij pot';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => 'Pokaži pot';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => 'Strni ploščo';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => 'Razširi ploščo';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => 'Brez lokacije';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => 'Zakleni pogled na paket';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => 'Odkleni pogled od paketa';
}
+39 -39
View File
@@ -318,7 +318,7 @@ class AppLocalizationsSv extends AppLocalizations {
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
'Bluetooth är inte tillgängligt i webbläsaren. Anslut istället via USB.';
@override
String get device_quickSwitch => 'Snabb växling';
@@ -1717,37 +1717,37 @@ class AppLocalizationsSv extends AppLocalizations {
String get map_title => 'Nodkarta';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => 'Sök efter nodens namn eller ID';
@override
String get map_activity => 'Activity';
String get map_activity => 'Aktivitet';
@override
String get map_online => 'Online';
@override
String get map_recent => 'Recent';
String get map_recent => 'Nyligen';
@override
String get map_stale => 'Stale';
String get map_stale => 'Inaktuell';
@override
String get map_visible => 'Visible';
String get map_visible => 'Synlig';
@override
String get map_hidden => 'Hidden';
String get map_hidden => 'Dold';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => 'Centrera på nod';
@override
String get map_details => 'Details';
String get map_details => 'Detaljer';
@override
String get map_noGps => 'No GPS';
String get map_noGps => 'Ingen GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => 'Inga matchande noder';
@override
String get map_lineOfSight => 'Synlinje';
@@ -4474,48 +4474,48 @@ class AppLocalizationsSv extends AppLocalizations {
String get pathTrace_legendInferred => 'Antagen position';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => 'Enkel';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => 'Kombinerat';
@override
String get pathMap_play => 'Play';
String get pathMap_play => 'Spela';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => 'Pausa';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => 'Återspela';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => 'Föregående hopp';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => 'Nästa hopp';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => 'Visa paketanimering';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => 'Dölj paketanimering';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return 'Hopp $current av $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return 'Observerade vägar: $count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => 'Primär';
@override
String pathMap_alternate(int index) {
return 'Alt $index';
return 'Alternativ $index';
}
@override
@@ -4523,8 +4523,8 @@ class AppLocalizationsSv extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops',
one: '1 hop',
other: '$count hopp',
one: '1 hopp',
);
return '$_temp0';
}
@@ -4535,14 +4535,14 @@ class AppLocalizationsSv extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => 'Delat segment';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => 'Uppskattat segment';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return 'Används av $count vägar';
}
@override
@@ -4550,33 +4550,33 @@ class AppLocalizationsSv extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no location — the shown path is partial',
other: '$count hopp saknar position — den visade vägen är ofullständig',
one: '1 hopp saknar position — den visade vägen är ofullständig',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => 'Visa allt';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => 'Dölj väg';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => 'Visa väg';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => 'Fäll ihop panel';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => 'Expandera panel';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => 'Ingen position';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => 'Lås vy till paket';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => 'Lås upp vy från paket';
}
+45 -40
View File
@@ -321,7 +321,7 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
'Bluetooth недоступний у браузері. Підключіться через USB.';
@override
String get device_quickSwitch => 'Швидке перемикання';
@@ -1737,37 +1737,37 @@ class AppLocalizationsUk extends AppLocalizations {
String get map_title => 'Карта вузлів';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => 'Назва або ID вузла';
@override
String get map_activity => 'Activity';
String get map_activity => 'Активність';
@override
String get map_online => 'Online';
String get map_online => 'Онлайн';
@override
String get map_recent => 'Recent';
String get map_recent => 'Нещодавні';
@override
String get map_stale => 'Stale';
String get map_stale => 'Застаріло';
@override
String get map_visible => 'Visible';
String get map_visible => 'Видимий';
@override
String get map_hidden => 'Hidden';
String get map_hidden => 'Прихований';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => 'Центрувати на вузлі';
@override
String get map_details => 'Details';
String get map_details => 'Деталі';
@override
String get map_noGps => 'No GPS';
String get map_noGps => 'Без GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => 'Не знайдено відповідних вузлів';
@override
String get map_lineOfSight => 'Пряма видимість';
@@ -4534,48 +4534,48 @@ class AppLocalizationsUk extends AppLocalizations {
String get pathTrace_legendInferred => 'Висновок щодо положення';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => 'Один';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => 'Об\'єднаний';
@override
String get pathMap_play => 'Play';
String get pathMap_play => 'Відтворити';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => 'Призупинити';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => 'Повтор';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => 'Попередній перехід';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => 'Наступний перехід';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => 'Відобразити анімацію пакета';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => 'Приховати анімацію пакета';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return 'Перехід $current з $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return 'Зафіксовані маршрути: $count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => 'Основний';
@override
String pathMap_alternate(int index) {
return 'Alt $index';
return 'Альт. $index';
}
@override
@@ -4583,8 +4583,10 @@ class AppLocalizationsUk extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops',
one: '1 hop',
other: '$count переходів',
many: '$count переходів',
few: '$count переходи',
one: '1 перехід',
);
return '$_temp0';
}
@@ -4595,14 +4597,14 @@ class AppLocalizationsUk extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => 'Об\'єднаний сегмент';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => 'Орієнтовний сегмент';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return 'Використовується $count шляхами';
}
@override
@@ -4610,33 +4612,36 @@ class AppLocalizationsUk extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no location — the shown path is partial',
other:
'$count переходів не мають геопозиції — показаний шлях є частковим',
many: '$count переходів не мають геопозиції — показаний шлях є частковим',
few: '$count переходи не мають геопозиції — показаний шлях є частковим',
one: '1 перехід не має геопозиції — показаний шлях є частковим',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => 'Показати все';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => 'Приховати шлях';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => 'Показати шлях';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => 'Згорнути панель';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => 'Розгорнути панель';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => 'Без геопозиції';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => 'Прив\'язати вигляд до пакету';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => 'Відв\'язати вигляд від пакету';
}
+40 -41
View File
@@ -306,8 +306,7 @@ class AppLocalizationsZh extends AppLocalizations {
String get scanner_enableBluetooth => '启用蓝牙';
@override
String get scanner_bluetoothWebUnsupported =>
'Bluetooth isn\'t available in the browser. Connect over USB instead.';
String get scanner_bluetoothWebUnsupported => '浏览器不支持蓝牙,请改用 USB 连接。';
@override
String get device_quickSwitch => '快速切换';
@@ -1639,37 +1638,37 @@ class AppLocalizationsZh extends AppLocalizations {
String get map_title => '节点地图';
@override
String get map_searchHint => 'Search node name or ID';
String get map_searchHint => '搜索节点名称或ID';
@override
String get map_activity => 'Activity';
String get map_activity => '活动';
@override
String get map_online => 'Online';
String get map_online => '在线';
@override
String get map_recent => 'Recent';
String get map_recent => '最近';
@override
String get map_stale => 'Stale';
String get map_stale => '过时';
@override
String get map_visible => 'Visible';
String get map_visible => '可见';
@override
String get map_hidden => 'Hidden';
String get map_hidden => '已隐藏';
@override
String get map_centerOnNode => 'Center on node';
String get map_centerOnNode => '以节点为中心';
@override
String get map_details => 'Details';
String get map_details => '详细信息';
@override
String get map_noGps => 'No GPS';
String get map_noGps => ' GPS';
@override
String get map_noResults => 'No matching nodes';
String get map_noResults => '未找到匹配的节点';
@override
String get map_lineOfSight => '视线';
@@ -4184,48 +4183,48 @@ class AppLocalizationsZh extends AppLocalizations {
String get pathTrace_legendInferred => '推测的位置';
@override
String get pathMap_viewSingle => 'Single';
String get pathMap_viewSingle => '单条';
@override
String get pathMap_viewCombined => 'Combined';
String get pathMap_viewCombined => '综合';
@override
String get pathMap_play => 'Play';
String get pathMap_play => '播放';
@override
String get pathMap_pause => 'Pause';
String get pathMap_pause => '暂停';
@override
String get pathMap_replay => 'Replay';
String get pathMap_replay => '重播';
@override
String get pathMap_stepBack => 'Previous hop';
String get pathMap_stepBack => '上一跳';
@override
String get pathMap_stepForward => 'Next hop';
String get pathMap_stepForward => '下一跳';
@override
String get pathMap_animationOn => 'Show packet animation';
String get pathMap_animationOn => '显示数据包动画';
@override
String get pathMap_animationOff => 'Hide packet animation';
String get pathMap_animationOff => '隐藏数据包动画';
@override
String pathMap_hopOf(int current, int total) {
return 'Hop $current of $total';
return ' $current 跳,共 $total';
}
@override
String pathMap_observedPaths(int count) {
return 'Observed paths: $count';
return '观测到的路径:$count';
}
@override
String get pathMap_primary => 'Primary';
String get pathMap_primary => '主路径';
@override
String pathMap_alternate(int index) {
return 'Alt $index';
return '备用 $index';
}
@override
@@ -4233,8 +4232,8 @@ class AppLocalizationsZh extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops',
one: '1 hop',
other: '$count ',
one: '1 ',
);
return '$_temp0';
}
@@ -4245,14 +4244,14 @@ class AppLocalizationsZh extends AppLocalizations {
}
@override
String get pathMap_legendShared => 'Shared segment';
String get pathMap_legendShared => '共享路段';
@override
String get pathMap_legendEstimated => 'Estimated segment';
String get pathMap_legendEstimated => '估算路段';
@override
String pathMap_sharedNodeCount(int count) {
return 'Used by $count paths';
return '已被 $count 条路径使用';
}
@override
@@ -4260,33 +4259,33 @@ class AppLocalizationsZh extends AppLocalizations {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count hops have no location — the shown path is partial',
one: '1 hop has no location — the shown path is partial',
other: '$count 跳无位置信息 — 显示的路径不完整',
one: '1 跳无位置信息 — 显示的路径不完整',
);
return '$_temp0';
}
@override
String get pathMap_showAllPaths => 'Show all';
String get pathMap_showAllPaths => '显示全部';
@override
String get pathMap_hidePath => 'Hide path';
String get pathMap_hidePath => '隐藏路径';
@override
String get pathMap_showPath => 'Show path';
String get pathMap_showPath => '显示路径';
@override
String get pathMap_collapsePanel => 'Collapse panel';
String get pathMap_collapsePanel => '收起面板';
@override
String get pathMap_expandPanel => 'Expand panel';
String get pathMap_expandPanel => '展开面板';
@override
String get pathMap_noLocation => 'No location';
String get pathMap_noLocation => '无位置';
@override
String get pathMap_followPacket => 'Lock view to packet';
String get pathMap_followPacket => '锁定视图跟随数据包';
@override
String get pathMap_unfollowPacket => 'Unlock view from packet';
String get pathMap_unfollowPacket => '解锁视图跟随';
}
+95 -1
View File
@@ -2446,5 +2446,99 @@
"chrome_bluetoothRequiresChromium": "Web Bluetooth vereist een Chromium-browser.",
"channels_communityShortId": "ID: {id}...",
"pathTrace_legendGpsConfirmed": "GPS-locatie bevestigd",
"pathTrace_legendInferred": "Afgeleide positie"
"pathTrace_legendInferred": "Afgeleide positie",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_activity": "Activiteit",
"map_searchHint": "Zoek op naam of ID van de knoop",
"scanner_bluetoothWebUnsupported": "Bluetooth is niet beschikbaar in de browser. Verbind dan via USB.",
"map_online": "Online",
"map_recent": "Recent",
"map_stale": "Verouderd",
"map_visible": "Zichtbaar",
"map_hidden": "Verborgen",
"map_centerOnNode": "Centreer op node",
"map_details": "Details",
"map_noGps": "Geen GPS",
"map_noResults": "Geen overeenkomende nodes",
"pathMap_viewSingle": "Enkel",
"pathMap_viewCombined": "Gezamenlijk",
"pathMap_play": "Afspelen",
"pathMap_pause": "Pauze",
"pathMap_replay": "Herhalen",
"pathMap_stepBack": "Vorige hop",
"pathMap_stepForward": "Volgende hop",
"pathMap_animationOn": "Pakketanimatie tonen",
"pathMap_animationOff": "Pakketanimatie verbergen",
"pathMap_hopOf": "Hop {current} van {total}",
"pathMap_observedPaths": "Waargenomen paden: {count}",
"pathMap_primary": "Primair",
"pathMap_alternate": "Alternatief {index}",
"pathMap_hopCount": "{count, plural, =1{1 hop} other{{count} hops}}",
"pathMap_legendShared": "Gedeeld segment",
"pathMap_legendEstimated": "Geschat segment",
"pathMap_sharedNodeCount": "Gebruikt door {count} paden",
"pathMap_partialAnimation": "{count, plural, =1{1 hop heeft geen locatie — het weergegeven pad is onvolledig} other{{count} hops hebben geen locatie — het weergegeven pad is onvolledig}}",
"pathMap_showAllPaths": "Toon alles",
"pathMap_hidePath": "Verberg pad",
"pathMap_showPath": "Toon pad",
"pathMap_collapsePanel": "Paneel inklappen",
"pathMap_expandPanel": "Paneel uitklappen",
"pathMap_noLocation": "Geen locatie",
"pathMap_followPacket": "Weergave vergrendelen op pakket",
"pathMap_unfollowPacket": "Weergave ontgrendelen van pakket",
"pathMap_gpsCount": "{confirmed}/{total} GPS"
}
+95 -1
View File
@@ -2484,5 +2484,99 @@
"chrome_bluetoothRequiresChromium": "Web Bluetooth wymaga przeglądarki Chromium.",
"channels_communityShortId": "ID: {id}...",
"pathTrace_legendGpsConfirmed": "GPS potwierdzone",
"pathTrace_legendInferred": "Wywnioskowana pozycja"
"pathTrace_legendInferred": "Wywnioskowana pozycja",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_online": "Online",
"map_searchHint": "Wyszukaj nazwę lub identyfikator węzła",
"scanner_bluetoothWebUnsupported": "Bluetooth nie jest dostępny w przeglądarce. Połącz się przez USB.",
"map_activity": "Aktywność",
"map_recent": "Ostatnie",
"map_stale": "Nieaktualne",
"map_visible": "Widoczny",
"map_hidden": "Ukryty",
"map_centerOnNode": "Wyśrodkuj na węźle",
"map_details": "Szczegóły",
"map_noGps": "Brak GPS",
"map_noResults": "Brak pasujących węzłów",
"pathMap_viewSingle": "Pojedyncza",
"pathMap_viewCombined": "Połączone",
"pathMap_play": "Odtwórz",
"pathMap_pause": "Wstrzymaj",
"pathMap_replay": "Odtwórz ponownie",
"pathMap_stepBack": "Poprzedni skok",
"pathMap_stepForward": "Następny skok",
"pathMap_animationOn": "Pokaż animację pakietu",
"pathMap_animationOff": "Ukryj animację pakietu",
"pathMap_hopOf": "Skok {current} z {total}",
"pathMap_observedPaths": "Obserwowane trasy: {count}",
"pathMap_primary": "Główna",
"pathMap_alternate": "Alt. {index}",
"pathMap_hopCount": "{count, plural, =1{1 skok} few{{count} skoki} many{{count} skoków} other{{count} skoku}}",
"pathMap_legendShared": "Wspólny segment",
"pathMap_legendEstimated": "Szacunkowy segment",
"pathMap_sharedNodeCount": "Wykorzystywane przez {count} ścieżek",
"pathMap_partialAnimation": "{count, plural, =1{1 skok nie ma lokalizacji — pokazana ścieżka jest niekompletna} few{{count} skoki nie mają lokalizacji — pokazana ścieżka jest niekompletna} many{{count} skoków nie ma lokalizacji — pokazana ścieżka jest niekompletna} other{{count} skoku nie ma lokalizacji — pokazana ścieżka jest niekompletna}}",
"pathMap_showAllPaths": "Pokaż wszystkie",
"pathMap_hidePath": "Ukryj ścieżkę",
"pathMap_showPath": "Wyświetl trasę",
"pathMap_collapsePanel": "Zwiń panel",
"pathMap_expandPanel": "Rozwiń panel",
"pathMap_noLocation": "Brak lokalizacji",
"pathMap_followPacket": "Śledź pakiet",
"pathMap_unfollowPacket": "Przestań śledzić pakiet",
"pathMap_gpsCount": "{confirmed}/{total} GPS"
}
+95 -1
View File
@@ -2446,5 +2446,99 @@
"chrome_bluetoothRequiresChromium": "O Web Bluetooth requer um navegador Chromium.",
"channels_communityShortId": "ID: {id}...",
"pathTrace_legendGpsConfirmed": "GPS confirmado",
"pathTrace_legendInferred": "Posição inferida"
"pathTrace_legendInferred": "Posição inferida",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_online": "Online",
"map_activity": "Atividade",
"scanner_bluetoothWebUnsupported": "A funcionalidade Bluetooth não está disponível no navegador. Conecte-se via USB em vez disso.",
"map_searchHint": "Pesquisar por nome ou ID do nó",
"map_recent": "Recente",
"map_stale": "Vencido",
"map_visible": "Visível",
"map_hidden": "Escondido",
"map_centerOnNode": "Centralizar no nó",
"map_details": "Detalhes",
"map_noGps": "Sem GPS",
"map_noResults": "Nenhum nó encontrado",
"pathMap_viewSingle": "Único",
"pathMap_viewCombined": "Combinado",
"pathMap_play": "Reproduzir",
"pathMap_pause": "Pausa",
"pathMap_stepBack": "Salto anterior",
"pathMap_replay": "Repetir",
"pathMap_stepForward": "Próximo salto",
"pathMap_animationOn": "Exibir animação do pacote",
"pathMap_animationOff": "Ocultar a animação do pacote",
"pathMap_hopOf": "Salto {current} de {total}",
"pathMap_observedPaths": "Caminhos observados: {count}",
"pathMap_primary": "Primário",
"pathMap_alternate": "Alt {index}",
"pathMap_hopCount": "{count, plural, =1{1 salto} other{{count} saltos}}",
"pathMap_legendShared": "Segmento compartilhado",
"pathMap_legendEstimated": "Segmento estimado",
"pathMap_sharedNodeCount": "Utilizado em {count} caminhos",
"pathMap_partialAnimation": "{count, plural, =1{1 salto não tem localização — o caminho mostrado é parcial} other{{count} saltos não têm localização — o caminho mostrado é parcial}}",
"pathMap_showAllPaths": "Mostrar tudo",
"pathMap_hidePath": "Esconder caminho",
"pathMap_showPath": "Mostrar o caminho",
"pathMap_collapsePanel": "Recolher painel",
"pathMap_expandPanel": "Expandir painel",
"pathMap_noLocation": "Sem localização",
"pathMap_followPacket": "Fixar vista no pacote",
"pathMap_unfollowPacket": "Liberar vista do pacote",
"pathMap_gpsCount": "{confirmed}/{total} GPS"
}
+95 -1
View File
@@ -1749,5 +1749,99 @@
"chrome_bluetoothRequiresChromium": "Для работы Web Bluetooth требуется браузер на основе Chromium.",
"channels_communityShortId": "Идентификатор: {id}...",
"pathTrace_legendGpsConfirmed": "GPS подтверждено",
"pathTrace_legendInferred": "Выведенная позиция"
"pathTrace_legendInferred": "Выведенная позиция",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_searchHint": "Поиск по имени или ID узла",
"map_online": "Онлайн",
"scanner_bluetoothWebUnsupported": "Bluetooth недоступен в браузере. Подключитесь через USB.",
"map_activity": "Активность",
"map_recent": "Недавно",
"map_stale": "Устаревший",
"map_visible": "Видимый",
"map_hidden": "Скрытый",
"map_centerOnNode": "Центрировать на узле",
"map_details": "Детали",
"map_noGps": "Без GPS",
"map_noResults": "Не найдено соответствующих узлов",
"pathMap_viewSingle": "Одиночный",
"pathMap_viewCombined": "Объединённые",
"pathMap_play": "Воспроизвести",
"pathMap_pause": "Пауза",
"pathMap_replay": "Повтор",
"pathMap_stepBack": "Предыдущий хоп",
"pathMap_stepForward": "Следующий хоп",
"pathMap_animationOn": "Показать анимацию пакета",
"pathMap_animationOff": "Скрыть анимацию пакета",
"pathMap_hopOf": "Хоп {current} из {total}",
"pathMap_observedPaths": "Наблюдаемые маршруты: {count}",
"pathMap_primary": "Основной",
"pathMap_alternate": "Альт {index}",
"pathMap_hopCount": "{count, plural, one{{count} хоп} few{{count} хопа} many{{count} хопов} other{{count} хопов}}",
"pathMap_legendShared": "Общий сегмент",
"pathMap_legendEstimated": "Расчётный сегмент",
"pathMap_sharedNodeCount": "Используется в {count} маршрутах",
"pathMap_partialAnimation": "{count, plural, one{{count} хоп не имеет координат — показанный путь неполный} few{{count} хопа не имеют координат — показанный путь неполный} many{{count} хопов не имеют координат — показанный путь неполный} other{{count} хопов не имеют координат — показанный путь неполный}}",
"pathMap_showAllPaths": "Показать всё",
"pathMap_hidePath": "Скрыть путь",
"pathMap_collapsePanel": "Скрыть панель",
"pathMap_showPath": "Показать маршрут",
"pathMap_expandPanel": "Расширить панель",
"pathMap_noLocation": "Нет координат",
"pathMap_followPacket": "Следить за пакетом",
"pathMap_unfollowPacket": "Не следить за пакетом",
"pathMap_gpsCount": "{confirmed}/{total} GPS"
}
+95 -1
View File
@@ -2446,5 +2446,99 @@
"chrome_bluetoothRequiresChromium": "Web Bluetooth vyžaduje prehliadač Chromium.",
"channels_communityShortId": "ID: {id}...",
"pathTrace_legendGpsConfirmed": "GPS potvrdilo",
"pathTrace_legendInferred": "Odvodená poloha"
"pathTrace_legendInferred": "Odvodená poloha",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_online": "Online",
"scanner_bluetoothWebUnsupported": "Funkcia Bluetooth nie je dostupná v prehliadači. Prepojte sa pomocou USB.",
"map_searchHint": "Vyhľadajte podľa názvu alebo ID uzla",
"map_activity": "Aktivita",
"map_recent": "Nedávne",
"map_stale": "Neaktuálne",
"map_hidden": "Skrytý",
"map_visible": "Viditeľný",
"map_centerOnNode": "Nacentrovať na uzol",
"map_details": "Podrobnosti",
"map_noGps": "Bez GPS",
"map_noResults": "Nenašli sa žiadne zodpovedajúce uzly.",
"pathMap_viewSingle": "Jednotlivý",
"pathMap_viewCombined": "Spojené",
"pathMap_play": "Prehrať",
"pathMap_pause": "Pozastaviť",
"pathMap_replay": "Prehrať znova",
"pathMap_stepBack": "Predchádzajúci skok",
"pathMap_stepForward": "Nasledujúci skok",
"pathMap_animationOn": "Zobraziť animáciu paketu",
"pathMap_animationOff": "Skryť animáciu paketu",
"pathMap_hopOf": "Skok {current} z {total}",
"pathMap_observedPaths": "Pozorované cesty: {count}",
"pathMap_primary": "Primárna",
"pathMap_alternate": "Alternatívny {index}",
"pathMap_hopCount": "{count, plural, =1{1 skok} few{{count} skoky} other{{count} skokov}}",
"pathMap_legendShared": "Spoločný segment",
"pathMap_legendEstimated": "Odhadovaný segment",
"pathMap_sharedNodeCount": "Používané {count} cestami",
"pathMap_partialAnimation": "{count, plural, =1{1 skok nemá polohu — zobrazená trasa je neúplná} few{{count} skoky nemajú polohu — zobrazená trasa je neúplná} other{{count} skokov nemá polohu — zobrazená trasa je neúplná}}",
"pathMap_showAllPaths": "Zobraziť všetky",
"pathMap_hidePath": "Skryť cestu",
"pathMap_showPath": "Zobraziť trasu",
"pathMap_collapsePanel": "Zatvoriť panel",
"pathMap_expandPanel": "Rozbaliť panel",
"pathMap_noLocation": "Bez polohy",
"pathMap_followPacket": "Uzamknúť pohľad na paket",
"pathMap_unfollowPacket": "Odomknúť pohľad od paketu",
"pathMap_gpsCount": "{confirmed}/{total} GPS"
}
+95 -1
View File
@@ -2446,5 +2446,99 @@
"chrome_bluetoothRequiresChromium": "Web Bluetooth zahteva brskalnik Chromium.",
"channels_communityShortId": "ID: {id}...",
"pathTrace_legendGpsConfirmed": "GPS potrdilo",
"pathTrace_legendInferred": "Izpeljana lokacija"
"pathTrace_legendInferred": "Izpeljana lokacija",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"scanner_bluetoothWebUnsupported": "Funkcija Bluetooth v brskalniku ni na voljo. Povežite se preko USB-ja namesto tega.",
"map_searchHint": "Iščite ime ali ID vozlišča",
"map_online": "V omrežju",
"map_activity": "Dejavnost",
"map_recent": "Nedavni",
"map_stale": "Zastarelo",
"map_visible": "Vidno",
"map_hidden": "Skrit",
"map_centerOnNode": "Centriraj na vozlišče",
"map_details": "Podrobnosti",
"map_noGps": "Brez GPS",
"map_noResults": "Ni ujemajočih se vozlišč",
"pathMap_viewSingle": "Posamično",
"pathMap_viewCombined": "Skupno",
"pathMap_play": "Predvajaj",
"pathMap_pause": "Premor",
"pathMap_replay": "Ponovitev",
"pathMap_stepBack": "Prejšnji skok",
"pathMap_stepForward": "Naslednji skok",
"pathMap_animationOn": "Prikaži animacijo paketa",
"pathMap_animationOff": "Skrij animacijo paketa",
"pathMap_hopOf": "Skok {current} od {total}",
"pathMap_observedPaths": "Opazovane poti: {count}",
"pathMap_primary": "Primarna",
"pathMap_alternate": "Alternativa {index}",
"pathMap_legendShared": "Deljen segment",
"pathMap_legendEstimated": "Ocenjen segment",
"pathMap_sharedNodeCount": "Uporablja {count} poti",
"pathMap_partialAnimation": "{count, plural, =1{1 skok nima lokacije — prikazana pot je delna} =2{2 skoka nimata lokacije — prikazana pot je delna} few{{count} skoki nimajo lokacije — prikazana pot je delna} other{{count} skokov nima lokacije — prikazana pot je delna}}",
"pathMap_hopCount": "{count, plural, =1{1 skok} =2{2 skoka} few{{count} skoki} other{{count} skokov}}",
"pathMap_showAllPaths": "Pokaži vse",
"pathMap_hidePath": "Skrij pot",
"pathMap_showPath": "Pokaži pot",
"pathMap_collapsePanel": "Strni ploščo",
"pathMap_expandPanel": "Razširi ploščo",
"pathMap_noLocation": "Brez lokacije",
"pathMap_followPacket": "Zakleni pogled na paket",
"pathMap_unfollowPacket": "Odkleni pogled od paketa",
"pathMap_gpsCount": "{confirmed}/{total} GPS"
}
+95 -1
View File
@@ -2446,5 +2446,99 @@
"chrome_bluetoothRequiresChromium": "Web Bluetooth kräver en Chromium-baserad webbläsare.",
"channels_communityShortId": "ID: {id}...",
"pathTrace_legendGpsConfirmed": "GPS-verifierat",
"pathTrace_legendInferred": "Antagen position"
"pathTrace_legendInferred": "Antagen position",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_online": "Online",
"scanner_bluetoothWebUnsupported": "Bluetooth är inte tillgängligt i webbläsaren. Anslut istället via USB.",
"map_activity": "Aktivitet",
"map_searchHint": "Sök efter nodens namn eller ID",
"map_recent": "Nyligen",
"map_stale": "Inaktuell",
"map_visible": "Synlig",
"map_hidden": "Dold",
"map_centerOnNode": "Centrera på nod",
"map_details": "Detaljer",
"map_noGps": "Ingen GPS",
"map_noResults": "Inga matchande noder",
"pathMap_viewSingle": "Enkel",
"pathMap_viewCombined": "Kombinerat",
"pathMap_play": "Spela",
"pathMap_pause": "Pausa",
"pathMap_replay": "Återspela",
"pathMap_stepBack": "Föregående hopp",
"pathMap_stepForward": "Nästa hopp",
"pathMap_animationOn": "Visa paketanimering",
"pathMap_animationOff": "Dölj paketanimering",
"pathMap_hopOf": "Hopp {current} av {total}",
"pathMap_observedPaths": "Observerade vägar: {count}",
"pathMap_primary": "Primär",
"pathMap_alternate": "Alternativ {index}",
"pathMap_hopCount": "{count, plural, =1{1 hopp} other{{count} hopp}}",
"pathMap_legendShared": "Delat segment",
"pathMap_legendEstimated": "Uppskattat segment",
"pathMap_sharedNodeCount": "Används av {count} vägar",
"pathMap_partialAnimation": "{count, plural, =1{1 hopp saknar position — den visade vägen är ofullständig} other{{count} hopp saknar position — den visade vägen är ofullständig}}",
"pathMap_showAllPaths": "Visa allt",
"pathMap_hidePath": "Dölj väg",
"pathMap_showPath": "Visa väg",
"pathMap_collapsePanel": "Fäll ihop panel",
"pathMap_expandPanel": "Expandera panel",
"pathMap_noLocation": "Ingen position",
"pathMap_unfollowPacket": "Lås upp vy från paket",
"pathMap_followPacket": "Lås vy till paket",
"pathMap_gpsCount": "{confirmed}/{total} GPS"
}
+95 -1
View File
@@ -2426,5 +2426,99 @@
"chrome_bluetoothRequiresChromium": "Web Bluetooth вимагає браузера на основі Chromium",
"channels_communityShortId": "ID: {id}...",
"pathTrace_legendGpsConfirmed": "GPS підтверджено",
"pathTrace_legendInferred": "Висновок щодо положення"
"pathTrace_legendInferred": "Висновок щодо положення",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"scanner_bluetoothWebUnsupported": "Bluetooth недоступний у браузері. Підключіться через USB.",
"map_searchHint": "Назва або ID вузла",
"map_activity": "Активність",
"map_online": "Онлайн",
"map_recent": "Нещодавні",
"map_stale": "Застаріло",
"map_visible": "Видимий",
"map_hidden": "Прихований",
"map_centerOnNode": "Центрувати на вузлі",
"map_details": "Деталі",
"map_noGps": "Без GPS",
"map_noResults": "Не знайдено відповідних вузлів",
"pathMap_viewSingle": "Один",
"pathMap_viewCombined": "Об'єднаний",
"pathMap_play": "Відтворити",
"pathMap_pause": "Призупинити",
"pathMap_replay": "Повтор",
"pathMap_stepForward": "Наступний перехід",
"pathMap_stepBack": "Попередній перехід",
"pathMap_animationOn": "Відобразити анімацію пакета",
"pathMap_animationOff": "Приховати анімацію пакета",
"pathMap_hopOf": "Перехід {current} з {total}",
"pathMap_observedPaths": "Зафіксовані маршрути: {count}",
"pathMap_primary": "Основний",
"pathMap_alternate": "Альт. {index}",
"pathMap_hopCount": "{count, plural, =1{1 перехід} few{{count} переходи} many{{count} переходів} other{{count} переходів}}",
"pathMap_legendShared": "Об'єднаний сегмент",
"pathMap_legendEstimated": "Орієнтовний сегмент",
"pathMap_sharedNodeCount": "Використовується {count} шляхами",
"pathMap_partialAnimation": "{count, plural, =1{1 перехід не має геопозиції — показаний шлях є частковим} few{{count} переходи не мають геопозиції — показаний шлях є частковим} many{{count} переходів не мають геопозиції — показаний шлях є частковим} other{{count} переходів не мають геопозиції — показаний шлях є частковим}}",
"pathMap_showAllPaths": "Показати все",
"pathMap_hidePath": "Приховати шлях",
"pathMap_showPath": "Показати шлях",
"pathMap_collapsePanel": "Згорнути панель",
"pathMap_expandPanel": "Розгорнути панель",
"pathMap_noLocation": "Без геопозиції",
"pathMap_followPacket": "Прив'язати вигляд до пакету",
"pathMap_unfollowPacket": "Відв'язати вигляд від пакету",
"pathMap_gpsCount": "{confirmed}/{total} GPS"
}
+95 -1
View File
@@ -2451,5 +2451,99 @@
"chrome_bluetoothRequiresChromium": "Web Bluetooth 需要 Chromium 浏览器",
"channels_communityShortId": "ID{id}...",
"pathTrace_legendGpsConfirmed": "通过GPS确认",
"pathTrace_legendInferred": "推测的位置"
"pathTrace_legendInferred": "推测的位置",
"@pathMap_hopOf": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_observedPaths": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_alternate": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@pathMap_hopCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_gpsCount": {
"placeholders": {
"confirmed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"@pathMap_sharedNodeCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"@pathMap_partialAnimation": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_online": "在线",
"scanner_bluetoothWebUnsupported": "浏览器不支持蓝牙,请改用 USB 连接。",
"map_activity": "活动",
"map_searchHint": "搜索节点名称或ID",
"map_recent": "最近",
"map_visible": "可见",
"map_stale": "过时",
"map_hidden": "已隐藏",
"map_centerOnNode": "以节点为中心",
"map_details": "详细信息",
"map_noGps": "无 GPS",
"map_noResults": "未找到匹配的节点",
"pathMap_viewSingle": "单条",
"pathMap_viewCombined": "综合",
"pathMap_play": "播放",
"pathMap_pause": "暂停",
"pathMap_replay": "重播",
"pathMap_stepBack": "上一跳",
"pathMap_stepForward": "下一跳",
"pathMap_animationOn": "显示数据包动画",
"pathMap_animationOff": "隐藏数据包动画",
"pathMap_hopOf": "第 {current} 跳,共 {total} 跳",
"pathMap_observedPaths": "观测到的路径:{count}",
"pathMap_primary": "主路径",
"pathMap_alternate": "备用 {index}",
"pathMap_hopCount": "{count, plural, =1{1 跳} other{{count} 跳}}",
"pathMap_legendShared": "共享路段",
"pathMap_legendEstimated": "估算路段",
"pathMap_sharedNodeCount": "已被 {count} 条路径使用",
"pathMap_showAllPaths": "显示全部",
"pathMap_hidePath": "隐藏路径",
"pathMap_showPath": "显示路径",
"pathMap_collapsePanel": "收起面板",
"pathMap_expandPanel": "展开面板",
"pathMap_noLocation": "无位置",
"pathMap_followPacket": "锁定视图跟随数据包",
"pathMap_unfollowPacket": "解锁视图跟随",
"pathMap_gpsCount": "{confirmed}/{total} GPS",
"pathMap_partialAnimation": "{count, plural, =1{1 跳无位置信息 — 显示的路径不完整} other{{count} 跳无位置信息 — 显示的路径不完整}}"
}
+115 -93
View File
@@ -1466,114 +1466,136 @@ class _ChannelMessagePathMapScreenState
border: Border.all(color: MeshPalette.line2),
),
clipBehavior: Clip.antiAlias,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(12, 8, 4, 0),
child: Row(
child: DefaultTextStyle(
style: const TextStyle(color: MeshPalette.ink),
child: IconTheme(
data: const IconThemeData(color: MeshPalette.ink),
child: TextButtonTheme(
data: TextButtonThemeData(
style: TextButton.styleFrom(foregroundColor: MeshPalette.ink),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
Padding(
padding: const EdgeInsets.fromLTRB(12, 8, 4, 0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: Text(
l10n.channelPath_repeaterHops,
style: const TextStyle(
fontWeight: FontWeight.w600,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: Text(
l10n.channelPath_repeaterHops,
style: const TextStyle(
fontWeight: FontWeight.w600,
),
),
),
Text(
formatDistance(
selectedDisplay?.distanceMeters ??
_pathDistance,
isImperial: isImperial,
),
style: MeshTheme.mono(
fontSize: 12,
color: MeshPalette.ink2,
),
),
],
),
),
Text(
formatDistance(
selectedDisplay?.distanceMeters ??
_pathDistance,
isImperial: isImperial,
const SizedBox(height: 4),
PathMiniLegend(
combined: combined,
showInferred: false,
),
style: MeshTheme.mono(
fontSize: 12,
color: MeshPalette.ink2,
),
),
],
],
),
),
const SizedBox(height: 4),
PathMiniLegend(
combined: combined,
showInferred: false,
IconButton(
visualDensity: VisualDensity.compact,
icon: Icon(
_panelCollapsed
? Icons.expand_less
: Icons.expand_more,
size: 20,
),
tooltip: _panelCollapsed
? l10n.pathMap_expandPanel
: l10n.pathMap_collapsePanel,
onPressed: () => setState(
() => _panelCollapsed = !_panelCollapsed,
),
),
],
),
),
IconButton(
visualDensity: VisualDensity.compact,
icon: Icon(
_panelCollapsed ? Icons.expand_less : Icons.expand_more,
size: 20,
),
tooltip: _panelCollapsed
? l10n.pathMap_expandPanel
: l10n.pathMap_collapsePanel,
onPressed: () =>
setState(() => _panelCollapsed = !_panelCollapsed),
PathAnimationControls(
playback: _playback,
selected: selectedDisplay,
animationEnabled: _animationEnabled,
onToggleAnimation: () => setState(() {
_animationEnabled = !_animationEnabled;
if (!_animationEnabled) _playback.stop();
}),
followEnabled: _followPacket,
onToggleFollow: _toggleFollowPacket,
),
if (!_panelCollapsed) ...[
if (selectedDisplay != null &&
selectedDisplay.unresolvedHops > 0)
Padding(
padding: const EdgeInsets.fromLTRB(12, 0, 12, 4),
child: Text(
l10n.pathMap_partialAnimation(
selectedDisplay.unresolvedHops,
),
style: TextStyle(
fontSize: 10.5,
color: MeshPalette.warn,
),
),
),
if (combined)
PathSummaryList(
paths: entries.map((e) => e.display).toList(),
selectedId: selectedDisplay?.id ?? '',
hiddenIds: _hiddenPathIds,
isImperial: isImperial,
onSelect: (display) {
for (final entry in entries) {
if (entry.display.id == display.id) {
_selectEntry(entry);
break;
}
}
},
onToggleVisibility: (display) =>
_togglePathVisibility(
display,
entries,
selectedDisplay,
),
onShowAll: () => setState(_hiddenPathIds.clear),
),
const Divider(height: 1),
Expanded(
child: _buildHopListView(
hops,
selectedDisplay,
hopUseCount,
),
),
],
],
),
),
PathAnimationControls(
playback: _playback,
selected: selectedDisplay,
animationEnabled: _animationEnabled,
onToggleAnimation: () => setState(() {
_animationEnabled = !_animationEnabled;
if (!_animationEnabled) _playback.stop();
}),
followEnabled: _followPacket,
onToggleFollow: _toggleFollowPacket,
),
if (!_panelCollapsed) ...[
if (selectedDisplay != null &&
selectedDisplay.unresolvedHops > 0)
Padding(
padding: const EdgeInsets.fromLTRB(12, 0, 12, 4),
child: Text(
l10n.pathMap_partialAnimation(
selectedDisplay.unresolvedHops,
),
style: TextStyle(fontSize: 10.5, color: MeshPalette.warn),
),
),
if (combined)
PathSummaryList(
paths: entries.map((e) => e.display).toList(),
selectedId: selectedDisplay?.id ?? '',
hiddenIds: _hiddenPathIds,
isImperial: isImperial,
onSelect: (display) {
for (final entry in entries) {
if (entry.display.id == display.id) {
_selectEntry(entry);
break;
}
}
},
onToggleVisibility: (display) => _togglePathVisibility(
display,
entries,
selectedDisplay,
),
onShowAll: () => setState(_hiddenPathIds.clear),
),
const Divider(height: 1),
Expanded(
child: _buildHopListView(hops, selectedDisplay, hopUseCount),
),
],
],
),
),
),
),
+13 -1
View File
@@ -227,7 +227,13 @@ class MessageRetryService extends ChangeNotifier {
void _onMessageResolved(String messageId, String contactKey) {
if (_resolvedMessages.contains(messageId)) return;
_resolvedMessages.add(messageId);
_activeMessages.remove(messageId);
// If cleanup already removed this message from the active set, it has
// already pumped the queues; avoid double-pumping.
if (!_activeMessages.remove(messageId)) return;
_pumpQueues(contactKey);
}
void _pumpQueues(String contactKey) {
// Pump this contact's queue first, then any other contacts that are waiting.
_sendNextForContact(contactKey);
for (final key in _sendQueue.keys) {
@@ -495,11 +501,17 @@ class MessageRetryService extends ChangeNotifier {
(_, mapping) => mapping.messageId == messageId,
);
_expectedHashToMessageId.removeWhere((_, msgId) => msgId == messageId);
final contactKey = _pendingContacts[messageId]?.publicKeyHex;
_pendingMessages.remove(messageId);
_pendingContacts.remove(messageId);
_attemptPathHistory.remove(messageId);
_timeoutTimers.remove(messageId);
_resolvedMessages.remove(messageId);
// Cancellation (and other cleanup paths) must release the active in-flight
// slot and pump waiting queues so the global cap does not stall forever.
if (_activeMessages.remove(messageId) && contactKey != null) {
_pumpQueues(contactKey);
}
}
void _handleTimeout(String messageId) {