From eaac12ddc8a0b5a40b3a4a28c004151c905d5ca2 Mon Sep 17 00:00:00 2001 From: Donald Zou Date: Sun, 3 Nov 2024 17:36:03 +0800 Subject: [PATCH] Update both Chinese languague --- src/dashboard.py | 8 +- .../configurationComponents/peer.vue | 2 +- .../settingsComponent/dashboardLanguage.vue | 2 +- src/static/app/src/test.py | 17 -- src/static/locale/zh-CN.json | 14 +- src/static/locale/zh-HK.json | 208 ++++++++++++------ 6 files changed, 155 insertions(+), 96 deletions(-) delete mode 100644 src/static/app/src/test.py diff --git a/src/dashboard.py b/src/dashboard.py index 3c15b90..0511708 100644 --- a/src/dashboard.py +++ b/src/dashboard.py @@ -760,7 +760,7 @@ class WireguardConfiguration: return ResponseObject(False, "Failed to save configuration through WireGuard") self.__getPeers() - return ResponseObject(True, "Allow access successfully!") + return ResponseObject(True, "Allow access successfully") def restrictPeers(self, listOfPublicKeys): numOfRestrictedPeers = 0 @@ -1049,7 +1049,7 @@ class WireguardConfiguration: with open(os.path.join(DashboardConfig.GetConfig("Server", "wg_conf_path")[1], f'{self.Name}.conf'), 'r') as f: original = f.readlines() original = [l.rstrip("\n") for l in original] - allowEdit = ["Address", "PreUp", "PostUp", "PreDown", "PostDown", "ListenPost", "PrivateKey"] + allowEdit = ["Address", "PreUp", "PostUp", "PreDown", "PostDown", "ListenPost"] start = original.index("[Interface]") for line in range(start+1, len(original)): if original[line] == "[Peer]": @@ -1733,7 +1733,6 @@ def API_addWireguardConfiguration(): "Address") if "Backup" in data.keys(): - if not os.path.exists(os.path.join( DashboardConfig.GetConfig("Server", "wg_conf_path")[1], 'WGDashboard_Backup', @@ -1769,7 +1768,6 @@ def API_updateWireguardConfiguration(): for i in requiredKeys: if i not in data.keys(): return ResponseObject(False, "Please provide these following field: " + ", ".join(requiredKeys)) - name = data.get("Name") if name not in WireguardConfigurations.keys(): return ResponseObject(False, "Configuration does not exist") @@ -2080,7 +2078,7 @@ def API_addPeers(configName): config = WireguardConfigurations.get(configName) if not bulkAdd and (len(public_key) == 0 or len(allowed_ips) == 0): - return ResponseObject(False, "Please provide at lease public_key and allowed_ips") + return ResponseObject(False, "Please provide at least public_key and allowed_ips") if not config.getStatus(): config.toggleConfiguration() diff --git a/src/static/app/src/components/configurationComponents/peer.vue b/src/static/app/src/components/configurationComponents/peer.vue index 5811003..af9b3a3 100644 --- a/src/static/app/src/components/configurationComponents/peer.vue +++ b/src/static/app/src/components/configurationComponents/peer.vue @@ -67,7 +67,7 @@ export default {
- Public Key + {{Peer.id}} diff --git a/src/static/app/src/components/settingsComponent/dashboardLanguage.vue b/src/static/app/src/components/settingsComponent/dashboardLanguage.vue index 32dfaae..fa35176 100644 --- a/src/static/app/src/components/settingsComponent/dashboardLanguage.vue +++ b/src/static/app/src/components/settingsComponent/dashboardLanguage.vue @@ -29,7 +29,7 @@ export default { this.store.Configuration.Server.dashboard_language = lang_id; this.store.Locale = res.data }else{ - this.store.newMessage("Server", "Dashboard language update failed", "danger") + this.store.newMessage("Server", "WGDashboard language update failed", "danger") } }) } diff --git a/src/static/app/src/test.py b/src/static/app/src/test.py deleted file mode 100644 index d79eb94..0000000 --- a/src/static/app/src/test.py +++ /dev/null @@ -1,17 +0,0 @@ -import subprocess - - -def _generateKeyPairs(amount: int) -> list[list[str]] | None: - try: - pairs = subprocess.check_output( - f'''for ((i = 0 ; i<{amount} ; i++ ));do privateKey=$(wg genkey) presharedKey=$(wg genkey) publicKey=$(wg pubkey <<< "$privateKey") echo "$privateKey,$publicKey,$presharedKey"; done''', shell=True, stderr=subprocess.STDOUT - ) - pairs = pairs.decode().split("\n") - print(pairs) - return [x.split(",") for x in pairs] - except subprocess.CalledProcessError as exp: - print(str(exp)) - return [] - - -_generateKeyPairs(20) \ No newline at end of file diff --git a/src/static/locale/zh-CN.json b/src/static/locale/zh-CN.json index 39b6acd..9966d5b 100644 --- a/src/static/locale/zh-CN.json +++ b/src/static/locale/zh-CN.json @@ -296,5 +296,17 @@ "Download Finished": "下载完成", "Done": "完成", "Are you sure to delete": "您确定要删除", - "Are you sure to delete this peer\\?": "您确定要删除此端点吗?" + "Are you sure to delete this peer\\?": "您确定要删除此端点吗?", + "Configuration deleted": "配置删除成功", + "Configuration saved": "", + "WGDashboard language update failed": "WGDashboard 语言更新失败", + "Configuration restored": "配置恢复成功", + "Allowed IP already taken by another peer": "允许的 IP 地址已经被别的端点占用", + "Failed to allow access of peer (.*)": "此端点解除限制访问失败:$1", + "Failed to save configuration through WireGuard": "使用 WireGuard 保存配置失败", + "Allow access successfully": "解除限制访问成功", + "Deleted ([0-9]{1,}) peer\\(s\\)": "删除了$1个端点", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "成功删除了$1个端点,失败删除了$2个端点", + "Restricted ([0-9]{1,}) peer\\(s\\)": "限制访问了$1个端点", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "成功限制访问了$1个端点,失败限制访问了$2个端点" } \ No newline at end of file diff --git a/src/static/locale/zh-HK.json b/src/static/locale/zh-HK.json index 921a980..e71edc5 100644 --- a/src/static/locale/zh-HK.json +++ b/src/static/locale/zh-HK.json @@ -3,76 +3,76 @@ "Username": "用戶名", "Password": "密碼", "OTP from your authenticator": "您多重身份驗證器的一次性驗證碼", - "Sign In": "登錄", - "Signing In\\.\\.\\.": "正在登錄...", - "Access Remote Server": "訪問遠程服務器", - "Server": "服務器", + "Sign In": "登入", + "Signing In\\.\\.\\.": "正在登入...", + "Access Remote Server": "訪問遠端伺服器", + "Server": "伺服器", "Click": "點擊", - "Pinging...": "嘗試連接中...", - "to add your server": "添加您的服務器", - "Server List": "服務器列表", + "Pinging...": "嘗試連線中...", + "to add your server": "添加您的伺服器", + "Server List": "伺服器列表", "Sorry, your username or password is incorrect.": "對不起,您的用戶名或密碼不正確", "Home": "主頁", "Settings": "設定", "Tools": "工具箱", - "Sign Out": "退出登錄", + "Sign Out": "登出", "Checking for update...": "正在檢查是否有新版本...", "You're on the latest version": "已經是最新版本", "WireGuard Configurations": "WireGuard 配置", - "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "您還沒有任何WireGuard配置。請檢查您的配置文件夾或前往設置更改路徑。默認文件夾是 /etc/wireguard", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "您還沒有任何WireGuard配置。請檢查您的配置資料夾或前往設定更改路徑。預設資料夾是 /etc/wireguard", "Configuration": "配置", "Configurations": "配置", - "Peers Default Settings": "端點默認設置", + "Peers Default Settings": "端點預設設定", "Dashboard Theme": "面板主題", "Light": "簡約白", "Dark": "簡約黑", - "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "更改這個設定會應用到所有端點的配置文件和配置二維碼", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "更改這個設定會應用到所有端點的配置檔案和配置二維碼", "WireGuard Configurations Settings": "WireGuard 配置設定", - "Configurations Directory": "配置文件路徑", - "Remember to remove / at the end of your path. e.g /etc/wireguard": "請把路徑最後的 /(左斜槓)移除,例如:/etc/wireguard", - "WGDashboard Account Settings": "WGDashboard 賬戶設定", + "Configurations Directory": "配置檔案路徑", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "請把路徑最後的 /(左斜杠)移除,例如:/etc/wireguard", + "WGDashboard Account Settings": "WGDashboard 帳戶設定", "Current Password": "當前密碼", "New Password": "新密碼", - "Repeat New Password": "重復新密碼", + "Repeat New Password": "重複新密碼", "Update Password": "更新密碼", "Multi-Factor Authentication \\(MFA\\)": "多重身份驗證 (MFA)", "Reset": "重置", - "Setup": "設置", - "API Keys": "API 秘鑰", - "API Key": "API 秘鑰", - "Key": "秘鑰", - "Enabled": "已啓用", + "Setup": "設定", + "API Keys": "API 金鑰", + "API Key": "API 金鑰", + "Key": "金鑰", + "Enabled": "已啟用", "Disabled": "已停用", - "No WGDashboard API Key": "沒有 WGDashboard API 秘鑰", + "No WGDashboard API Key": "沒有 WGDashboard API 金鑰", "Expire At": "過期於", - "Are you sure to delete this API key\\?": "確定刪除此 API 秘鑰?", - "Create API Key": "創建 API 秘鑰", - "When should this API Key expire\\?": "這個 API 秘鑰什麼時候過期呢?", - "Never Expire": "從不過期", + "Are you sure to delete this API key\\?": "確定刪除此 API 金鑰?", + "Create API Key": "建立 API 金鑰", + "When should this API Key expire\\?": "這個 API 金鑰什麼時候過期呢?", + "Never Expire": "永不過期", "Don't think that's a good idea": "我不覺得這是一個好主意", - "Creating\\.\\.\\.": "創建中...", - "Create": "創建", + "Creating\\.\\.\\.": "建立中...", + "Create": "建立", "Status": "狀態", - "On": "已啓用", + "On": "已啟用", "Off": "已停用", - "Turning On\\.\\.\\.": "啓用中...", + "Turning On\\.\\.\\.": "啟用中...", "Turning Off\\.\\.\\.": "停用中...", - "Address": "網絡地址", + "Address": "網路地址", "Listen Port": "監聽端口", "Public Key": "公鑰", - "Connected Peers": "已連接端點", + "Connected Peers": "已連線端點", "Total Usage": "總數據用量", "Total Received": "總接收數據用量", - "Total Sent": "總發送數據用量", + "Total Sent": "總傳送數據用量", "Peers Data Usage": "端點的數據用量", "Real Time Received Data Usage": "實時接收數據量", - "Real Time Sent Data Usage": "實時發送數據量", + "Real Time Sent Data Usage": "實時傳送數據量", "Peer": "端點", "Peers": "端點", "Peer Settings": "端點設定", "Download All": "全部下載", "Search Peers\\.\\.\\.": "搜索端點...", - "Display": "顯示設置", + "Display": "顯示設定", "Sort By": "排列方式", "Refresh Interval": "刷新間隔", "Name": "名稱", @@ -82,21 +82,21 @@ "(.*) Minutes": "$1 分鐘", "Configuration Settings": "配置設定", "Peer Jobs": "端點任務", - "Active Jobs": "未運行任務", - "All Active Jobs": "所有未運行任務", + "Active Jobs": "未執行任務", + "All Active Jobs": "所有未執行任務", "Logs": "日誌", - "Private Key": "秘鑰", - "\\(Required for QR Code and Download\\)": "(二維碼以及下載功能需要填寫秘鑰)", + "Private Key": "金鑰", + "\\(Required for QR Code and Download\\)": "(二維碼以及下載功能需要填寫金鑰)", "\\(Required\\)": "(必填項)", "Endpoint Allowed IPs": "終結點允許的 IP 地址", "DNS": "域名系統(DNS)", "Optional Settings": "可選設定", - "Pre-Shared Key": "共享秘鑰", + "Pre-Shared Key": "共享金鑰", "MTU": "最大傳輸單元", "Persistent Keepalive": "持久保持活動", "Reset Data Usage": "重置數據用量", "Total": "總數據", - "Sent": "發送數據", + "Sent": "傳送數據", "Received": "接收數據", "Revert": "撤銷更改", "Save Peer": "保存端點", @@ -118,7 +118,7 @@ "Deleting...": "刪除中...", "Cancel": "取消", "Save": "保存", - "No active job at the moment\\.": "沒有未運行的任務", + "No active job at the moment\\.": "沒有未執行的任務", "Jobs Logs": "任務日誌", "Updated at": "更新於", "Refresh": "刷新", @@ -128,7 +128,7 @@ "Log ID": "任務 ID", "Message": "消息", "Share Peer": "分享端點", - "Currently the peer is not sharing": "此端點未被共享", + "Currently the peer is not sharing": "此端點未被分享", "Sharing\\.\\.\\.": "分享中...", "Start Sharing": "開始分享", "Stop Sharing\\.\\.\\.": "停止分享中...", @@ -138,27 +138,27 @@ "Restricting\\.\\.\\.": "限制訪問中...", "Allow Access": "解除限制訪問", "Allowing Access\\.\\.\\.": "解除限制訪問中...", - "Download \\& QR Code is not available due to no private key set for this peer": "下載以及二維碼功能不可用,需要填寫此端點的秘鑰", - "Add Peers": "創建端點", + "Download \\& QR Code is not available due to no private key set for this peer": "下載以及二維碼功能不可用,需要填寫此端點的金鑰", + "Add Peers": "建立端點", "Bulk Add": "批量添加", "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "如果選擇批量添加端點,系統會自動生成每一個端點的名稱,並且會自動安排可用的 IP 地址。", "How many peers you want to add\\?": "您想添加多少個端點?", "You can add up to (.*) peers": "您最多可以添加 $1 個端點", - "Use your own Private and Public Key": "使用您自己的秘鑰和公鑰", + "Use your own Private and Public Key": "使用您自己的金鑰和公鑰", "Enter IP Address/CIDR": "輸入 IP 地址/前綴長度", "IP Address/CIDR": "IP 地址/前綴長度", "or": "或", "Pick Available IP": "選擇可用的 IP 地址", "No available IP containing": "沒有可用的 IP 地址含有 ", - "Add": "創建", - "Adding\\.\\.\\.": "創建中...", + "Add": "建立", + "Adding\\.\\.\\.": "建立中...", "Failed to check available update": "獲取更新失敗", "Nice to meet you!": "很高興見到您!", - "Please fill in the following fields to finish setup": "請填入以下信息來完成初始化設置", - "Create an account": "創建賬戶", + "Please fill in the following fields to finish setup": "請填入以下信息來完成初始化設定", + "Create an account": "建立帳戶", "Enter an username you like": "輸入一個您喜歡的用戶名", "Enter a password": "輸入密碼", - "\\(At least 8 characters and make sure is strong enough!\\)": "(至少8個字符或以上並且確保它足夠複雜喲!)", + "\\(At least 8 characters and make sure is strong enough!\\)": "(至少8個字符或以上並且確保它足夠複雜哟!)", "Confirm password": "確認密碼", "Next": "下一步", "Saving\\.\\.\\.": "保存中...", @@ -173,18 +173,18 @@ "Oh no\\.\\.\\. This link is either expired or invalid\\.": "噢不!此鏈接已過期或不正確。", "Scan QR Code with the WireGuard App to add peer": "使用 WireGuard APP 掃描以下二維碼來添加端點", "or click the button below to download the ": "或點擊下面的按鈕下載 ", - " file": " 文件", + " file": " 檔案", "FROM ": "來自 ", - "(.*) is on": "$1 已啓用", + "(.*) is on": "$1 已啟用", "(.*) is off": "$1 已停用", "Allowed IPs is invalid": "允許的 IP 地址錯誤", - "Peer created successfully": "成功創建端點", + "Peer created successfully": "成功建立端點", "Please fill in all required box": "請填寫所有必填項", "Please specify amount of peers you want to add": "請提供批量添加端點的數量", "No more available IP can assign": "沒有更多可用的 IP 可以分配了", "The maximum number of peers can add is (.*)": "最多只能添加$1個端點", - "Generating key pairs by bulk failed": "生成公鑰秘鑰失敗了", - "Failed to add peers in bulk": "批量創建端點失敗", + "Generating key pairs by bulk failed": "生成公鑰金鑰失敗了", + "Failed to add peers in bulk": "批量建立端點失敗", "This peer already exist": "此端點已存在", "This IP is not available: (.*)": "此 IP 地址不可用:$1", "Configuration does not exist": "此配置不存在", @@ -196,12 +196,12 @@ "DNS format is incorrect": "域名系統(DNS)格式不正確", "MTU format is not correct": "最大傳輸單元格式不正確", "Persistent Keepalive format is not correct": "持久保持活動格式不正確", - "Private key does not match with the public key": "秘鑰與公鑰不匹配", + "Private key does not match with the public key": "金鑰與公鑰不匹配", "Update peer failed when updating Pre-Shared Key": "更新共享密鑰失敗", "Update peer failed when updating Allowed IPs": "更新允許的 IP 地址失敗", "Update peer failed when saving the configuration": "配置保存端點失敗", "Peer data usage reset successfully": "端點數據重置成功", - "Peer download started": "端點文件下載開始", + "Peer download started": "端點檔案下載開始", "Please specify one or more peers": "請提供一個或更多端點", "Share link failed to create. Reason: (.*)": "端點分享鏈接生成失敗。原因:$1", "Link expire date updated": "分享鏈接過期時間更新成功", @@ -210,15 +210,15 @@ "Please specify job": "請提供任務", "Please specify peer and configuration": "請提供配置名稱以及端點", "Peer job deleted": "端點任務刪除成功", - "API Keys function is successfully enabled": "API 秘鑰功能開啓成功", - "API Keys function is successfully disabled": "API 秘鑰功能停用成功", - "API Keys function is failed to enable": "API 秘鑰功能開啓失敗", - "API Keys function is failed to disable": "API 秘鑰功能停用失敗", - "WGDashboard API Keys function is disabled": "WGDashboard 的 API 秘鑰功能並未開啓", + "API Keys function is successfully enabled": "API 金鑰功能開啟成功", + "API Keys function is successfully disabled": "API 金鑰功能停用成功", + "API Keys function is failed to enable": "API 金鑰功能開啟失敗", + "API Keys function is failed to disable": "API 金鑰功能停用失敗", + "WGDashboard API Keys function is disabled": "WGDashboard 的 API 金鑰功能並未開啟", "WireGuard configuration path saved": "WireGuard 配置路徑保存成功", - "API Key deleted": "API 秘鑰刪除成功", - "API Key created": "API 秘鑰創建成功", - "Sign in session ended, please sign in again": "登錄已過期,請重新登錄", + "API Key deleted": "API 金鑰刪除成功", + "API Key created": "API 金鑰建立成功", + "Sign in session ended, please sign in again": "登入已過期,請重新登入", "Please specify an IP Address (v4/v6)": "請提供一個 IP 地址 (v4或v6)", "Please provide ipAddress and count": "請提供 ipAddress 和 count", "Please provide ipAddress": "請提供 ipAddress", @@ -229,18 +229,84 @@ "Configuration Name": "配置名稱", "Configuration name is invalid. Possible reasons:": "配置名稱不正確。可能的原因:", "Configuration name already exist\\.": "配置名稱已存在。", - "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "配置名稱只能含有15個小/大寫英文字母,數字,下划線,等於號,加號,小數點或短橫線。", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "配置名稱只能含有15個小/大寫英文字母,數字,下劃線,等於號,加號,小數點或短橫線。", "Invalid Port": "錯誤的端口", "Save Configuration": "保存配置", "IP Address/CIDR is invalid": "IP 地址/前綴長度格式錯誤", "IP Address": "IP 地址", - "Enter IP Address / Hostname": "输入 IP 地址 / 域名", + "Enter IP Address / Hostname": "輸入 IP 地址 / 域名", "IP Address / Hostname": "IP 地址 / 域名", + "Dashboard IP Address \\& Listen Port": "面板 IP地址 & 監聽端口", "Count": "數量", "Geolocation": "地理位置", "Is Alive": "在線", - "Average / Min / Max Round Trip Time": "平均 / 最低 / 最高來回通信延遲", - "Sent / Received / Lost Package": "發送 / 接收 / 遺失數據包", - "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "更改 IP 位址或監聽埠後需要手動重新啟動 WGDashboard 以使用最新的設置" - + "Average / Min / Max Round Trip Time": "平均 / 最低 / 最高來回通訊延遲", + "Sent / Received / Lost Package": "傳送 / 接收 / 丟失數據包", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "更改 IP 地址或監聽端口後需要手動重啟 WGDashboard 以使用最新的設定", + "Restore Configuration": "恢復配置", + "Step (.*)": "第$1步", + "Select a backup you want to restore": "選擇一個您想恢復的配置", + "Click to change a backup": "點擊更換備份", + "Selected Backup": "已選擇備份", + "You don't have any configuration to restore": "您沒有任何配置備份可以恢復", + "Help": "幫助", + "Backup": "備份", + "([0-9].*) Backups?": "$1個備份", + "Yes": "是", + "No": "否", + "Backup not selected": "沒有選擇備份", + "Confirm \\& edit restore information": "確認和編輯備份信息", + "(.*) Available IP Address": "$1個可用的 IP 地址", + "Database File": "資料庫檔案", + "Contain": "含有", + "Restricted Peers?": "已限制訪問端點", + "Restore": "恢復", + "Restoring": "恢復中...", + "WGDashboard Settings": "WGDashboard 設定", + "Peers Settings": "端點設定", + "WireGuard Configuration Settings": "WireGuard 配置設定", + "Appearance": "外觀", + "Theme": "主題", + "Language": "語言", + "Account Settings": "帳戶設定", + "Peer Default Settings": "端點預設設定", + "Toggle When Start Up": "運行後啟動配置", + "Other Settings": "其它設定", + "Select Peers": "選擇端點", + "Backup & Restore": "備份及恢復", + "Delete Configuration": "刪除配置", + "Create Backup": "建立備份", + "No backup yet, click the button above to create backup\\.": "還沒有任何備份,點擊上方按鈕建立", + "Are you sure to delete this backup\\?": "您確定要刪除此備份嗎?", + "Are you sure to restore this backup?\\": "您確定要恢復此備份嗎?", + "Backup Date": "備份日期", + "File": "檔案", + "Are you sure to delete this configuration\\?": "您確定要刪除此配置嗎?", + "Once you deleted this configuration\\:": "當您刪除了此配置後:", + "All connected peers will get disconnected": "所有已連線的端點會斷開", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "配置檔案 (.conf) 以及相關的資料庫檔案會被刪除", + "Checking backups...": "檢查備份中...", + "This configuration have ([0-9].*) backups": "此配置有$1個備份", + "This configuration have no backup": "此配置沒有備份", + "If you're sure, please type in the configuration name below and click Delete": "如果您確定,請在下方輸入此配置的名稱並點擊刪除", + "Select All": "選擇所有", + "Clear Selection": "清除選擇", + "([0-9].*) Peers?": "$1 個端點", + "Downloading": "正在下載", + "Download Finished": "下載完成", + "Done": "完成", + "Are you sure to delete": "您確定要刪除", + "Are you sure to delete this peer\\?": "您確定要刪除此端點嗎?", + "Configuration deleted": "配置刪除成功", + "Configuration saved": "", + "WGDashboard language update failed": "WGDashboard 語言更新失敗", + "Configuration restored": "配置恢復成功", + "Allowed IP already taken by another peer": "允許的 IP 地址已經被別的端點佔用", + "Failed to allow access of peer (.*)": "此端點解除限制訪問失敗:$1", + "Failed to save configuration through WireGuard": "使用 WireGuard 保存配置失敗", + "Allow access successfully": "解除限制訪問成功", + "Deleted ([0-9]{1,}) peer\\(s\\)": "刪除了$1個端點", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "成功刪除了$1個端點,失敗刪除了$2個端點", + "Restricted ([0-9]{1,}) peer\\(s\\)": "限制訪問了$1個端點", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "成功限制訪問了$1個端點,失敗限制訪問了$2個端點" } \ No newline at end of file