From a0d6638d46d8ce6798e2f0fe02d4c1d3e4f9b28c Mon Sep 17 00:00:00 2001 From: Yangjin Cho Date: Sun, 15 Sep 2024 21:47:23 +0900 Subject: [PATCH] feat: implement NSLocalizedString --- MeoAsstMac.xcodeproj/project.pbxproj | 8 +- .../AwardSettingsView.swift | 12 +- .../FightSettingsView.swift | 6 +- .../InfrastSettingsView.swift | 6 +- .../MallSettingsView.swift | 12 +- .../ReclamationSettingsView.swift | 10 +- .../RecruitSettingsView.swift | 4 +- .../RoguelikeSettingsView.swift | 16 +- .../StartupSettingsView.swift | 4 +- MeoAsstMac/Core/MaaMessage.swift | 2 +- .../Main Menu/CheckForUpdatesView.swift | 2 +- MeoAsstMac/Main Menu/OpenLogFileView.swift | 4 +- MeoAsstMac/Main Menu/TaskCommands.swift | 2 +- MeoAsstMac/MeoAsstMacApp.swift | 8 +- MeoAsstMac/Navigation/CopilotContent.swift | 16 +- MeoAsstMac/Navigation/MAAContent.swift | 2 +- MeoAsstMac/Navigation/MAADetail.swift | 2 +- MeoAsstMac/Navigation/Sidebar.swift | 6 +- MeoAsstMac/Navigation/TaskDetail.swift | 4 +- MeoAsstMac/Navigation/TasksContent.swift | 12 +- MeoAsstMac/Navigation/UtilityContent.swift | 8 +- MeoAsstMac/Navigation/UtilityDetail.swift | 2 +- MeoAsstMac/Settings/GameSettingsView.swift | 2 +- MeoAsstMac/Settings/SystemSettingsView.swift | 2 +- MeoAsstMac/Settings/UpdaterSettingsView.swift | 6 +- .../MallConfiguration.swift | 4 +- .../ReclamationConfiguration.swift | 2 +- .../RoguelikeConfiguration.swift | 4 +- MeoAsstMac/Views/CopilotView.swift | 12 +- MeoAsstMac/Views/DepotView.swift | 6 +- MeoAsstMac/Views/GachaView.swift | 44 ++-- MeoAsstMac/Views/LogView.swift | 8 +- MeoAsstMac/Views/OperBoxView.swift | 14 +- MeoAsstMac/Views/RecruitView.swift | 12 +- MeoAsstMac/Views/TaskButtons.swift | 8 +- MeoAsstMac/Views/TaskTimerView.swift | 14 +- MeoAsstMac/Views/VideoRecogView.swift | 2 +- Resources/en.lproj/Localizable.strings | 230 +++++++++++++++++ Resources/ko.lproj/Localizable.strings | 235 ++++++++++++++++++ Resources/zh-Hans.lproj/Localizable.strings | 142 +++++++++++ 40 files changed, 753 insertions(+), 142 deletions(-) create mode 100644 Resources/en.lproj/Localizable.strings create mode 100644 Resources/ko.lproj/Localizable.strings diff --git a/MeoAsstMac.xcodeproj/project.pbxproj b/MeoAsstMac.xcodeproj/project.pbxproj index 338a3aa..351952b 100644 --- a/MeoAsstMac.xcodeproj/project.pbxproj +++ b/MeoAsstMac.xcodeproj/project.pbxproj @@ -192,6 +192,8 @@ 92EB82862A0CD315006DD9D2 /* SystemSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemSettingsView.swift; sourceTree = ""; }; 92F78D4C2A0A7B2E00999BD0 /* TaskTimerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskTimerView.swift; sourceTree = ""; }; 92F78D4E2A0B361C00999BD0 /* TaskTimerManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskTimerManager.swift; sourceTree = ""; }; + CE8977262C9707250075E1C6 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; + CE8977272C9707300075E1C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -470,9 +472,9 @@ developmentRegion = "zh-Hans"; hasScannedForEncodings = 0; knownRegions = ( - en, - Base, "zh-Hans", + ko, + en, ); mainGroup = 833786C228F188D800D39D6F; packageReferences = ( @@ -579,6 +581,8 @@ isa = PBXVariantGroup; children = ( 832985A529EE0D6F009F7ED5 /* zh-Hans */, + CE8977262C9707250075E1C6 /* ko */, + CE8977272C9707300075E1C6 /* en */, ); name = Localizable.strings; sourceTree = ""; diff --git a/MeoAsstMac/Configuration Views/AwardSettingsView.swift b/MeoAsstMac/Configuration Views/AwardSettingsView.swift index 7c419a2..fc088f8 100644 --- a/MeoAsstMac/Configuration Views/AwardSettingsView.swift +++ b/MeoAsstMac/Configuration Views/AwardSettingsView.swift @@ -17,17 +17,17 @@ struct AwardSettingsView: View { var body: some View { Form { - Toggle("领取每日/每周任务奖励", isOn: config.award) + Toggle(NSLocalizedString("领取每日/每周任务奖励", comment: ""), isOn: config.award) - Toggle("领取所有邮件奖励", isOn: config.mail) + Toggle(NSLocalizedString("领取所有邮件奖励", comment: ""), isOn: config.mail) - Toggle("进行每日免费单抽", isOn: config.recruit) + Toggle(NSLocalizedString("进行每日免费单抽", comment: ""), isOn: config.recruit) - Toggle("领取幸运墙合成玉奖励", isOn: config.orundum) + Toggle(NSLocalizedString("领取幸运墙合成玉奖励", comment: ""), isOn: config.orundum) - Toggle("领取限时开采许可合成玉奖励", isOn: config.mining) + Toggle(NSLocalizedString("领取限时开采许可合成玉奖励", comment: ""), isOn: config.mining) - Toggle("领取五周年赠送月卡奖励", isOn: config.specialaccess) + Toggle(NSLocalizedString("领取五周年赠送月卡奖励", comment: ""), isOn: config.specialaccess) } .padding() } diff --git a/MeoAsstMac/Configuration Views/FightSettingsView.swift b/MeoAsstMac/Configuration Views/FightSettingsView.swift index 027ff07..8751f8e 100644 --- a/MeoAsstMac/Configuration Views/FightSettingsView.swift +++ b/MeoAsstMac/Configuration Views/FightSettingsView.swift @@ -23,10 +23,10 @@ struct FightSettingsView: View { Section { HStack(spacing: 20) { if useCustomStage || stageNotListed { - TextField("关卡名", text: config.stage) + TextField(NSLocalizedString("关卡名", comment: ""), text: config.stage) } else { - Picker("关卡选择", selection: config.stage) { - Text("当前/上次").tag("") + Picker(NSLocalizedString("关卡选择", comment: ""), selection: config.stage) { + Text(NSLocalizedString("当前/上次", comment: "")).tag("") Text("1-7").tag("1-7") Text("CE-6").tag("CE-6") Text("AP-5").tag("AP-5") diff --git a/MeoAsstMac/Configuration Views/InfrastSettingsView.swift b/MeoAsstMac/Configuration Views/InfrastSettingsView.swift index ee66410..4baf775 100644 --- a/MeoAsstMac/Configuration Views/InfrastSettingsView.swift +++ b/MeoAsstMac/Configuration Views/InfrastSettingsView.swift @@ -41,7 +41,7 @@ struct InfrastSettingsView: View { config.facility.wrappedValue.move(fromOffsets: source, toOffset: destination) } } header: { - Text("已启用") + Text(NSLocalizedString("已启用", comment: "")) } Section { @@ -49,7 +49,7 @@ struct InfrastSettingsView: View { Toggle(facility.description, isOn: facilityBinding(for: facility)) } } header: { - Text("未启用") + Text(NSLocalizedString("未启用", comment: "")) } } .animation(.default, value: config.facility.wrappedValue) @@ -59,7 +59,7 @@ struct InfrastSettingsView: View { @ViewBuilder private var preferenceForm: some View { Form { Section { - Text("无人机用途:") + Text(NSLocalizedString("无人机用途:", comment: "")) Picker("", selection: config.drones) { ForEach(MAAInfrastDroneUsage.allCases, id: \.self) { usage in Text(usage.description).tag(usage) diff --git a/MeoAsstMac/Configuration Views/MallSettingsView.swift b/MeoAsstMac/Configuration Views/MallSettingsView.swift index 8258034..d35ff7e 100644 --- a/MeoAsstMac/Configuration Views/MallSettingsView.swift +++ b/MeoAsstMac/Configuration Views/MallSettingsView.swift @@ -20,15 +20,15 @@ struct MallSettingsView: View { VStack(spacing: 30) { HStack(spacing: 10) { Spacer() - Toggle("信用购物", isOn: config.shopping) - Toggle("信用溢出时无视黑名单", isOn: config.force_shopping_if_credit_full) - Toggle("借助战赚信用", isOn: .constant(false)) + Toggle(NSLocalizedString("信用购物", comment: ""), isOn: config.shopping) + Toggle(NSLocalizedString("信用溢出时无视黑名单", comment: ""), isOn: config.force_shopping_if_credit_full) + Toggle(NSLocalizedString("借助战赚信用", comment: ""), isOn: .constant(false)) Spacer() } HStack(spacing: 20) { - EditableTextList(title: "优先购买", texts: config.buy_first) - EditableTextList(title: "黑名单", texts: config.blacklist) + EditableTextList(title: NSLocalizedString("优先购买", comment: ""), texts: config.buy_first) + EditableTextList(title: NSLocalizedString("黑名单", comment: ""), texts: config.blacklist) } .frame(height: 12 * rowHeight) } @@ -46,7 +46,7 @@ struct MallSettingsView_Previews: PreviewProvider { // MARK: - EditableTextList private struct EditableTextList: View { - let title: LocalizedStringKey + let title: String @Binding var texts: [String] private struct TextEntry: Equatable, Identifiable { diff --git a/MeoAsstMac/Configuration Views/ReclamationSettingsView.swift b/MeoAsstMac/Configuration Views/ReclamationSettingsView.swift index 7064464..c389e3b 100644 --- a/MeoAsstMac/Configuration Views/ReclamationSettingsView.swift +++ b/MeoAsstMac/Configuration Views/ReclamationSettingsView.swift @@ -17,22 +17,22 @@ struct ReclamationSettingsView: View { var body: some View { Form { - Picker("主题:", selection: config.theme) { + Picker(NSLocalizedString("主题:", comment: ""), selection: config.theme) { ForEach(ReclamationTheme.allCases, id: \.rawValue) { theme in Text("\(theme.description)").tag(theme) } } - Picker("策略:", selection: config.mode) { + Picker(NSLocalizedString("策略:", comment: ""), selection: config.mode) { ForEach(config.wrappedValue.modes.sorted(by: <), id: \.key) { mode, desc in Text(desc).tag(mode) } } if config.wrappedValue.toolToCraftEnabled { - TextField("支援道具:", text: config.tool_to_craft) - TextField("组装批次数:", value: config.num_craft_batches, format: .number) - Picker("组装数量增加模式:", selection: config.increment_mode) { + TextField(NSLocalizedString("支援道具:", comment: ""), text: config.tool_to_craft) + TextField(NSLocalizedString("组装批次数:", comment: ""), value: config.num_craft_batches, format: .number) + Picker(NSLocalizedString("组装数量增加模式:", comment: ""), selection: config.increment_mode) { ForEach(config.wrappedValue.increment_modes.sorted(by: <), id: \.key) { increment_mode, desc in Text(desc).tag(increment_mode) } diff --git a/MeoAsstMac/Configuration Views/RecruitSettingsView.swift b/MeoAsstMac/Configuration Views/RecruitSettingsView.swift index d0298cf..241af19 100644 --- a/MeoAsstMac/Configuration Views/RecruitSettingsView.swift +++ b/MeoAsstMac/Configuration Views/RecruitSettingsView.swift @@ -17,9 +17,9 @@ struct RecruitSettingsView: View { var body: some View { VStack(alignment: .leading) { - Toggle("自动刷新3星Tags", isOn: config.refresh) + Toggle(NSLocalizedString("自动刷新3星Tags", comment: ""), isOn: config.refresh) - Toggle("自动使用加急许可", isOn: config.expedite) + Toggle(NSLocalizedString("自动使用加急许可", comment: ""), isOn: config.expedite) Toggle("3星设置7:40而非9:00", isOn: level3UseShortTime) diff --git a/MeoAsstMac/Configuration Views/RoguelikeSettingsView.swift b/MeoAsstMac/Configuration Views/RoguelikeSettingsView.swift index 7f906c2..f5e37dc 100644 --- a/MeoAsstMac/Configuration Views/RoguelikeSettingsView.swift +++ b/MeoAsstMac/Configuration Views/RoguelikeSettingsView.swift @@ -29,13 +29,13 @@ struct RoguelikeSettingsView: View { } @ViewBuilder private func generalSettings() -> some View { - Picker("肉鸽主题:", selection: config.theme) { + Picker(NSLocalizedString("肉鸽主题:", comment: ""), selection: config.theme) { ForEach(RoguelikeTheme.allCases, id: \.rawValue) { theme in Text("\(theme.description)").tag(theme) } } - Picker("策略:", selection: config.mode) { + Picker(NSLocalizedString("策略:", comment: ""), selection: config.mode) { ForEach(roguelikeModes[nil] ?? [], id: \.0) { pair in Text(pair.1).tag(pair.0) } @@ -44,19 +44,19 @@ struct RoguelikeSettingsView: View { } } - TextField("最多探索次数:", value: config.starts_count, format: .number) + TextField(NSLocalizedString("最多探索次数:", comment: ""), value: config.starts_count, format: .number) } @ViewBuilder private func goldSettings() -> some View { - Toggle("投资源石锭", isOn: config.investment_enabled) - Toggle("刷新商店(指路鳞)", isOn: config.refresh_trader_with_dice) - Toggle("储备源石锭达到上限时停止", isOn: config.stop_when_investment_full) + Toggle(NSLocalizedString("投资源石锭", comment: ""), isOn: config.investment_enabled) + Toggle(NSLocalizedString("刷新商店(指路鳞)", comment: ""), isOn: config.refresh_trader_with_dice) + Toggle(NSLocalizedString("储备源石锭达到上限时停止", comment: ""), isOn: config.stop_when_investment_full) - TextField("最多投资源石锭数量:", value: config.investments_count, format: .number) + TextField(NSLocalizedString("最多投资源石锭数量:", comment: ""), value: config.investments_count, format: .number) } @ViewBuilder private func squadSettings() -> some View { - Picker("开局分队:", selection: config.squad) { + Picker(NSLocalizedString("开局分队:", comment: ""), selection: config.squad) { ForEach(roguelikeSquads[config.theme.wrappedValue] ?? [], id: \.self) { squad in Text(squad).tag(squad) } diff --git a/MeoAsstMac/Configuration Views/StartupSettingsView.swift b/MeoAsstMac/Configuration Views/StartupSettingsView.swift index 400182d..278f938 100644 --- a/MeoAsstMac/Configuration Views/StartupSettingsView.swift +++ b/MeoAsstMac/Configuration Views/StartupSettingsView.swift @@ -19,13 +19,13 @@ struct StartupSettingsView: View { Form { VStack(alignment: .leading, spacing: 3) { Text("客户端类型:\(config.client_type.wrappedValue.description)") - Text("请在“设置” > “游戏设置” 中选择客户端类型。") + Text(NSLocalizedString("请在“设置” > “游戏设置” 中选择客户端类型。", comment: "")) .font(.caption) .foregroundColor(.secondary) } .padding(.bottom) - Toggle("自动启动客户端", isOn: config.start_game_enabled) + Toggle(NSLocalizedString("自动启动客户端", comment: ""), isOn: config.start_game_enabled) .disabled(config.client_type.wrappedValue == .default) } .padding() diff --git a/MeoAsstMac/Core/MaaMessage.swift b/MeoAsstMac/Core/MaaMessage.swift index 6aec302..dee56b1 100644 --- a/MeoAsstMac/Core/MaaMessage.swift +++ b/MeoAsstMac/Core/MaaMessage.swift @@ -87,7 +87,7 @@ extension MAAViewModel { logError("TouchModeNotAvaiable") case "UnsupportedPlayTools": - logError("不支持此版本 PlayCover") + logError(NSLocalizedString("不支持此版本 PlayCover", comment: "")) default: break diff --git a/MeoAsstMac/Main Menu/CheckForUpdatesView.swift b/MeoAsstMac/Main Menu/CheckForUpdatesView.swift index 4f911c4..0559573 100644 --- a/MeoAsstMac/Main Menu/CheckForUpdatesView.swift +++ b/MeoAsstMac/Main Menu/CheckForUpdatesView.swift @@ -27,7 +27,7 @@ struct CheckForUpdatesView: View { } var body: some View { - Button("检查更新…", action: updater.checkForUpdates) + Button(NSLocalizedString("检查更新…", comment: ""), action: updater.checkForUpdates) .disabled(!viewModel.canCheckForUpdates) } } diff --git a/MeoAsstMac/Main Menu/OpenLogFileView.swift b/MeoAsstMac/Main Menu/OpenLogFileView.swift index cce6214..dd704d0 100644 --- a/MeoAsstMac/Main Menu/OpenLogFileView.swift +++ b/MeoAsstMac/Main Menu/OpenLogFileView.swift @@ -9,7 +9,7 @@ import SwiftUI struct OpenLogFileView: View { var body: some View { - Button("打开日志文件夹…") { + Button(NSLocalizedString("打开日志文件夹…", comment: "")) { guard let userDirectory else { return } @@ -23,7 +23,7 @@ struct OpenLogFileView: View { } } - Button("PlayCover 链接…") { + Button(NSLocalizedString("PlayCover 链接…", comment: "")) { NSWorkspace.shared.open(URL(string: "https://github.com/hguandl/PlayCover/releases")!) } } diff --git a/MeoAsstMac/Main Menu/TaskCommands.swift b/MeoAsstMac/Main Menu/TaskCommands.swift index b967ea2..adf651e 100644 --- a/MeoAsstMac/Main Menu/TaskCommands.swift +++ b/MeoAsstMac/Main Menu/TaskCommands.swift @@ -11,7 +11,7 @@ struct TaskCommands: Commands { @ObservedObject var viewModel: MAAViewModel var body: some Commands { - CommandMenu("任务") { + CommandMenu(NSLocalizedString("任务", comment: "")) { TaskButtons(viewModel: viewModel) } } diff --git a/MeoAsstMac/MeoAsstMacApp.swift b/MeoAsstMac/MeoAsstMacApp.swift index 1efb0b9..7860675 100644 --- a/MeoAsstMac/MeoAsstMacApp.swift +++ b/MeoAsstMac/MeoAsstMacApp.swift @@ -43,22 +43,22 @@ struct MeoAsstMacApp: App { TabView { ConnectionSettingsView() .tabItem { - Label("连接设置", systemImage: "rectangle.connected.to.line.below") + Label(NSLocalizedString("连接设置", comment: ""), systemImage: "rectangle.connected.to.line.below") } GameSettingsView() .tabItem { - Label("游戏设置", systemImage: "gamecontroller") + Label(NSLocalizedString("游戏设置", comment: ""), systemImage: "gamecontroller") } UpdaterSettingsView(updater: updaterController.updater) .tabItem { - Label("更新设置", systemImage: "square.and.arrow.down") + Label(NSLocalizedString("更新设置", comment: ""), systemImage: "square.and.arrow.down") } SystemSettingsView() .tabItem { - Label("系统设置", systemImage: "wrench.adjustable") + Label(NSLocalizedString("系统设置", comment: ""), systemImage: "wrench.adjustable") } } .environmentObject(appViewModel) diff --git a/MeoAsstMac/Navigation/CopilotContent.swift b/MeoAsstMac/Navigation/CopilotContent.swift index 3ca9cc2..a9b2cf3 100644 --- a/MeoAsstMac/Navigation/CopilotContent.swift +++ b/MeoAsstMac/Navigation/CopilotContent.swift @@ -21,7 +21,7 @@ struct CopilotContent: View { Text(url.lastPathComponent) } } header: { - Text("内置作业") + Text(NSLocalizedString("内置作业", comment: "")) } Section { @@ -30,7 +30,7 @@ struct CopilotContent: View { } } header: { HStack { - Text("外部作业(可拖入文件)") + Text(NSLocalizedString("外部作业(可拖入文件)", comment: "")) if downloading { Spacer() ProgressView().controlSize(.small) @@ -57,9 +57,9 @@ struct CopilotContent: View { @ToolbarContentBuilder private func listToolbar() -> some ToolbarContent { ToolbarItemGroup { Button(action: deleteSelectedCopilot) { - Label("移除", systemImage: "trash") + Label(NSLocalizedString("移除", comment: ""), systemImage: "trash") } - .help("移除作业") + .help(NSLocalizedString("移除作业", comment: "")) .disabled(shouldDisableDeletion) } @@ -72,14 +72,14 @@ struct CopilotContent: View { .disabled(true) case .busy: Button(action: stop) { - Label("停止", systemImage: "stop.fill") + Label(NSLocalizedString(NSLocalizedString("停止", comment: ""), comment: ""), systemImage: "stop.fill") } - .help("停止") + .help(NSLocalizedString(NSLocalizedString("停止", comment: ""), comment: "")) case .idle: Button(action: start) { - Label("开始", systemImage: "play.fill") + Label(NSLocalizedString(NSLocalizedString("开始", comment: ""), comment: ""), systemImage: "play.fill") } - .help("开始") + .help(NSLocalizedString(NSLocalizedString("开始", comment: ""), comment: "")) } } } diff --git a/MeoAsstMac/Navigation/MAAContent.swift b/MeoAsstMac/Navigation/MAAContent.swift index 9093e41..8f39749 100644 --- a/MeoAsstMac/Navigation/MAAContent.swift +++ b/MeoAsstMac/Navigation/MAAContent.swift @@ -21,7 +21,7 @@ struct MAAContent: View { case .utility: UtilityContent(selection: $selection.utility) case .none: - Text("请从边栏选择功能") + Text(NSLocalizedString("请从边栏选择功能", comment: "")) } } .frame(minWidth: 260) diff --git a/MeoAsstMac/Navigation/MAADetail.swift b/MeoAsstMac/Navigation/MAADetail.swift index 5e80a13..f55d5ab 100644 --- a/MeoAsstMac/Navigation/MAADetail.swift +++ b/MeoAsstMac/Navigation/MAADetail.swift @@ -21,7 +21,7 @@ struct MAADetail: View { case .utility: UtilityDetail(entry: selection.utility) case .none: - Text("请选择内容项目") + Text(NSLocalizedString("请选择内容项目", comment: "")) } } .frame(minWidth: 450, minHeight: 360) diff --git a/MeoAsstMac/Navigation/Sidebar.swift b/MeoAsstMac/Navigation/Sidebar.swift index 82e4e1e..b9eb6f9 100644 --- a/MeoAsstMac/Navigation/Sidebar.swift +++ b/MeoAsstMac/Navigation/Sidebar.swift @@ -19,7 +19,7 @@ struct Sidebar: View { Spacer() SettingsLink { - Label("设置", systemImage: "gear") + Label(NSLocalizedString("设置", comment: ""), systemImage: "gear") } .buttonStyle(.borderless) .frame(maxWidth: .infinity, alignment: .leading) @@ -30,9 +30,9 @@ struct Sidebar: View { Button { toggleSideBar() } label: { - Label("显示/隐藏边栏", systemImage: "sidebar.left") + Label(NSLocalizedString(NSLocalizedString("显示/隐藏边栏", comment: ""), comment: ""), systemImage: "sidebar.left") } - .help("显示/隐藏边栏") + .help(NSLocalizedString(NSLocalizedString("显示/隐藏边栏", comment: ""), comment: "")) } } .frame(minWidth: 150) diff --git a/MeoAsstMac/Navigation/TaskDetail.swift b/MeoAsstMac/Navigation/TaskDetail.swift index d474ece..c47ddd4 100644 --- a/MeoAsstMac/Navigation/TaskDetail.swift +++ b/MeoAsstMac/Navigation/TaskDetail.swift @@ -41,9 +41,9 @@ struct TaskDetail: View { } } } label: { - Label("添加", systemImage: "plus") + Label(NSLocalizedString("添加", comment: ""), systemImage: "plus") } - .help("添加任务") + .help(NSLocalizedString("添加任务", comment: "")) } ToolbarItemGroup { diff --git a/MeoAsstMac/Navigation/TasksContent.swift b/MeoAsstMac/Navigation/TasksContent.swift index 2445696..f092012 100644 --- a/MeoAsstMac/Navigation/TasksContent.swift +++ b/MeoAsstMac/Navigation/TasksContent.swift @@ -29,9 +29,9 @@ struct TasksContent: View { @ToolbarContentBuilder private func listToolbar() -> some ToolbarContent { ToolbarItemGroup { Button(action: deleteSelectedTask) { - Label("删除", systemImage: "trash") + Label(NSLocalizedString("删除", comment: ""), systemImage: "trash") } - .help("删除任务") + .help(NSLocalizedString("删除任务", comment: "")) .disabled(shouldDisableDeletion) } @@ -44,14 +44,14 @@ struct TasksContent: View { .disabled(true) case .busy: Button(action: stop) { - Label("停止", systemImage: "stop.fill") + Label(NSLocalizedString(NSLocalizedString("停止", comment: ""), comment: ""), systemImage: "stop.fill") } - .help("停止") + .help(NSLocalizedString(NSLocalizedString("停止", comment: ""), comment: "")) case .idle: Button(action: start) { - Label("开始", systemImage: "play.fill") + Label(NSLocalizedString(NSLocalizedString("开始", comment: ""), comment: ""), systemImage: "play.fill") } - .help("开始") + .help(NSLocalizedString(NSLocalizedString("开始", comment: ""), comment: "")) } } } diff --git a/MeoAsstMac/Navigation/UtilityContent.swift b/MeoAsstMac/Navigation/UtilityContent.swift index b4b8991..d6f8f1c 100644 --- a/MeoAsstMac/Navigation/UtilityContent.swift +++ b/MeoAsstMac/Navigation/UtilityContent.swift @@ -30,14 +30,14 @@ struct UtilityContent: View { .disabled(true) case .busy: Button(action: stop) { - Label("停止", systemImage: "stop.fill") + Label(NSLocalizedString(NSLocalizedString("停止", comment: ""), comment: ""), systemImage: "stop.fill") } - .help("停止") + .help(NSLocalizedString(NSLocalizedString("停止", comment: ""), comment: "")) case .idle: Button(action: start) { - Label("开始", systemImage: "play.fill") + Label(NSLocalizedString(NSLocalizedString("开始", comment: ""), comment: ""), systemImage: "play.fill") } - .help("开始") + .help(NSLocalizedString(NSLocalizedString("开始", comment: ""), comment: "")) } } } diff --git a/MeoAsstMac/Navigation/UtilityDetail.swift b/MeoAsstMac/Navigation/UtilityDetail.swift index 85e6577..a93ea90 100644 --- a/MeoAsstMac/Navigation/UtilityDetail.swift +++ b/MeoAsstMac/Navigation/UtilityDetail.swift @@ -24,7 +24,7 @@ struct UtilityDetail: View { case .gacha: GachaView() case .none: - Text("请选择识别项目") + Text(NSLocalizedString("请选择识别项目", comment: "")) } } .padding() diff --git a/MeoAsstMac/Settings/GameSettingsView.swift b/MeoAsstMac/Settings/GameSettingsView.swift index b60706d..8ed70db 100644 --- a/MeoAsstMac/Settings/GameSettingsView.swift +++ b/MeoAsstMac/Settings/GameSettingsView.swift @@ -12,7 +12,7 @@ struct GameSettingsView: View { var body: some View { VStack { - Picker("客户端类型:", selection: $viewModel.clientChannel) { + Picker(NSLocalizedString("客户端类型:", comment: ""), selection: $viewModel.clientChannel) { ForEach(MAAClientChannel.allCases, id: \.rawValue) { channel in Text("\(channel.description)").tag(channel) } diff --git a/MeoAsstMac/Settings/SystemSettingsView.swift b/MeoAsstMac/Settings/SystemSettingsView.swift index d73be0f..c4ee021 100644 --- a/MeoAsstMac/Settings/SystemSettingsView.swift +++ b/MeoAsstMac/Settings/SystemSettingsView.swift @@ -7,7 +7,7 @@ struct SystemSettingsView: View { VStack(alignment: .leading) { Toggle(isOn: $viewModel.preventSystemSleeping) { VStack(alignment: .leading, spacing: 2) { - Text("阻止系统睡眠") + Text(NSLocalizedString("阻止系统睡眠", comment: "")) Text("日常任务定时执行会在系统休眠之后失效, 打开此功能可以阻止系统自动睡眠") .font(.caption).foregroundColor(.secondary) } diff --git a/MeoAsstMac/Settings/UpdaterSettingsView.swift b/MeoAsstMac/Settings/UpdaterSettingsView.swift index de77dab..53cee89 100644 --- a/MeoAsstMac/Settings/UpdaterSettingsView.swift +++ b/MeoAsstMac/Settings/UpdaterSettingsView.swift @@ -24,14 +24,14 @@ struct UpdaterSettingsView: View { var body: some View { Form { - Toggle("接收开发版更新", isOn: $useBetaChannel) + Toggle(NSLocalizedString("接收开发版更新", comment: ""), isOn: $useBetaChannel) - Toggle("自动检查更新", isOn: $automaticallyChecksForUpdates) + Toggle(NSLocalizedString("自动检查更新", comment: ""), isOn: $automaticallyChecksForUpdates) .onChange(of: automaticallyChecksForUpdates) { newValue in updater.automaticallyChecksForUpdates = newValue } - Toggle("自动下载更新", isOn: $automaticallyDownloadsUpdates) + Toggle(NSLocalizedString("自动下载更新", comment: ""), isOn: $automaticallyDownloadsUpdates) .disabled(!automaticallyChecksForUpdates) .onChange(of: automaticallyDownloadsUpdates) { newValue in updater.automaticallyDownloadsUpdates = newValue diff --git a/MeoAsstMac/Task Configurations/MallConfiguration.swift b/MeoAsstMac/Task Configurations/MallConfiguration.swift index 7abbdc6..dca17da 100644 --- a/MeoAsstMac/Task Configurations/MallConfiguration.swift +++ b/MeoAsstMac/Task Configurations/MallConfiguration.swift @@ -10,8 +10,8 @@ import Foundation struct MallConfiguration: MAATaskConfiguration { var enable = true var shopping = true - var buy_first = ["招聘许可", "龙门币"] - var blacklist = ["加急许可", "家具零件"] + var buy_first = [NSLocalizedString("招聘许可", comment: ""), NSLocalizedString("龙门币", comment: "")] + var blacklist = [NSLocalizedString("加急许可", comment: ""), NSLocalizedString("家具零件", comment: "")] var force_shopping_if_credit_full = true var title: String { diff --git a/MeoAsstMac/Task Configurations/ReclamationConfiguration.swift b/MeoAsstMac/Task Configurations/ReclamationConfiguration.swift index 26a0dde..5ad37e0 100644 --- a/MeoAsstMac/Task Configurations/ReclamationConfiguration.swift +++ b/MeoAsstMac/Task Configurations/ReclamationConfiguration.swift @@ -11,7 +11,7 @@ struct ReclamationConfiguration: MAATaskConfiguration { var enable = false var theme = ReclamationTheme.tales var mode = 0 - var tool_to_craft = "荧光棒" + var tool_to_craft = NSLocalizedString("荧光棒", comment: "") var num_craft_batches = 16 var increment_mode = 0 diff --git a/MeoAsstMac/Task Configurations/RoguelikeConfiguration.swift b/MeoAsstMac/Task Configurations/RoguelikeConfiguration.swift index b3fdd3a..457057e 100644 --- a/MeoAsstMac/Task Configurations/RoguelikeConfiguration.swift +++ b/MeoAsstMac/Task Configurations/RoguelikeConfiguration.swift @@ -15,8 +15,8 @@ struct RoguelikeConfiguration: MAATaskConfiguration { var investment_enabled = true var investments_count = 999 var stop_when_investment_full = false - var squad = "指挥分队" - var roles = "取长补短" + var squad = NSLocalizedString("指挥分队", comment: "") + var roles = NSLocalizedString("取长补短", comment: "") var core_char = "" var start_with_elite_two = false var only_start_with_elite_two = false diff --git a/MeoAsstMac/Views/CopilotView.swift b/MeoAsstMac/Views/CopilotView.swift index ca8bd44..86fe44a 100644 --- a/MeoAsstMac/Views/CopilotView.swift +++ b/MeoAsstMac/Views/CopilotView.swift @@ -24,7 +24,7 @@ struct CopilotView: View { } .task(id: url) { updateCopilot() } } else { - Text("文件格式错误") + Text(NSLocalizedString("文件格式错误", comment: "")) } } @@ -52,8 +52,8 @@ struct CopilotView: View { viewModel.copilot = .regular(newValue) } HStack { - Toggle("自动编队", isOn: binding.formation) - Toggle("信赖干员", isOn: binding.add_trust) + Toggle(NSLocalizedString("自动编队", comment: ""), isOn: binding.formation) + Toggle(NSLocalizedString("信赖干员", comment: ""), isOn: binding.add_trust) } case .sss(let innerConfig): @@ -63,7 +63,7 @@ struct CopilotView: View { viewModel.copilot = .sss(newValue) } HStack { - Text("循环次数") + Text(NSLocalizedString("循环次数", comment: "")) TextField("1", value: binding.loop_times, format: .number) } .frame(maxWidth: 130) @@ -84,7 +84,7 @@ struct CopilotView: View { } if let equipments = pilot.equipment { - Text("装备:") + Text(equipments.joined(separator: ", ")) + Text(NSLocalizedString("装备:", comment: "")) + Text(equipments.joined(separator: ", ")) } if let strategy = pilot.strategy { @@ -118,7 +118,7 @@ struct CopilotView_Previews: PreviewProvider { static let url = Bundle.main.resourceURL! .appendingPathComponent("resource") .appendingPathComponent("copilot") - .appendingPathComponent("SSS_约翰老妈新建地块") + .appendingPathComponent(NSLocalizedString("SSS_约翰老妈新建地块", comment: "")) .appendingPathExtension("json") static var previews: some View { diff --git a/MeoAsstMac/Views/DepotView.swift b/MeoAsstMac/Views/DepotView.swift index ad6579a..5794fcd 100644 --- a/MeoAsstMac/Views/DepotView.swift +++ b/MeoAsstMac/Views/DepotView.swift @@ -18,13 +18,13 @@ struct DepotView: View { .animation(.default, value: viewModel.depot?.contents) HStack(spacing: 20) { - Text("复制结果JSON至剪贴板:") + Text(NSLocalizedString("复制结果JSON至剪贴板:", comment: "")) - Button("企鹅物流") { + Button(NSLocalizedString("企鹅物流", comment: "")) { copyToPasteboard(text: viewModel.depot?.arkplanner.data) NSWorkspace.shared.open(URL(string: "https://penguin-stats.cn/planner")!) } - Button("明日方舟工具箱") { + Button(NSLocalizedString("明日方舟工具箱", comment: "")) { copyToPasteboard(text: viewModel.depot?.lolicon.data) NSWorkspace.shared.open(URL(string: "https://arkntools.app/#/material")!) } diff --git a/MeoAsstMac/Views/GachaView.swift b/MeoAsstMac/Views/GachaView.swift index 2adab7d..b0bacab 100644 --- a/MeoAsstMac/Views/GachaView.swift +++ b/MeoAsstMac/Views/GachaView.swift @@ -15,11 +15,11 @@ struct GachaView: View { var body: some View { if showNotice { - Text("请注意,这是真的抽卡!不是模拟!!!") + Text(NSLocalizedString("请注意,这是真的抽卡!不是模拟!!!", comment: "")) .font(.title) .bold() - Button("我已知晓,继续") { + Button(NSLocalizedString("我已知晓,继续", comment: "")) { showNotice = false } } else { @@ -50,11 +50,11 @@ struct GachaView: View { } HStack { - Button("寻访一次") { + Button(NSLocalizedString("寻访一次", comment: "")) { gachaPoll(once: true) } - Button("寻访十次") { + Button(NSLocalizedString("寻访十次", comment: "")) { gachaPoll(once: false) } } @@ -94,26 +94,26 @@ struct GachaView: View { // MARK: - Constant Texts - private let prompt = " 在罗德岛竟然有这么多志同道合的志士。是的,诗歌!战争!自由!能在历史的洪流中汇集众人的力量,为这片大地的改变而奋斗。真是令人振奋!这些悲壮又非凡的故事,是应当被传颂下去的。" + private let prompt = NSLocalizedString(" 在罗德岛竟然有这么多志同道合的志士。是的,诗歌!战争!自由!能在历史的洪流中汇集众人的力量,为这片大地的改变而奋斗。真是令人振奋!这些悲壮又非凡的故事,是应当被传颂下去的。", comment: "") private let tips = [ - "保佑胜利的英雄,我将领受你们的祝福。", - "伟大的战士们啊,我会在你们身边,与你们一同奋勇搏杀。", - "再转身回头的时候,我们将带着胜利归来。", - "不需畏惧,我们会战胜那些鲁莽的家伙!", - "欢呼吧!", - "来吧——", - "现在可没有后悔的余地了。", - "无需退路。", - "英雄们啊,为这最强大的信念,请站在我们这边。", - "颤抖吧,在真正的勇敢面前。", - "哭嚎吧,为你们不堪一击的信念。", - "你将在此跪拜。", - "是吗,我们做到了吗......我现在,正体会至高的荣誉和幸福。", - "转身吧,勇士们。我们已经获得了完美的胜利,现在是该回去享受庆祝的盛典了。", - "听啊,悲鸣停止了。这是幸福的和平到来前的宁静。", - "纵使人类的战争没尽头......在这一刻,我们守护住了自己生的尊严。离开吧。但要昂首挺胸。", - "这对角可能会不小心撞倒些家具,我会尽量小心。", + NSLocalizedString("保佑胜利的英雄,我将领受你们的祝福。", comment: ""), + NSLocalizedString("伟大的战士们啊,我会在你们身边,与你们一同奋勇搏杀。", comment: ""), + NSLocalizedString("再转身回头的时候,我们将带着胜利归来。", comment: ""), + NSLocalizedString("不需畏惧,我们会战胜那些鲁莽的家伙!", comment: ""), + NSLocalizedString("欢呼吧!", comment: ""), + NSLocalizedString("来吧——", comment: ""), + NSLocalizedString("现在可没有后悔的余地了。", comment: ""), + NSLocalizedString("无需退路。", comment: ""), + NSLocalizedString("英雄们啊,为这最强大的信念,请站在我们这边。", comment: ""), + NSLocalizedString("颤抖吧,在真正的勇敢面前。", comment: ""), + NSLocalizedString("哭嚎吧,为你们不堪一击的信念。", comment: ""), + NSLocalizedString("你将在此跪拜。", comment: ""), + NSLocalizedString("是吗,我们做到了吗......我现在,正体会至高的荣誉和幸福。", comment: ""), + NSLocalizedString("转身吧,勇士们。我们已经获得了完美的胜利,现在是该回去享受庆祝的盛典了。", comment: ""), + NSLocalizedString("听啊,悲鸣停止了。这是幸福的和平到来前的宁静。", comment: ""), + NSLocalizedString("纵使人类的战争没尽头......在这一刻,我们守护住了自己生的尊严。离开吧。但要昂首挺胸。", comment: ""), + NSLocalizedString("这对角可能会不小心撞倒些家具,我会尽量小心。", comment: ""), ] } diff --git a/MeoAsstMac/Views/LogView.swift b/MeoAsstMac/Views/LogView.swift index fa10e01..3bdd9e1 100644 --- a/MeoAsstMac/Views/LogView.swift +++ b/MeoAsstMac/Views/LogView.swift @@ -13,9 +13,9 @@ struct LogView: View { var body: some View { ScrollViewReader { proxy in Table(viewModel.logs) { - TableColumn("时间", value: \.date.maaFormat) + TableColumn(NSLocalizedString("时间", comment: ""), value: \.date.maaFormat) .width(min: 100, ideal: 125, max: 150) - TableColumn("信息") { log in + TableColumn(NSLocalizedString("信息", comment: "")) { log in Text(log.content) .textSelection(.enabled) .foregroundColor(log.color.textColor) @@ -28,10 +28,10 @@ struct LogView: View { Divider() Toggle(isOn: $viewModel.trackTail) { - Label("现在", systemImage: "arrow.down.to.line") + Label(NSLocalizedString("现在", comment: ""), systemImage: "arrow.down.to.line") .foregroundColor(viewModel.trackTail ? Color.accentColor : nil) } - .help("自动滚动到底部") + .help(NSLocalizedString("自动滚动到底部", comment: "")) } } .onChange(of: viewModel.logs) { _ in diff --git a/MeoAsstMac/Views/OperBoxView.swift b/MeoAsstMac/Views/OperBoxView.swift index 8171b59..bdefa0a 100644 --- a/MeoAsstMac/Views/OperBoxView.swift +++ b/MeoAsstMac/Views/OperBoxView.swift @@ -46,17 +46,17 @@ struct OperBoxView: View { } private let excludedOperNames = [ - "预备干员-近战", - "预备干员-术师", - "预备干员-后勤", - "预备干员-狙击", - "预备干员-重装", - "郁金香", + NSLocalizedString("预备干员-近战", comment: ""), + NSLocalizedString("预备干员-术师", comment: ""), + NSLocalizedString("预备干员-后勤", comment: ""), + NSLocalizedString("预备干员-狙击", comment: ""), + NSLocalizedString("预备干员-重装", comment: ""), + NSLocalizedString("郁金香", comment: ""), "Stormeye", "Touch", "Pith", "Sharp", - "阿米娅-WARRIOR", + NSLocalizedString("阿米娅-WARRIOR", comment: ""), ] } diff --git a/MeoAsstMac/Views/RecruitView.swift b/MeoAsstMac/Views/RecruitView.swift index cc37496..55441bc 100644 --- a/MeoAsstMac/Views/RecruitView.swift +++ b/MeoAsstMac/Views/RecruitView.swift @@ -33,17 +33,17 @@ struct RecruitView: View { @ViewBuilder private func configView() -> some View { HStack(spacing: 20) { VStack(alignment: .leading) { - Toggle("自动设置时间", isOn: $viewModel.recruitConfig.set_time) - Text("自动选择 Tags:") + Toggle(NSLocalizedString("自动设置时间", comment: ""), isOn: $viewModel.recruitConfig.set_time) + Text(NSLocalizedString("自动选择 Tags:", comment: "")) } VStack(alignment: .leading) { Toggle("3星设置7:40而非9:00", isOn: $lv3ShortTime) HStack { - Toggle("3星", isOn: autoSelect(level: 3)) - Toggle("4星", isOn: autoSelect(level: 4)) - Toggle("5星", isOn: autoSelect(level: 5)) - Toggle("6星", isOn: autoSelect(level: 6)) + Toggle(NSLocalizedString("3星", comment: ""), isOn: autoSelect(level: 3)) + Toggle(NSLocalizedString("4星", comment: ""), isOn: autoSelect(level: 4)) + Toggle(NSLocalizedString("5星", comment: ""), isOn: autoSelect(level: 5)) + Toggle(NSLocalizedString("6星", comment: ""), isOn: autoSelect(level: 6)) } } } diff --git a/MeoAsstMac/Views/TaskButtons.swift b/MeoAsstMac/Views/TaskButtons.swift index 2130099..11a1b1b 100644 --- a/MeoAsstMac/Views/TaskButtons.swift +++ b/MeoAsstMac/Views/TaskButtons.swift @@ -11,7 +11,7 @@ struct TaskButtons: View { @ObservedObject var viewModel: MAAViewModel var body: some View { - Button("开始任务") { + Button(NSLocalizedString("开始任务", comment: "")) { Task { viewModel.dailyTasksDetailMode = .log try await viewModel.startTasks() @@ -19,14 +19,14 @@ struct TaskButtons: View { } .keyboardShortcut("R", modifiers: .command) - Button("停止任务") { + Button(NSLocalizedString("停止任务", comment: "")) { Task { try await viewModel.stop() } } .keyboardShortcut(".", modifiers: .command) - Button("全部启用") { + Button(NSLocalizedString("全部启用", comment: "")) { for id in viewModel.tasks.keys { switch viewModel.tasks[id]?.typeName { case .Roguelike, .Reclamation: @@ -38,7 +38,7 @@ struct TaskButtons: View { } .keyboardShortcut("E", modifiers: [.command, .shift]) - Button("全部取消") { + Button(NSLocalizedString("全部取消", comment: "")) { for id in viewModel.tasks.keys { viewModel.tasks[id]?.enabled = false } diff --git a/MeoAsstMac/Views/TaskTimerView.swift b/MeoAsstMac/Views/TaskTimerView.swift index 7c2a119..4ce300a 100644 --- a/MeoAsstMac/Views/TaskTimerView.swift +++ b/MeoAsstMac/Views/TaskTimerView.swift @@ -9,7 +9,7 @@ struct TaskTimerView: View { Button(action: { viewModel.appendNewTaskTimer() }) { - Label("新增定时", systemImage: "plus") + Label(NSLocalizedString("新增定时", comment: ""), systemImage: "plus") } .padding() Spacer() @@ -25,13 +25,13 @@ struct TaskTimerView: View { ) } } - .alert("允许阻止系统睡眠", + .alert(NSLocalizedString("允许阻止系统睡眠", comment: ""), isPresented: $showingAlertForPreventingSleep, actions: { - Button("允许") { + Button(NSLocalizedString("允许", comment: "")) { viewModel.preventSystemSleeping = true } - Button("取消", role: .cancel) {} + Button(NSLocalizedString("取消", comment: ""), role: .cancel) {} }, message: { Text("日常任务定时执行会在系统休眠之后失效, 打开此功能可以阻止系统自动睡眠") }) @@ -63,14 +63,14 @@ struct TaskTimerItem: View { Spacer() - Picker(selection: $taskTimer.hour, label: Text("时")) { + Picker(selection: $taskTimer.hour, label: Text(NSLocalizedString("时", comment: ""))) { ForEach(hours, id: \.self) { hour in Text("\(hour)") } } .frame(width: 100) - Picker(selection: $taskTimer.minute, label: Text("分")) { + Picker(selection: $taskTimer.minute, label: Text(NSLocalizedString("分", comment: ""))) { ForEach(minutes, id: \.self) { minute in Text(String(format: "%02d", minute)) } @@ -80,7 +80,7 @@ struct TaskTimerItem: View { Spacer() Toggle(isOn: $taskTimer.isEnabled, label: { - Text("开启") + Text(NSLocalizedString("开启", comment: "")) }) .toggleStyle(.switch) .onChange(of: taskTimer.isEnabled) { diff --git a/MeoAsstMac/Views/VideoRecogView.swift b/MeoAsstMac/Views/VideoRecogView.swift index 7a82070..d2d8be7 100644 --- a/MeoAsstMac/Views/VideoRecogView.swift +++ b/MeoAsstMac/Views/VideoRecogView.swift @@ -10,7 +10,7 @@ import SwiftUI struct VideoRecogView: View { var body: some View { VStack(spacing: 20) { - Text("请打开“自动战斗”页,将攻略视频文件拖入外部作业列表即可。") + Text(NSLocalizedString("请打开“自动战斗”页,将攻略视频文件拖入外部作业列表即可。", comment: "")) Text("需要视频分辨率为 16:9,且无黑边、模拟器边框、异形屏矫正等干扰因素。") } } diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings new file mode 100644 index 0000000..4eb6b1f --- /dev/null +++ b/Resources/en.lproj/Localizable.strings @@ -0,0 +1,230 @@ +"ConnectingToEmulator" = "에뮬레이터에 연결 중..."; +"Running" = "실행 중..."; +"Stopped" = "중지됨"; + +"ResolutionNotSupported" = "에뮬레이터 해상도가 지원되지 않습니다. 720p 이상, 16:9 비율로 설정하세요."; +"ResolutionAcquisitionFailure" = "에뮬레이터 해상도 획득 실패. 컴퓨터를 재시작하거나 다른 에뮬레이터로 전환 후 다시 시도하세요."; +"TryToReconnect %d" = "에뮬레이터 연결이 끊어졌습니다. 재연결 시도 중 (%d)"; +"ReconnectSuccess" = "재연결 성공, 작업 계속 진행"; +"ReconnectFailed" = "재연결 실패, 연결이 끊어졌습니다!"; +"TouchModeNotAvailable" = "터치 모드를 사용할 수 없습니다. 설정 - 연결 설정에서 다른 터치 모드로 전환하세요."; +"ScreencapFailed" = "스크린샷 실패. 반복될 경우 재시작하거나 에뮬레이터를 변경하세요!"; +"IdentifyTheMistakes" = "오류 식별"; +"CombatError" = "전투 오류"; + +/* Task Chain */ + +"TaskError %@" = "작업 오류: %@"; +"StartTask %@" = "작업 시작: %@"; +"CompleteTask %@" = "작업 완료: %@"; +"StartCombat %@" = "전투 시작: %@"; +"CompleteCombat" = "전투 완료"; +"AllTasksComplete" = "모든 작업이 완료되었습니다!"; + +// MARK: - SubTaskError + +"FailedToOpenClient" = "클라이언트 열기 실패. 구성 파일을 확인하세요."; +"ErrorOccurred" = "오류 발생"; +"%@ HasReturned" = "%@가 돌아왔습니다"; +"DropRecognitionError" = "드롭 인식 오류"; +"%@ GiveUpUploadingPenguins" = "%@가 펭귄 물류 업로드를 포기했습니다"; +"TheEX" = "보상 없는 스테이지, 중지됨"; + +// MARK: - SubTaskStart + +"MissionStart %d UnitTime" = "임무 시작 %d회"; +"MedicineUsed %d UnitTime" = "약물 사용 %d회"; +"StoneUsed %d UnitTime" = "오리지늄 사용 %d회"; +"ActingCommandError" = "명령 실행 오류"; +"LabelsRefreshed" = "라벨 새로고침"; +"RecruitConfirm" = "채용 확인"; +"InfrastDormDoubleConfirmed" = "오퍼레이터 충돌"; +"BegunToExplore %d UnitTime" = "탐험 시작 %d회"; +"HasInvested %d UnitTime" = "투자 %d회"; +"ExplorationAbandoned" = "탐험 포기"; +"FightCompleted" = "전투 완료"; +"FightFailed" = "전투 실패"; +"UpperLimit" = "투자 한도 도달"; +"GameCrash" = "게임 충돌, 재시작 중"; +"GameDrop" = "게임 연결 끊김, 재연결 중"; +"GameDropNoRestart" = "게임 연결 끊김, 재연결 안 함, 작업 중지"; +"RoguelikeGamePass" = "로그라이크 게임 클리어!"; +"RoguelikeSpecialItemBought" = "특수 아이템 구매!"; +"SSSGamePass" = "SSS 게임 클리어!"; +"Trader" = "스테이지: 상인"; +"SafeHouse" = "스테이지: 안전 가옥"; +"Encounter" = "스테이지: 조우"; +"CambatDps" = "스테이지: 일반 전투"; +"EmergencyDps" = "스테이지: 긴급 전투"; +"DreadfulFoe" = "스테이지: 무서운 적"; + +// MARK: - SubTaskExtraInfo + +"NoDrop" = "없음"; +"Drop" = "이번 드롭:"; +"TotalDrop" = "총 드롭:"; +"ThisFacility %@ %d" = "현재 시설: %@ %d"; +"ProductIncorrect" = "제품이 구성과 일치하지 않음"; +"RecruitingResults" = "채용 인식 결과:"; +"RecruitingTips" = "채용 팁"; +"RecruitmentOfStar" = "채용 결과 {0}성!"; +"RecruitmentOfBot" = "채용 결과 봇!"; +"Choose Tags" = "태그 선택:"; +"Refreshed %d UnitTime" = "현재 슬롯 새로고침 %d회"; +"NotEnoughStaff" = "사용 가능한 오퍼레이터 부족"; +"StageInfoError" = "스테이지 인식 오류"; +"BattleFormation" = "편성 시작"; +"BattleFormationSelected %@" = "오퍼레이터 선택: %@"; +"CurrentSteps %@" = "현재 단계: %@"; +"UnsupportedLevel" = "지원되지 않는 스테이지, MAA 소프트웨어 업데이트 필요!"; +"RecruitTagsDetected" = "인식 결과:"; +"ConnectFailed" = "연결 실패"; +"TryToStartEmulator" = "에뮬레이터 시작 시도 중"; +"CheckSettings" = "연결 설정을 확인하거나 컴퓨터를 재시작하세요"; +"Save to %@" = "저장 위치: %@"; +"GainParadigm %@" = "패러다임 변화: %@"; + +// MARK: - RecruitView + +"RecruitmentRecognitionTip" = "팁: 메인 화면의 자동 채용과는 별개의 기능입니다. 게임의 채용 태그 화면을 수동으로 열고 사용하세요."; +"连接设置"="Connection Settings"; +"游戏设置"="Game Settings"; +"更新设置"="Update Settings"; +"系统设置"="System Settings"; +"客户端类型:"="Client Type:"; +"阻止系统睡眠"="Prevent System Sleep"; +"接收开发版更新"="Receive Developer Updates"; +"自动检查更新"="Automatically Check for Updates"; +"自动下载更新"="Automatically Download Updates"; +"指挥分队"="Command Squad"; +"取长补短"="Complement Each Other"; +"招聘许可"="Recruitment Permit"; +"龙门币"="Lungmen Coins"; +"加急许可"="Urgent Permit"; +"家具零件"="Furniture Parts"; +"荧光棒"="Glow Stick"; +"不支持此版本 PlayCover"="This version of PlayCover is not supported"; +"肉鸽主题:"="Roguelike Theme:"; +"策略:"="Strategy:"; +"最多探索次数:"="Maximum Exploration Times:"; +"投资源石锭"="Invest Originium Ingots"; +"刷新商店(指路鳞)"="Refresh Shop (Guiding Scale)"; +"储备源石锭达到上限时停止"="Stop when Originium Ingot Reserve Reaches Limit"; +"最多投资源石锭数量:"="Maximum Number of Originium Ingots to Invest:"; +"开局分队:"="Starting Squad:"; +"信用购物"="Credit Shopping"; +"信用溢出时无视黑名单"="Ignore Blacklist When Credit Overflows"; +"借助战赚信用"="Earn Credit Through Battle"; +"优先购买"="Priority Purchase"; +"黑名单"="Blacklist"; +"已启用"="Enabled"; +"未启用"="Disabled"; +"无人机用途:"="Drone Usage:"; +"自动刷新3星Tags"="Automatically Refresh 3-Star Tags"; +"自动使用加急许可"="Automatically Use Urgent Permit"; +"领取每日/每周任务奖励"="Claim Daily/Weekly Task Rewards"; +"领取所有邮件奖励"="Claim All Mail Rewards"; +"进行每日免费单抽"="Perform Daily Free Single Draw"; +"领取幸运墙合成玉奖励"="Claim Lucky Wall Originium Shard Reward"; +"领取限时开采许可合成玉奖励"="Claim Limited Time Mining Permit Originium Shard Reward"; +"领取五周年赠送月卡奖励"="Claim 5th Anniversary Monthly Card Reward"; +"请在“设置” > “游戏设置” 中选择客户端类型。"="Please select the client type in 'Settings' > 'Game Settings'."; +"自动启动客户端"="Automatically Start Client"; +"主题:"="Theme:"; +"策略:"="Strategy:"; +"支援道具:"="Support Items:"; +"组装批次数:"="Number of Assembly Batches:"; +"组装数量增加模式:"="Assembly Quantity Increase Mode:"; +"关卡名"="Stage Name"; +"关卡选择"="Stage Selection"; +"当前/上次"="Current/Last"; +"请从边栏选择功能"="Please select a function from the sidebar"; +"内置作业"="Built-in Tasks"; +"外部作业(可拖入文件)"="External Tasks (Files can be dragged in)"; +"移除"="Remove"; +"移除作业"="Remove Task"; +"停止"="Stop"; +"停止"="Stop"; +"开始"="Start"; +"开始"="Start"; +"删除"="Delete"; +"删除任务"="Delete Task"; +"停止"="Stop"; +"停止"="Stop"; +"开始"="Start"; +"开始"="Start"; +"设置"="Settings"; +"显示/隐藏边栏"="Show/Hide Sidebar"; +"显示/隐藏边栏"="Show/Hide Sidebar"; +"请选择识别项目"="Please select recognition items"; +"停止"="Stop"; +"停止"="Stop"; +"开始"="Start"; +"开始"="Start"; +"请选择内容项目"="Please select content items"; +"添加"="Add"; +"添加任务"="Add Task"; +"任务"="Task"; +"检查更新…"="Check for Updates…"; +"打开日志文件夹…"="Open Log Folder…"; +"PlayCover 链接…"="PlayCover Link…"; +"请打开“自动战斗”页,将攻略视频文件拖入外部作业列表即可。"="Please open the 'Auto Battle' page and drag the strategy video file into the external task list."; +"文件格式错误"="File Format Error"; +"自动编队"="Auto Formation"; +"信赖干员"="Trust Operators"; +"循环次数"="Number of Cycles"; +"装备:"="Equipment:"; +"SSS_约翰老妈新建地块"="SSS_John's Mom's New Plot"; +"自动设置时间"="Automatically Set Time"; +"自动选择 Tags:"="Automatically Select Tags:"; +"3星"="3 Stars"; +"4星"="4 Stars"; +"5星"="5 Stars"; +"6星"="6 Stars"; +"预备干员-近战"="Reserve Operator - Melee"; +"预备干员-术师"="Reserve Operator - Caster"; +"预备干员-后勤"="Reserve Operator - Logistics"; +"预备干员-狙击"="Reserve Operator - Sniper"; +"预备干员-重装"="Reserve Operator - Defender"; +"郁金香"="Tulip"; +"阿米娅-WARRIOR"="Amiya-WARRIOR"; +"复制结果JSON至剪贴板:"="Copy Result JSON to Clipboard:"; +"企鹅物流"="Penguin Logistics"; +"明日方舟工具箱"="Arknights Toolbox"; +"开始任务"="Start Task"; +"停止任务"="Stop Task"; +"全部启用"="Enable All"; +"全部取消"="Cancel All"; +"新增定时"="Add New Timer"; +"允许阻止系统睡眠"="Allow Preventing System Sleep"; +"允许"="Allow"; +"取消"="Cancel"; +"时"="Hour"; +"分"="Minute"; +"开启"="Enable"; +"时间"="Time"; +"信息"="Information"; +"现在"="Now"; +"自动滚动到底部"="Auto Scroll to Bottom"; +"请注意,这是真的抽卡!不是模拟!!!"="Please note, this is a real draw! Not a simulation!!!"; +"我已知晓,继续"="I understand, continue"; +"寻访一次"="Single Draw"; +"寻访十次"="Ten Draws"; +" 在罗德岛竟然有这么多志同道合的志士。是的,诗歌!战争!自由!能在历史的洪流中汇集众人的力量,为这片大地的改变而奋斗。真是令人振奋!这些悲壮又非凡的故事,是应当被传颂下去的。"=" There are so many like-minded people on Rhodes Island. Yes, poetry! War! Freedom! To gather the strength of the people in the torrent of history and strive for the change of this land. It's really exciting! These tragic and extraordinary stories should be passed down."; +"保佑胜利的英雄,我将领受你们的祝福。"="Blessed heroes of victory, I will receive your blessings."; +"伟大的战士们啊,我会在你们身边,与你们一同奋勇搏杀。"="Great warriors, I will be by your side, fighting bravely with you."; +"再转身回头的时候,我们将带着胜利归来。"="When we turn back again, we will return with victory."; +"不需畏惧,我们会战胜那些鲁莽的家伙!"="No need to fear, we will defeat those reckless guys!"; +"欢呼吧!"="Cheer!"; +"来吧——"="Come on——"; +"现在可没有后悔的余地了。"="There is no room for regret now."; +"无需退路。"="No retreat needed."; +"英雄们啊,为这最强大的信念,请站在我们这边。"="Heroes, for this strongest belief, please stand with us."; +"颤抖吧,在真正的勇敢面前。"="Tremble, in the face of true courage."; +"哭嚎吧,为你们不堪一击的信念。"="Cry out, for your fragile beliefs."; +"你将在此跪拜。"="You will kneel here."; +"是吗,我们做到了吗......我现在,正体会至高的荣誉和幸福。"="Is that so, did we do it... Now, I am experiencing the highest honor and happiness."; +"转身吧,勇士们。我们已经获得了完美的胜利,现在是该回去享受庆祝的盛典了。"="Turn around, warriors. We have achieved a perfect victory, now it's time to go back and enjoy the celebration."; +"听啊,悲鸣停止了。这是幸福的和平到来前的宁静。"="Listen, the wailing has stopped. This is the tranquility before the arrival of happy peace."; +"纵使人类的战争没尽头......在这一刻,我们守护住了自己生的尊严。离开吧。但要昂首挺胸。"="Even if human wars have no end... At this moment, we have protected our dignity of life. Let's leave. But with heads held high."; +"这对角可能会不小心撞倒些家具,我会尽量小心。"="These horns might accidentally knock over some furniture, I'll be careful."; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings new file mode 100644 index 0000000..82018a9 --- /dev/null +++ b/Resources/ko.lproj/Localizable.strings @@ -0,0 +1,235 @@ +"ConnectingToEmulator" = "에뮬레이터에 연결 중..."; +"Running" = "실행 중..."; +"Stopped" = "중지됨"; + +"ResolutionNotSupported" = "에뮬레이터 해상도가 지원되지 않습니다. 720p 이상, 16:9 비율로 설정하세요."; +"ResolutionAcquisitionFailure" = "에뮬레이터 해상도 획득 실패. 컴퓨터를 재시작하거나 다른 에뮬레이터로 전환 후 다시 시도하세요."; +"TryToReconnect %d" = "에뮬레이터 연결이 끊어졌습니다. 재연결 시도 중 (%d)"; +"ReconnectSuccess" = "재연결 성공, 작업 계속 진행"; +"ReconnectFailed" = "재연결 실패, 연결이 끊어졌습니다!"; +"TouchModeNotAvailable" = "터치 모드를 사용할 수 없습니다. 설정 - 연결 설정에서 다른 터치 모드로 전환하세요."; +"ScreencapFailed" = "스크린샷 실패. 반복될 경우 재시작하거나 에뮬레이터를 변경하세요!"; +"IdentifyTheMistakes" = "오류 식별"; +"CombatError" = "전투 오류"; + +/* Task Chain */ + +"TaskError %@" = "작업 오류: %@"; +"StartTask %@" = "작업 시작: %@"; +"CompleteTask %@" = "작업 완료: %@"; +"StartCombat %@" = "전투 시작: %@"; +"CompleteCombat" = "전투 완료"; +"AllTasksComplete" = "모든 작업이 완료되었습니다!"; + +// MARK: - SubTaskError + +"FailedToOpenClient" = "클라이언트 열기 실패. 구성 파일을 확인하세요."; +"ErrorOccurred" = "오류 발생"; +"%@ HasReturned" = "%@가 돌아왔습니다"; +"DropRecognitionError" = "드롭 인식 오류"; +"%@ GiveUpUploadingPenguins" = "%@가 펭귄 물류 업로드를 포기했습니다"; +"TheEX" = "보상 없는 스테이지, 중지됨"; + +// MARK: - SubTaskStart + +"MissionStart %d UnitTime" = "임무 시작 %d회"; +"MedicineUsed %d UnitTime" = "약물 사용 %d회"; +"StoneUsed %d UnitTime" = "오리지늄 사용 %d회"; +"ActingCommandError" = "명령 실행 오류"; +"LabelsRefreshed" = "라벨 새로고침"; +"RecruitConfirm" = "채용 확인"; +"InfrastDormDoubleConfirmed" = "오퍼레이터 충돌"; +"BegunToExplore %d UnitTime" = "탐험 시작 %d회"; +"HasInvested %d UnitTime" = "투자 %d회"; +"ExplorationAbandoned" = "탐험 포기"; +"FightCompleted" = "전투 완료"; +"FightFailed" = "전투 실패"; +"UpperLimit" = "투자 한도 도달"; +"GameCrash" = "게임 충돌, 재시작 중"; +"GameDrop" = "게임 연결 끊김, 재연결 중"; +"GameDropNoRestart" = "게임 연결 끊김, 재연결 안 함, 작업 중지"; +"RoguelikeGamePass" = "로그라이크 게임 클리어!"; +"RoguelikeSpecialItemBought" = "특수 아이템 구매!"; +"SSSGamePass" = "SSS 게임 클리어!"; +"Trader" = "스테이지: 상인"; +"SafeHouse" = "스테이지: 안전 가옥"; +"Encounter" = "스테이지: 조우"; +"CambatDps" = "스테이지: 일반 전투"; +"EmergencyDps" = "스테이지: 긴급 전투"; +"DreadfulFoe" = "스테이지: 무서운 적"; + +// MARK: - SubTaskExtraInfo + +"NoDrop" = "없음"; +"Drop" = "이번 드롭:"; +"TotalDrop" = "총 드롭:"; +"ThisFacility %@ %d" = "현재 시설: %@ %d"; +"ProductIncorrect" = "제품이 구성과 일치하지 않음"; +"RecruitingResults" = "채용 인식 결과:"; +"RecruitingTips" = "채용 팁"; +"RecruitmentOfStar" = "채용 결과 {0}성!"; +"RecruitmentOfBot" = "채용 결과 봇!"; +"Choose Tags" = "태그 선택:"; +"Refreshed %d UnitTime" = "현재 슬롯 새로고침 %d회"; +"NotEnoughStaff" = "사용 가능한 오퍼레이터 부족"; +"StageInfoError" = "스테이지 인식 오류"; +"BattleFormation" = "편성 시작"; +"BattleFormationSelected %@" = "오퍼레이터 선택: %@"; +"CurrentSteps %@" = "현재 단계: %@"; +"UnsupportedLevel" = "지원되지 않는 스테이지, MAA 소프트웨어 업데이트 필요!"; +"RecruitTagsDetected" = "인식 결과:"; +"ConnectFailed" = "연결 실패"; +"TryToStartEmulator" = "에뮬레이터 시작 시도 중"; +"CheckSettings" = "연결 설정을 확인하거나 컴퓨터를 재시작하세요"; +"Save to %@" = "저장 위치: %@"; +"GainParadigm %@" = "패러다임 변화: %@"; + +// MARK: - RecruitView + +"RecruitmentRecognitionTip" = "팁: 메인 화면의 자동 채용과는 별개의 기능입니다. 게임의 채용 태그 화면을 수동으로 열고 사용하세요."; +"连接设置"="연결 설정"; +"游戏设置"="게임 설정"; +"更新设置"="업데이트 설정"; +"系统设置"="시스템 설정"; +"客户端类型:"="클라이언트 유형:"; +"阻止系统睡眠"="시스템 절전 방지"; +"接收开发版更新"="개발자 버전 업데이트 수신"; +"自动检查更新"="자동 업데이트 확인"; +"自动下载更新"="자동 업데이트 다운로드"; +"指挥分队"="지휘 분대"; +"取长补短"="장점을 살리고 단점을 보완하다"; +"招聘许可"="채용 허가"; +"龙门币"="룽먼 코인"; +"加急许可"="긴급 허가"; +"家具零件"="가구 부품"; +"荧光棒"="야광봉"; +"不支持此版本 PlayCover"="이 버전의 PlayCover는 지원되지 않습니다"; +"肉鸽主题:"="로그라이크 테마:"; +"策略:"="전략:"; +"最多探索次数:"="최대 탐험 횟수:"; +"投资源石锭"="오리지늄 주괴 투자"; +"刷新商店(指路鳞)"="상점 새로고침 (지침 비늘)"; +"储备源石锭达到上限时停止"="오리지늄 주괴 비축이 한도에 도달하면 중지"; +"最多投资源石锭数量:"="최대 오리지늄 주괴 투자 수:"; +"开局分队:"="시작 분대:"; +"信用购物"="신용 쇼핑"; +"信用溢出时无视黑名单"="신용이 넘칠 때 블랙리스트 무시"; +"借助战赚信用"="전투를 통해 신용 획득"; +"优先购买"="우선 구매"; +"黑名单"="블랙리스트"; +"已启用"="활성화됨"; +"未启用"="비활성화됨"; +"无人机用途:"="드론 용도:"; +"自动刷新3星Tags"="자동 새로고침 3성 태그"; +"自动使用加急许可"="긴급 허가 자동 사용"; +"领取每日/每周任务奖励"="일일/주간 임무 보상 수령"; +"领取所有邮件奖励"="모든 메일 보상 수령"; +"进行每日免费单抽"="일일 무료 단일 뽑기 진행"; +"领取幸运墙合成玉奖励"="행운의 벽 합성옥 보상 수령"; +"领取限时开采许可合成玉奖励"="한정 채굴 허가 합성옥 보상 수령"; +"领取五周年赠送月卡奖励"="5주년 기념 월간 카드 보상 수령"; +"请在“设置” > “游戏设置” 中选择客户端类型。"="“설정” > “게임 설정”에서 클라이언트 유형을 선택하세요."; +"自动启动客户端"="클라이언트 자동 시작"; +"主题:"="테마:"; +"策略:"="전략:"; +"支援道具:"="지원 도구:"; +"组装批次数:"="조립 횟수:"; +"组装数量增加模式:"="조립 수량 증가 모드:"; +"关卡名"="스테이지 이름"; +"关卡选择"="스테이지 선택"; +"当前/上次"="현재/마지막"; +"请从边栏选择功能"="사이드바에서 기능을 선택하세요"; +"内置作业"="내장 작업"; +"外部作业(可拖入文件)"="외부 작업 (파일을 드래그하여 추가 가능)"; +"移除"="제거"; +"移除作业"="작업 제거"; +"停止"="중지"; +"停止"="중지"; +"开始"="시작"; +"开始"="시작"; +"删除"="삭제"; +"删除任务"="작업 삭제"; +"停止"="중지"; +"停止"="중지"; +"开始"="시작"; +"开始"="시작"; +"设置"="설정"; +"显示/隐藏边栏"="사이드바 표시/숨기기"; +"显示/隐藏边栏"="사이드바 표시/숨기기"; +"请选择识别项目"="인식 항목을 선택하세요"; +"停止"="중지"; +"停止"="중지"; +"开始"="시작"; +"开始"="시작"; +"请选择内容项目"="내용 항목을 선택하세요"; +"添加"="추가"; +"添加任务"="작업 추가"; +"任务"="작업"; +"检查更新…"="업데이트 확인 중…"; +"打开日志文件夹…"="로그 폴더 열기…"; +"PlayCover 链接…"="PlayCover 링크…"; +"请打开“自动战斗”页,将攻略视频文件拖入外部作业列表即可。"="“자동 전투” 페이지를 열고 공략 비디오 파일을 외부 작업 목록에 드래그하세요."; +"文件格式错误"="파일 형식 오류"; +"自动编队"="자동 편성"; +"信赖干员"="신뢰 오퍼레이터"; +"循环次数"="반복 횟수"; +"装备:"="장비:"; +"SSS_约翰老妈新建地块"="SSS_존엄마 신규 구역"; +"自动设置时间"="자동 시간 설정"; +"自动选择 Tags:"="태그 자동 선택:"; +"3星"="3성"; +"4星"="4성"; +"5星"="5성"; +"6星"="6성"; +"预备干员-近战"="예비 오퍼레이터-근접"; +"预备干员-术师"="예비 오퍼레이터-술사"; +"预备干员-后勤"="예비 오퍼레이터-후방 지원"; +"预备干员-狙击"="예비 오퍼레이터-저격"; +"预备干员-重装"="예비 오퍼레이터-중장비"; +"郁金香"="튤립"; +"阿米娅-WARRIOR"="아미야-전사"; +"复制结果JSON至剪贴板:"="결과 JSON을 클립보드에 복사:"; +"企鹅物流"="펭귄 물류"; +"明日方舟工具箱"="명일방주 도구 상자"; +"开始任务"="작업 시작"; +"停止任务"="작업 중지"; +"全部启用"="모두 활성화"; +"全部取消"="모두 취소"; +"新增定时"="새로운 타이머 추가"; +"允许阻止系统睡眠"="시스템 절전 방지 허용"; +"允许"="허용"; +"取消"="취소"; +"时"="시"; +"分"="분"; +"开启"="켜기"; +"时间"="시간"; +"信息"="정보"; +"现在"="지금"; +"自动滚动到底部"="자동으로 맨 아래로 스크롤"; +"请注意,这是真的抽卡!不是模拟!!!"="주의: 이건 진짜 뽑기입니다! 시뮬레이션이 아닙니다!!!"; +"我已知晓,继续"="알겠습니다, 계속"; +"寻访一次"="한 번 뽑기"; +"寻访十次"="열 번 뽑기"; +" 在罗德岛竟然有这么多志同道合的志士。是的,诗歌!战争!自由!能在历史的洪流中汇集众人的力量,为这片大地的改变而奋斗。真是令人振奋!这些悲壮又非凡的故事,是应当被传颂下去的。"=" 로도스 아일랜드에 이렇게 많은 뜻을 같이하는 사람들이 있다니. 그렇습니다, 시! 전쟁! 자유! 역사의 흐름 속에서 사람들의 힘을 모아 이 땅의 변화를 위해 싸우는 것. 정말로 감동적입니다! 이 비장하고도 비범한 이야기들은 전해져야 합니다."; +"请注意,这是真的抽卡!不是模拟!!!"="주의: 이건 실제 뽑기입니다! 시뮬레이션이 아닙니다!!!"; +"我已知晓,继续"="알겠습니다, 계속합니다"; +"寻访一次"="한 번 뽑기"; +"寻访十次"="열 번 뽑기"; +" 在罗德岛竟然有这么多志同道合的志士。是的,诗歌!战争!自由!能在历史的洪流中汇集众人的力量,为这片大地的改变而奋斗。真是令人振奋!这些悲壮又非凡的故事,是应当被传颂下去的。"=" 로도스 아일랜드에 이렇게 많은 뜻을 같이하는 사람들이 있다니. 그렇습니다, 시! 전쟁! 자유! 역사의 흐름 속에서 사람들의 힘을 모아 이 땅의 변화를 위해 싸우는 것. 정말로 감동적입니다! 이 비장하고도 비범한 이야기들은 전해져야 합니다."; +"保佑胜利的英雄,我将领受你们的祝福。"="승리의 영웅들이여, 당신들의 축복을 받겠습니다."; +"伟大的战士们啊,我会在你们身边,与你们一同奋勇搏杀。"="위대한 전사들이여, 나는 당신들 곁에서 함께 용감히 싸울 것입니다."; +"再转身回头的时候,我们将带着胜利归来。"="다시 돌아올 때, 우리는 승리를 안고 돌아올 것입니다."; +"不需畏惧,我们会战胜那些鲁莽的家伙!"="두려워할 필요 없습니다, 우리는 그 무모한 자들을 이길 것입니다!"; +"欢呼吧!"="환호하라!"; +"来吧——"="오라——"; +"现在可没有后悔的余地了。"="이제 후회할 여지가 없습니다."; +"无需退路。"="퇴로는 필요 없습니다."; +"英雄们啊,为这最强大的信念,请站在我们这边。"="영웅들이여, 이 가장 강력한 신념을 위해 우리 편에 서주세요."; +"颤抖吧,在真正的勇敢面前。"="떨려라, 진정한 용기 앞에서."; +"哭嚎吧,为你们不堪一击的信念。"="울부짖어라, 너희의 무너질 신념을 위해."; +"你将在此跪拜。"="너는 여기서 무릎을 꿇을 것이다."; +"是吗,我们做到了吗......我现在,正体会至高的荣誉和幸福。"="그렇습니까, 우리가 해냈습니까... 지금, 나는 최고의 영예와 행복을 느끼고 있습니다."; +"转身吧,勇士们。我们已经获得了完美的胜利,现在是该回去享受庆祝的盛典了。"="돌아가자, 용사들이여. 우리는 완벽한 승리를 거두었고, 이제 축제를 즐길 시간입니다."; +"听啊,悲鸣停止了。这是幸福的和平到来前的宁静。"="들어라, 비명이 멈췄다. 이것은 행복한 평화가 오기 전의 고요함이다."; +"纵使人类的战争没尽头......在这一刻,我们守护住了自己生的尊严。离开吧。但要昂首挺胸。"="인류의 전쟁은 끝이 없을지라도... 이 순간, 우리는 우리의 생명을 지켰습니다. 떠나자. 하지만 당당하게."; +"这对角可能会不小心撞倒些家具,我会尽量小心。"="이 뿔이 가구를 부딪칠 수도 있지만, 최대한 조심하겠습니다."; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 8b3f3c8..a7ebdd2 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -95,3 +95,145 @@ // MARK: - RecruitView "RecruitmentRecognitionTip" = "小提示:和主界面的自动公招是两个独立的功能,\n请手动打开游戏公招 Tags 界面后使用~"; + +"连接设置"="连接设置"; +"游戏设置"="游戏设置"; +"更新设置"="更新设置"; +"系统设置"="系统设置"; +"客户端类型:"="客户端类型:"; +"阻止系统睡眠"="阻止系统睡眠"; +"接收开发版更新"="接收开发版更新"; +"自动检查更新"="自动检查更新"; +"自动下载更新"="自动下载更新"; +"指挥分队"="指挥分队"; +"取长补短"="取长补短"; +"招聘许可"="招聘许可"; +"龙门币"="龙门币"; +"加急许可"="加急许可"; +"家具零件"="家具零件"; +"荧光棒"="荧光棒"; +"不支持此版本 PlayCover"="不支持此版本 PlayCover"; +"肉鸽主题:"="肉鸽主题:"; +"策略:"="策略:"; +"最多探索次数:"="最多探索次数:"; +"投资源石锭"="投资源石锭"; +"刷新商店(指路鳞)"="刷新商店(指路鳞)"; +"储备源石锭达到上限时停止"="储备源石锭达到上限时停止"; +"最多投资源石锭数量:"="最多投资源石锭数量:"; +"开局分队:"="开局分队:"; +"信用购物"="信用购物"; +"信用溢出时无视黑名单"="信用溢出时无视黑名单"; +"借助战赚信用"="借助战赚信用"; +"优先购买"="优先购买"; +"黑名单"="黑名单"; +"已启用"="已启用"; +"未启用"="未启用"; +"无人机用途:"="无人机用途:"; +"自动刷新3星Tags"="自动刷新3星Tags"; +"自动使用加急许可"="自动使用加急许可"; +"领取每日/每周任务奖励"="领取每日/每周任务奖励"; +"领取所有邮件奖励"="领取所有邮件奖励"; +"进行每日免费单抽"="进行每日免费单抽"; +"领取幸运墙合成玉奖励"="领取幸运墙合成玉奖励"; +"领取限时开采许可合成玉奖励"="领取限时开采许可合成玉奖励"; +"领取五周年赠送月卡奖励"="领取五周年赠送月卡奖励"; +"请在“设置” > “游戏设置” 中选择客户端类型。"="请在“设置” > “游戏设置” 中选择客户端类型。"; +"自动启动客户端"="自动启动客户端"; +"主题:"="主题:"; +"策略:"="策略:"; +"支援道具:"="支援道具:"; +"组装批次数:"="组装批次数:"; +"组装数量增加模式:"="组装数量增加模式:"; +"关卡名"="关卡名"; +"关卡选择"="关卡选择"; +"当前/上次"="当前/上次"; +"请从边栏选择功能"="请从边栏选择功能"; +"内置作业"="内置作业"; +"外部作业(可拖入文件)"="外部作业(可拖入文件)"; +"移除"="移除"; +"移除作业"="移除作业"; +"停止"="停止"; +"停止"="停止"; +"开始"="开始"; +"开始"="开始"; +"删除"="删除"; +"删除任务"="删除任务"; +"停止"="停止"; +"停止"="停止"; +"开始"="开始"; +"开始"="开始"; +"设置"="设置"; +"显示/隐藏边栏"="显示/隐藏边栏"; +"显示/隐藏边栏"="显示/隐藏边栏"; +"请选择识别项目"="请选择识别项目"; +"停止"="停止"; +"停止"="停止"; +"开始"="开始"; +"开始"="开始"; +"请选择内容项目"="请选择内容项目"; +"添加"="添加"; +"添加任务"="添加任务"; +"任务"="任务"; +"检查更新…"="检查更新…"; +"打开日志文件夹…"="打开日志文件夹…"; +"PlayCover 链接…"="PlayCover 链接…"; +"请打开“自动战斗”页,将攻略视频文件拖入外部作业列表即可。"="请打开“自动战斗”页,将攻略视频文件拖入外部作业列表即可。"; +"文件格式错误"="文件格式错误"; +"自动编队"="自动编队"; +"信赖干员"="信赖干员"; +"循环次数"="循环次数"; +"装备:"="装备:"; +"SSS_约翰老妈新建地块"="SSS_约翰老妈新建地块"; +"自动设置时间"="自动设置时间"; +"自动选择 Tags:"="自动选择 Tags:"; +"3星"="3星"; +"4星"="4星"; +"5星"="5星"; +"6星"="6星"; +"预备干员-近战"="预备干员-近战"; +"预备干员-术师"="预备干员-术师"; +"预备干员-后勤"="预备干员-后勤"; +"预备干员-狙击"="预备干员-狙击"; +"预备干员-重装"="预备干员-重装"; +"郁金香"="郁金香"; +"阿米娅-WARRIOR"="阿米娅-WARRIOR"; +"复制结果JSON至剪贴板:"="复制结果JSON至剪贴板:"; +"企鹅物流"="企鹅物流"; +"明日方舟工具箱"="明日方舟工具箱"; +"开始任务"="开始任务"; +"停止任务"="停止任务"; +"全部启用"="全部启用"; +"全部取消"="全部取消"; +"新增定时"="新增定时"; +"允许阻止系统睡眠"="允许阻止系统睡眠"; +"允许"="允许"; +"取消"="取消"; +"时"="时"; +"分"="分"; +"开启"="开启"; +"时间"="时间"; +"信息"="信息"; +"现在"="现在"; +"自动滚动到底部"="自动滚动到底部"; +"请注意,这是真的抽卡!不是模拟!!!"="请注意,这是真的抽卡!不是模拟!!!"; +"我已知晓,继续"="我已知晓,继续"; +"寻访一次"="寻访一次"; +"寻访十次"="寻访十次"; +" 在罗德岛竟然有这么多志同道合的志士。是的,诗歌!战争!自由!能在历史的洪流中汇集众人的力量,为这片大地的改变而奋斗。真是令人振奋!这些悲壮又非凡的故事,是应当被传颂下去的。"=" 在罗德岛竟然有这么多志同道合的志士。是的,诗歌!战争!自由!能在历史的洪流中汇集众人的力量,为这片大地的改变而奋斗。真是令人振奋!这些悲壮又非凡的故事,是应当被传颂下去的。"; +"保佑胜利的英雄,我将领受你们的祝福。"="保佑胜利的英雄,我将领受你们的祝福。"; +"伟大的战士们啊,我会在你们身边,与你们一同奋勇搏杀。"="伟大的战士们啊,我会在你们身边,与你们一同奋勇搏杀。"; +"再转身回头的时候,我们将带着胜利归来。"="再转身回头的时候,我们将带着胜利归来。"; +"不需畏惧,我们会战胜那些鲁莽的家伙!"="不需畏惧,我们会战胜那些鲁莽的家伙!"; +"欢呼吧!"="欢呼吧!"; +"来吧——"="来吧——"; +"现在可没有后悔的余地了。"="现在可没有后悔的余地了。"; +"无需退路。"="无需退路。"; +"英雄们啊,为这最强大的信念,请站在我们这边。"="英雄们啊,为这最强大的信念,请站在我们这边。"; +"颤抖吧,在真正的勇敢面前。"="颤抖吧,在真正的勇敢面前。"; +"哭嚎吧,为你们不堪一击的信念。"="哭嚎吧,为你们不堪一击的信念。"; +"你将在此跪拜。"="你将在此跪拜。"; +"是吗,我们做到了吗......我现在,正体会至高的荣誉和幸福。"="是吗,我们做到了吗......我现在,正体会至高的荣誉和幸福。"; +"转身吧,勇士们。我们已经获得了完美的胜利,现在是该回去享受庆祝的盛典了。"="转身吧,勇士们。我们已经获得了完美的胜利,现在是该回去享受庆祝的盛典了。"; +"听啊,悲鸣停止了。这是幸福的和平到来前的宁静。"="听啊,悲鸣停止了。这是幸福的和平到来前的宁静。"; +"纵使人类的战争没尽头......在这一刻,我们守护住了自己生的尊严。离开吧。但要昂首挺胸。"="纵使人类的战争没尽头......在这一刻,我们守护住了自己生的尊严。离开吧。但要昂首挺胸。"; +"这对角可能会不小心撞倒些家具,我会尽量小心。"="这对角可能会不小心撞倒些家具,我会尽量小心。";