From 7ec5344aab34d57f6982cb09ad616d3cd6e6ac71 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 05:08:13 +0000 Subject: [PATCH 1/2] Initial plan From beea1c827ba12f506b6ed4463065f00dc7ee2d29 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 05:16:31 +0000 Subject: [PATCH 2/2] feat: add i18n support for Control Widgets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added localization keys to Localizable.xcstrings: - vpn_connected (已连接) - vpn_disconnected (已断开) - vpn_connect (连接) - vpn_disconnect (断开) - toggle_vpn (切换 VPN) - toggle_vpn_connection (切换 VPN 连接) - Updated ControlWidgetsControl.swift to use LocalizedStringResource Co-authored-by: chenx-dust <16610294+chenx-dust@users.noreply.github.com> --- ControlWidgets/ControlWidgetsControl.swift | 10 +-- EasyTier/Localizable.xcstrings | 96 ++++++++++++++++++++++ 2 files changed, 101 insertions(+), 5 deletions(-) diff --git a/ControlWidgets/ControlWidgetsControl.swift b/ControlWidgets/ControlWidgetsControl.swift index fa3c799..10fb588 100644 --- a/ControlWidgets/ControlWidgetsControl.swift +++ b/ControlWidgets/ControlWidgetsControl.swift @@ -23,12 +23,12 @@ struct ControlWidgetsControl: ControlWidget { isOn: isConnected, action: ToggleVPNIntent() ) { isOn in - Label(isOn ? "Connected" : "Disconnected", systemImage: "network") - .controlWidgetActionHint(isOn ? "Disconnect" : "Connect") + Label(isOn ? LocalizedStringResource("vpn_connected") : LocalizedStringResource("vpn_disconnected"), systemImage: "network") + .controlWidgetActionHint(isOn ? LocalizedStringResource("vpn_disconnect") : LocalizedStringResource("vpn_connect")) } } .displayName("EasyTier") - .description("Toggle VPN connection") + .description(LocalizedStringResource("toggle_vpn_connection")) } } @@ -49,9 +49,9 @@ extension ControlWidgetsControl { } struct ToggleVPNIntent: SetValueIntent { - static let title: LocalizedStringResource = "Toggle VPN" + static let title: LocalizedStringResource = "toggle_vpn" - @Parameter(title: "Connected") + @Parameter(title: LocalizedStringResource("vpn_connected")) var value: Bool func perform() async throws -> some IntentResult { diff --git a/EasyTier/Localizable.xcstrings b/EasyTier/Localizable.xcstrings index 6ccf452..c77aedf 100644 --- a/EasyTier/Localizable.xcstrings +++ b/EasyTier/Localizable.xcstrings @@ -2937,6 +2937,38 @@ } } }, + "toggle_vpn" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle VPN" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "切换 VPN" + } + } + } + }, + "toggle_vpn_connection" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle VPN connection" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "切换 VPN 连接" + } + } + } + }, "tunnel_proto" : { "localizations" : { "en" : { @@ -3145,6 +3177,70 @@ } } }, + "vpn_connect" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connect" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "连接" + } + } + } + }, + "vpn_connected" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connected" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已连接" + } + } + } + }, + "vpn_disconnect" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disconnect" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "断开" + } + } + } + }, + "vpn_disconnected" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disconnected" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已断开" + } + } + } + }, "vpn_portal_client_network" : { "localizations" : { "en" : {