diff --git a/packages/web/public/i18n/locales/hu-HU/commandPalette.json b/packages/web/public/i18n/locales/hu-HU/commandPalette.json index 035ffeb2..672ca36f 100644 --- a/packages/web/public/i18n/locales/hu-HU/commandPalette.json +++ b/packages/web/public/i18n/locales/hu-HU/commandPalette.json @@ -1,51 +1,51 @@ { - "emptyState": "No results found.", + "emptyState": "Nincs találat.", "page": { - "title": "Command Menu" + "title": "Parancsmenü" }, "pinGroup": { - "label": "Pin command group" + "label": "Parancscsoport rögzítése" }, "unpinGroup": { - "label": "Unpin command group" + "label": "Parancscsoport feloldása" }, "goto": { - "label": "Goto", + "label": "Ugrás", "command": { "messages": "Üzenetek", "map": "Térkép", - "config": "Config", + "config": "Konfiguráció", "nodes": "Csomópontok" } }, "manage": { - "label": "Manage", + "label": "Kezelés", "command": { - "switchNode": "Switch Node", - "connectNewNode": "Connect New Node" + "switchNode": "Csomópont váltása", + "connectNewNode": "Új csomópont csatlakoztatása" } }, "contextual": { - "label": "Contextual", + "label": "Kontextusos", "command": { - "qrCode": "QR Code", - "qrGenerator": "Generator", + "qrCode": "QR-kód", + "qrGenerator": "Generátor", "qrImport": "Importálás", - "scheduleShutdown": "Schedule Shutdown", - "scheduleReboot": "Reboot Device", - "resetNodeDb": "Reset Node DB", - "dfuMode": "Enter DFU Mode", - "factoryResetDevice": "Factory Reset Device", - "factoryResetConfig": "Factory Reset Config", + "scheduleShutdown": "Leállítás ütemezése", + "scheduleReboot": "Eszköz újraindítása", + "resetNodeDb": "Csomópont-adatbázis visszaállítása", + "dfuMode": "DFU módba lépés", + "factoryResetDevice": "Gyári visszaállítás (eszköz)", + "factoryResetConfig": "Gyári visszaállítás (konfiguráció)", "disconnect": "Leválasztás" } }, "debug": { - "label": "Debug", + "label": "Hibakeresés", "command": { - "reconfigure": "Reconfigure", - "clearAllStoredMessages": "Clear All Stored Message", - "clearAllStores": "Clear All Local Storage" + "reconfigure": "Újrakonfigurálás", + "clearAllStoredMessages": "Összes tárolt üzenet törlése", + "clearAllStores": "Összes helyi tár törlése" } } } diff --git a/packages/web/public/i18n/locales/hu-HU/common.json b/packages/web/public/i18n/locales/hu-HU/common.json index d1e54e36..1cca49f8 100644 --- a/packages/web/public/i18n/locales/hu-HU/common.json +++ b/packages/web/public/i18n/locales/hu-HU/common.json @@ -1,9 +1,9 @@ { "button": { "apply": "Alkalmaz", - "backupKey": "Backup Key", + "backupKey": "Kulcs biztonsági mentése", "cancel": "Megszakítani", - "clearMessages": "Clear Messages", + "clearMessages": "Üzenetek törlése", "close": "Bezárás", "confirm": "Megerősítés", "delete": "Törlés", @@ -16,14 +16,14 @@ "message": "Üzenet", "now": "Most", "ok": "OK", - "print": "Print", + "print": "Nyomtatás", "remove": "Törlés", - "requestNewKeys": "Request New Keys", + "requestNewKeys": "Új kulcsok kérése", "requestPosition": "Pozíció kérése", "reset": "Újraindítás", "save": "Mentés", "scanQr": "QR-kód beolvasása", - "traceRoute": "Trace Route", + "traceRoute": "Traceroute", "submit": "Mentés" }, "app": { @@ -40,9 +40,9 @@ "plural": "Ugrások" }, "hopsAway": { - "one": "{{count}} hop away", - "plural": "{{count}} hops away", - "unknown": "Unknown hops away" + "one": "{{count}} ugrásnyira", + "plural": "{{count}} ugrásnyira", + "unknown": "Ismeretlen ugrásszám távolság" }, "megahertz": "MHz", "raw": "nyers", @@ -52,8 +52,8 @@ "suffix": "m" }, "kilometer": { - "one": "Kilometer", - "plural": "Kilometers", + "one": "Kilométer", + "plural": "Kilométerek", "suffix": "km" }, "minute": { @@ -62,11 +62,11 @@ }, "hour": { "one": "Óra", - "plural": "Hours" + "plural": "Óra" }, "millisecond": { - "one": "Millisecond", - "plural": "Milliseconds", + "one": "Milliszekundum", + "plural": "Milliszekundumok", "suffix": "ms" }, "second": { @@ -76,8 +76,8 @@ "day": { "one": "Nap", "plural": "Napok", - "today": "Today", - "yesterday": "Yesterday" + "today": "Ma", + "yesterday": "Tegnap" }, "month": { "one": "Hónap", @@ -90,7 +90,7 @@ "snr": "SNR", "volt": { "one": "Volt", - "plural": "Volts", + "plural": "Volt", "suffix": "V" }, "record": { @@ -98,8 +98,8 @@ "plural": "Bejegyzések" }, "degree": { - "one": "Degree", - "plural": "Degrees", + "one": "Fok", + "plural": "Fok", "suffix": "°" } }, @@ -122,34 +122,34 @@ "formValidation": { "unsavedChanges": "Nem mentett módosítások", "tooBig": { - "string": "Too long, expected less than or equal to {{maximum}} characters.", - "number": "Too big, expected a number smaller than or equal to {{maximum}}.", - "bytes": "Too big, expected less than or equal to {{params.maximum}} bytes." + "string": "Túl hosszú, legfeljebb {{maximum}} karakter engedélyezett.", + "number": "Túl nagy, legfeljebb {{maximum}} értékű szám engedélyezett.", + "bytes": "Túl nagy, legfeljebb {{params.maximum}} bájt engedélyezett." }, "tooSmall": { - "string": "Too short, expected more than or equal to {{minimum}} characters.", - "number": "Too small, expected a number larger than or equal to {{minimum}}." + "string": "Túl rövid, legalább {{minimum}} karakter szükséges.", + "number": "Túl kicsi, legalább {{minimum}} értékű szám szükséges." }, "invalidFormat": { - "ipv4": "Invalid format, expected an IPv4 address.", - "key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)." + "ipv4": "Érvénytelen formátum, IPv4-címet várunk.", + "key": "Érvénytelen formátum, Base64-kódolt előre megosztott kulcsot (PSK) várunk." }, "invalidType": { - "number": "Invalid type, expected a number." + "number": "Érvénytelen típus, számot várunk." }, "pskLength": { - "0bit": "Key is required to be empty.", - "8bit": "Key is required to be an 8 bit pre-shared key (PSK).", - "128bit": "Key is required to be a 128 bit pre-shared key (PSK).", - "256bit": "Key is required to be a 256 bit pre-shared key (PSK)." + "0bit": "A kulcsnak üresnek kell lennie.", + "8bit": "A kulcsnak 8 bites előre megosztott kulcsnak (PSK) kell lennie.", + "128bit": "A kulcsnak 128 bites előre megosztott kulcsnak (PSK) kell lennie.", + "256bit": "A kulcsnak 256 bites előre megosztott kulcsnak (PSK) kell lennie." }, "required": { "generic": "A mező kitöltése kötelező.", - "managed": "At least one admin key is requred if the node is managed.", + "managed": "Legalább egy admin kulcs szükséges, ha a csomópont kezelt.", "key": "Kulcs megadása kötelező." }, "invalidOverrideFreq": { - "number": "Invalid format, expected a value in the range 410-930 MHz or 0 (use default)." + "number": "Érvénytelen formátum, 410–930 MHz közötti értéket vagy 0-t (alapértelmezett) várunk." } }, "yes": "Igen", diff --git a/packages/web/public/i18n/locales/zh-TW/channels.json b/packages/web/public/i18n/locales/zh-TW/channels.json new file mode 100644 index 00000000..98bd6f83 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/channels.json @@ -0,0 +1,71 @@ +{ + "page": { + "sectionLabel": "頻道", + "channelName": "頻道 {{channelName}}", + "broadcastLabel": "主要", + "channelIndex": "頻道 {{index}}", + "import": "匯入", + "export": "匯出" + }, + "validation": { + "pskInvalid": "23公里以內" + }, + "settings": { + "label": "頻道設置", + "description": "加密、MQTT 和其他設置" + }, + "role": { + "label": "角色", + "description": "設備遙測資料透過主要頻道發送。只允許一個主要頻道", + "options": { + "primary": "主要", + "disabled": "停用", + "secondary": "次要" + } + }, + "psk": { + "label": "預分享金鑰", + "description": "支援PSK長度:256位元,128位元,8位元, 空(0 位元)", + "generate": "生成" + }, + "name": { + "label": "名稱", + "description": "頻道名稱需<12字節,預設為空白" + }, + "uplinkEnabled": { + "label": "已啓用上行", + "description": "將訊息從本地網狀網路發布至 MQTT" + }, + "downlinkEnabled": { + "label": "已啓用下行", + "description": "將訊息從 MQTT 轉傳至本地網狀網路" + }, + "positionPrecision": { + "label": "位置", + "description": "與頻道共享的位置精度。可以選不共享。", + "options": { + "none": "不共享位置", + "precise": "精確定位", + "metric_km23": "23公里以內", + "metric_km12": "12公里以內", + "metric_km5_8": "5.8公里以內", + "metric_km2_9": "2.9公里以內", + "metric_km1_5": "1.5公里以內", + "metric_m700": "700米以內", + "metric_m350": "350米以內", + "metric_m200": "200米以內", + "metric_m90": "90米以內", + "metric_m50": "50米以內", + "imperial_mi15": "15英里以內", + "imperial_mi7_3": "7.3英里以內", + "imperial_mi3_6": "3.6英里以內", + "imperial_mi1_8": "1.8英里以內", + "imperial_mi0_9": "0.9英里以內", + "imperial_mi0_5": "0.5英里以內", + "imperial_mi0_2": "0.2英里以內", + "imperial_ft600": "600英尺以內", + "imperial_ft300": "300英尺以內", + "imperial_ft150": "150英尺以內" + } + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/commandPalette.json b/packages/web/public/i18n/locales/zh-TW/commandPalette.json new file mode 100644 index 00000000..81d9faa1 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/commandPalette.json @@ -0,0 +1,51 @@ +{ + "emptyState": "未找到符合的結果。", + "page": { + "title": "命令選單" + }, + "pinGroup": { + "label": "Pin command group" + }, + "unpinGroup": { + "label": "Unpin command group" + }, + "goto": { + "label": "前往", + "command": { + "messages": "訊息", + "map": "地圖", + "config": "設定", + "nodes": "節點" + } + }, + "manage": { + "label": "管理", + "command": { + "switchNode": "切換節點", + "connectNewNode": "連接新節點" + } + }, + "contextual": { + "label": "Contextual", + "command": { + "qrCode": "QR 代碼", + "qrGenerator": "Generator", + "qrImport": "匯入", + "scheduleShutdown": "排程關機", + "scheduleReboot": "重新啟動設備", + "resetNodeDb": "重設節點資料庫", + "dfuMode": "进入 DFU 模式", + "factoryResetDevice": "恢復設備原廠設定", + "factoryResetConfig": "恢復原廠設定", + "disconnect": "中斷連線" + } + }, + "debug": { + "label": "调试", + "command": { + "reconfigure": "重新設定", + "clearAllStoredMessages": "清除所有已儲存訊息", + "clearAllStores": "清除所有本地儲存資料" + } + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/common.json b/packages/web/public/i18n/locales/zh-TW/common.json new file mode 100644 index 00000000..9e429e70 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/common.json @@ -0,0 +1,157 @@ +{ + "button": { + "apply": "套用", + "backupKey": "備份金鑰", + "cancel": "取消", + "clearMessages": "清除訊息", + "close": "關閉", + "confirm": "確認", + "delete": "刪除", + "dismiss": "關閉", + "download": "下載", + "export": "匯出", + "generate": "生成", + "regenerate": "重新產生", + "import": "匯入", + "message": "訊息:", + "now": "Now", + "ok": "好的", + "print": "Print", + "remove": "移除", + "requestNewKeys": "請求新金鑰", + "requestPosition": "請求位置", + "reset": "重設", + "save": "儲存", + "scanQr": "掃描QR碼", + "traceRoute": "追蹤路由", + "submit": "套用" + }, + "app": { + "title": "Meshtastic", + "fullTitle": "Meshtastic 網頁版" + }, + "loading": "載入中……", + "unit": { + "cps": "CPS", + "dbm": "dBm", + "hertz": "Hz", + "hop": { + "one": "Hop", + "plural": "跳數" + }, + "hopsAway": { + "one": "相隔 {{count}} hop", + "plural": "相隔 {{count}} hop", + "unknown": "跳數未知" + }, + "megahertz": "MHz", + "raw": "raw", + "meter": { + "one": "公尺", + "plural": "公尺", + "suffix": "m" + }, + "kilometer": { + "one": "公里", + "plural": "公里", + "suffix": "km" + }, + "minute": { + "one": "分鐘", + "plural": "分鐘" + }, + "hour": { + "one": "小時", + "plural": "小時" + }, + "millisecond": { + "one": "毫秒", + "plural": "毫秒", + "suffix": "ms" + }, + "second": { + "one": "秒", + "plural": "秒" + }, + "day": { + "one": "天", + "plural": "天", + "today": "今日", + "yesterday": "昨天" + }, + "month": { + "one": "月", + "plural": "月" + }, + "year": { + "one": "年", + "plural": "年" + }, + "snr": "SNR", + "volt": { + "one": "伏特", + "plural": "伏特", + "suffix": "V" + }, + "record": { + "one": "記錄", + "plural": "記錄" + }, + "degree": { + "one": "度", + "plural": "度", + "suffix": "°" + } + }, + "security": { + "0bit": "Empty", + "8bit": "8 bit", + "128bit": "128 bit", + "256bit": "256 bit" + }, + "unknown": { + "longName": "不明", + "shortName": "UNK", + "notAvailable": "不適用", + "num": "??" + }, + "nodeUnknownPrefix": "!", + "unset": "未設定", + "fallbackName": "Meshtastic {{last4}}", + "node": "節點", + "formValidation": { + "unsavedChanges": "未儲存的變更", + "tooBig": { + "string": "長度過長,最大限制為 {{maximum}} 個字元。", + "number": "數值過大,請勿超過 {{maximum}}。", + "bytes": "大小超過限制,必須小於或等於 {{params.maximum}} 位元組。" + }, + "tooSmall": { + "string": "長度不足,至少須 {{minimum}} 個字元。", + "number": "數值過小,至少須 {{minimum}}。" + }, + "invalidFormat": { + "ipv4": "格式無效,請輸入一個 IPv4 地址。", + "key": "格式錯誤,須為 Base64 編碼的預共享金鑰 (PSK)。" + }, + "invalidType": { + "number": "Invalid type, expected a number." + }, + "pskLength": { + "0bit": "此金鑰須留空。", + "8bit": "金鑰須為 8 bit 預共享金鑰 (PSK)。", + "128bit": "金鑰須為 128 bit 預共享金鑰 (PSK)。", + "256bit": "金鑰須為 256 bit 預共享金鑰 (PSK)。" + }, + "required": { + "generic": "這是必填欄位。", + "managed": "若節點為受管理模式,則必須提供至少一個管理金鑰。", + "key": "須輸入金鑰。" + }, + "invalidOverrideFreq": { + "number": "錯誤,數值須介於 410-930 MHz 之間,或輸入 0 (使用預設值)。" + } + }, + "yes": "Yes", + "no": "No" +} diff --git a/packages/web/public/i18n/locales/zh-TW/config.json b/packages/web/public/i18n/locales/zh-TW/config.json new file mode 100644 index 00000000..f184208a --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/config.json @@ -0,0 +1,458 @@ +{ + "page": { + "title": "設定", + "tabUser": "用戶", + "tabChannels": "頻道", + "tabBluetooth": "藍芽", + "tabDevice": "裝置", + "tabDisplay": "顯示", + "tabLora": "LoRa", + "tabNetwork": "網路", + "tabPosition": "位置", + "tabPower": "電源", + "tabSecurity": "安全" + }, + "sidebar": { + "label": "裝置設定" + }, + "device": { + "title": "Device Settings", + "description": "Settings for the device", + "buttonPin": { + "description": "Button pin override", + "label": "Button Pin" + }, + "buzzerPin": { + "description": "Buzzer pin override", + "label": "Buzzer Pin" + }, + "disableTripleClick": { + "description": "Disable triple click", + "label": "Disable Triple Click" + }, + "doubleTapAsButtonPress": { + "description": "Treat double tap as button press", + "label": "Double Tap as Button Press" + }, + "ledHeartbeatDisabled": { + "description": "Disable default blinking LED", + "label": "LED Heartbeat Disabled" + }, + "nodeInfoBroadcastInterval": { + "description": "How often to broadcast node info", + "label": "Node Info Broadcast Interval" + }, + "posixTimezone": { + "description": "The POSIX timezone string for the device", + "label": "POSIX時區" + }, + "rebroadcastMode": { + "description": "How to handle rebroadcasting", + "label": "Rebroadcast Mode" + }, + "role": { + "description": "What role the device performs on the mesh", + "label": "角色" + } + }, + "bluetooth": { + "title": "Bluetooth Settings", + "description": "Settings for the Bluetooth module", + "note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.", + "enabled": { + "description": "Enable or disable Bluetooth", + "label": "Enabled" + }, + "pairingMode": { + "description": "Pin selection behaviour.", + "label": "配對模式" + }, + "pin": { + "description": "Pin to use when pairing", + "label": "Pin" + } + }, + "display": { + "description": "Settings for the device display", + "title": "Display Settings", + "headingBold": { + "description": "Bolden the heading text", + "label": "Bold Heading" + }, + "carouselDelay": { + "description": "How fast to cycle through windows", + "label": "Carousel Delay" + }, + "compassNorthTop": { + "description": "Fix north to the top of compass", + "label": "Compass North Top" + }, + "displayMode": { + "description": "Screen layout variant", + "label": "Display Mode" + }, + "displayUnits": { + "description": "Display metric or imperial units", + "label": "Display Units" + }, + "flipScreen": { + "description": "Flip display 180 degrees", + "label": "Flip Screen" + }, + "gpsDisplayUnits": { + "description": "Coordinate display format", + "label": "GPS Display Units" + }, + "oledType": { + "description": "Type of OLED screen attached to the device", + "label": "OLED類型" + }, + "screenTimeout": { + "description": "Turn off the display after this long", + "label": "Screen Timeout" + }, + "twelveHourClock": { + "description": "Use 12-hour clock format", + "label": "12-Hour Clock" + }, + "wakeOnTapOrMotion": { + "description": "Wake the device on tap or motion", + "label": "Wake on Tap or Motion" + } + }, + "lora": { + "title": "Mesh Settings", + "description": "Settings for the LoRa mesh", + "bandwidth": { + "description": "Channel bandwidth in MHz", + "label": "帶寬" + }, + "boostedRxGain": { + "description": "Boosted RX gain", + "label": "Boosted RX Gain" + }, + "codingRate": { + "description": "The denominator of the coding rate", + "label": "Coding Rate" + }, + "frequencyOffset": { + "description": "Frequency offset to correct for crystal calibration errors", + "label": "Frequency Offset" + }, + "frequencySlot": { + "description": "LoRa frequency channel number", + "label": "Frequency Slot" + }, + "hopLimit": { + "description": "Maximum number of hops", + "label": "Hop Limit" + }, + "ignoreMqtt": { + "description": "Don't forward MQTT messages over the mesh", + "label": "無視MQTT" + }, + "modemPreset": { + "description": "Modem preset to use", + "label": "Modem 預設集" + }, + "okToMqtt": { + "description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT", + "label": "將消息轉發至MQTT" + }, + "overrideDutyCycle": { + "description": "覆蓋工作週期/佔空比", + "label": "覆蓋工作週期/佔空比" + }, + "overrideFrequency": { + "description": "Override frequency", + "label": "Override Frequency" + }, + "region": { + "description": "Sets the region for your node", + "label": "地區" + }, + "spreadingFactor": { + "description": "Indicates the number of chirps per symbol", + "label": "Spreading Factor" + }, + "transmitEnabled": { + "description": "Enable/Disable transmit (TX) from the LoRa radio", + "label": "Transmit Enabled" + }, + "transmitPower": { + "description": "Max transmit power", + "label": "Transmit Power" + }, + "usePreset": { + "description": "Use one of the predefined modem presets", + "label": "Use Preset" + }, + "meshSettings": { + "description": "Settings for the LoRa mesh", + "label": "Mesh Settings" + }, + "waveformSettings": { + "description": "Settings for the LoRa waveform", + "label": "Waveform Settings" + }, + "radioSettings": { + "label": "Radio Settings", + "description": "Settings for the LoRa radio" + } + }, + "network": { + "title": "WiFi Config", + "description": "WiFi radio configuration", + "note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.", + "addressMode": { + "description": "Address assignment selection", + "label": "Address Mode" + }, + "dns": { + "description": "DNS Server", + "label": "DNS" + }, + "ethernetEnabled": { + "description": "Enable or disable the Ethernet port", + "label": "Enabled" + }, + "gateway": { + "description": "Default Gateway", + "label": "網閘" + }, + "ip": { + "description": "IP Address", + "label": "IP" + }, + "psk": { + "description": "Network password", + "label": "PSK" + }, + "ssid": { + "description": "Network name", + "label": "SSID" + }, + "subnet": { + "description": "Subnet Mask", + "label": "子網" + }, + "wifiEnabled": { + "description": "Enable or disable the WiFi radio", + "label": "Enabled" + }, + "meshViaUdp": { + "label": "Mesh via UDP" + }, + "ntpServer": { + "label": "NTP Server" + }, + "rsyslogServer": { + "label": "Rsyslog Server" + }, + "ethernetConfigSettings": { + "description": "Ethernet port configuration", + "label": "Ethernet Config" + }, + "ipConfigSettings": { + "description": "IP configuration", + "label": "IP Config" + }, + "ntpConfigSettings": { + "description": "NTP configuration", + "label": "NTP Config" + }, + "rsyslogConfigSettings": { + "description": "Rsyslog configuration", + "label": "Rsyslog Config" + }, + "udpConfigSettings": { + "description": "UDP over Mesh configuration", + "label": "UDP設置" + } + }, + "position": { + "title": "Position Settings", + "description": "Settings for the position module", + "broadcastInterval": { + "description": "How often your position is sent out over the mesh", + "label": "Broadcast Interval" + }, + "enablePin": { + "description": "GPS module enable pin override", + "label": "Enable Pin" + }, + "fixedPosition": { + "description": "Don't report GPS position, but a manually-specified one", + "label": "Fixed Position" + }, + "gpsMode": { + "description": "Configure whether device GPS is Enabled, Disabled, or Not Present", + "label": "GPS Mode" + }, + "gpsUpdateInterval": { + "description": "How often a GPS fix should be acquired", + "label": "GPS Update Interval" + }, + "positionFlags": { + "description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.", + "label": "Position Flags" + }, + "receivePin": { + "description": "GPS module RX pin override", + "label": "Receive Pin" + }, + "smartPositionEnabled": { + "description": "Only send position when there has been a meaningful change in location", + "label": "Enable Smart Position" + }, + "smartPositionMinDistance": { + "description": "Minimum distance (in meters) that must be traveled before a position update is sent", + "label": "Smart Position Minimum Distance" + }, + "smartPositionMinInterval": { + "description": "Minimum interval (in seconds) that must pass before a position update is sent", + "label": "Smart Position Minimum Interval" + }, + "transmitPin": { + "description": "GPS module TX pin override", + "label": "Transmit Pin" + }, + "intervalsSettings": { + "description": "How often to send position updates", + "label": "Intervals" + }, + "flags": { + "placeholder": "Select position flags...", + "altitude": "Altitude", + "altitudeGeoidalSeparation": "Altitude Geoidal Separation", + "altitudeMsl": "Altitude is Mean Sea Level", + "dop": "Dilution of precision (DOP) PDOP used by default", + "hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP", + "numSatellites": "Number of satellites", + "sequenceNumber": "Sequence number", + "timestamp": "時間戳記", + "unset": "取消設定", + "vehicleHeading": "Vehicle heading", + "vehicleSpeed": "Vehicle speed" + } + }, + "power": { + "adcMultiplierOverride": { + "description": "Used for tweaking battery voltage reading", + "label": "ADC Multiplier Override ratio" + }, + "ina219Address": { + "description": "Address of the INA219 battery monitor", + "label": "INA219 Address" + }, + "lightSleepDuration": { + "description": "How long the device will be in light sleep for", + "label": "Light Sleep Duration" + }, + "minimumWakeTime": { + "description": "Minimum amount of time the device will stay awake for after receiving a packet", + "label": "Minimum Wake Time" + }, + "noConnectionBluetoothDisabled": { + "description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long", + "label": "No Connection Bluetooth Disabled" + }, + "powerSavingEnabled": { + "description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.", + "label": "啟用省電模式" + }, + "shutdownOnBatteryDelay": { + "description": "Automatically shutdown node after this long when on battery, 0 for indefinite", + "label": "Shutdown on battery delay" + }, + "superDeepSleepDuration": { + "description": "How long the device will be in super deep sleep for", + "label": "Super Deep Sleep Duration" + }, + "powerConfigSettings": { + "description": "Settings for the power module", + "label": "電源設定" + }, + "sleepSettings": { + "description": "Sleep settings for the power module", + "label": "Sleep Settings" + } + }, + "security": { + "description": "Settings for the Security configuration", + "title": "Security Settings", + "button_backupKey": "Backup Key", + "adminChannelEnabled": { + "description": "Allow incoming device control over the insecure legacy admin channel", + "label": "Allow Legacy Admin" + }, + "enableDebugLogApi": { + "description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth", + "label": "Enable Debug Log API" + }, + "managed": { + "description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.", + "label": "Managed" + }, + "privateKey": { + "description": "Used to create a shared key with a remote device", + "label": "私鑰" + }, + "publicKey": { + "description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key", + "label": "公鑰" + }, + "primaryAdminKey": { + "description": "The primary public key authorized to send admin messages to this node", + "label": "Primary Admin Key" + }, + "secondaryAdminKey": { + "description": "The secondary public key authorized to send admin messages to this node", + "label": "Secondary Admin Key" + }, + "serialOutputEnabled": { + "description": "Serial Console over the Stream API", + "label": "Serial Output Enabled" + }, + "tertiaryAdminKey": { + "description": "The tertiary public key authorized to send admin messages to this node", + "label": "Tertiary Admin Key" + }, + "adminSettings": { + "description": "Settings for Admin", + "label": "Admin Settings" + }, + "loggingSettings": { + "description": "Settings for Logging", + "label": "Logging Settings" + } + }, + "user": { + "title": "User Settings", + "description": "Configure your device name and identity settings", + "longName": { + "label": "Long Name", + "description": "Your full display name (1-40 characters)", + "validation": { + "min": "Long name must be at least 1 character", + "max": "Long name must be at most 40 characters" + } + }, + "shortName": { + "label": "Short Name", + "description": "Your abbreviated name (2-4 characters)", + "validation": { + "min": "Short name must be at least 2 characters", + "max": "Short name must be at most 4 characters" + } + }, + "isUnmessageable": { + "label": "不接收訊息", + "description": "Used to identify unmonitored or infrastructure nodes so that messaging is not available to nodes that will never respond." + }, + "isLicensed": { + "label": "業餘無線電模式 (HAM)", + "description": "Enable if you are a licensed amateur radio operator, enabling this option disables encryption and is not compatible with the default Meshtastic network." + } + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/dashboard.json b/packages/web/public/i18n/locales/zh-TW/dashboard.json new file mode 100644 index 00000000..42f3d8ab --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/dashboard.json @@ -0,0 +1,12 @@ +{ + "dashboard": { + "title": "已連線的裝置", + "description": "管理已連線的 Meshtastic 裝置。", + "connectionType_ble": "低功耗藍牙", + "connectionType_serial": "序列埠", + "connectionType_network": "網路", + "noDevicesTitle": "沒有裝置連線", + "noDevicesDescription": "連接新設備以開始使用。", + "button_newConnection": "新增連線" + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/dialog.json b/packages/web/public/i18n/locales/zh-TW/dialog.json new file mode 100644 index 00000000..15423c74 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/dialog.json @@ -0,0 +1,221 @@ +{ + "deleteMessages": { + "description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?", + "title": "Clear All Messages" + }, + "deviceName": { + "description": "The Device will restart once the config is saved.", + "longName": "Long Name", + "shortName": "Short Name", + "title": "Change Device Name", + "validation": { + "longNameMax": "Long name must not be more than 40 characters", + "shortNameMax": "Short name must not be more than 4 characters", + "longNameMin": "Long name must have at least 1 character", + "shortNameMin": "Short name must have at least 1 character" + } + }, + "import": { + "description": "Import a Channel Set from a Meshtastic URL.
Valid Meshtasic URLs start with \"https://meshtastic.org/e/...\"", + "error": { + "invalidUrl": "Invalid Meshtastic URL" + }, + "channelPrefix": "Channel ", + "primary": "Primary ", + "doNotImport": "No not import", + "channelName": "名稱", + "channelSlot": "時隙", + "channelSetUrl": "Channel Set/QR Code URL", + "useLoraConfig": "Import LoRa Config", + "presetDescription": "The current LoRa Config will be replaced.", + "title": "Import Channels" + }, + "locationResponse": { + "title": "Location: {{identifier}}", + "altitude": "Altitude: ", + "coordinates": "Coordinates: ", + "noCoordinates": "No Coordinates" + }, + "pkiRegenerateDialog": { + "title": "Regenerate Pre-Shared Key?", + "description": "Are you sure you want to regenerate the pre-shared key?", + "regenerate": "Regenerate" + }, + "newDeviceDialog": { + "title": "Connect New Device", + "https": "https", + "http": "http", + "tabHttp": "HTTP", + "tabBluetooth": "藍芽", + "tabSerial": "序列埠", + "useHttps": "Use HTTPS", + "connecting": "Connecting...", + "connect": "連線", + "connectionFailedAlert": { + "title": "Connection Failed", + "descriptionPrefix": "Could not connect to the device. ", + "httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ", + "openLinkPrefix": "Please open ", + "openLinkSuffix": " in a new tab", + "acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again", + "learnMoreLink": "Learn more" + }, + "httpConnection": { + "label": "IP Address/Hostname", + "placeholder": "000.000.000.000 / meshtastic.local" + }, + "serialConnection": { + "noDevicesPaired": "No devices paired yet.", + "newDeviceButton": "New device", + "deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}" + }, + "bluetoothConnection": { + "noDevicesPaired": "No devices paired yet.", + "newDeviceButton": "New device", + "connectionFailed": "Connection failed", + "deviceDisconnected": "Device disconnected", + "unknownDevice": "Unknown Device", + "errorLoadingDevices": "Error loading devices", + "unknownErrorLoadingDevices": "Unknown error loading devices" + }, + "validation": { + "requiresWebBluetooth": "This connection type requires <0>Web Bluetooth. Please use a supported browser, like Chrome or Edge.", + "requiresWebSerial": "This connection type requires <0>Web Serial. Please use a supported browser, like Chrome or Edge.", + "requiresSecureContext": "This application requires a <0>secure context. Please connect using HTTPS or localhost.", + "additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context. Please connect using HTTPS or localhost." + } + }, + "nodeDetails": { + "message": "訊息:", + "requestPosition": "Request Position", + "traceRoute": "Trace Route", + "airTxUtilization": "Air TX utilization", + "allRawMetrics": "All Raw Metrics:", + "batteryLevel": "Battery level", + "channelUtilization": "Channel utilization", + "details": "Details:", + "deviceMetrics": "Device Metrics:", + "hardware": "Hardware: ", + "lastHeard": "Last Heard: ", + "nodeHexPrefix": "Node Hex: ", + "nodeNumber": "Node Number: ", + "position": "Position:", + "role": "Role: ", + "uptime": "Uptime: ", + "voltage": "電壓", + "title": "Node Details for {{identifier}}", + "ignoreNode": "Ignore node", + "removeNode": "Remove node", + "unignoreNode": "Unignore node", + "security": "Security:", + "publicKey": "Public Key: ", + "messageable": "Messageable: ", + "KeyManuallyVerifiedTrue": "Public Key has been manually verified", + "KeyManuallyVerifiedFalse": "Public Key is not manually verified" + }, + "pkiBackup": { + "loseKeysWarning": "If you lose your keys, you will need to reset your device.", + "secureBackup": "Its important to backup your public and private keys and store your backup securely!", + "footer": "=== END OF KEYS ===", + "header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===", + "privateKey": "Private Key:", + "publicKey": "Public Key:", + "fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt", + "title": "Backup Keys" + }, + "pkiBackupReminder": { + "description": "We recommend backing up your key data regularly. Would you like to back up now?", + "title": "Backup Reminder", + "remindLaterPrefix": "Remind me in", + "remindNever": "Never remind me", + "backupNow": "Back up now" + }, + "pkiRegenerate": { + "description": "Are you sure you want to regenerate key pair?", + "title": "Regenerate Key Pair" + }, + "qr": { + "addChannels": "Add Channels", + "replaceChannels": "Replace Channels", + "description": "The current LoRa configuration will also be shared.", + "sharableUrl": "Sharable URL", + "title": "Generate QR Code" + }, + "reboot": { + "title": "Reboot device", + "description": "Reboot now or schedule a reboot of the connected node. Optionally, you can choose to reboot into OTA (Over-the-Air) mode.", + "ota": "Reboot into OTA mode", + "enterDelay": "Enter delay", + "scheduled": "Reboot has been scheduled", + "schedule": "Schedule reboot", + "now": "Reboot now", + "cancel": "Cancel scheduled reboot" + }, + "refreshKeys": { + "description": { + "acceptNewKeys": "This will remove the node from device and request new keys.", + "keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.", + "unableToSendDmPrefix": "Your node is unable to send a direct message to node: " + }, + "acceptNewKeys": "Accept New Keys", + "title": "Keys Mismatch - {{identifier}}" + }, + "removeNode": { + "description": "Are you sure you want to remove this Node?", + "title": "Remove Node?" + }, + "shutdown": { + "title": "Schedule Shutdown", + "description": "Turn off the connected node after x minutes." + }, + "traceRoute": { + "routeToDestination": "Route to destination:", + "routeBack": "Route back:" + }, + "tracerouteResponse": { + "title": "Traceroute: {{identifier}}" + }, + "unsafeRoles": { + "confirmUnderstanding": "Yes, I know what I'm doing", + "conjunction": " and the blog post about ", + "postamble": " and understand the implications of changing the role.", + "preamble": "I have read the ", + "choosingRightDeviceRole": "Choosing The Right Device Role", + "deviceRoleDocumentation": "Device Role Documentation", + "title": "你確定嗎?" + }, + "managedMode": { + "confirmUnderstanding": "Yes, I know what I'm doing", + "title": "你確定嗎?", + "description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can only be changed through Remote Admin messages. This setting is not required for remote node administration." + }, + "clientNotification": { + "title": "客户端通知", + "TraceRoute can only be sent once every 30 seconds": "TraceRoute can only be sent once every 30 seconds", + "Compromised keys were detected and regenerated.": "Compromised keys were detected and regenerated." + }, + "resetNodeDb": { + "title": "Reset Node Database", + "description": "This will clear all nodes from the connected device's node database and clear all message history in the client. This cannot be undone. Are you sure you want to continue?", + "confirm": "Reset Node Database", + "failedTitle": "There was an error resetting the Node DB. Please try again." + }, + "clearAllStores": { + "title": "Clear All Local Storage", + "description": "This will clear all locally stored data, including message history and node databases for all previously connected devices. This will require you to reconnect to your node once complete and cannot be undone. Are you sure you want to continue?", + "confirm": "Clear all local storage", + "failedTitle": "There was an error clearing local storage. Please try again." + }, + "factoryResetDevice": { + "title": "Factory Reset Device", + "description": "This will factory reset the connected device, erasing all configurations and data on the device as well as all nodes and messages saved in the client. This cannot be undone. Are you sure you want to continue?", + "confirm": "Factory Reset Device", + "failedTitle": "There was an error performing the factory reset. Please try again." + }, + "factoryResetConfig": { + "title": "Factory Reset Config", + "description": "This will factory reset the configuration on the connected device, erasing all configurations on the device. This cannot be undone. Are you sure you want to continue?", + "confirm": "Factory Reset Config", + "failedTitle": "There was an error performing the factory reset. Please try again." + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/map.json b/packages/web/public/i18n/locales/zh-TW/map.json new file mode 100644 index 00000000..01cd2ae8 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/map.json @@ -0,0 +1,38 @@ +{ + "maplibre": { + "GeolocateControl.FindMyLocation": "定位我的位置", + "NavigationControl.ZoomIn": "放大", + "NavigationControl.ZoomOut": "縮小", + "CooperativeGesturesHandler.WindowsHelpText": "按住 Ctrl + 滾動即可縮放地圖", + "CooperativeGesturesHandler.MacHelpText": "按住 ⌘ + 滾動即可縮放地圖", + "CooperativeGesturesHandler.MobileHelpText": "使用雙指移動地圖" + }, + "layerTool": { + "nodeMarkers": "顯示節點", + "directNeighbors": "顯示直接連線", + "remoteNeighbors": "顯示遠端連線", + "positionPrecision": "顯示位置精度", + "traceroutes": "顯示追蹤路由", + "waypoints": "顯示途經點" + }, + "mapMenu": { + "locateAria": "定位我的節點", + "layersAria": "更改地圖樣式" + }, + "waypointDetail": { + "edit": "編輯", + "description": "説明:", + "createdBy": "編輯:", + "createdDate": "建立於:", + "updated": "更新於:", + "expires": "到期時間:", + "distance": "距離:", + "bearing": "絕對方位:", + "lockedTo": "Locked by:", + "latitude": "緯度:", + "longitude": "經度:" + }, + "myNode": { + "tooltip": "此裝置" + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/messages.json b/packages/web/public/i18n/locales/zh-TW/messages.json new file mode 100644 index 00000000..a0e43015 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/messages.json @@ -0,0 +1,39 @@ +{ + "page": { + "title": "訊息:{{chatName}}", + "placeholder": "輸入訊息" + }, + "emptyState": { + "title": "選擇一個對話", + "text": "尚未收到任何訊息。" + }, + "selectChatPrompt": { + "text": "選擇一個頻道或節點來開始聊天。" + }, + "sendMessage": { + "placeholder": "請在此輸入訊息……", + "sendButton": "傳送" + }, + "actionsMenu": { + "addReactionLabel": "新增反應", + "replyLabel": "回覆" + }, + "deliveryStatus": { + "delivered": { + "label": "訊息已送達", + "displayText": "訊息已送達" + }, + "failed": { + "label": "訊息傳送失敗", + "displayText": "傳送失敗" + }, + "unknown": { + "label": "訊息狀態未知", + "displayText": "不明狀態" + }, + "waiting": { + "label": "訊息傳送中", + "displayText": "等待送達" + } + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/moduleConfig.json b/packages/web/public/i18n/locales/zh-TW/moduleConfig.json new file mode 100644 index 00000000..95eb39a5 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/moduleConfig.json @@ -0,0 +1,448 @@ +{ + "page": { + "tabAmbientLighting": "周圍光照", + "tabAudio": "音頻", + "tabCannedMessage": "Canned", + "tabDetectionSensor": "檢測傳感器", + "tabExternalNotification": "Ext Notif", + "tabMqtt": "MQTT", + "tabNeighborInfo": "相鄰設備資訊", + "tabPaxcounter": "客流量計數", + "tabRangeTest": "範圍測試", + "tabSerial": "序列埠", + "tabStoreAndForward": "S&F", + "tabTelemetry": "遙測" + }, + "ambientLighting": { + "title": "Ambient Lighting Settings", + "description": "Settings for the Ambient Lighting module", + "ledState": { + "label": "LED State", + "description": "Sets LED to on or off" + }, + "current": { + "label": "當前", + "description": "Sets the current for the LED output. Default is 10" + }, + "red": { + "label": "紅色", + "description": "Sets the red LED level. Values are 0-255" + }, + "green": { + "label": "綠色", + "description": "Sets the green LED level. Values are 0-255" + }, + "blue": { + "label": "藍色", + "description": "Sets the blue LED level. Values are 0-255" + } + }, + "audio": { + "title": "Audio Settings", + "description": "Settings for the Audio module", + "codec2Enabled": { + "label": "Codec 2 Enabled", + "description": "Enable Codec 2 audio encoding" + }, + "pttPin": { + "label": "PTT Pin", + "description": "GPIO pin to use for PTT" + }, + "bitrate": { + "label": "Bitrate", + "description": "Bitrate to use for audio encoding" + }, + "i2sWs": { + "label": "i2S WS", + "description": "GPIO pin to use for i2S WS" + }, + "i2sSd": { + "label": "i2S SD", + "description": "GPIO pin to use for i2S SD" + }, + "i2sDin": { + "label": "i2S DIN", + "description": "GPIO pin to use for i2S DIN" + }, + "i2sSck": { + "label": "i2S SCK", + "description": "GPIO pin to use for i2S SCK" + } + }, + "cannedMessage": { + "title": "Canned Message Settings", + "description": "Settings for the Canned Message module", + "moduleEnabled": { + "label": "Module Enabled", + "description": "Enable Canned Message" + }, + "rotary1Enabled": { + "label": "Rotary Encoder #1 Enabled", + "description": "Enable the rotary encoder" + }, + "inputbrokerPinA": { + "label": "Encoder Pin A", + "description": "GPIO Pin Value (1-39) For encoder port A" + }, + "inputbrokerPinB": { + "label": "Encoder Pin B", + "description": "GPIO Pin Value (1-39) For encoder port B" + }, + "inputbrokerPinPress": { + "label": "Encoder Pin Press", + "description": "GPIO Pin Value (1-39) For encoder Press" + }, + "inputbrokerEventCw": { + "label": "Clockwise event", + "description": "Select input event." + }, + "inputbrokerEventCcw": { + "label": "Counter Clockwise event", + "description": "Select input event." + }, + "inputbrokerEventPress": { + "label": "Press event", + "description": "Select input event" + }, + "updown1Enabled": { + "label": "Up Down enabled", + "description": "Enable the up / down encoder" + }, + "allowInputSource": { + "label": "Allow Input Source", + "description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'" + }, + "sendBell": { + "label": "Send Bell", + "description": "Sends a bell character with each message" + } + }, + "detectionSensor": { + "title": "Detection Sensor Settings", + "description": "Settings for the Detection Sensor module", + "enabled": { + "label": "Enabled", + "description": "Enable or disable Detection Sensor Module" + }, + "minimumBroadcastSecs": { + "label": "Minimum Broadcast Seconds", + "description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected" + }, + "stateBroadcastSecs": { + "label": "State Broadcast Seconds", + "description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes" + }, + "sendBell": { + "label": "Send Bell", + "description": "Send ASCII bell with alert message" + }, + "name": { + "label": "Friendly Name", + "description": "Used to format the message sent to mesh, max 20 Characters" + }, + "monitorPin": { + "label": "Monitor Pin", + "description": "The GPIO pin to monitor for state changes" + }, + "detectionTriggerType": { + "label": "Detection Triggered Type", + "description": "The type of trigger event to be used" + }, + "usePullup": { + "label": "Use Pullup", + "description": "Whether or not use INPUT_PULLUP mode for GPIO pin" + } + }, + "externalNotification": { + "title": "External Notification Settings", + "description": "Configure the external notification module", + "enabled": { + "label": "Module Enabled", + "description": "Enable External Notification" + }, + "outputMs": { + "label": "Output MS", + "description": "Output MS" + }, + "output": { + "label": "Output", + "description": "Output" + }, + "outputVibra": { + "label": "Output Vibrate", + "description": "Output Vibrate" + }, + "outputBuzzer": { + "label": "Output Buzzer", + "description": "Output Buzzer" + }, + "active": { + "label": "Active", + "description": "Active" + }, + "alertMessage": { + "label": "Alert Message", + "description": "Alert Message" + }, + "alertMessageVibra": { + "label": "Alert Message Vibrate", + "description": "Alert Message Vibrate" + }, + "alertMessageBuzzer": { + "label": "Alert Message Buzzer", + "description": "Alert Message Buzzer" + }, + "alertBell": { + "label": "Alert Bell", + "description": "Should an alert be triggered when receiving an incoming bell?" + }, + "alertBellVibra": { + "label": "Alert Bell Vibrate", + "description": "Alert Bell Vibrate" + }, + "alertBellBuzzer": { + "label": "Alert Bell Buzzer", + "description": "Alert Bell Buzzer" + }, + "usePwm": { + "label": "Use PWM", + "description": "Use PWM" + }, + "nagTimeout": { + "label": "Nag Timeout", + "description": "Nag Timeout" + }, + "useI2sAsBuzzer": { + "label": "Use I²S Pin as Buzzer", + "description": "Designate I²S Pin as Buzzer Output" + } + }, + "mqtt": { + "title": "MQTT Settings", + "description": "Settings for the MQTT module", + "enabled": { + "label": "Enabled", + "description": "Enable or disable MQTT" + }, + "address": { + "label": "MQTT Server Address", + "description": "MQTT server address to use for default/custom servers" + }, + "username": { + "label": "MQTT Username", + "description": "MQTT username to use for default/custom servers" + }, + "password": { + "label": "MQTT Password", + "description": "MQTT password to use for default/custom servers" + }, + "encryptionEnabled": { + "label": "Encryption Enabled", + "description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data." + }, + "jsonEnabled": { + "label": "JSON Enabled", + "description": "Whether to send/consume JSON packets on MQTT" + }, + "tlsEnabled": { + "label": "TLS Enabled", + "description": "Enable or disable TLS" + }, + "root": { + "label": "根話題", + "description": "MQTT root topic to use for default/custom servers" + }, + "proxyToClientEnabled": { + "label": "MQTT Client Proxy Enabled", + "description": "Utilizes the network connection to proxy MQTT messages to the client." + }, + "mapReportingEnabled": { + "label": "Map Reporting Enabled", + "description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name." + }, + "mapReportSettings": { + "publishIntervalSecs": { + "label": "Map Report Publish Interval (s)", + "description": "Interval in seconds to publish map reports" + }, + "positionPrecision": { + "label": "Approximate Location", + "description": "Position shared will be accurate within this distance", + "options": { + "metric_km23": "Within 23 km", + "metric_km12": "Within 12 km", + "metric_km5_8": "Within 5.8 km", + "metric_km2_9": "Within 2.9 km", + "metric_km1_5": "Within 1.5 km", + "metric_m700": "Within 700 m", + "metric_m350": "Within 350 m", + "metric_m200": "Within 200 m", + "metric_m90": "Within 90 m", + "metric_m50": "Within 50 m", + "imperial_mi15": "15英里以內", + "imperial_mi7_3": "7.3英里以內", + "imperial_mi3_6": "3.6英里以內", + "imperial_mi1_8": "1.8英里以內", + "imperial_mi0_9": "0.9英里以內", + "imperial_mi0_5": "0.5英里以內", + "imperial_mi0_2": "0.2英里以內", + "imperial_ft600": "600英尺以內", + "imperial_ft300": "300英尺以內", + "imperial_ft150": "150英尺以內" + } + } + } + }, + "neighborInfo": { + "title": "Neighbor Info Settings", + "description": "Settings for the Neighbor Info module", + "enabled": { + "label": "Enabled", + "description": "Enable or disable Neighbor Info Module" + }, + "updateInterval": { + "label": "Update Interval", + "description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh" + } + }, + "paxcounter": { + "title": "Paxcounter Settings", + "description": "Settings for the Paxcounter module", + "enabled": { + "label": "Module Enabled", + "description": "Enable Paxcounter" + }, + "paxcounterUpdateInterval": { + "label": "Update Interval (seconds)", + "description": "How long to wait between sending paxcounter packets" + }, + "wifiThreshold": { + "label": "WiFi RSSI Threshold", + "description": "At what WiFi RSSI level should the counter increase. Defaults to -80." + }, + "bleThreshold": { + "label": "BLE RSSI Threshold", + "description": "At what BLE RSSI level should the counter increase. Defaults to -80." + } + }, + "rangeTest": { + "title": "Range Test Settings", + "description": "Settings for the Range Test module", + "enabled": { + "label": "Module Enabled", + "description": "Enable Range Test" + }, + "sender": { + "label": "Message Interval", + "description": "How long to wait between sending test packets" + }, + "save": { + "label": "Save CSV to storage", + "description": "ESP32 Only" + } + }, + "serial": { + "title": "Serial Settings", + "description": "Settings for the Serial module", + "enabled": { + "label": "Module Enabled", + "description": "Enable Serial output" + }, + "echo": { + "label": "Echo", + "description": "Any packets you send will be echoed back to your device" + }, + "rxd": { + "label": "Receive Pin", + "description": "Set the GPIO pin to the RXD pin you have set up." + }, + "txd": { + "label": "Transmit Pin", + "description": "Set the GPIO pin to the TXD pin you have set up." + }, + "baud": { + "label": "Baud Rate", + "description": "The serial baud rate" + }, + "timeout": { + "label": "逾時", + "description": "Seconds to wait before we consider your packet as 'done'" + }, + "mode": { + "label": "Mode", + "description": "Select Mode" + }, + "overrideConsoleSerialPort": { + "label": "Override Console Serial Port", + "description": "If you have a serial port connected to the console, this will override it." + } + }, + "storeForward": { + "title": "Store & Forward Settings", + "description": "Settings for the Store & Forward module", + "enabled": { + "label": "Module Enabled", + "description": "Enable Store & Forward" + }, + "heartbeat": { + "label": "Heartbeat Enabled", + "description": "Enable Store & Forward heartbeat" + }, + "records": { + "label": "紀錄數目", + "description": "Number of records to store" + }, + "historyReturnMax": { + "label": "歴史紀錄最大返回值", + "description": "Max number of records to return" + }, + "historyReturnWindow": { + "label": "歴史紀錄返回視窗", + "description": "Return records from this time window (minutes)" + } + }, + "telemetry": { + "title": "Telemetry Settings", + "description": "Settings for the Telemetry module", + "deviceUpdateInterval": { + "label": "Device Metrics", + "description": "裝置資訊更新週期(秒)" + }, + "environmentUpdateInterval": { + "label": "環境資訊更新週期(秒)", + "description": "" + }, + "environmentMeasurementEnabled": { + "label": "Module Enabled", + "description": "Enable the Environment Telemetry" + }, + "environmentScreenEnabled": { + "label": "Displayed on Screen", + "description": "Show the Telemetry Module on the OLED" + }, + "environmentDisplayFahrenheit": { + "label": "Display Fahrenheit", + "description": "Display temp in Fahrenheit" + }, + "airQualityEnabled": { + "label": "Air Quality Enabled", + "description": "Enable the Air Quality Telemetry" + }, + "airQualityInterval": { + "label": "Air Quality Update Interval", + "description": "How often to send Air Quality data over the mesh" + }, + "powerMeasurementEnabled": { + "label": "Power Measurement Enabled", + "description": "Enable the Power Measurement Telemetry" + }, + "powerUpdateInterval": { + "label": "Power Update Interval", + "description": "How often to send Power data over the mesh" + }, + "powerScreenEnabled": { + "label": "Power Screen Enabled", + "description": "Enable the Power Telemetry Screen" + } + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/nodes.json b/packages/web/public/i18n/locales/zh-TW/nodes.json new file mode 100644 index 00000000..d5029535 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/nodes.json @@ -0,0 +1,59 @@ +{ + "nodeDetail": { + "publicKeyEnabled": { + "label": "公鑰已啟用" + }, + "noPublicKey": { + "label": "沒有公鑰" + }, + "directMessage": { + "label": "私人訊息 {{shortName}}" + }, + "favorite": { + "label": "收藏", + "tooltip": "將此節點加入/移除收藏" + }, + "notFavorite": { + "label": "Not a Favorite" + }, + "error": { + "label": "錯誤", + "text": "無法取得節點詳細資料,請稍後重試。" + }, + "status": { + "heard": "Heard", + "mqtt": "MQTT" + }, + "elevation": { + "label": "海拔高度" + }, + "channelUtil": { + "label": "頻道利用率" + }, + "airtimeUtil": { + "label": "空中時間利用率" + } + }, + "nodesTable": { + "headings": { + "longName": "完整名稱", + "connection": "連線", + "lastHeard": "最後接收時間", + "encryption": "加密", + "model": "Model", + "macAddress": "MAC 地址" + }, + "connectionStatus": { + "direct": "直線", + "away": "away", + "viaMqtt": ",透過 MQTT" + } + }, + "actions": { + "added": "已添加", + "removed": "已移除", + "ignoreNode": "忽略節點", + "unignoreNode": "取消忽略節點", + "requestPosition": "請求位置" + } +} diff --git a/packages/web/public/i18n/locales/zh-TW/ui.json b/packages/web/public/i18n/locales/zh-TW/ui.json new file mode 100644 index 00000000..ecc99333 --- /dev/null +++ b/packages/web/public/i18n/locales/zh-TW/ui.json @@ -0,0 +1,229 @@ +{ + "navigation": { + "title": "導航", + "messages": "訊息", + "map": "地圖", + "settings": "設定", + "channels": "頻道", + "radioConfig": "無線電設定", + "deviceConfig": "設備設置", + "moduleConfig": "模組設定", + "nodes": "節點" + }, + "app": { + "title": "Meshtastic", + "logo": "Meshtastic Logo" + }, + "sidebar": { + "collapseToggle": { + "button": { + "open": "開啟側邊欄", + "close": "關閉側邊欄" + } + }, + "deviceInfo": { + "volts": "{{voltage}} V", + "firmware": { + "title": "韌體", + "version": "v{{version}}", + "buildDate": "Build date: {{date}}" + } + } + }, + "batteryStatus": { + "charging": "{{level}}% 充電中", + "pluggedIn": "已接上電源", + "title": "電池" + }, + "search": { + "nodes": "搜尋節點……", + "channels": "搜尋頻道……", + "commandPalette": "搜尋指令……" + }, + "toast": { + "positionRequestSent": { + "title": "位置請求已送出。" + }, + "requestingPosition": { + "title": "正在請求位置,請稍候……" + }, + "sendingTraceroute": { + "title": "正在執行追蹤路由,請稍候……" + }, + "tracerouteSent": { + "title": "追蹤路由已送出。" + }, + "savedChannel": { + "title": "已儲存頻道:{{channelName}}" + }, + "messages": { + "pkiEncryption": { + "title": "對話正使用 PKI 加密。" + }, + "pskEncryption": { + "title": "對話正使用 PSK 加密。" + } + }, + "configSaveError": { + "title": "儲存失敗", + "description": "儲存設定時發生錯誤。" + }, + "validationError": { + "title": "配置中存在錯誤", + "description": "儲存前請先修正設定錯誤。" + }, + "saveSuccess": { + "title": "正在儲存設定", + "description": "{{case}} 設定已保存。" + }, + "saveAllSuccess": { + "title": "已儲存", + "description": "所有設定已保存。" + }, + "favoriteNode": { + "title": "{{action}} {{nodeName}} {{direction}} favorites.", + "action": { + "added": "已添加", + "removed": "已移除", + "to": "to", + "from": "from" + } + }, + "ignoreNode": { + "title": "{{action}} {{nodeName}} {{direction}} ignore list", + "action": { + "added": "已添加", + "removed": "已移除", + "to": "to", + "from": "from" + } + } + }, + "notifications": { + "copied": { + "label": "已複製!" + }, + "copyToClipboard": { + "label": "複製到剪貼簿" + }, + "hidePassword": { + "label": "隱藏密碼" + }, + "showPassword": { + "label": "顯示密碼" + }, + "deliveryStatus": { + "delivered": "已送達", + "failed": "傳送失敗", + "waiting": "等待中", + "unknown": "不明" + } + }, + "general": { + "label": "一般設定" + }, + "hardware": { + "label": "硬體" + }, + "metrics": { + "label": "Metrics" + }, + "role": { + "label": "角色" + }, + "filter": { + "label": "過濾器" + }, + "advanced": { + "label": "進階" + }, + "clearInput": { + "label": "清除輸入" + }, + "resetFilters": { + "label": "重設篩選器" + }, + "nodeName": { + "label": "節點名稱/編號", + "placeholder": "Meshtastic 1234" + }, + "airtimeUtilization": { + "label": "空中時間利用率 (%)", + "short": "空中時間利用率 (%)" + }, + "batteryLevel": { + "label": "電池電量 (%)", + "labelText": "電池電量 (%):{{value}}" + }, + "batteryVoltage": { + "label": "電池電壓 (V)", + "title": "電壓" + }, + "channelUtilization": { + "label": "頻道利用率 (%)", + "short": "頻道利用率 (%)" + }, + "hops": { + "direct": "直線", + "label": "跳數", + "text": "跳數:{{value}}" + }, + "lastHeard": { + "label": "最近一次收到排序", + "labelText": "最後接收時間:{{value}}", + "nowLabel": "Now" + }, + "snr": { + "label": "SNR (db)" + }, + "favorites": { + "label": "Favorites" + }, + "hide": { + "label": "隱藏" + }, + "showOnly": { + "label": "僅顯示" + }, + "viaMqtt": { + "label": "已透過 MQTT 連線" + }, + "hopsUnknown": { + "label": "跳數未知" + }, + "showUnheard": { + "label": "Unknown last heard" + }, + "language": { + "label": "語言", + "changeLanguage": "變更語言" + }, + "theme": { + "dark": "深色", + "light": "淺色", + "system": "自動", + "changeTheme": "更改顏色方案" + }, + "errorPage": { + "title": "這有點尷尬……", + "description1": "我們深感抱歉,網頁客戶端發生錯誤並導致程式崩潰。
這是不應該發生的情況,我們正積極努力修復此問題。", + "description2": "幫助我們防止此問題再次發生,請將問題回報給我們。", + "reportInstructions": "請在您的回報中附上下列資訊:", + "reportSteps": { + "step1": "發生錯誤時您正在執行的動作", + "step2": "您預期會發生什麼", + "step3": "實際發生的情況", + "step4": "其他相關資訊" + }, + "reportLink": "您可以將此問題回報到我們的 <0>GitHub", + "dashboardLink": "返回 <0>dashboard", + "detailsSummary": "錯誤詳情", + "errorMessageLabel": "錯誤訊息:", + "stackTraceLabel": "Stack trace:", + "fallbackError": "{{error}}" + }, + "footer": { + "text": "技術支援: <0>▲ Vercel | Meshtastic® 是 Meshtastic LLC. 的註冊商標。| <1>法律資訊", + "commitSha": "Commit SHA: {{sha}}" + } +}