diff --git a/client/ui/i18n/locales/zh-CN/common.json b/client/ui/i18n/locales/zh-CN/common.json index 08881b78a..694444497 100644 --- a/client/ui/i18n/locales/zh-CN/common.json +++ b/client/ui/i18n/locales/zh-CN/common.json @@ -4,107 +4,107 @@ "description": "Hover tooltip on the system-tray / menu-bar icon. Brand name — do not translate." }, "tray.status.disconnected": { - "message": "已断开连接", + "message": "Disconnected", "description": "Connection status surfaced through the tray icon: the client is not connected to the network." }, "tray.status.daemonUnavailable": { - "message": "未运行", + "message": "Not running", "description": "Tray status: the background NetBird service (daemon) is not running." }, "tray.status.error": { - "message": "错误", + "message": "Error", "description": "Tray status: the client is in an error state." }, "tray.status.connected": { - "message": "已连接", + "message": "Connected", "description": "Tray status: connected to the NetBird network." }, "tray.status.connecting": { - "message": "正在连接", + "message": "Connecting", "description": "Tray status: a connection is being established." }, "tray.status.needsLogin": { - "message": "需要登录", + "message": "Login required", "description": "Tray status: the user must sign in before connecting." }, "tray.status.loginFailed": { - "message": "登录失败", + "message": "Login failed", "description": "Tray status: the last sign-in attempt failed." }, "tray.status.sessionExpired": { - "message": "会话已过期", + "message": "Session expired", "description": "Tray status: the authenticated session expired; the user must sign in again." }, "tray.session.expiresIn": { - "message": "会话将在 {remaining} 后过期", + "message": "Session expires in {remaining}", "description": "Tray row showing time left before the session expires. {remaining} is a human-readable duration such as '5 minutes', built from the tray.session.unit.* strings. Keep {remaining} unchanged." }, "tray.session.unit.lessThanMinute": { - "message": "不到一分钟", + "message": "less than a minute", "description": "Duration fragment substituted into {remaining} (see tray.session.expiresIn). Used when under one minute remains." }, "tray.session.unit.minute": { - "message": "1 分钟", + "message": "1 minute", "description": "Duration fragment for exactly one minute, substituted into {remaining}." }, "tray.session.unit.minutes": { - "message": "{count} 分钟", + "message": "{count} minutes", "description": "Duration fragment for several minutes, substituted into {remaining}. {count} is the number of minutes; keep {count}." }, "tray.session.unit.hour": { - "message": "1 小时", + "message": "1 hour", "description": "Duration fragment for exactly one hour, substituted into {remaining}." }, "tray.session.unit.hours": { - "message": "{count} 小时", + "message": "{count} hours", "description": "Duration fragment for several hours. {count} is the number of hours; keep {count}." }, "tray.session.unit.day": { - "message": "1 天", + "message": "1 day", "description": "Duration fragment for exactly one day, substituted into {remaining}." }, "tray.session.unit.days": { - "message": "{count} 天", + "message": "{count} days", "description": "Duration fragment for several days. {count} is the number of days; keep {count}." }, "tray.menu.open": { - "message": "打开 NetBird", + "message": "Open NetBird", "description": "Tray menu item that opens the main NetBird window. Keep short." }, "tray.menu.connect": { - "message": "连接", + "message": "Connect", "description": "Tray menu item that connects to the network. Keep short." }, "tray.menu.disconnect": { - "message": "断开连接", + "message": "Disconnect", "description": "Tray menu item that disconnects from the network. Keep short." }, "tray.menu.exitNode": { - "message": "出口节点", + "message": "Exit Node", "description": "Tray submenu title for choosing an exit node (route all traffic through another peer)." }, "tray.menu.networks": { - "message": "资源", + "message": "Resources", "description": "Tray submenu title listing network resources the user can reach. Labelled 'Resources' in the UI even though the key says networks." }, "tray.menu.profiles": { - "message": "配置文件", + "message": "Profiles", "description": "Tray submenu title listing connection profiles." }, "tray.menu.manageProfiles": { - "message": "管理配置文件", + "message": "Manage Profiles", "description": "Tray menu item that opens Settings → Profiles." }, "tray.menu.settings": { - "message": "设置…", + "message": "Settings...", "description": "Tray menu item that opens the Settings window. The trailing '...' signals that a window opens; keep it." }, "tray.menu.debugBundle": { - "message": "创建调试包", + "message": "Create Debug Bundle", "description": "Tray menu item that generates a diagnostic log bundle for support." }, "tray.menu.about": { - "message": "帮助与支持", + "message": "Help & Support", "description": "Tray submenu title for help and support links." }, "tray.menu.github": { @@ -112,27 +112,27 @@ "description": "Tray menu link to the GitHub repository. Brand name — do not translate." }, "tray.menu.documentation": { - "message": "文档", + "message": "Documentation", "description": "Tray menu link to the online documentation." }, "tray.menu.troubleshoot": { - "message": "故障排除", + "message": "Troubleshoot", "description": "Tray menu link to troubleshooting help." }, "tray.menu.downloadLatest": { - "message": "下载最新版本", + "message": "Download latest version", "description": "Tray menu item to download the latest available version." }, "tray.menu.installVersion": { - "message": "安装 {version} 版本", + "message": "Install version {version}", "description": "Tray menu item to install a specific update. {version} is a version number like 0.30.1; keep {version}." }, "tray.menu.guiVersion": { - "message": "GUI:{version}", + "message": "GUI: {version}", "description": "Tray menu row showing the installed UI version. 'GUI' = the graphical app. {version} is a version number; keep it." }, "tray.menu.daemonVersion": { - "message": "守护进程:{version}", + "message": "Daemon: {version}", "description": "Tray menu row showing the background-service version. 'Daemon' = the background NetBird service. {version} is a version number; keep it." }, "tray.menu.versionUnknown": { @@ -140,163 +140,163 @@ "description": "Placeholder shown in version rows when the version can't be determined. It is an em dash — leave as-is." }, "tray.menu.quit": { - "message": "退出 NetBird", + "message": "Quit NetBird", "description": "Tray menu item that fully exits the app and removes the tray icon. Keep short." }, "notify.daemonOutdated.title": { - "message": "NetBird 服务版本过旧", + "message": "NetBird service is outdated", "description": "Title of the OS desktop notification shown when the running daemon is too old for this UI." }, "notify.daemonOutdated.body": { - "message": "请更新 NetBird 服务以使用此应用。", + "message": "Update the NetBird service to use this app.", "description": "Body of the desktop notification telling the user to upgrade the daemon." }, "notify.update.title": { - "message": "NetBird 有可用更新", + "message": "NetBird update available", "description": "Title of the OS desktop notification shown when an app update is available." }, "notify.update.body": { - "message": "NetBird {version} 已可用。", + "message": "NetBird {version} is available.", "description": "Body of the update-available desktop notification. {version} is the new version number; keep it." }, "notify.update.enforcedSuffix": { - "message": " 您的管理员要求进行此次更新。", + "message": " Your administrator requires this update.", "description": "Sentence appended to the update notification body when the admin has made the update mandatory. Note the leading space — keep it." }, "notify.error.title": { - "message": "错误", + "message": "Error", "description": "Title of a generic error desktop notification." }, "notify.error.connect": { - "message": "连接失败", + "message": "Failed to connect", "description": "Error notification body shown when connecting failed." }, "notify.error.disconnect": { - "message": "断开连接失败", + "message": "Failed to disconnect", "description": "Error notification body shown when disconnecting failed." }, "notify.error.switchProfile": { - "message": "切换到 {profile} 失败", + "message": "Failed to switch to {profile}", "description": "Error notification shown when switching profiles failed. {profile} is the target profile name; keep it." }, "notify.error.exitNode": { - "message": "更新出口节点 {name} 失败", + "message": "Failed to update exit node {name}", "description": "Error notification shown when updating the exit node failed. {name} is the exit node name; keep it." }, "notify.sessionExpired.title": { - "message": "NetBird 会话已过期", + "message": "NetBird session expired", "description": "Title of the desktop notification shown when the session has expired." }, "notify.sessionExpired.body": { - "message": "您的 NetBird 会话已过期。请重新登录。", + "message": "Your NetBird session has expired. Please log in again.", "description": "Body of the session-expired desktop notification." }, "notify.sessionWarning.title": { - "message": "会话即将过期", + "message": "Session expires soon", "description": "Title of the desktop notification warning that the session will expire soon." }, "notify.sessionWarning.body": { - "message": "您的 NetBird 会话将在 {remaining} 后过期。点击“立即延长”以续期。", + "message": "Your NetBird session expires in {remaining}. Click Extend now to renew.", "description": "Body of the session-expiry warning notification. {remaining} is a human-readable duration (see tray.session.unit.*); keep it. 'Extend now' refers to the action button notify.sessionWarning.extend." }, "notify.sessionWarning.bodyGeneric": { - "message": "您的 NetBird 会话即将过期。点击“立即延长”以续期。", + "message": "Your NetBird session is about to expire. Click Extend now to renew.", "description": "Generic session-expiry warning body used when the exact remaining time isn't known." }, "notify.sessionWarning.extend": { - "message": "立即延长", + "message": "Extend now", "description": "Action button on the session-expiry notification that renews the session. Keep short." }, "notify.sessionWarning.dismiss": { - "message": "忽略", + "message": "Dismiss", "description": "Action button on the session-expiry notification that dismisses it. Keep short." }, "notify.sessionWarning.failed": { - "message": "延长 NetBird 会话失败", + "message": "Failed to extend NetBird session", "description": "Notification shown when renewing the session failed." }, "notify.sessionWarning.successTitle": { - "message": "NetBird 会话已延长", + "message": "NetBird session extended", "description": "Title of the notification confirming the session was renewed." }, "notify.sessionWarning.successBody": { - "message": "您的会话已刷新。", + "message": "Your session has been refreshed.", "description": "Body of the notification confirming the session was renewed." }, "notify.sessionDeadlineRejected.title": { - "message": "会话截止时间被拒绝", + "message": "Session deadline rejected", "description": "Title of the notification shown when the server sent an invalid session deadline." }, "notify.sessionDeadlineRejected.body": { - "message": "服务器发送了无效的会话截止时间。请重新登录。", + "message": "The server sent an invalid session deadline. Please sign in again.", "description": "Body explaining the server sent an invalid session deadline and the user must sign in again." }, "notify.mdm.policyApplied.title": { - "message": "NetBird 设置已更新", + "message": "NetBird settings updated", "description": "Title of the desktop notification shown when an MDM (IT-managed) policy changed the daemon configuration at runtime." }, "notify.mdm.policyApplied.body": { - "message": "您的 NetBird 配置已根据 IT 策略更新。", + "message": "Your NetBird configuration was updated by your IT policy.", "description": "Body of the MDM policy-applied notification, telling the user their settings were changed by their organization's device-management policy." }, "common.cancel": { - "message": "取消", + "message": "Cancel", "description": "Generic Cancel button label, reused across dialogs. Keep short." }, "common.save": { - "message": "保存", + "message": "Save", "description": "Generic Save button label. Keep short." }, "common.saveChanges": { - "message": "保存更改", + "message": "Save Changes", "description": "Button label to save edited settings. Keep short." }, "common.saving": { - "message": "正在保存…", + "message": "Saving…", "description": "Button label / status shown while a save is in progress. Ends with an ellipsis." }, "common.close": { - "message": "关闭", + "message": "Close", "description": "Generic Close button label. Keep short." }, "common.copy": { - "message": "复制", + "message": "Copy", "description": "Generic Copy button label (copy to clipboard). Keep short." }, "common.togglePasswordVisibility": { - "message": "切换密码可见性", + "message": "Toggle password visibility", "description": "Accessibility label for the show/hide button inside a password field." }, "common.increase": { - "message": "增加", + "message": "Increase", "description": "Accessibility label for the increment (+) button on a numeric stepper input." }, "common.decrease": { - "message": "减少", + "message": "Decrease", "description": "Accessibility label for the decrement (−) button on a numeric stepper input." }, "common.delete": { - "message": "删除", + "message": "Delete", "description": "Generic Delete button label. Keep short." }, "common.create": { - "message": "创建", + "message": "Create", "description": "Generic Create button label. Keep short." }, "common.add": { - "message": "添加", + "message": "Add", "description": "Generic Add button label. Keep short." }, "common.remove": { - "message": "移除", + "message": "Remove", "description": "Generic Remove button label. Keep short." }, "common.refresh": { - "message": "刷新", + "message": "Refresh", "description": "Generic Refresh button label. Keep short." }, "common.loading": { - "message": "正在加载…", + "message": "Loading…", "description": "Generic loading indicator text. Ends with an ellipsis." }, "common.netbird": { @@ -304,379 +304,379 @@ "description": "The product name. Brand — do not translate." }, "common.noResults.title": { - "message": "未找到任何结果", + "message": "Could not find any results", "description": "Title of the empty state shown when a search or filter returns nothing." }, "common.noResults.description": { - "message": "我们未能找到任何结果。请尝试其他搜索词或更改筛选条件。", + "message": "We couldn't find any results. Please try a different search term or change your filters.", "description": "Body of the no-results empty state, suggesting a different search term or filters." }, "notConnected.title": { - "message": "已断开连接", + "message": "Disconnected", "description": "Title of the placeholder shown on data screens while disconnected." }, "notConnected.description": { - "message": "请先连接到 NetBird,以查看有关对等节点、网络资源和出口节点的详细信息。", + "message": "Connect to NetBird first to view detailed information about your peers, network resources, and exit nodes.", "description": "Body explaining the user must connect to NetBird first to see peer, resource, and exit-node details." }, "connect.status.disconnected": { - "message": "已断开连接", + "message": "Disconnected", "description": "Label on the main-window connection toggle: not connected." }, "connect.status.connecting": { - "message": "正在连接…", + "message": "Connecting...", "description": "Connection toggle label while connecting. Ends with an ellipsis." }, "connect.status.connected": { - "message": "已连接", + "message": "Connected", "description": "Connection toggle label when connected." }, "connect.status.disconnecting": { - "message": "正在断开连接…", + "message": "Disconnecting...", "description": "Connection toggle label while disconnecting. Ends with an ellipsis." }, "connect.status.daemonUnavailable": { - "message": "守护进程不可用", + "message": "Daemon unavailable", "description": "Connection toggle label when the background service is unavailable. 'Daemon' = background service." }, "connect.status.loginRequired": { - "message": "需要登录", + "message": "Login required", "description": "Connection toggle label when sign-in is required before connecting." }, "connect.error.loginTitle": { - "message": "登录失败", + "message": "Login Failed", "description": "Error-dialog title shown when sign-in fails. The action-named '… Failed' style is intentional — keep it." }, "connect.error.connectTitle": { - "message": "连接失败", + "message": "Connect Failed", "description": "Error-dialog title shown when connecting fails." }, "connect.error.disconnectTitle": { - "message": "断开连接失败", + "message": "Disconnect Failed", "description": "Error-dialog title shown when disconnecting fails." }, "nav.peers.title": { - "message": "对等节点", + "message": "Peers", "description": "Navigation label for the Peers section (other devices in the network)." }, "nav.peers.description": { - "message": "{total} 个中已连接 {connected} 个", + "message": "{connected} of {total} connected", "description": "Sub-label under Peers showing how many are connected. {connected} and {total} are numbers; keep both." }, "nav.resources.title": { - "message": "资源", + "message": "Resources", "description": "Navigation label for the Resources section (routed networks)." }, "nav.resources.description": { - "message": "{total} 个中已激活 {active} 个", + "message": "{active} of {total} active", "description": "Sub-label under Resources showing how many are active. {active} and {total} are numbers; keep both." }, "nav.exitNode.title": { - "message": "出口节点", + "message": "Exit Nodes", "description": "Navigation label for the Exit Nodes section." }, "nav.exitNode.none": { - "message": "未激活", + "message": "Not active", "description": "Sub-label under Exit Nodes when no exit node is in use." }, "nav.exitNode.using": { - "message": "经由 {name}", + "message": "Via {name}", "description": "Sub-label under Exit Nodes when one is active. {name} is the exit node's name; keep it." }, "header.openSettings": { - "message": "打开设置", + "message": "Open settings", "description": "Accessibility label / tooltip for the gear icon that opens Settings." }, "header.togglePanel": { - "message": "切换侧边栏", + "message": "Toggle side panel", "description": "Accessibility label / tooltip for the button that shows or hides the side panel." }, "profile.selector.loading": { - "message": "正在加载…", + "message": "Loading...", "description": "Shown in the profile picker while profiles load. Ends with an ellipsis." }, "profile.selector.noProfile": { - "message": "无配置文件", + "message": "No profile", "description": "Shown in the profile picker when no profile is selected." }, "profile.selector.searchPlaceholder": { - "message": "按名称搜索配置文件…", + "message": "Search profile by name...", "description": "Placeholder text in the profile picker's search field." }, "profile.selector.emptyTitle": { - "message": "未找到配置文件", + "message": "No Profiles Found", "description": "Title shown in the profile picker when a search matches no profiles." }, "profile.selector.emptyDescription": { - "message": "请尝试其他搜索词或创建新的配置文件。", + "message": "Try a different search term or create a new profile.", "description": "Body shown when no profiles match the search, suggesting a different term or creating one." }, "profile.selector.newProfile": { - "message": "新建配置文件", + "message": "New Profile", "description": "Button in the profile picker to create a new profile. Keep short." }, "profile.selector.moreOptions": { - "message": "更多选项", + "message": "More options", "description": "Accessibility label for the per-profile kebab (⋯) menu." }, "profile.selector.deregister": { - "message": "注销", + "message": "Deregister", "description": "Per-profile menu action: deregister (sign out of the profile but keep it)." }, "profile.selector.delete": { - "message": "删除", + "message": "Delete", "description": "Per-profile menu action: delete the profile." }, "profile.selector.switchTo": { - "message": "切换到此配置文件", + "message": "Switch to this profile", "description": "Tooltip / label for the action that switches to a profile." }, "profile.selector.edit": { - "message": "编辑", + "message": "Edit", "description": "Per-profile menu action: open the edit dialog to rename or change the management server." }, "profile.edit.title": { - "message": "编辑配置文件", + "message": "Edit Profile", "description": "Title of the dialog for editing an existing profile." }, "profile.edit.submit": { - "message": "保存更改", + "message": "Save Changes", "description": "Submit button on the edit-profile dialog. Keep short." }, "profile.dialog.title": { - "message": "输入配置文件名称", + "message": "Enter Profile Name", "description": "Title of the dialog for naming a new profile." }, "profile.dialog.nameLabel": { - "message": "配置文件名称", + "message": "Profile Name", "description": "Field label for the profile name." }, "profile.dialog.description": { - "message": "为您的配置文件设置一个易于识别的名称。", + "message": "Set an easily identifiable name for your profile.", "description": "Helper text under the profile-name field." }, "profile.dialog.placeholder": { - "message": "例如:工作", + "message": "e.g. Work", "description": "Example placeholder shown in the profile-name field. 'Work' is a sample value; translate it to a natural example." }, "profile.dialog.submit": { - "message": "添加配置文件", + "message": "Add Profile", "description": "Submit button on the add-profile dialog. Keep short." }, "profile.dialog.required": { - "message": "请输入配置文件名称,例如:工作、家庭", + "message": "Please enter a profile name, e.g. work, home", "description": "Validation message shown when the profile name is empty. The examples (work, home) may be localized." }, "profile.dialog.managementHelp": { - "message": "使用 NetBird Cloud 或您自己的服务器。", + "message": "Use NetBird Cloud or your own server.", "description": "Helper text noting the profile can use NetBird Cloud or a self-hosted server." }, "profile.dialog.urlUnreachable": { - "message": "无法连接到此服务器。请检查 URL,如果确认无误,也可以照常添加该配置文件。", + "message": "Couldn't reach this server. Check the URL, or add the profile anyway if you're sure it's correct.", "description": "Soft warning when the entered server URL couldn't be reached; the user may add the profile anyway." }, "header.menu.settings": { - "message": "设置…", + "message": "Settings...", "description": "'More' menu item in the header that opens Settings. The trailing '...' signals a window opens." }, "header.menu.defaultView": { - "message": "默认视图", + "message": "Default View", "description": "'More' menu item that switches the main window to the compact default view." }, "header.menu.advancedView": { - "message": "高级视图", + "message": "Advanced View", "description": "'More' menu item that switches the main window to the wider advanced view." }, "header.menu.updateAvailable": { - "message": "有可用更新", + "message": "Update Available", "description": "'More' menu item / badge shown when an update is available." }, "header.menu.open": { - "message": "打开菜单", + "message": "Open menu", "description": "Accessibility label for the header's more (⋮) button that opens the menu." }, "header.profile.switch": { - "message": "切换配置文件", + "message": "Switch profile", "description": "Accessibility label for the header's profile selector button." }, "connect.toggle.label": { - "message": "切换 NetBird 连接", + "message": "Toggle NetBird connection", "description": "Accessibility label for the large connect/disconnect toggle on the main page." }, "connect.localIp.label": { - "message": "本地 IP 地址", + "message": "Local IP addresses", "description": "Accessibility label for the local IP selector that toggles between IPv4 and IPv6 on the main page." }, "common.search": { - "message": "搜索", + "message": "Search", "description": "Accessibility label for a generic search input." }, "common.filter": { - "message": "筛选", + "message": "Filter", "description": "Accessibility label for a generic filter control." }, "exitNodes.dropdown.trigger": { - "message": "选择出口节点", + "message": "Select exit node", "description": "Accessibility label for the exit-node picker button at the bottom of the main page." }, "peers.row.label": { - "message": "打开 {name} 的详情,{status}", + "message": "Open details for {name}, {status}", "description": "Accessibility label for a peer row in the list. {name} is the peer name and {status} is the connection status; keep both placeholders." }, "peers.dialog.title": { - "message": "对等节点详情", + "message": "Peer details", "description": "Accessibility title (announced to screen readers) for the peer details dialog/panel." }, "networks.row.toggle": { - "message": "切换 {name}", + "message": "Toggle {name}", "description": "Accessibility label for the row-wide toggle on a network/resource. {name} is the resource id; keep the placeholder." }, "networks.bulk.label": { - "message": "切换所有可见资源", + "message": "Toggle all visible resources", "description": "Accessibility label for the bulk enable/disable button at the bottom of the resources list." }, "profile.switch.title": { - "message": "切换到配置文件“{name}”?", + "message": "Switch Profile to \"{name}\"?", "description": "Confirmation-dialog title for switching profiles. {name} is the target profile name, shown in quotes; keep {name} and the surrounding quotes." }, "profile.switch.message": { - "message": "您确定要切换配置文件吗?\n您当前的配置文件将被断开连接。", + "message": "Are you sure you want to switch profiles?\nYour current profile will be disconnected.", "description": "Confirmation body for switching profiles. Contains a line break (\\n) — keep it." }, "profile.switch.confirm": { - "message": "确认", + "message": "Confirm", "description": "Confirm button on the switch-profile dialog. Keep short." }, "profile.deregister.title": { - "message": "注销配置文件“{name}”?", + "message": "Deregister Profile \"{name}\"?", "description": "Confirmation-dialog title for deregistering a profile. {name} is the profile name; keep it and the quotes." }, "profile.deregister.message": { - "message": "您确定要注销此配置文件吗?\n您将需要重新登录才能使用它。", + "message": "Are you sure you want to deregister this profile?\nYou will need to log in again to use it.", "description": "Confirmation body for deregistering; warns the user must sign in again. Contains a line break (\\n) — keep it." }, "profile.deregister.confirm": { - "message": "注销", + "message": "Deregister", "description": "Confirm button on the deregister dialog. Keep short." }, "profile.delete.title": { - "message": "删除配置文件“{name}”?", + "message": "Delete Profile \"{name}\"?", "description": "Confirmation-dialog title for deleting a profile. {name} is the profile name; keep it and the quotes." }, "profile.delete.message": { - "message": "您确定要删除此配置文件吗?\n此操作无法撤销。", + "message": "Are you sure you want to delete this profile?\nThis action cannot be undone.", "description": "Confirmation body for deleting; warns the action can't be undone. Contains a line break (\\n) — keep it." }, "profile.delete.disabledActive": { - "message": "无法删除处于活动状态的配置文件。请先切换到其他配置文件,再删除此配置文件。", + "message": "Active profiles cannot be deleted. Switch to a different one before deleting this profile.", "description": "Tooltip explaining the active profile can't be deleted until the user switches away." }, "profile.delete.disabledDefault": { - "message": "无法删除默认配置文件。", + "message": "The default profile cannot be deleted.", "description": "Tooltip explaining the default profile can't be deleted." }, "profile.error.switchTitle": { - "message": "切换配置文件失败", + "message": "Switch Profile Failed", "description": "Error-dialog title when switching profiles fails." }, "profile.error.deregisterTitle": { - "message": "注销配置文件失败", + "message": "Deregister Profile Failed", "description": "Error-dialog title when deregistering a profile fails." }, "profile.error.deleteTitle": { - "message": "删除配置文件失败", + "message": "Delete Profile Failed", "description": "Error-dialog title when deleting a profile fails." }, "profile.error.createTitle": { - "message": "创建配置文件失败", + "message": "Create Profile Failed", "description": "Error-dialog title when creating a profile fails." }, "profile.error.editTitle": { - "message": "编辑配置文件失败", + "message": "Edit Profile Failed", "description": "Error-dialog title when editing a profile (rename or management URL change) fails." }, "profile.error.loadTitle": { - "message": "加载配置文件失败", + "message": "Load Profiles Failed", "description": "Error-dialog title when loading profiles fails." }, "profile.dropdown.activeProfile": { - "message": "当前配置文件", + "message": "Active profile", "description": "Section heading in the header profile dropdown for the current profile." }, "profile.dropdown.switchProfile": { - "message": "切换配置文件", + "message": "Switch Profile", "description": "Section heading / action in the profile dropdown to switch profiles." }, "profile.dropdown.noEmail": { - "message": "其他", + "message": "Other", "description": "Label shown for a profile that has no associated email address." }, "profile.dropdown.addProfile": { - "message": "添加配置文件", + "message": "Add Profile", "description": "Profile dropdown action to add a profile." }, "profile.dropdown.manageProfiles": { - "message": "管理配置文件", + "message": "Manage Profiles", "description": "Profile dropdown action that opens Settings → Profiles." }, "profile.dropdown.settings": { - "message": "设置", + "message": "Settings", "description": "Profile dropdown action that opens Settings." }, "settings.profiles.section.profiles": { - "message": "配置文件", + "message": "Profiles", "description": "Section heading on the Profiles settings tab." }, "settings.profiles.intro": { - "message": "并行保留多个独立的 NetBird 身份,例如工作和个人账户,或不同的管理服务器。可在下方添加、注销或删除配置文件。", + "message": "Keep separate NetBird identities side by side, for example work and personal accounts, or different management servers. Add, deregister, or delete profiles below.", "description": "Intro paragraph on the Profiles settings tab explaining what profiles are for." }, "settings.profiles.addProfile": { - "message": "添加配置文件", + "message": "Add Profile", "description": "Button on the Profiles settings tab to add a profile." }, "settings.profiles.active": { - "message": "活动", + "message": "Active", "description": "Badge marking the currently active profile in the profiles table." }, "settings.profiles.emptyTitle": { - "message": "无配置文件", + "message": "No Profiles", "description": "Title of the empty state when there are no profiles." }, "settings.profiles.emptyDescription": { - "message": "创建一个配置文件以连接到 NetBird 管理服务器。", + "message": "Create a profile to connect to a NetBird management server.", "description": "Body of the no-profiles empty state." }, "settings.error.loadTitle": { - "message": "加载设置失败", + "message": "Load Settings Failed", "description": "Error-dialog title when loading settings fails." }, "settings.error.saveTitle": { - "message": "保存设置失败", + "message": "Save Settings Failed", "description": "Error-dialog title when saving settings fails." }, "settings.error.debugBundleTitle": { - "message": "创建调试包失败", + "message": "Debug Bundle Failed", "description": "Error-dialog title when creating the debug bundle fails." }, "settings.nav.label": { - "message": "设置部分", + "message": "Settings sections", "description": "Accessibility label for the Settings page's side navigation (list of section tabs)." }, "settings.tabs.general": { - "message": "常规", + "message": "General", "description": "Settings tab label: General. Keep short." }, "settings.tabs.network": { - "message": "网络", + "message": "Network", "description": "Settings tab label: Network. Keep short." }, "settings.tabs.security": { - "message": "安全", + "message": "Security", "description": "Settings tab label: Security. Keep short." }, "settings.tabs.profiles": { - "message": "配置文件", + "message": "Profiles", "description": "Settings tab label: Profiles. Keep short." }, "settings.tabs.ssh": { @@ -684,87 +684,87 @@ "description": "Settings tab label: SSH. Acronym — keep as-is." }, "settings.tabs.advanced": { - "message": "高级", + "message": "Advanced", "description": "Settings tab label: Advanced. Keep short." }, "settings.tabs.troubleshooting": { - "message": "故障排除", + "message": "Troubleshoot", "description": "Settings tab label: Troubleshoot. Keep short." }, "settings.tabs.about": { - "message": "关于", + "message": "About", "description": "Settings tab label: About. Keep short." }, "settings.tabs.updateAvailable": { - "message": "有可用更新", + "message": "Update Available", "description": "Settings tab label / badge shown when an update is available." }, "settings.general.section.general": { - "message": "常规", + "message": "General", "description": "Section heading on the General settings tab." }, "settings.general.section.connection": { - "message": "连接", + "message": "Connection", "description": "Section heading for connection-related options on the General tab." }, "settings.general.connectOnStartup.label": { - "message": "启动时连接", + "message": "Connect on Startup", "description": "Toggle label: connect automatically when the service starts." }, "settings.general.connectOnStartup.help": { - "message": "在服务启动时自动建立连接。", + "message": "Automatically establish a connection when the service starts.", "description": "Helper text for the connect-on-startup toggle." }, "settings.general.notifications.label": { - "message": "桌面通知", + "message": "Desktop Notifications", "description": "Toggle label: enable desktop notifications." }, "settings.general.notifications.help": { - "message": "显示有关新更新和连接事件的桌面通知。", + "message": "Show desktop notifications for new updates and connection events.", "description": "Helper text for the desktop-notifications toggle." }, "settings.general.autostart.label": { - "message": "登录时启动 NetBird 界面", + "message": "Launch NetBird UI at Login", "description": "Toggle label: launch the NetBird UI at login." }, "settings.general.autostart.help": { - "message": "在您登录时自动启动 NetBird 界面。此设置仅影响图形界面,不影响后台服务。", + "message": "Start the NetBird interface automatically when you log in. This affects the graphical interface only, not the background service.", "description": "Helper text clarifying autostart affects only the UI, not the background service." }, "settings.general.autostart.errorTitle": { - "message": "更改自启动设置失败", + "message": "Autostart Change Failed", "description": "Error-dialog title when changing the autostart setting fails." }, "settings.general.keepConnectedOnQuit.label": { - "message": "退出后保持连接", + "message": "Stay Connected After Quitting", "description": "Toggle label: keep the VPN connection up after quitting the UI." }, "settings.general.keepConnectedOnQuit.help": { - "message": "关闭 NetBird 后,连接会在后台保持。只有你自己断开时才会停止。", + "message": "The connection stays up in the background after you close NetBird. It only stops when you disconnect it yourself.", "description": "Helper text for the stay-connected-after-quitting toggle." }, "settings.general.language.label": { - "message": "显示语言", + "message": "Display Language", "description": "Label for the display-language picker." }, "settings.general.language.help": { - "message": "选择 NetBird 界面的语言。", + "message": "Choose the language for the NetBird interface.", "description": "Helper text for the language picker." }, "settings.general.language.search": { - "message": "搜索语言…", + "message": "Search language…", "description": "Placeholder in the language picker's search field." }, "settings.general.language.empty": { - "message": "没有匹配的语言。", + "message": "No languages match.", "description": "Shown when no languages match the search." }, "settings.general.management.label": { - "message": "管理服务器", + "message": "Management Server", "description": "Label for the management-server selector." }, "settings.general.management.help": { - "message": "连接到 NetBird Cloud 或您自己的自托管管理服务器。更改将使客户端重新连接。", + "message": "Connect to NetBird Cloud or your own self-hosted management server. Changes will reconnect the client.", "description": "Helper text explaining Cloud vs self-hosted management server; warns that changes reconnect the client." }, "settings.general.management.cloud": { @@ -772,7 +772,7 @@ "description": "Option label for using NetBird Cloud as the management server." }, "settings.general.management.selfHosted": { - "message": "自托管", + "message": "Self-hosted", "description": "Option label for using a self-hosted management server. 'Self-hosted' is a common technical term." }, "settings.general.management.urlPlaceholder": { @@ -780,215 +780,215 @@ "description": "Example URL placeholder for the self-hosted server field. It is a sample URL — do not translate the URL itself." }, "settings.general.management.urlError": { - "message": "请输入有效的 URL,例如:https://netbird.selfhosted.com:443", + "message": "Please enter a valid URL, e.g., https://netbird.selfhosted.com:443", "description": "Validation message for an invalid management-server URL. The example URL stays as-is." }, "settings.general.management.urlUnreachable": { - "message": "无法连接到此服务器。请检查 URL,如果确认无误,也可以照常保存。", + "message": "Couldn't reach this server. Check the URL, or save anyway if you're sure it's correct.", "description": "Soft warning when the management URL couldn't be reached; the user may save anyway." }, "settings.general.management.switchCloudTitle": { - "message": "切换到 NetBird Cloud?", + "message": "Switch to NetBird Cloud?", "description": "Confirmation-dialog title for switching to NetBird Cloud." }, "settings.general.management.switchCloudMessage": { - "message": "这将断开您的自托管服务器。\n您可能需要重新登录。", + "message": "This disconnects your self-hosted server.\nYou may need to log in again.", "description": "Confirmation body warning the self-hosted server will be disconnected. Contains a line break (\\n) — keep it." }, "settings.general.management.switchCloudConfirm": { - "message": "切换到 Cloud", + "message": "Switch to Cloud", "description": "Confirm button for switching to Cloud. Keep short." }, "settings.network.section.connectivity": { - "message": "连接性", + "message": "Connectivity", "description": "Section heading for connectivity options on the Network tab." }, "settings.network.section.routingDns": { - "message": "路由与 DNS", + "message": "Routing & DNS", "description": "Section heading for routing and DNS options. 'DNS' is an acronym — keep it." }, "settings.network.monitor.label": { - "message": "网络变化时重新连接", + "message": "Reconnect on Network Change", "description": "Toggle label: reconnect automatically on network change." }, "settings.network.monitor.help": { - "message": "监测网络,并在发生变化时自动重新连接,例如切换 Wi-Fi、以太网变化或从睡眠中恢复。", + "message": "Monitor the network and automatically reconnect on changes such as Wi-Fi switching, Ethernet changes, or resume from sleep.", "description": "Helper text for the network-change reconnect toggle." }, "settings.network.dns.label": { - "message": "启用 DNS", + "message": "Enable DNS", "description": "Toggle label: enable DNS. 'DNS' — keep acronym." }, "settings.network.dns.help": { - "message": "将 NetBird 管理的 DNS 设置应用到主机解析器。", + "message": "Apply NetBird-managed DNS settings to the host resolver.", "description": "Helper text for the enable-DNS toggle." }, "settings.network.clientRoutes.label": { - "message": "启用客户端路由", + "message": "Enable Client Routes", "description": "Toggle label: enable client routes." }, "settings.network.clientRoutes.help": { - "message": "接受来自其他对等节点的路由,以访问它们的网络。", + "message": "Accept routes from other peers to reach their networks.", "description": "Helper text for client routes (accept routes from other peers)." }, "settings.network.serverRoutes.label": { - "message": "启用服务器路由", + "message": "Enable Server Routes", "description": "Toggle label: enable server routes." }, "settings.network.serverRoutes.help": { - "message": "向其他对等节点通告此主机的本地路由。", + "message": "Advertise this host's local routes to other peers.", "description": "Helper text for server routes (advertise this host's local routes to other peers)." }, "settings.network.ipv6.label": { - "message": "启用 IPv6", + "message": "Enable IPv6", "description": "Toggle label: enable IPv6. 'IPv6' — keep as-is." }, "settings.network.ipv6.help": { - "message": "为 NetBird 叠加网络使用 IPv6 寻址。", + "message": "Use IPv6 addressing for the NetBird overlay network.", "description": "Helper text for the IPv6 toggle." }, "settings.security.section.firewall": { - "message": "防火墙", + "message": "Firewall", "description": "Section heading: Firewall." }, "settings.security.section.encryption": { - "message": "加密", + "message": "Encryption", "description": "Section heading: Encryption." }, "settings.security.blockInbound.label": { - "message": "阻止入站流量", + "message": "Block Inbound Traffic", "description": "Toggle label: block inbound traffic." }, "settings.security.blockInbound.help": { - "message": "拒绝对等节点向本设备及其路由的任何网络发起的未经请求的连接。出站流量不受影响。", + "message": "Reject unsolicited connections from peers to this device and any networks it routes. Outbound traffic is unaffected.", "description": "Helper text for blocking inbound traffic." }, "settings.security.blockLan.label": { - "message": "阻止 LAN 访问", + "message": "Block LAN Access", "description": "Toggle label: block LAN access. 'LAN' — keep acronym." }, "settings.security.blockLan.help": { - "message": "当本设备为对等节点路由流量时,阻止它们访问您的本地网络或其设备。", + "message": "Prevent peers from reaching your local network or its devices when this device routes their traffic.", "description": "Helper text for blocking LAN access." }, "settings.security.rosenpass.label": { - "message": "启用抗量子加密", + "message": "Enable Quantum-Resistance", "description": "Toggle label: enable quantum-resistance." }, "settings.security.rosenpass.help": { - "message": "在 WireGuard® 之上通过 Rosenpass 添加后量子密钥交换。", + "message": "Add a post-quantum key exchange via Rosenpass on top of WireGuard®.", "description": "Helper text: adds a post-quantum key exchange via Rosenpass on top of WireGuard®. 'Rosenpass' and 'WireGuard®' are product names — do not translate; keep the ® symbol." }, "settings.security.rosenpassPermissive.label": { - "message": "启用宽松模式", + "message": "Enable Permissive Mode", "description": "Toggle label: enable permissive mode (for quantum-resistance)." }, "settings.security.rosenpassPermissive.help": { - "message": "允许连接到不支持抗量子加密的对等节点。", + "message": "Allow connections to peers without quantum-resistance support.", "description": "Helper text for permissive mode (allow peers without quantum-resistance support)." }, "settings.ssh.section.server": { - "message": "服务器", + "message": "Server", "description": "Section heading: Server (SSH settings)." }, "settings.ssh.section.capabilities": { - "message": "功能", + "message": "Capabilities", "description": "Section heading: Capabilities (SSH features)." }, "settings.ssh.section.authentication": { - "message": "身份验证", + "message": "Authentication", "description": "Section heading: Authentication (SSH)." }, "settings.ssh.server.label": { - "message": "启用 SSH 服务器", + "message": "Enable SSH Server", "description": "Toggle label: enable the SSH server." }, "settings.ssh.server.help": { - "message": "在此主机上运行 NetBird SSH 服务器,以便其他对等节点可以连接到它。", + "message": "Run the NetBird SSH server on this host so other peers can connect to it.", "description": "Helper text for the SSH server toggle." }, "settings.ssh.root.label": { - "message": "允许 root 登录", + "message": "Allow Root Login", "description": "Toggle label: allow root login over SSH. 'root' is the Unix superuser account — keep as-is." }, "settings.ssh.root.help": { - "message": "允许对等节点以 root 用户身份登录。禁用后将要求使用非特权账户。", + "message": "Let peers sign in as the root user. Disable to require a non-privileged account.", "description": "Helper text for allowing root login." }, "settings.ssh.sftp.label": { - "message": "允许 SFTP", + "message": "Allow SFTP", "description": "Toggle label: allow SFTP. 'SFTP' — keep acronym." }, "settings.ssh.sftp.help": { - "message": "使用原生 SFTP 或 SCP 客户端安全地传输文件。", + "message": "Transfer files securely using native SFTP or SCP clients.", "description": "Helper text about SFTP/SCP file transfer. Keep the acronyms." }, "settings.ssh.localForward.label": { - "message": "本地端口转发", + "message": "Local Port Forwarding", "description": "Toggle label: local port forwarding." }, "settings.ssh.localForward.help": { - "message": "允许连接的对等节点将本地端口隧道转发到此主机可访问的服务。", + "message": "Let connecting peers tunnel local ports to services reachable from this host.", "description": "Helper text for local port forwarding." }, "settings.ssh.remoteForward.label": { - "message": "远程端口转发", + "message": "Remote Port Forwarding", "description": "Toggle label: remote port forwarding." }, "settings.ssh.remoteForward.help": { - "message": "允许连接的对等节点将此主机上的端口反向暴露到它们自己的机器。", + "message": "Let connecting peers expose ports on this host back to their own machine.", "description": "Helper text for remote port forwarding." }, "settings.ssh.jwt.label": { - "message": "启用 JWT 身份验证", + "message": "Enable JWT Authentication", "description": "Toggle label: enable JWT authentication. 'JWT' — keep acronym." }, "settings.ssh.jwt.help": { - "message": "针对您的 IdP 验证每个 SSH 会话,以确认用户身份并进行审计。禁用后将仅依赖网络 ACL 策略,在没有可用 IdP 时很有用。", + "message": "Verify each SSH session against your IdP for user identity and audit. Disable to rely on network ACL policies only, useful when no IdP is available.", "description": "Helper text for JWT auth. 'IdP' (identity provider) and 'ACL' are acronyms — keep them." }, "settings.ssh.jwtTtl.label": { - "message": "JWT 缓存 TTL", + "message": "JWT Cache TTL", "description": "Label for the JWT cache time-to-live field. 'JWT' and 'TTL' — keep acronyms." }, "settings.ssh.jwtTtl.help": { - "message": "在出站 SSH 连接再次提示前,此客户端缓存 JWT 的时长。设为 0 可禁用缓存,每次连接都进行身份验证。", + "message": "How long this client caches a JWT before prompting again on outgoing SSH connections. Set to 0 to disable caching and authenticate on every connection.", "description": "Helper text for the JWT cache TTL; mentions setting 0 to disable caching." }, "settings.ssh.jwtTtl.suffix": { - "message": "秒", + "message": "Second(s)", "description": "Unit suffix shown after the JWT TTL number field. The '(s)' marks an optional plural." }, "settings.advanced.section.interface": { - "message": "接口", + "message": "Interface", "description": "Section heading: Interface (network-interface settings)." }, "settings.advanced.section.security": { - "message": "安全", + "message": "Security", "description": "Section heading: Security (advanced)." }, "settings.advanced.interfaceName.label": { - "message": "名称", + "message": "Name", "description": "Field label for the WireGuard interface name." }, "settings.advanced.interfaceName.error": { - "message": "请使用 1-15 个字母、数字、点、连字符或下划线。", + "message": "Use 1-15 letters, digits, dots, hyphens, or underscores.", "description": "Validation message for the interface name (allowed characters)." }, "settings.advanced.interfaceName.errorMac": { - "message": "必须以“utun”开头,后跟一个数字(例如 utun100)。", + "message": "Must start with \"utun\" followed by a number (e.g. utun100).", "description": "Validation message specific to macOS, where the name must start with 'utun' followed by a number. Keep 'utun' and the example." }, "settings.advanced.port.label": { - "message": "端口", + "message": "Port", "description": "Field label: Port." }, "settings.advanced.port.error": { - "message": "请输入介于 {min} 和 {max} 之间的端口。", + "message": "Enter a port between {min} and {max}.", "description": "Validation message for the port range. {min} and {max} are numbers; keep them." }, "settings.advanced.port.help": { - "message": "如果设为 0,将使用一个随机的空闲端口。", + "message": "If set to 0, a random free port will be used.", "description": "Helper text: 0 means a random free port is used." }, "settings.advanced.mtu.label": { @@ -996,27 +996,27 @@ "description": "Field label: MTU. 'MTU' — keep acronym." }, "settings.advanced.mtu.error": { - "message": "请输入介于 {min} 和 {max} 之间的 MTU 值。", + "message": "Enter an MTU value between {min} and {max}.", "description": "Validation message for the MTU range. {min} and {max} are numbers; keep them." }, "settings.advanced.psk.label": { - "message": "预共享密钥", + "message": "Pre-shared Key", "description": "Field label: Pre-shared Key." }, "settings.advanced.psk.help": { - "message": "可选的 WireGuard PSK,用于额外的对称加密。它与 NetBird 设置密钥不同。您将只能与使用相同预共享密钥的对等节点通信。", + "message": "Optional WireGuard PSK for extra symmetric encryption. Not the same as a NetBird Setup Key. You will only communicate with peers that use the same pre-shared key.", "description": "Helper text for the WireGuard PSK. 'WireGuard', 'PSK', and 'NetBird Setup Key' are product/technical terms — keep them." }, "settings.troubleshooting.section.title": { - "message": "调试包", + "message": "Debug bundle", "description": "Section heading: Debug bundle." }, "settings.troubleshooting.anonymize.label": { - "message": "匿名化敏感信息", + "message": "Anonymize Sensitive Information", "description": "Label for the anonymization level dropdown (None, Default, Strict)." }, "settings.troubleshooting.anonymize.help": { - "message": "从日志中隐藏公共 IP 地址和非 NetBird 域名。", + "message": "Hides IP addresses, domains, and other sensitive values.", "description": "Helper text under the anonymization dropdown. The level details live in the info tooltip." }, "settings.troubleshooting.anonymize.info": { @@ -1036,135 +1036,135 @@ "description": "Dropdown option: strict anonymization level." }, "settings.troubleshooting.systemInfo.label": { - "message": "包含系统信息", + "message": "Include System Information", "description": "Toggle label: include system information in the bundle." }, "settings.troubleshooting.systemInfo.help": { - "message": "包含操作系统、内核、网络接口和路由表。", + "message": "Include OS, kernel, network interfaces, and routing tables.", "description": "Helper text listing the system info included (OS, kernel, interfaces, routing tables)." }, "settings.troubleshooting.upload.label": { - "message": "将调试包上传到 NetBird 服务器", + "message": "Upload Bundle to NetBird Servers", "description": "Toggle label: upload the bundle to NetBird servers." }, "settings.troubleshooting.upload.help": { - "message": "返回一个上传密钥,供您分享给 NetBird 支持团队。", + "message": "Returns an upload key to share with NetBird support.", "description": "Helper text for uploading the bundle." }, "settings.troubleshooting.trace.label": { - "message": "启用跟踪日志", + "message": "Enable Trace Logs", "description": "Toggle label: raise daemon log level to TRACE while the bundle is built. 'TRACE' is a log level." }, "settings.troubleshooting.trace.help": { - "message": "将日志级别提升到 TRACE,之后再恢复原级别。", + "message": "Raises the log level to TRACE and restores it after.", "description": "Helper text for the trace toggle. 'TRACE' is a log level — keep as-is." }, "settings.troubleshooting.capture.label": { - "message": "捕获会话", + "message": "Capture Session", "description": "Toggle label: open a capture session — reconnect NetBird, wait a duration, optionally record packets." }, "settings.troubleshooting.capture.help": { - "message": "重新连接并等待,以便您复现问题。", + "message": "Reconnects and waits so you can reproduce the issue.", "description": "Helper text for the master Capture Session toggle." }, "settings.troubleshooting.packets.label": { - "message": "捕获网络数据包", + "message": "Capture Network Packets", "description": "Toggle label: capture packets to a .pcap during the capture session." }, "settings.troubleshooting.packets.help": { - "message": "在捕获期间将网络流量保存为 .pcap 文件。", + "message": "Saves a .pcap of network traffic during the capture window.", "description": "Helper text for the packet recording toggle. '.pcap' is a file extension — keep it." }, "settings.troubleshooting.duration.label": { - "message": "捕获时长", + "message": "Capture Duration", "description": "Label for the trace-capture duration field." }, "settings.troubleshooting.duration.help": { - "message": "捕获会话运行的时长。", + "message": "How long the capture session runs.", "description": "Helper text for the capture duration." }, "settings.troubleshooting.duration.suffix": { - "message": "分钟", + "message": "Minute(s)", "description": "Unit suffix after the duration field. The '(s)' marks an optional plural." }, "settings.troubleshooting.create": { - "message": "创建调试包", + "message": "Create Bundle", "description": "Button to create the debug bundle. Keep short." }, "settings.troubleshooting.progress.description": { - "message": "正在收集日志、系统详情和连接状态。这通常只需片刻——请保持此窗口打开,直到完成。", + "message": "Collecting logs, system details, and connection state. This usually takes a moment. You can keep using NetBird or close Settings while it finishes.", "description": "Status text shown while the debug bundle is being collected; reassures the user they can keep using NetBird or close Settings meanwhile." }, "settings.troubleshooting.cancelling": { - "message": "正在取消…", + "message": "Canceling…", "description": "Status shown while cancelling bundle creation. Ends with an ellipsis." }, "settings.troubleshooting.done.uploadedTitle": { - "message": "调试包已成功上传!", + "message": "Debug bundle successfully uploaded!", "description": "Success title after the bundle was uploaded." }, "settings.troubleshooting.done.savedTitle": { - "message": "调试包已保存", + "message": "Bundle saved", "description": "Title shown when the bundle was saved locally (not uploaded)." }, "settings.troubleshooting.done.uploadedDescription": { - "message": "请将下方的上传密钥分享给 NetBird 支持团队。本地也已保存了一份副本。", + "message": "Share the upload key below with NetBird support. A local copy was also saved on your device.", "description": "Body after upload, telling the user to share the upload key with support. '' wraps the inline link to the NetBird support docs — keep the tags exactly and wrap the phrase that means 'NetBird support'." }, "settings.troubleshooting.done.savedDescription": { - "message": "您的调试包已保存在本地。", + "message": "Your debug bundle has been saved locally.", "description": "Body shown when the bundle was only saved locally." }, "settings.troubleshooting.done.copyKey": { - "message": "复制密钥", + "message": "Copy Key", "description": "Button to copy the upload key. Keep short." }, "settings.troubleshooting.done.openFolder": { - "message": "打开文件夹", + "message": "Open Folder", "description": "Button to open the folder containing the bundle. Keep short." }, "settings.troubleshooting.done.openFileLocation": { - "message": "打开文件位置", + "message": "Open file location", "description": "Button to reveal the bundle file in the OS file manager." }, "settings.troubleshooting.uploadFailedWithReason": { - "message": "上传失败:{reason} 调试包仍已保存在本地。", + "message": "Upload failed: {reason} The bundle is still saved locally.", "description": "Shown when upload failed but the bundle was saved locally. {reason} is the server error text; keep it." }, "settings.troubleshooting.uploadFailed": { - "message": "上传失败。调试包仍已保存在本地。", + "message": "Upload failed. The bundle is still saved locally.", "description": "Shown when upload failed (no specific reason) but the bundle was saved locally." }, "settings.troubleshooting.stage.reconnecting": { - "message": "正在重新连接 NetBird…", + "message": "Reconnecting NetBird…", "description": "Progress stage: reconnecting NetBird. Ends with an ellipsis." }, "settings.troubleshooting.stage.capturing": { - "message": "正在捕获调试日志", + "message": "Capturing debug logs", "description": "Progress stage: capturing logs. {elapsed} and {total} are time values (e.g. 0:30 / 2:00); keep both." }, "settings.troubleshooting.stage.bundling": { - "message": "正在生成调试包…", + "message": "Generating debug bundle…", "description": "Progress stage: generating the debug bundle. Ends with an ellipsis." }, "settings.troubleshooting.stage.uploading": { - "message": "正在上传到 NetBird…", + "message": "Uploading to NetBird…", "description": "Progress stage: uploading to NetBird. Ends with an ellipsis." }, "settings.troubleshooting.stage.cancelling": { - "message": "正在取消…", + "message": "Canceling…", "description": "Progress stage: cancelling. Ends with an ellipsis." }, "settings.about.client": { - "message": "NetBird 客户端 v{version}", + "message": "NetBird Client v{version}", "description": "About tab: client product name and version. {version} is a version number; keep it. 'NetBird Client' — keep brand." }, "settings.about.clientName": { - "message": "NetBird 客户端", + "message": "NetBird Client", "description": "About tab: the client product name shown when no version is available. Brand — do not translate." }, "settings.about.development": { - "message": "[开发版]", + "message": "[Development]", "description": "Badge shown next to the version on development builds. Keep the square brackets." }, "settings.about.gui": { @@ -1176,15 +1176,15 @@ "description": "About tab: the UI component name shown without a version. 'GUI' = the graphical app." }, "settings.about.copyright": { - "message": "© {year} NetBird。保留所有权利。", + "message": "© {year} NetBird. All Rights Reserved.", "description": "Copyright line. {year} is the current year; keep it. 'NetBird' — brand." }, "settings.about.links.imprint": { - "message": "法律声明", + "message": "Imprint", "description": "Footer link: Imprint (legal notice / Impressum)." }, "settings.about.links.privacy": { - "message": "隐私", + "message": "Privacy", "description": "Footer link: Privacy policy." }, "settings.about.links.cla": { @@ -1192,7 +1192,7 @@ "description": "Footer link: CLA (Contributor License Agreement). Acronym — keep as-is." }, "settings.about.links.terms": { - "message": "服务条款", + "message": "Terms of Service", "description": "Footer link: Terms of Service." }, "settings.about.community.github": { @@ -1204,103 +1204,103 @@ "description": "Community link: Slack. Brand — do not translate." }, "settings.about.community.forum": { - "message": "论坛", + "message": "Forum", "description": "Community link: Forum." }, "settings.about.community.documentation": { - "message": "文档", + "message": "Documentation", "description": "Community link: Documentation." }, "settings.about.community.feedback": { - "message": "反馈", + "message": "Feedback", "description": "Community link: Feedback." }, "update.banner.message": { - "message": "NetBird {version} 已准备好安装。", + "message": "NetBird {version} is ready to install.", "description": "Update banner text when a new version is ready to install. {version} is the version number; keep it." }, "update.banner.later": { - "message": "稍后", + "message": "Later", "description": "Banner button to postpone the update. Keep short." }, "update.banner.installNow": { - "message": "立即安装", + "message": "Install now", "description": "Banner button to install the update now. Keep short." }, "update.card.versionAvailableDownload": { - "message": "{version} 版本可供下载。", + "message": "Version {version} is available for download.", "description": "Update card text when a version is available to download. {version} is the version number; keep it." }, "update.card.versionAvailableInstall": { - "message": "{version} 版本可供安装。", + "message": "Version {version} is available for install.", "description": "Update card text when a version is available to install. {version} is the version number; keep it." }, "update.card.whatsNew": { - "message": "更新内容?", + "message": "What's new?", "description": "Link / label that opens the release notes." }, "update.card.installNow": { - "message": "立即安装", + "message": "Install Now", "description": "Update card button: install now. Keep short." }, "update.card.getInstaller": { - "message": "下载", + "message": "Download", "description": "Update card button: download the installer." }, "update.card.autoCheckInterval": { - "message": "NetBird 会在后台检查更新。", + "message": "NetBird checks for updates in the background.", "description": "Note that NetBird checks for updates in the background." }, "update.card.changelog": { - "message": "更新日志", + "message": "Changelog", "description": "Link / label: Changelog." }, "update.card.onLatestVersion": { - "message": "您已是最新版本", + "message": "You're on the latest version", "description": "Shown when the client is already up to date." }, "update.header.tooltip": { - "message": "有可用更新", + "message": "Update Available", "description": "Tooltip on the header update badge." }, "update.overlay.updatingVersion": { - "message": "正在将 NetBird 更新到 v{version}", + "message": "Updating NetBird to v{version}", "description": "Heading in the install-progress window while updating to a specific version. {version} is the version number; keep it. The 'v' prefix is part of the version display." }, "update.overlay.updating": { - "message": "正在更新 NetBird", + "message": "Updating NetBird", "description": "Heading in the install-progress window while updating when the target version isn't known." }, "update.overlay.description": { - "message": "有更新的版本可用,正在安装。更新完成后,NetBird 将自动重启。", + "message": "A newer version is available and is being installed. NetBird will restart automatically once the update is finished.", "description": "Install-progress window body explaining NetBird will restart automatically after the update." }, "update.overlay.error.timeoutTitle": { - "message": "更新耗时过长", + "message": "Update Is Taking Too Long", "description": "Install-progress window error title: the update took too long." }, "update.overlay.error.timeoutDescription": { - "message": "安装 {target} 耗时过长,未能完成。", + "message": "Installing {target} took too long and didn't finish.", "description": "Install-progress window error body for a timeout. {target} is the target-version label (see update.overlay.error.targetVersion / targetFallback); keep it." }, "update.overlay.error.canceledTitle": { - "message": "更新已停止", + "message": "Update Was Stopped", "description": "Install-progress window error title: the update was stopped / canceled." }, "update.overlay.error.canceledDescription": { - "message": "对 {target} 的更新在完成前已被取消。", + "message": "The update to {target} was canceled before it finished.", "description": "Install-progress window error body for a canceled update. {target} is the target-version label; keep it." }, "update.overlay.error.failTitle": { - "message": "无法安装更新", + "message": "Couldn't Install the Update", "description": "Install-progress window error title: the update couldn't be installed." }, "update.overlay.error.failDescription": { - "message": "无法安装 {target}。", + "message": "{target} couldn't be installed.", "description": "Install-progress window error body for a failed install. {target} is the target-version label; keep it." }, "update.overlay.error.unknownMessage": { - "message": "未知错误", + "message": "unknown error", "description": "Fallback text for an unspecified error, used inside other messages." }, "update.overlay.error.targetVersion": { @@ -1308,127 +1308,127 @@ "description": "The target-version label substituted into {target}. {version} is a number; keep the 'v' prefix." }, "update.overlay.error.targetFallback": { - "message": "新版本", + "message": "the new version", "description": "Fallback target label used when the version isn't known, substituted into {target}." }, "update.error.loadStateTitle": { - "message": "加载更新状态失败", + "message": "Load Update State Failed", "description": "Error-dialog title when loading update state fails." }, "update.error.triggerTitle": { - "message": "启动更新失败", + "message": "Start Update Failed", "description": "Error-dialog title when starting the update fails." }, "update.page.versionLine": { - "message": "正在将客户端更新到:{version}。", + "message": "Updating client to: {version}.", "description": "Install-progress window text naming the target version. {version} is the version number; keep it." }, "update.page.versionLineGeneric": { - "message": "正在更新客户端。", + "message": "Updating client.", "description": "Install-progress text used when the target version isn't known." }, "update.page.outdated": { - "message": "您的客户端版本早于管理服务器中设置的自动更新版本。", + "message": "Your client version is older than the auto-update version set in Management.", "description": "Note that the client is older than the auto-update version set in Management. 'Management' = the NetBird management server / console." }, "update.page.status.running": { - "message": "正在更新", + "message": "Updating", "description": "Install status: updating." }, "update.page.status.timeout": { - "message": "更新超时。请重试。", + "message": "Update timed out. Please try again.", "description": "Install status: timed out; asks the user to retry." }, "update.page.status.canceled": { - "message": "更新已取消。", + "message": "Update canceled.", "description": "Install status: canceled." }, "update.page.status.failed": { - "message": "更新失败:{message}", + "message": "Update failed: {message}", "description": "Install status: failed. {message} is the error detail; keep it." }, "update.page.status.unknownError": { - "message": "未知的更新错误", + "message": "unknown update error", "description": "Fallback text for an unknown update error, used inside update.page.status.failed." }, "update.page.failedTitle": { - "message": "更新失败", + "message": "Update Failed", "description": "Heading shown when the install failed." }, "update.page.timeoutMessage": { - "message": "更新超时。", + "message": "Update timed out.", "description": "Message shown when the install timed out." }, "update.page.dontClose": { - "message": "请勿关闭此窗口。", + "message": "Please don't close this window.", "description": "Warning asking the user not to close the install window." }, "update.page.updating": { - "message": "正在更新…", + "message": "Updating…", "description": "Short status: updating. Ends with an ellipsis." }, "update.page.complete": { - "message": "更新完成", + "message": "Update complete", "description": "Short status: update complete." }, "update.page.failed": { - "message": "更新失败", + "message": "Update failed", "description": "Short status: update failed." }, "window.title.settings": { - "message": "设置", + "message": "Settings", "description": "OS window-chrome title for the Settings window. The app prefixes it with 'NetBird - '." }, "window.title.signIn": { - "message": "登录", + "message": "Sign-in", "description": "OS window-chrome title for the sign-in window." }, "window.title.sessionExpiration": { - "message": "会话即将过期", + "message": "Session Expiring", "description": "OS window-chrome title for the session-expiration window." }, "window.title.updating": { - "message": "正在更新", + "message": "Updating", "description": "OS window-chrome title for the update / install window." }, "window.title.welcome": { - "message": "欢迎使用 NetBird", + "message": "Welcome to NetBird", "description": "OS window-chrome title for the first-launch welcome window. 'NetBird' — brand." }, "window.title.error": { - "message": "错误", + "message": "Error", "description": "OS window-chrome title for the error window." }, "welcome.title": { - "message": "在托盘中查找 NetBird", + "message": "Look for NetBird in your tray", "description": "Heading on the first onboarding step, pointing the user to the tray icon. Shown on Windows and Linux; macOS uses welcome.titleMac." }, "welcome.titleMac": { - "message": "在菜单栏中查找 NetBird", + "message": "Look for NetBird in your menu bar", "description": "Heading on the first onboarding step on macOS, pointing the user to the menu bar icon. Use your language's Apple term for the macOS menu bar." }, "welcome.description": { - "message": "NetBird 驻留在您的托盘中。点击图标即可连接、切换配置文件或打开设置。", + "message": "NetBird lives in your tray. Click the icon to connect, switch profiles, or open settings.", "description": "Body of the first onboarding step explaining the tray icon. Shown on Windows and Linux; macOS uses welcome.descriptionMac." }, "welcome.descriptionMac": { - "message": "NetBird 驻留在您的菜单栏中。点击图标即可连接、切换配置文件或打开设置。", + "message": "NetBird lives in your menu bar. Click the icon to connect, switch profiles, or open settings.", "description": "Body of the first onboarding step on macOS explaining the menu bar icon. Use your language's Apple term for the macOS menu bar." }, "welcome.continue": { - "message": "继续", + "message": "Continue", "description": "Primary button to advance the onboarding. Keep short." }, "welcome.back": { - "message": "返回", + "message": "Back", "description": "Button to go back a step in onboarding. Keep short." }, "welcome.management.title": { - "message": "设置 NetBird", + "message": "Set up NetBird", "description": "Heading on the onboarding step for choosing a management server." }, "welcome.management.description": { - "message": "点击“继续”即可开始;如果您有自己的 NetBird 服务器,请选择“自托管”。", + "message": "Click Continue to get started, or pick Self-hosted if you have your own NetBird server.", "description": "Body of the management step; mentions choosing Self-hosted if the user runs their own server." }, "welcome.management.cloud.title": { @@ -1436,19 +1436,19 @@ "description": "Option title: NetBird Cloud. Brand — do not translate 'NetBird Cloud'." }, "welcome.management.cloud.description": { - "message": "使用我们的托管服务。无需任何设置。", + "message": "Use our hosted service. No setup required.", "description": "Option body for NetBird Cloud (hosted service, no setup required)." }, "welcome.management.selfHosted.title": { - "message": "自托管", + "message": "Self-hosted", "description": "Option title: Self-hosted." }, "welcome.management.selfHosted.description": { - "message": "连接到您自己的管理服务器。", + "message": "Connect to your own management server.", "description": "Option body for connecting to your own management server." }, "welcome.management.urlLabel": { - "message": "管理服务器 URL", + "message": "Management server URL", "description": "Field label for the management-server URL." }, "welcome.management.urlPlaceholder": { @@ -1456,107 +1456,107 @@ "description": "Example URL placeholder. Sample URL — do not translate it." }, "welcome.management.urlInvalid": { - "message": "请输入有效的 URL,例如:https://netbird.selfhosted.com:443", + "message": "Please enter a valid URL, e.g., https://netbird.selfhosted.com:443", "description": "Validation message for an invalid URL. The example URL stays as-is." }, "welcome.management.urlUnreachable": { - "message": "无法连接到此服务器。请检查 URL 或您的网络,如果确认无误,再继续。", + "message": "Couldn't reach this server. Check the URL or your network, then continue if you're sure it's correct.", "description": "Soft warning when the server couldn't be reached during onboarding; the user may continue anyway." }, "welcome.management.checking": { - "message": "正在检查…", + "message": "Checking…", "description": "Status shown while checking the server URL. Ends with an ellipsis." }, "browserLogin.title": { - "message": "请在浏览器中继续以完成登录", + "message": "Complete login in your browser", "description": "Heading telling the user to finish signing in via their browser." }, "browserLogin.notSeeing": { - "message": "没看到浏览器标签页?", + "message": "We opened a browser tab so you can finish signing in. Not seeing it?", "description": "Prompt asking whether the user doesn't see the opened browser tab." }, "browserLogin.tryAgain": { - "message": "重试", + "message": "Try again", "description": "Button to re-open the browser sign-in page. Keep short." }, "browserLogin.openFailedTitle": { - "message": "打开浏览器失败", + "message": "Open Browser Failed", "description": "Error-dialog title when the browser couldn't be opened." }, "sessionExpiration.title": { - "message": "会话即将过期", + "message": "Session expiring soon", "description": "Heading warning the session will expire soon." }, "sessionExpiration.titleLater": { - "message": "您的会话即将过期", + "message": "Your session will expire", "description": "Alternate, less-urgent heading: the session will expire." }, "sessionExpiration.description": { - "message": "此设备即将断开连接。通过浏览器登录进行续期。", + "message": "This device will disconnect soon. Renew with a browser sign-in.", "description": "Body warning the device will disconnect soon; renew via a browser sign-in." }, "sessionExpiration.descriptionLater": { - "message": "通过浏览器登录可让此设备保持连接到您的网络。", + "message": "A browser sign-in keeps this device connected to your network.", "description": "Body for the less-urgent variant; a browser sign-in keeps the device connected." }, "sessionExpiration.stay": { - "message": "续期会话", + "message": "Renew session", "description": "Button to renew the session (keep connected). Keep short." }, "sessionExpiration.authenticate": { - "message": "进行身份验证", + "message": "Authenticate", "description": "Button to authenticate / sign in. Keep short." }, "sessionExpiration.logout": { - "message": "退出登录", + "message": "Logout", "description": "Button to log out. Keep short." }, "sessionExpiration.expired": { - "message": "会话已过期", + "message": "Session expired", "description": "Heading shown once the session has actually expired." }, "sessionExpiration.expiredDescription": { - "message": "设备已断开连接。通过浏览器登录进行身份验证以重新连接。", + "message": "Device disconnected. Authenticate with a browser sign-in to reconnect.", "description": "Body shown after expiry; authenticate via a browser sign-in to reconnect." }, "sessionExpiration.close": { - "message": "关闭", + "message": "Close", "description": "Close button on the session window. Keep short." }, "sessionExpiration.extendFailedTitle": { - "message": "延长会话失败", + "message": "Extend Session Failed", "description": "Error-dialog title when extending the session fails." }, "sessionExpiration.logoutFailedTitle": { - "message": "退出登录失败", + "message": "Logout Failed", "description": "Error-dialog title when logging out fails." }, "peers.search.placeholder": { - "message": "按名称或 IP 搜索", + "message": "Search by name or IP", "description": "Placeholder in the peers search field." }, "peers.filter.all": { - "message": "全部", + "message": "All", "description": "Peers filter option: All. Keep short." }, "peers.filter.online": { - "message": "在线", + "message": "Online", "description": "Peers filter option: Online. Keep short." }, "peers.filter.offline": { - "message": "离线", + "message": "Offline", "description": "Peers filter option: Offline. Keep short." }, "peers.empty.title": { - "message": "无可用的对等节点", + "message": "No peers available", "description": "Title of the empty state when no peers are available." }, "peers.empty.description": { - "message": "您可能没有任何可用的对等节点,或者无权访问其中任何一个。", + "message": "You either don't have any peers available or have no access to any of them.", "description": "Body of the no-peers empty state." }, "peers.details.domain": { - "message": "域名", + "message": "Domain", "description": "Peer detail label: Domain." }, "peers.details.netbirdIp": { @@ -1568,79 +1568,79 @@ "description": "Peer detail label: NetBird IPv6 address. Keep 'NetBird' and 'IPv6'." }, "peers.details.publicKey": { - "message": "公钥", + "message": "Public key", "description": "Peer detail label: WireGuard public key." }, "peers.details.connection": { - "message": "连接", + "message": "Connection", "description": "Peer detail label: Connection." }, "peers.details.latency": { - "message": "延迟", + "message": "Latency", "description": "Peer detail label: Latency." }, "peers.details.lastHandshake": { - "message": "上次握手", + "message": "Last handshake", "description": "Peer detail label: time of the last WireGuard handshake." }, "peers.details.statusSince": { - "message": "上次连接更新", + "message": "Last connection update", "description": "Peer detail label: time since the last connection-status update." }, "peers.details.bytes": { - "message": "字节", + "message": "Bytes", "description": "Peer detail label: Bytes (data transferred)." }, "peers.details.bytesSent": { - "message": "已发送", + "message": "Sent", "description": "Peer detail label: bytes sent." }, "peers.details.bytesReceived": { - "message": "已接收", + "message": "Received", "description": "Peer detail label: bytes received." }, "peers.details.localIce": { - "message": "本地 ICE", + "message": "Local ICE", "description": "Peer detail label: local ICE candidate. 'ICE' — keep acronym." }, "peers.details.remoteIce": { - "message": "远程 ICE", + "message": "Remote ICE", "description": "Peer detail label: remote ICE candidate. 'ICE' — keep acronym." }, "peers.details.never": { - "message": "从不", + "message": "Never", "description": "Value shown when an event has never happened (e.g. last handshake = Never)." }, "peers.details.justNow": { - "message": "刚刚", + "message": "Just now", "description": "Relative-time value meaning a moment ago." }, "peers.details.refresh": { - "message": "刷新", + "message": "Refresh", "description": "Button to refresh peer details. Keep short." }, "peers.status.connected": { - "message": "已连接", + "message": "Connected", "description": "Peer status: connected." }, "peers.status.connecting": { - "message": "正在连接", + "message": "Connecting", "description": "Peer status: connecting." }, "peers.status.disconnected": { - "message": "已断开连接", + "message": "Disconnected", "description": "Peer status: disconnected." }, "peers.details.relayAddress": { - "message": "中继", + "message": "Relay", "description": "Peer detail label: Relay (relay-server address)." }, "peers.details.networks": { - "message": "资源", + "message": "Resources", "description": "Peer detail label for the peer's network resources. Labelled 'Resources' in the UI." }, "peers.details.relayed": { - "message": "经中继", + "message": "Relayed", "description": "Connection-type value: the connection is relayed (not direct). Technical term." }, "peers.details.p2p": { @@ -1648,155 +1648,155 @@ "description": "Connection-type value: peer-to-peer (direct). 'P2P' — keep as-is." }, "peers.details.rosenpass": { - "message": "已启用 Rosenpass", + "message": "Rosenpass enabled", "description": "Peer detail indicating Rosenpass (quantum-resistance) is enabled. 'Rosenpass' — product name, do not translate." }, "networks.search.placeholder": { - "message": "按网络或域名搜索", + "message": "Search by network or domain", "description": "Placeholder in the resources search field." }, "networks.filter.all": { - "message": "全部", + "message": "All", "description": "Resources filter: All. Keep short." }, "networks.filter.active": { - "message": "活动", + "message": "Active", "description": "Resources filter: Active. Keep short." }, "networks.filter.overlapping": { - "message": "重叠", + "message": "Overlapping", "description": "Resources filter: Overlapping (overlapping IP ranges). Keep short." }, "networks.empty.title": { - "message": "无可用资源", + "message": "No resources available", "description": "Title of the empty state when no resources are available." }, "networks.empty.description": { - "message": "您可能没有任何可用的网络资源,或者无权访问其中任何一个。", + "message": "You either don't have any network resources available or have no access to any of them.", "description": "Body of the no-resources empty state." }, "networks.selected": { - "message": "已选择", + "message": "Selected", "description": "Label / badge: the resource is selected (enabled)." }, "networks.unselected": { - "message": "未选择", + "message": "Not selected", "description": "Label / badge: the resource is not selected." }, "networks.ips.heading": { - "message": "已解析的 IP", + "message": "Resolved IPs", "description": "Heading for the list of a resource's resolved IP addresses." }, "networks.bulk.selectionCount": { - "message": "{total} 个中已激活 {selected} 个", + "message": "{selected} of {total} Active", "description": "Header showing how many resources are active. {selected} and {total} are numbers; keep both." }, "networks.bulk.enableAll": { - "message": "全部启用", + "message": "Enable all", "description": "Button to enable all resources. Keep short." }, "networks.bulk.disableAll": { - "message": "全部禁用", + "message": "Disable all", "description": "Button to disable all resources. Keep short." }, "exitNodes.search.placeholder": { - "message": "搜索出口节点", + "message": "Search exit nodes", "description": "Placeholder in the exit-nodes search field." }, "exitNodes.none": { - "message": "无", + "message": "None", "description": "Option meaning no exit node. Keep short." }, "exitNodes.empty.title": { - "message": "无可用的出口节点", + "message": "No exit nodes available", "description": "Title of the empty state when no exit nodes are available." }, "exitNodes.empty.description": { - "message": "尚未向此对等节点共享任何出口节点。", + "message": "No exit nodes have been shared with this peer.", "description": "Body of the no-exit-nodes empty state." }, "exitNodes.card.title": { - "message": "出口节点", + "message": "Exit Node", "description": "Card heading: Exit Node." }, "exitNodes.card.statusActive": { - "message": "活动", + "message": "Active", "description": "Exit node card status: Active." }, "exitNodes.card.statusInactive": { - "message": "非活动", + "message": "Inactive", "description": "Exit node card status: Inactive." }, "exitNodes.dropdown.noneTitle": { - "message": "无", + "message": "None", "description": "Dropdown option title: None (no exit node)." }, "exitNodes.dropdown.noneDescription": { - "message": "不使用出口节点的直接连接", + "message": "Direct connection without an exit node", "description": "Dropdown option body for None: direct connection without an exit node." }, "quickActions.connect": { - "message": "连接", + "message": "Connect", "description": "Quick-action button: Connect. Keep short." }, "quickActions.disconnect": { - "message": "断开连接", + "message": "Disconnect", "description": "Quick-action button: Disconnect. Keep short." }, "daemon.unavailable.title": { - "message": "NetBird 服务未运行", + "message": "NetBird Service Is Not Running", "description": "Title of the overlay shown when the NetBird background service isn't running." }, "daemon.unavailable.description": { - "message": "服务运行后,应用将自动重新连接。", + "message": "The app will reconnect automatically once the service is running.", "description": "Body reassuring the user the app will reconnect once the service is running." }, "daemon.unavailable.docsLink": { - "message": "文档", + "message": "Documentation", "description": "Documentation link on the daemon-unavailable overlay." }, "daemon.outdated.title": { - "message": "NetBird 客户端版本过旧", + "message": "NetBird Client Is Outdated", "description": "Title of the overlay shown when the NetBird client (daemon) is too old to drive this UI." }, "daemon.outdated.description": { - "message": "新版 GUI 与您较旧的客户端不兼容。请更新客户端以使用新应用。", + "message": "The new GUI isn't compatible with the older NetBird client. Update your client to use the new application.", "description": "Body of the daemon-outdated overlay explaining that the GUI is newer than the client and the client must be updated." }, "daemon.outdated.download": { - "message": "下载最新版本", + "message": "Download Latest", "description": "Button on the daemon-outdated overlay that opens the download page for the latest release." }, "error.jwt_clock_skew": { - "message": "登录失败:此设备的时钟与服务器不同步。请同步您的系统时钟后重试。", + "message": "Sign-in failed: this device's clock is out of sync with the server. Please sync your system clock and try again.", "description": "Sign-in error shown to the user: the device clock is out of sync with the server." }, "error.jwt_expired": { - "message": "您的登录令牌已过期。请重新登录。", + "message": "Your sign-in token has expired. Please sign in again.", "description": "Sign-in error: the sign-in token expired; sign in again." }, "error.jwt_signature_invalid": { - "message": "登录失败:令牌签名无效。请联系您的管理员。", + "message": "Sign-in failed: the token signature is invalid. Please contact your administrator.", "description": "Sign-in error: the token signature is invalid; contact the administrator." }, "error.session_expired": { - "message": "您的会话已过期。请重新登录。", + "message": "Your session has expired. Please sign in again.", "description": "Error: the session expired; sign in again." }, "error.invalid_setup_key": { - "message": "设置密钥缺失或无效。", + "message": "The setup key is missing or invalid.", "description": "Error: the setup key is missing or invalid. 'setup key' is a NetBird term." }, "error.permission_denied": { - "message": "登录被服务器拒绝。", + "message": "Sign-in was rejected by the server.", "description": "Error: the server rejected the sign-in." }, "error.daemon_unreachable": { - "message": "NetBird 守护进程无响应。请检查服务是否正在运行。", + "message": "The NetBird daemon is not responding. Please check that the service is running.", "description": "Error: the NetBird background service isn't responding. 'daemon' = the background service." }, "error.unknown": { - "message": "操作失败。", + "message": "Operation failed.", "description": "Generic fallback error message used when no specific error applies." }, "settings.ssh.privilege.hint": {