diff --git a/Platform/iOS/zh-HK.lproj/Info-Remote-InfoPlist.strings b/Platform/iOS/zh-HK.lproj/Info-Remote-InfoPlist.strings new file mode 100644 index 000000000..6387088a3 --- /dev/null +++ b/Platform/iOS/zh-HK.lproj/Info-Remote-InfoPlist.strings @@ -0,0 +1,9 @@ +/* Bundle name */ +"CFBundleName" = "UTM 遠端"; + +/* Privacy - Local Network Usage Description */ +"NSLocalNetworkUsageDescription" = "UTM 使用本地網絡尋找並連接至 UTM 遠端伺服器。"; + +/* Privacy - Microphone Usage Description */ +"NSMicrophoneUsageDescription" = "任何虛擬電腦都需要許可才能由咪高風進行錄製。"; + diff --git a/Platform/iOS/zh-Hans.lproj/Info-Remote-InfoPlist.strings b/Platform/iOS/zh-Hans.lproj/Info-Remote-InfoPlist.strings new file mode 100644 index 000000000..3112abb40 --- /dev/null +++ b/Platform/iOS/zh-Hans.lproj/Info-Remote-InfoPlist.strings @@ -0,0 +1,9 @@ +/* Bundle name */ +"CFBundleName" = "UTM 远程"; + +/* Privacy - Local Network Usage Description */ +"NSLocalNetworkUsageDescription" = "UTM 使用本地网络查找和连接 UTM 远程服务器。"; + +/* Privacy - Microphone Usage Description */ +"NSMicrophoneUsageDescription" = "任何虚拟机都需要获得许可才能从麦克风录音。"; + diff --git a/Platform/zh-HK.lproj/Localizable.strings b/Platform/zh-HK.lproj/Localizable.strings index 25a43ae44..6dcfee673 100644 --- a/Platform/zh-HK.lproj/Localizable.strings +++ b/Platform/zh-HK.lproj/Localizable.strings @@ -44,6 +44,18 @@ /* Format string for download progress and speed, e. g. 5 MB of 6 GB (200 kbit/s) */ "%1$@ of %2$@ (%3$@)" = "%1$@ / %2$@ (%3$@)"; +/* UTMDonateView */ +"%d days" = "%d 日"; + +/* UTMDonateView */ +"%d months" = "%d 月"; + +/* UTMDonateView */ +"%d weeks" = "%d 周"; + +/* UTMDonateView */ +"%d years" = "%d 年"; + /* UTMScriptingAppDelegate */ "A valid backend must be specified." = "必須指定有效的後端。"; @@ -119,6 +131,9 @@ /* UTMQemuConstants */ "Automatic Serial Device (max 4)" = "自動序列裝置 (最大值為 4)"; +/* VMSessionState */ +"Background task is about to expire" = "背景任務即將過期"; + /* UTMLegacyQemuConfiguration UTMQemuConstants */ "BIOS" = "BIOS"; @@ -208,6 +223,9 @@ /* No comment provided by engineer. */ "Capture input automatically when entering full screen" = "進入全螢幕時自動擷取輸入"; +/* No comment provided by engineer. */ +"Capture input automatically when window is focused" = "於視窗聚焦時自動擷取輸入"; + /* VMDisplayQemuMetalWindowController */ "Captured mouse" = "已擷取滑鼠"; @@ -227,6 +245,9 @@ /* VMDisplayAppleController */ "Change…" = "變更⋯"; +/* No comment provided by engineer. */ +"Choose" = "選取"; + /* No comment provided by engineer. */ "Clear" = "清除"; @@ -291,6 +312,9 @@ /* UTMSWTPM */ "Data not specified." = "未指定資料。"; +/* UTMDonateView */ +"day" = "日"; + /* No comment provided by engineer. */ "Debug Logging" = "除錯記錄"; @@ -333,7 +357,7 @@ "Disposable Mode" = "即拋式模式"; /* No comment provided by engineer. */ -"Do not save VM screenshot to disk" = "不要將虛擬電腦快照儲存至磁碟"; +"Do not save VM screenshot to disk" = "不要將虛擬電腦螢幕截圖儲存至磁碟"; /* No comment provided by engineer. */ "Do not show confirmation when closing a running VM" = "關閉正在執行的虛擬電腦時不要顯示確認"; @@ -712,6 +736,9 @@ /* No comment provided by engineer. */ "Minimum size: %@" = "最小大小:%@"; +/* UTMDonateView */ +"month" = "月"; + /* No comment provided by engineer. */ "Mouse/Keyboard" = "滑鼠/鍵盤"; @@ -848,6 +875,9 @@ /* No comment provided by engineer. */ "Pending" = "待定"; +/* UTMDonateView */ +"period" = "期間"; + /* VMDisplayWindowController */ "Play" = "播放"; @@ -1126,6 +1156,9 @@ /* UTMSWTPM */ "SW TPM failed to start. %@" = "SW TPM 無法啟動。%@"; +/* VMSessionState */ +"Switch back to UTM to avoid termination." = "切換回至 UTM 以避免終止。"; + /* No comment provided by engineer. */ "System" = "系統"; @@ -1381,7 +1414,10 @@ "Virtualize" = "虛擬化"; /* No comment provided by engineer. */ -"Waiting for VM to connect to display..." = "正在等待虛擬電腦連接至顯示..."; +"Waiting for VM to connect to display..." = "正在等待虛擬電腦連接至顯示⋯"; + +/* UTMDonateView */ +"week" = "周"; /* No comment provided by engineer. */ "Welcome to UTM" = "歡迎使用 UTM"; @@ -1404,6 +1440,9 @@ /* No comment provided by engineer. */ "Would you like to re-convert this disk image to reclaim unused space? Note this will require enough temporary space to perform the conversion. You are strongly encouraged to back-up this VM before proceeding." = "你要重新轉換此磁碟映像檔以回收未使用的空間嗎?請緊記,這將需要足夠的臨時空間來執行轉換。強烈建議你先備份此虛擬電腦,然後再繼續操作。"; +/* UTMDonateView */ +"year" = "年"; + /* No comment provided by engineer. */ "Yes" = "是"; @@ -1414,11 +1453,20 @@ VMWizardOSMacView */ "Your machine does not support running this IPSW." = "你的電腦不支援執行此 IPSW。"; +/* UTMDonateView */ +"Your purchase could not be verified by the App Store." = "App Store 無法驗證你的購買。"; + +/* No comment provided by engineer. */ +"Your support is the driving force that helps UTM stay independent. Your contribution, no matter the size, makes a significant difference. It enables us to develop new features and maintain existing ones. Thank you for considering a donation to support us." = "你的支援是幫助 UTM 保持獨立的動力。無論你的貢獻幾多,都會帶來重大影響。這可以令我們能夠開發新功能,並維護現有的功能。多謝你考慮捐贈來支援我們。"; + /* ContentView */ "Your version of iOS does not support running VMs while unmodified. You must either run UTM while jailbroken or with a remote debugger attached. See https://getutm.app/install/ for more details." = "你的 iOS 版本不支援在未作更動的情況下執行虛擬電腦,必須在越獄 (jailbreak) 時執行 UTM,或是在附加遠程除錯器的情況下執行 UTM。有關更多詳細訊息,請見 https://getutm.app/install/。"; // Additional Strings (These strings are unable to be extracted by Xcode) +/* No comment provided by engineer. */ +"" = ""; + /* No comment provided by engineer. */ "(Delete)" = "(刪除)"; @@ -1777,7 +1825,7 @@ "If enabled, a virtiofs share tagged 'rosetta' will be available on the Linux guest for installing Rosetta for emulating x86_64 on ARM64." = "如啟用,標記為「rosetta」的 virtiofs 分享將會於 Linux 客戶端上可用,用作安裝 Rosetta,可以於 arm64 上仿真 x86_64。"; /* No comment provided by engineer. */ -"If enabled, any existing screenshot will be deleted the next time the VM is started." = "如啟用,下次啟動虛擬電腦時,任何現存的快照將會被刪除。"; +"If enabled, any existing screenshot will be deleted the next time the VM is started." = "如啟用,下次啟動虛擬電腦時,任何現存的螢幕截圖將會被刪除。"; /* No comment provided by engineer. */ "If enabled, caps lock will be handled like other keys. If disabled, it is treated as a toggle that is synchronized with the host." = "如啟用,Caps Lock 將會同其他鍵一樣處理。如停用,它將會被視為開關鍵,並與主機同步。"; @@ -1785,6 +1833,9 @@ /* No comment provided by engineer. */ "If enabled, input capture will toggle automatically when entering and exiting full screen mode." = "如啟用,於進入和離開全螢幕模式時,將會自動切換輸入擷取。"; +/* No comment provided by engineer. */ +"If enabled, input capture will toggle automatically when the VM's window is focused." = "如啟用,於虛擬電腦聚焦視窗時,將自動切換輸入擷取。"; + /* No comment provided by engineer. */ "If enabled, num lock will always be on to the guest. Note this may make your keyboard's num lock indicator out of sync." = "如啟用,Num Lock 將會始終對客戶端開啟。請緊記,這可能會令鍵盤的 Num Lock 指示器不同步。"; diff --git a/Platform/zh-Hans.lproj/Localizable.strings b/Platform/zh-Hans.lproj/Localizable.strings index e6397014f..b51e4e13a 100644 --- a/Platform/zh-Hans.lproj/Localizable.strings +++ b/Platform/zh-Hans.lproj/Localizable.strings @@ -44,6 +44,18 @@ /* Format string for download progress and speed, e. g. 5 MB of 6 GB (200 kbit/s) */ "%1$@ of %2$@ (%3$@)" = "共 %2$@,已下载 %1$@ (%3$@)"; +/* UTMDonateView */ +"%d days" = "%d 天"; + +/* UTMDonateView */ +"%d months" = "%d 月"; + +/* UTMDonateView */ +"%d weeks" = "%d 周"; + +/* UTMDonateView */ +"%d years" = "%d 年"; + /* UTMScriptingAppDelegate */ "A valid backend must be specified." = "必须指定有效的后端。"; @@ -119,6 +131,9 @@ /* UTMQemuConstants */ "Automatic Serial Device (max 4)" = "自动串行设备 (最大值 4)"; +/* VMSessionState */ +"Background task is about to expire" = "后台任务即将终止"; + /* UTMLegacyQemuConfiguration UTMQemuConstants */ "BIOS" = "BIOS"; @@ -208,11 +223,8 @@ /* No comment provided by engineer. */ "Capture input automatically when entering full screen" = "进入全屏时自动捕获输入"; -"If enabled, input capture will toggle automatically when entering and exiting full screen mode." = "如果启用此开关,进入和退出全屏模式时将自动切换输入捕获。"; - -"Capture input automatically when window is focused" = "成为活动窗口时自动捕获输入"; - -"If enabled, input capture will toggle automatically when the VM's window is focused." = "如果启用此开关,成为/失去当前活动窗口时自动切换输入捕获。"; +/* No comment provided by engineer. */ +"Capture input automatically when window is focused" = "聚焦窗口时自动捕获输入"; /* VMDisplayQemuMetalWindowController */ "Captured mouse" = "已捕获鼠标"; @@ -233,6 +245,9 @@ /* VMDisplayAppleController */ "Change…" = "更改…"; +/* No comment provided by engineer. */ +"Choose" = "选择"; + /* No comment provided by engineer. */ "Clear" = "清除"; @@ -297,6 +312,9 @@ /* UTMSWTPM */ "Data not specified." = "未指定数据。"; +/* UTMDonateView */ +"day" = "天"; + /* No comment provided by engineer. */ "Debug Logging" = "调试日志记录"; @@ -718,6 +736,9 @@ /* No comment provided by engineer. */ "Minimum size: %@" = "最小文件大小:%@"; +/* UTMDonateView */ +"month" = "月"; + /* No comment provided by engineer. */ "Mouse/Keyboard" = "鼠标/键盘"; @@ -854,6 +875,9 @@ /* No comment provided by engineer. */ "Pending" = "等待中"; +/* UTMDonateView */ +"period" = "周期"; + /* VMDisplayWindowController */ "Play" = "启动"; @@ -1132,6 +1156,9 @@ /* UTMSWTPM */ "SW TPM failed to start. %@" = "SW TPM 无法启动。%@"; +/* VMSessionState */ +"Switch back to UTM to avoid termination." = "切换回 UTM 以避免终止。"; + /* No comment provided by engineer. */ "System" = "系统"; @@ -1359,7 +1386,7 @@ /* UTMScriptingAppDelegate UTMScriptingUSBDeviceImpl */ -"UTM is not ready to accept commands." = "UTM 未准备好接受命令。"; +"UTM is not ready to accept commands." = "UTM 尚未准备好接受命令。"; /* No comment provided by engineer. */ "Version" = "版本号"; @@ -1387,7 +1414,10 @@ "Virtualize" = "虚拟化"; /* No comment provided by engineer. */ -"Waiting for VM to connect to display..." = "等待虚拟机连接到显示..."; +"Waiting for VM to connect to display..." = "等待虚拟机连接到显示…"; + +/* UTMDonateView */ +"week" = "周"; /* No comment provided by engineer. */ "Welcome to UTM" = "欢迎使用 UTM"; @@ -1410,6 +1440,9 @@ /* No comment provided by engineer. */ "Would you like to re-convert this disk image to reclaim unused space? Note this will require enough temporary space to perform the conversion. You are strongly encouraged to back-up this VM before proceeding." = "要重新转换此磁盘映像以回收未使用的空间吗?请注意,这将需要足够的临时空间来执行转换。在继续操作之前,强烈建议你备份此虚拟机。"; +/* UTMDonateView */ +"year" = "年"; + /* No comment provided by engineer. */ "Yes" = "是"; @@ -1420,11 +1453,20 @@ VMWizardOSMacView */ "Your machine does not support running this IPSW." = "你的机器不支持运行此 IPSW。"; +/* UTMDonateView */ +"Your purchase could not be verified by the App Store." = "App Store 无法验证你的购买。"; + +/* No comment provided by engineer. */ +"Your support is the driving force that helps UTM stay independent. Your contribution, no matter the size, makes a significant difference. It enables us to develop new features and maintain existing ones. Thank you for considering a donation to support us." = "你的支持是 UTM 保持独立的动力。你的贡献无论或大或小,都会产生重大的影响。它可以使我们能开发出功能,并维护现有的功能。感谢你考虑捐赠支持我们。"; + /* ContentView */ "Your version of iOS does not support running VMs while unmodified. You must either run UTM while jailbroken or with a remote debugger attached. See https://getutm.app/install/ for more details." = "你的 iOS 版本不支持在未经修改的情况下运行虚拟机,必须在越狱时运行 UTM,或者连接远程调试器。有关更多详细信息,请参阅 https://getutm.app/install/。"; // Additional Strings (These strings are unable to be extracted by Xcode) +/* No comment provided by engineer. */ +"" = ""; + /* No comment provided by engineer. */ "(Delete)" = "(删除)"; @@ -1792,7 +1834,10 @@ "If enabled, input capture will toggle automatically when entering and exiting full screen mode." = "若启用,输入捕捉会在进入和退出全屏模式时自动切换。"; /* No comment provided by engineer. */ -"If enabled, num lock will always be on to the guest. Note this may make your keyboard's num lock indicator out of sync." = "若启用,Num Lock 将始终对客户机开启。注意,这可能会使键盘的 Num Lock 指示灯不同步。"; +"If enabled, input capture will toggle automatically when the VM's window is focused." = "若启用,输入捕捉将在虚拟机窗口聚焦时自动切换。"; + +/* No comment provided by engineer. */ +"If enabled, num lock will always be on to the guest. Note this may make your keyboard's num lock indicator out of sync." = "若启用,Num Lock 将始终对客户机开启。注意,这可能会使键盘的 Num Lock 指示灯不同步。"; /* No comment provided by engineer. */ "If enabled, Option will be mapped to the Meta key which can be useful for emacs. Otherwise, option will work as the system intended (such as for entering international text)." = "若启用,Option 键将映射到 Meta 键,这对 Emacs 很有用。否则,Option 键将按照系统默认方式工作 (例如输入国际文本)。"; diff --git a/UTM.xcodeproj/project.pbxproj b/UTM.xcodeproj/project.pbxproj index a6829459d..4603c8241 100644 --- a/UTM.xcodeproj/project.pbxproj +++ b/UTM.xcodeproj/project.pbxproj @@ -1216,6 +1216,7 @@ CEFE96772B69A7CC000F00C9 /* VMRemoteSessionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE96762B69A7CC000F00C9 /* VMRemoteSessionState.swift */; }; CEFE98DF29485237007CB7A8 /* UTM.sdef in Resources */ = {isa = PBXBuildFile; fileRef = CEFE98DE29485237007CB7A8 /* UTM.sdef */; }; CEFE98E129485776007CB7A8 /* UTMScriptingVirtualMachineImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE98E029485776007CB7A8 /* UTMScriptingVirtualMachineImpl.swift */; }; + F6056EF32BE642F500FAEED8 /* Info-Remote-InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F6056EF12BE642F500FAEED8 /* Info-Remote-InfoPlist.strings */; }; FF0307552A84E3B70049979B /* QEMULauncher-InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = FF0307532A84E3B70049979B /* QEMULauncher-InfoPlist.strings */; }; FFB02A8C266CB09C006CD71A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = FFB02A8A266CB09C006CD71A /* InfoPlist.strings */; }; FFB02A8D266CB09C006CD71A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = FFB02A8A266CB09C006CD71A /* InfoPlist.strings */; }; @@ -2073,6 +2074,7 @@ E68D492228AC018E00D34C54 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; E68D492328AC018E00D34C54 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/InfoPlist.strings"; sourceTree = ""; }; E6F791192903EEC6000BAAC9 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/InfoPlist.strings"; sourceTree = ""; }; + F6056EF22BE642F500FAEED8 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/Info-Remote-InfoPlist.strings"; sourceTree = ""; }; F6DA2DA52AAFED5F0070DCD1 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/VMDisplayMetalViewInputAccessory.strings"; sourceTree = ""; }; F6DA2DA62AAFED5F0070DCD1 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/VMDisplayWindow.strings"; sourceTree = ""; }; F6DA2DA72AAFED5F0070DCD1 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/InfoPlist.strings"; sourceTree = ""; }; @@ -2711,6 +2713,7 @@ CE95877426D74C2A0086BDE8 /* iOS.entitlements */, CE2D954F24AD4F980059923A /* Info.plist */, CECF02572B70909900409FC0 /* Info-Remote.plist */, + F6056EF12BE642F500FAEED8 /* Info-Remote-InfoPlist.strings */, FFB02A8A266CB09C006CD71A /* InfoPlist.strings */, CEB5C1192B8C4CD4008AAE5C /* Info-RemotePlist.strings */, CEC1B00A2BBB211C0088119D /* PrivacyInfo.xcprivacy */, @@ -3394,6 +3397,7 @@ CEF7F6792AEEDCC400E34952 /* Icons in Resources */, CEB5C1172B8C4CD4008AAE5C /* Info-RemotePlist.strings in Resources */, CEF7F67B2AEEDCC400E34952 /* Localizable.strings in Resources */, + F6056EF32BE642F500FAEED8 /* Info-Remote-InfoPlist.strings in Resources */, CEF7F67C2AEEDCC400E34952 /* qemu in Resources */, CEF7F67D2AEEDCC400E34952 /* VMDisplayMetalViewInputAccessory.xib in Resources */, CEF7F67E2AEEDCC400E34952 /* Localizable.stringsdict in Resources */, @@ -4328,6 +4332,14 @@ name = Localizable.stringsdict; sourceTree = ""; }; + F6056EF12BE642F500FAEED8 /* Info-Remote-InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + F6056EF22BE642F500FAEED8 /* zh-HK */, + ); + name = "Info-Remote-InfoPlist.strings"; + sourceTree = ""; + }; FF0307532A84E3B70049979B /* QEMULauncher-InfoPlist.strings */ = { isa = PBXVariantGroup; children = (