diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 5c93e7e56..374b5ea4a 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -1,5 +1,6 @@ import langEn, { dateTimeFormat as enDateTimeFormat } from './en'; import langFr, { dateTimeFormat as frDateTimeFormat } from './fr'; +import langzhCN, { dateTimeFormat as zhCNDateTimeFormat } from './zh-CN'; import { PlatformMessageFormat } from './base/platforms/PlatformMessageFormat'; import { GameSelectionMessageFormat } from './base/pages/GameSelectionMessageFormat'; import { SplashMessageFormat } from './base/pages/SplashMessageFormat'; @@ -7,15 +8,18 @@ import { ProfileSelectionMessageFormat } from './base/pages/ProfileSelectionMess import { ManagerMessageFormat } from './base/pages/ManagerMessageFormat'; import {EnumMessageFormat} from "./base/enums/EnumMessageFormat"; import { HelpMessageFormat } from './base/pages/HelpMessageFormat'; +import { SettingsMessageFormat } from './base/pages/SettingsMessageFormat'; export default { 'en': langEn, 'fr': langFr, + 'zh-CN': langzhCN, }; export const datetimeFormats = { [langEn.metadata.locale]: enDateTimeFormat, [langFr.metadata.locale]: frDateTimeFormat, + [langzhCN.metadata.locale]: zhCNDateTimeFormat, }; // TODO - Use for language selection screens @@ -33,7 +37,7 @@ export type MessageFormat = { profileSelection: ProfileSelectionMessageFormat, manager: ManagerMessageFormat, help: HelpMessageFormat, - // settings: SettingsMessageFormat, + settings: SettingsMessageFormat, }, platforms: PlatformMessageFormat; enums: EnumMessageFormat; diff --git a/src/i18n/zh-CN/enums/EnumTranslation.ts b/src/i18n/zh-CN/enums/EnumTranslation.ts new file mode 100644 index 000000000..aa559cd36 --- /dev/null +++ b/src/i18n/zh-CN/enums/EnumTranslation.ts @@ -0,0 +1,32 @@ +import {EnumMessageFormat} from "../../base/enums/EnumMessageFormat"; + +export const EnumTranslation: EnumMessageFormat = { + sortNaming: { + CUSTOM: '自定义', + MOD_NAME: '模组名', + AUTHOR: '作者名', + INSTALL_DATE: '安装时间', + }, + sortDirection: { + STANDARD: '标准', + REVERSE: '反向', + }, + sortLocalDisabledMods: { + NONE: '无', + CUSTOM: '自定义', + FIRST: '最先', + LAST: '最后', + }, + sortingStyle: { + DEFAULT: '默认', + LAST_UPDATED: '最后更新', + ALPHABETICAL: '字母顺序', + DOWNLOADS: '下载量', + RATING: '评分', + }, + launchType: { + AUTO: '自动', + NATIVE: '原生', + PROTON: 'Proton', + } +} diff --git a/src/i18n/zh-CN/index.ts b/src/i18n/zh-CN/index.ts new file mode 100644 index 000000000..a2f2e7fdf --- /dev/null +++ b/src/i18n/zh-CN/index.ts @@ -0,0 +1,41 @@ +import { DateTimeFormat, MessageFormat } from '../index'; +import {GameSelectionTranslation} from "./pages/GameSelectionTranslation"; +import {SplashTranslation} from "./pages/SplashTranslation"; +import {PlatformTranslation} from "./platforms/PlatformTranslation"; +import {ProfileSelectionTranslation} from "./pages/ProfileSelectionTranslation"; +import { ManagerTranslation } from './pages/ManagerTranslation'; +import {EnumTranslation} from "./enums/EnumTranslation"; +import {HelpTranslation} from './pages/HelpTranslation'; +import {SettingsTranslation} from "./pages/SettingsTranslation"; + +const message: MessageFormat = { + metadata: { + name: '简体中文', + locale: 'zh-CN' + }, + translations: { + pages: { + gameSelection: GameSelectionTranslation, + splash: SplashTranslation, + profileSelection: ProfileSelectionTranslation, + manager: ManagerTranslation, + help: HelpTranslation, + settings: SettingsTranslation, + }, + platforms: PlatformTranslation, + enums: EnumTranslation, + } +}; + +export const dateTimeFormat: DateTimeFormat = { + short: { + year: 'numeric', month: 'short', day: 'numeric' + }, + long: { + year: 'numeric', month: 'long', day: 'numeric', + weekday: 'short', hour: 'numeric', minute: 'numeric' + }, +} + +// Exported separately to enforce validation on exported type +export default message; diff --git a/src/i18n/zh-CN/pages/GameSelectionTranslation.ts b/src/i18n/zh-CN/pages/GameSelectionTranslation.ts new file mode 100644 index 000000000..eac268ecd --- /dev/null +++ b/src/i18n/zh-CN/pages/GameSelectionTranslation.ts @@ -0,0 +1,39 @@ +import {GameSelectionMessageFormat} from "../../base/pages/GameSelectionMessageFormat"; + +export const GameSelectionTranslation: GameSelectionMessageFormat = { + platformModal: { + header: "要管理哪个平台的游戏?", + selectAction: "选择平台", + }, + pageTitle: { + title: { + game: '游戏选择', + server: '服务器选择', + }, + subtitle: { + game: '你想要管理哪个游戏的模组?', + server: '你想要管理哪个服务器的模组?', + } + }, + migrationNotice: { + requiresUpdate: '管理器已更新,需要执行后台任务。', + actionsDisabled: '在任务结束前,将禁用选择游戏。', + }, + tabs: { + game: '游戏', + server: '服务器' + }, + actions: { + select: { + game: '选择游戏', + server: '选择服务器', + }, + setAsDefault: '设为默认', + }, + filter: { + placeholder: { + game: '搜索游戏', + server: '搜索服务器', + } + } +} diff --git a/src/i18n/zh-CN/pages/HelpTranslation.ts b/src/i18n/zh-CN/pages/HelpTranslation.ts new file mode 100644 index 000000000..6ad0873cd --- /dev/null +++ b/src/i18n/zh-CN/pages/HelpTranslation.ts @@ -0,0 +1,86 @@ +import { HelpMessageFormat } from '../../base/pages/HelpMessageFormat'; + +export const HelpTranslation: HelpMessageFormat = { + hero: { + title: '帮助', + subtitle: '常见问题及解决方案' + }, + tabs: { + general: '常规', + gameWontStart: '游戏无法启动', + modsNotShowing: '模组未启用', + updating: '更新', + }, + general: { + gettingStarted: { + title: '开始安装模组', + whereToFindMods: ` + 前往 "{''}@:translations.pages.manager.navigation.modsActions.online{''}" 页面, 找到您想要的模组下载。 + 管理器会同时下载依赖项,节省您的时间。 + `, + onceInstalled: '安装完所需的模组后,只需点击左上角的 {startModdedAction} 即可启动', + }, + slowGame: { + title: '使用模组时游戏运行缓慢/卡顿?', + likelyCause: ` + 这可能是某个模组出现问题导致。 + 请尝试禁用一些的模组后,检查问题是否仍旧存在。 + `, + issuePersisting: ` + 如果问题依旧存在。 + 则继续尝试禁用剩余模组。 + `, + ifStutters: '针对卡顿问题,或许有优化模组能改善这种情况。', + }, + dedicatedServers: { + title: '专用服务器', + content: ` + 专用服务器虽无法通过管理器直接支持,但可通过将配置文件夹内容复制到专用服务器文件夹中实现替代方案。 + `, + }, + launchingExternally: { + title: '从模组管理器外部启动游戏', + howTo: '通过 Steam 启动游戏时,您的游戏将会是没有模组的原版状态。', + whereToPlace: '您需要将相应的启动参数配置在您平台的相关启动参数设置中。', + forSteam: '对于Steam平台,该选项位于游戏属性中。', + yourCurrentArgument: '您当前的启动参数是:', + loaderNotInstalled: '这些参数将在安装模组加载器后可用。', + copyArguments: '复制启动参数', + }, + }, + gameWontStart: { + errorModal: { + title: '当我尝试启动游戏时,出现红色方框。', + solution: '红色框的底部通常会提供一个建议,这可能有助于解决问题。', + }, + redirectedToStorePage: { + title: '我跳转到了游戏Steam商店页面', + solution: '游玩 {appName} 时,你必须有正版的完整游戏。你可以通过商店购买。', + }, + consoleCloses: { + title: '一个文本窗口出现并立即关闭', + tryRunning: '尝试在设置界面 "重置 {gameName} 安装"。', // TODO - Reference translation via Settings screen + ifPersists: '若问题仍然存在,请强制退出Steam,并在关闭 Steam 的情况下启动模组。', + } + }, + modsNotShowing: { + potentialSolutions: { + title: '潜在解决方案', + instructToWiki: '最常见的问题可通过严格遵循维基百科上列出的说明来解决。', + goToWiki: '前往维基百科', + } + }, + updating: { + autoUpdates: { + title: '自动更新', + whenDoesItUpdate: '若有可用更新,管理器将在关闭时自动更新。', + downloadedInBackground: '更新将在后台进行下载。', + promptToRunOldInstaller: '您可能会被要求以管理员身份运行 "{oldInstaller}"。这是更新程序。', + ifProblemOccurs: '如果更新过程中出现问题,请下载并运行最新的安装程序。', + }, + ignoreUpdates: { + title: '我不想要更新', + content: 'GitHub 上有一个便携版,它不会自动更新。不过当有更新可用时,系统会提示你。' + } + } +} diff --git a/src/i18n/zh-CN/pages/ManagerTranslation.ts b/src/i18n/zh-CN/pages/ManagerTranslation.ts new file mode 100644 index 000000000..53407a344 --- /dev/null +++ b/src/i18n/zh-CN/pages/ManagerTranslation.ts @@ -0,0 +1,327 @@ +import { ManagerMessageFormat } from '../../base/pages/ManagerMessageFormat'; + +export const ManagerTranslation: ManagerMessageFormat = { + updateAvailable: { + title: '有可用更新。', + linkText: '点击前往发布页面。', + }, + navigation: { + gameActions: { + startModded: '启动模组', + startVanilla: '启动原版' + }, + modsActions: { + label: '模组', + installed: '已安装', + online: '在线' + }, + otherActions: { + label: '其他', + configEditor: '配置编辑器', + settings: '设置', + help: '帮助', + }, + profileSwitcher: { + label: '档案', + gameIconAltText: '游戏图标' + } + }, + installed: { + noModsInstalled: { + title: '你似乎没有安装任何模组', + content: '您可点击左侧的“在线”页面浏览所有可用模组。', + }, + updatableModsBanner: { + text: ` + 你有 {numberOfModsWithUpdates} 个模组更新可用。 | + 你有 {numberOfModsWithUpdates} 个模组更新可用。 + `, + updateAction: '更新所有?' + }, + searchAndSort: { + search: { + label: '搜索', + placeholder: '搜索已安装的模组', + }, + sort: { + label: '排序', + disabledPositions: { + label: '禁用', + } + } + }, + localModCard: { + labels: { + deprecated: '弃用', + disabled: '禁用' + }, + display: { + byline: 'v{version} 作者: {author}', + installedAt: '安装于: {formattedDate}', + }, + tooltips: { + updateAvailable: '有可用更新', + dependencyIssue: '此模组的依赖存在问题', + disable: '禁用', + enable: '启用', + donate: '为模组作者赞助', + }, + actions: { + uninstall: '卸载', + disable: '禁用', + enable: '启用', + associated: '关联', + openWebsite: '网站', + update: '更新', + downloadDependency: '下载依赖', + enableSpecific: '启用 {dependencyName}', + donate: '赞助', + } + }, + expandableCard: { + imageAltText: '模组图片', + funkyModeAltText: '炫酷模式悬浮窗', + tooltips: { + dragToReorder: '拖动以重新排序', + expand: '展开', + collapse: '折叠', + } + }, + }, + modals: { + failedToSetSteamFolder: { + title: '无法设置Steam文件夹', + steamExecutableNotSelected: 'Steam 可执行文件未被选中。', + solution: '如果出现此错误但可执行文件正确,请以管理员身份运行。' + }, + failedToSetTheGameFolder: { + title: '无法设置 {gameName} 文件夹', + listedExecutableNames: '可执行文件必须是以下任一类型:"{options}"。', + solution: '如果出现此错误但可执行文件正确,请以管理员身份运行。' + }, + clearingGameDirectory: { + title: '清除 {gameName} 安装文件夹', + waitToLaunchGame: ` + 在 Steam 验证游戏文件完整性之前,您将无法启动游戏。 + `, + steamWillBeStarted: ` + Steam 将启动并尝试验证 {gameName} 的文件完整性。 + `, + checkSteamForProgress: ` + 请查看Steam窗口以确认验证进度。 + 若窗口尚未出现,请耐心等待。 + `, + confirmation: '我明白了' + }, + dependencyStrings: { + title: '依赖名称列表', + dependency: '{modName}-{versionNumber}', + close: '关闭' + }, + launchArguments: { + title: '设置自定义启动参数', + someProvidedByDefault: '某些参数默认提供:', + moddedLabel: '模组:', + availableAfterInstallingLoader: '安装模组加载器后,这些参数将可用。', + vanillaLabel: '原版:', + pleaseNote: ` + 请注意,这些参数是针对 Steam 可执行文件调用的。 + 输入自定义启动参数时请务必谨慎。 + `, + placeholder: '输入参数', + updateArguments: '更新启动参数', + }, + categorySelector: { + selectCategory: '选择类别', + noCategoriesSelected: '未选择类别', + }, + importLocalMod: { + title: '从文件导入模组', + actions: { + selectFile: '选择文件', + importLocalMod: '导入本地模组', + }, + content: { + instructToSelect: '请选择要导入的 zip 或 DLL 文件。', + dataEntryInfo: ` + 包含清单文件的压缩包将自动预填部分信息。 + 若无法提供清单文件,则需手动输入相关内容。 + `, + waitingForSelection: '正在等待文件。这可能需要一分钟。', + form: { + modName: { + label: '模组名称', + placeholder: '输入模组名称', + }, + modAuthor: { + label: '作者', + placeholder: '输入作者名称', + }, + description: { + label: '描述 (可选)', + placeholder: '输入模组描述', + }, + version: { + label: '版本', + majorLabel: '主要', + minorLabel: '次要', + patchLabel: '补丁' + } + } + }, + validationMessages: { + modNameEmpty: '模组名称不能为空。', + authorNameEmpty: '模组作者不得为空。', + invalidVersion: '版本号必须是大于0的整数。', + nonNumericVersion: '版本号必须均为数字。', + noProfileSelected: '未选择档案' + } + }, + codeExport: { + title: '档案导出', + description: '您的代码已复制到剪贴板,也可手动复制如下:', + done: '完成了', + }, + downloadProgress: { + states: { + downloading: '正在下载 {modName}', + installing: '正在安装 {modName}', + }, + downloadProgress: '下载进度: {progress}% 大小: {totalSize}', + installProgress: '安装进度: {progress}%', + extractionProgress: '导出进度: {progress}% 大小: {totalSize}', + waitingForDownload: '正在安装:等待下载完成', + }, + downloadModVersionSelect: { + title: '选择要下载的 {modName} 版本', + content: { + recommendedDisclaimer: '建议选择所有模组的最新版本。', + outdatedModsAdvice: '使用老旧的版本可能会出现问题。', + }, + tags: { + select: '您必须选择一个版本', + recommended: '{version} 是推荐版本', + latest: '{version} 是最新版本', + outdated: '{version} 是老旧版本' + }, + download: '下载(包含依赖项)', + }, + updateAllInstalledMods: { + noModsToUpdate: { + title: '没有可更新的模组', + content: '要么所有已安装的模组都是最新的,要么根本没有安装任何模组。', + close: '关闭', + }, + hasModsToUpdate: { + title: '更新所有已安装的模组', + content: { + willBeUpdated: '所有已安装的模组都将更新至最新版本。', + missingDependenciesInstalled: '任何缺失的依赖将被安装。', + whatWillHappen: '以下模组将被下载并安装:', + modUpdatedTo: '{modName} 将会更新到: {version}', + }, + updateAll: '更新所有', + } + }, + launchType: { + title: '设置启动行为', + auto: { + NATIVE: '您的游戏将原生启动', + PROTON: '您的游戏将通过“Proton”启动', + }, + native: { + unsureWrapperArgsPresent: '无法确认所需的封装参数是否已设置。', + addArgumentsInfo: '若您尚未手动添加,请将以下启动参数添加至 Steam 的游戏属性中', + }, + actions: { + copyLaunchArgs: '复制启动参数', + update: '更新' + } + } + }, + online: { + modals: { + modFilter: { + title: '筛选模组类别', + languageDisclaimer: '类别由 Thunderstore 提供,无法进行翻译。', + selectors: { + atLeastOneCategory: '模组必须包含以下类别中的至少一项', + allCategories: '模组必须包含以下所有类别', + noneCategories: '模组不得包含以下任何类别' + }, + allowNsfw: '允许NSFW(可能包含露骨内容)的模组', + showDeprecated: '显示已弃用的模组', + apply: '应用筛选' + }, + sort: { + title: '更改模组的排序', + sortBehaviour: '排序行为', + sortDirection: '排序方向', + close: '关闭' + }, + }, + previewPanel: { + author: '作者: {author}', + metadata: { + downloads: '下载量: {downloads}', + likes: '点赞量: {likes}', + lastUpdated: '最后更新: {date}', + categories: '类别: {categories}', + }, + actions: { + download: '下载', + viewOnline: '显示在线', + donate: '赞助', + }, + tabs: { + readme: 'README', + changelog: '更新日志', + dependencies: '依赖 ({dependencyCount})', + }, + fetchingData: '拉取数据', + noDependencies: '该模组没有依赖。', + unableToFetchReadme: '无法拉取 README', + unableToFetchChangelog: '无法拉取 CHANGELOG', + }, + topbar: { + search: { + label: '搜索', + placeholder: '搜索', + }, + sort: '排序', + filter: '筛选', + }, + pagination: { + changePageInfo: '使用下面的数字切换页面', + noFoundMods: '未找到符合搜索条件的模组', + noMods: '没有可用模组', + }, + modList: { + tooltips: { + pinned: { + short: '置顶', + long: '置顶在 Thunderstore 上' + }, + deprecated: { + short: '已弃用', + long: '此模组可能无法使用' + }, + donate: '向模组作者赞助', + installed: '模组已安装', + }, + mod: { + author: '作者: {author}' + }, + actions: { + download: '下载', + website: '网站', + } + } + }, + actions: { + locateGameExecutable: '定位 {gameName} 可执行文件位置', + selectExecutable: '选择可执行文件', + locateGameLaunchHelper: '定位游戏启动助手可执行文件', + locateSteamExecutable: '定位 Steam 可执行文件', + } +} diff --git a/src/i18n/zh-CN/pages/ProfileSelectionTranslation.ts b/src/i18n/zh-CN/pages/ProfileSelectionTranslation.ts new file mode 100644 index 000000000..eb02981e1 --- /dev/null +++ b/src/i18n/zh-CN/pages/ProfileSelectionTranslation.ts @@ -0,0 +1,154 @@ +import {ProfileSelectionMessageFormat} from "../../base/pages/ProfileSelectionMessageFormat"; + +export const ProfileSelectionTranslation: ProfileSelectionMessageFormat = { + pageTitle: { + title: '选择档案', + subtitle: '档案有助于轻松管理模组' + }, + actions: { + backToGameSelection: '返回游戏选择', + select: '选择', + rename: '重命名', + create: '创建', + import: '导入/更新', + delete: '删除', + }, + error: { + selectProfile: '选择档案时出错', + updateProfileList: '更新档案列表时出错' + }, + createProfileModal: { + title: '创建新档案', + description: '该档案将独立存储其自己的模组。', + tagStates: { + required: '你必须为档案输入一个名称', + valid: '"{profileName}" 是一个有效的档案名称', + error: '"{profileName}" 已被使用或包含无效字符' + }, + actions: { + create: '创建档案' + } + }, + deleteProfileModal: { + title: '删除档案', + content: { + resultingAction: '这将删除该档案中安装的所有模组及其配置文件。', + preventAction: '若是误操作,请点击右上角的十字关闭。', + confirmation: '您确定要删除该档案吗?', + }, + actions: { + delete: '删除档案', + } + }, + renameProfileModal: { + title: '重命名档案', + content: '该档案将独立存储其自身模组,与其他配置文件互不影响。', + actions: { + rename: '重命名', + }, + tagStates: { + required: '你必须为档案输入一个名称', + valid: '"{profileName}" 是一个有效的档案名称', + error: '"{profileName}" 已被使用或包含无效字符' + }, + }, + importProfileModal: { + states: { + fileCodeSelection: { + title: '选择导入档案的方式', + actions: { + fromFile: '从文件', + fromCode: '从代码', + } + }, + fromFile: { + title: '正在加载文件', + content: '将弹出文件选择窗口,选择后需要稍等片刻。', + }, + importCode: { + title: '输入档案代码', + enterCodePlaceholder: '输入档案代码', + tagStates: { + invalid: '档案代码无效', + }, + actions: { + loading: '加载中', + proceed: '继续', + } + }, + refresh: { + title: '刷新在线模组列表', + content: { + description: ` + 配置文件中的某些模组包无法被模组管理器识别。 + 刷新在线模组列表可能解决此问题,请稍候。 + `, + waitingForModDownloads: '等待模组下载完成后,再刷新在线模组列表', + refreshStatus: { + checkingForUpdates: '检查 Thunderstore 的模组列表更新', + loadingLatestModList: '从 Thunderstore 加载最新模组列表中: {progress}%', + pruneCache: '修剪操作从本地缓存中移除了已安装的模组', + processingModList: '加载模组列表', + almostDone: '快完成了', + resettingCache: '重置模组列表缓存', + } + } + }, + reviewImport: { + title: '待安装的模组', + content: { + notFoundDisclaimer: '档案中的这些模组在Thunderstore中未找到,因此不会安装:', + ensureCorrectProfile: '确保该档案适用于当前选定的游戏。', + packagesWillBeInstalled: '以下模组将被安装:', + }, + actions: { + acknowledgement: '我明白部分模组将无法导入', + proceed: '导入' + } + }, + willImportOrUpdate: { + title: '您是要更新现有档案还是创建新档案?', + actions: { + newProfile: '导入新档案', + existingProfile: '更新现有档案', + } + }, + addProfile: { + title: '导入档案', + content: { + create: { + description: '该档案将独立存储其自身模组,与其他配置文件互不影响' + }, + update: { + contentsWillBeOverwritten: '档案中的所有内容都将被 代码/文件 中的内容覆盖。', + selectProfile: '请选择以下档案:' + } + }, + tagStates: { + required: '你必须为档案输入一个名称', + valid: '"{profileName}" 是一个有效的档案名称', + error: '"{profileName}" 已被使用或包含无效字符' + }, + actions: { + create: '创建', + update: '更新档案: {profileName}' + } + }, + importInProgress: { + title: { + downloadingMods: '正在下载模组: {progress}%', + downloadingModsWithGoal: `正在下载模组: {progress}% 大小:{totalSize}`, + cleaningUp: '清理', + applyChanges: '将更改应用于更新的档案', + copyingModsToProfile: '正在将模组复制到档案: {progress}%', + copyingConfigsToProfile: '正在将配置复制到档案: {progress}%' + + }, + content: { + waitMessage: '这可能需要一段时间,因为文件正在下载、解压和复制。', + doNotClose: '请勿关闭 {appName}.' + } + } + } + } +} diff --git a/src/i18n/zh-CN/pages/SettingsTranslation.ts b/src/i18n/zh-CN/pages/SettingsTranslation.ts new file mode 100644 index 000000000..442cb7b25 --- /dev/null +++ b/src/i18n/zh-CN/pages/SettingsTranslation.ts @@ -0,0 +1,203 @@ +import {SettingsMessageFormat} from "../../base/pages/SettingsMessageFormat"; + +export const SettingsTranslation: SettingsMessageFormat = { + title: { + subtitle: '{appName}: {version} 进阶设置' + }, + actions: { + search: { + text: '搜索:', + placeholder: '搜索设置选项', + } + }, + groups: { + all: '所有', + profile: '档案', + locations: '位置', + debugging: '调试', + other: '其他', + modpacks: '模组包', + }, + locations: { + browseDataFolder: { + title: '浏览数据文件夹', + description: '打开存储所有游戏和配置文件模组的文件夹。', + }, + changeGameFolder: { + title: '更改 {gameName} 文件夹', + description: '更改 {appName} 使用的 {gameName} 的文件夹位置。', + setManually: '您必须通过点击此处手动设置游戏文件夹' + }, + browseProfileFolder: { + title: '浏览档案文件夹', + description: '打开当前档案中存储模组的文件夹。', + }, + changeDataFolder: { + title: '更改数据文件夹', + description: '更改所有游戏和档案的模组存储文件夹。该文件夹不会被删除,现有档案也不会被转移。', + }, + changeSteamFolder: { + title: `更改 {''}@:translations.platforms.STEAM{''} 文件夹`, + description: `更改 {appName} 使用的 @:translations.platforms.STEAM 文件夹位置.`, + states: { + setManually: '您必须点击此设置并手动设置该文件夹' + } + } + }, + debugging: { + copyLogFile: { + title: '将日志文件内容复制到剪贴板', + description: '将LogOutput.log文件内的文本复制到剪贴板,并保留Discord格式。', + logFileExists: '日志文件存在', + logFileDoesNotExist: '日志文件不存在', + }, + copyTroubleshootingInfo: { + title: '将故障排除信息复制到剪贴板', + description: '将设置及其他信息复制到剪贴板,并保留Discord格式。', + value: '在 Discord 上请求支持时请提供此信息。', + }, + toggleDownloadCache: { + title: '切换下载缓存', + description: '下载模组时将忽略缓存中存储的模组。模组仍会存入缓存。', + enabled: '当前:缓存已启用(推荐)', + disabled: '当前:缓存已禁用', + }, + setLaunchArguments: { + title: '设置启动参数', + description: '提供用于启动游戏的自定义参数。', + value: '这些命令在游戏启动时针对 Steam 可执行文件执行' + }, + cleanModCache: { + title: '清理模组缓存', + description: '清理未使用的缓存模组所占用的可用空间。', + value: '检查所有档案中的未使用模组并清除缓存', + }, + cleanOnlineModList: { + title: '清理在线模组列表', + description: '删除本地模组列表缓存,强制下次刷新时获取新的列表。', + states: { + updating: '在线模组列表正在更新中,请等待操作完成', + hasCopy: '{gameName} 有本地缓存', + doesNotHaveCopy: '{gameName} 没有本地缓存', + errorOccurred: '检查模组列表状态时发生错误', + unknown: '未知状态' + } + }, + toggleThunderstoreCdn: { + title: '切换首选Thunderstore CDN', + description: '切换CDN直至应用程序重启,此操作可能绕过下载模组时出现的问题。', + current: '当前: {label} ({url})' + }, + resetGameInstallation: { + title: '重置 {gameName} 安装', + description: '修复因文件损坏或手动修改尝试后残留的文件所导致的问题。', + value: `这将删除 "{folderName}" 文件夹中所有内容,并使用 @:translations.platforms.STEAM 验证文件完整性` + }, + changeLaunchBehaviour: { + title: '更改启动行为', + description: '选择特定启动行为,例如强制Steam通过Proton启动', + value: `当前启动行为设置为: @:translations.enums.launchType.{launchType}` + } + }, + profile: { + changeProfile: { + title: '更改档案', + description: '更改当前使用的档案。', + value: '当前档案: {profileName}', + }, + enableAllMods: { + title: '启用所有模组', + description: '启用当前档案中的所有模组。', + value: ` + 当前未启用任何模组。你有 {totalModCount} 个模组 | + 在 {totalModCount} 个模组中,已启用一个模组 | + 在 {totalModCount} 个模组中,已启用 {enabledModCount} 个模组 + ` + }, + disableAllMods: { + title: '禁用所有模组', + description: '禁用当前档案中的所有模组。', + value: ` + 当前未禁用任何模组。你有 {totalModCount} 个模组 | + 在 {totalModCount} 个模组中,已禁用一个模组 | + 在 {totalModCount} 个模组中,已禁用 {disabledModCount} 个模组 + `, + }, + importLocalMod: { + title: '导入本地模组', + description: `安装了一个未从 "{''}@:translations.pages.manager.navigation.modsActions.online{''}" 选项卡下载的模组。`, + value: '管理器将尝试正确安装模组,但无法保证正常安装。' + }, + exportProfileAsFile: { + title: '导出档案为文件', + description: '将您的模组列表和配置导出为文件。', + value: '导出的文件可与朋友共享,快速轻松地获取完全相同的配置文件。', + }, + exportProfileAsCode: { + title: '导出档案为代码', + description: '将您的模组列表和配置导出为代码。', + value: '导出的代码可以与朋友共享,快速轻松地获取完全相同的配置文件。', + }, + updateAllMods: { + title: '更新所有模组', + description: '更新当前档案中的所有模组到最新版本。', + value: ` + 目前没有可更新的模组。 | + 你有一个模组可以更新 | + 你有 {count} 个模组可以更新 + `, + } + }, + other: { + toggleFunkyMode: { + title: '切换 Funky 模式', + description: '切换 Funky 模式,以获得更独特的体验。', + states: { + enabled: '已启用 Funky 模式', + disabled: '已禁用 Funky 模式', + }, + }, + switchTheme: { + title: '切换主题', + description: '在浅色和深色主题之间切换。', + themes: { + light: '当前: 亮色主题 (默认)', + dark: '当前: 深色主题', + }, + }, + switchCardDisplayType: { + title: '切换卡片显示类型', + description: '在展开或折叠的卡片之间切换。', + states: { + expanded: '当前:展开', + collapsed: '当前:折叠(默认)' + } + }, + refreshOnlineModList: { + title: '刷新在线模组列表', + description: '检查是否有新模组发布。', + states: { + refreshing: '刷新中', + errorRefreshing: '刷新模组列表时出现问题: {errorText}', + disabledWhilstDownloading: '正在下载时,模组列表的刷新功能将被禁用', + cacheDate: '缓存时间: {formattedDate}', + apiUnavailable: '没有可用的API信息', + } + }, + changeGame: { + title: '切换游戏', + description: '切换当前游戏。', + } + }, + modpacks: { + showDependencyStrings: { + title: '显示依赖名称', + description: '查看已安装模组及其版本名称的列表。用于在 manifest.json 文件的 dependencies 数组内部。', + value: ` + 由于未安装任何模组,因此不存在依赖 | + 显示 1 个模组的依赖 | + 显示 {n} 个模组的依赖 + ` + } + } +} diff --git a/src/i18n/zh-CN/pages/SplashTranslation.ts b/src/i18n/zh-CN/pages/SplashTranslation.ts new file mode 100644 index 000000000..621426445 --- /dev/null +++ b/src/i18n/zh-CN/pages/SplashTranslation.ts @@ -0,0 +1,69 @@ +import {SplashMessageFormat} from "../../base/pages/SplashMessageFormat"; + +export const SplashTranslation: SplashMessageFormat = { + pageTitle: '正在启动 {appName}', + gameUpdatesWarning: '游戏更新可能导致模组失效。若新版本已发布,请耐心等待。', + menu: { + helpLabel: '帮助', + helpItems: { + about: '关于', + faq: 'FAQ' + }, + }, + actions: { + goBack: '返回', + }, + content: { + main: { + didYouKnow: '你知道吗?', + externalInstallWithModManager: ` + 您可以在Thunderstore上使用"Install with Mod Manager"按钮, + 通过 {appName} 安装模组。 + `, + goToThunderstore: '前往 Thunderstore', + exportProfile: ` + 您可以在设置界面将选定的配置文件导出为文件或代码。 + 这让您能轻松与朋友分享您的模组列表! + `, + havingTrouble: { + title: '遇到麻烦了吗?', + body: '请将错误截图发送至r2modman Discord服务器的支持频道。', + serverLinkText: '加入 {appName} Discord 服务器', + }, + }, + about: { + title: '关于 {appName}', + creator: '它由 Ebkr 创建。', + techStack: { + builtUsing: '该应用程序采用Quasar构建,其技术栈如下:', + electron: 'Electron', + node: 'NodeJS', + vue: 'Vue 3', + typescript: 'TypeScript', + } + }, + faq: { + title: 'FAQ', + howToGetStarted: { + title: '我该如何开始?', + body: '前往“在线”标签页下载心仪的模组。点击“启动模组”即可畅玩。' + }, + startingWithMods: { + title: '启动启用模组的游戏', + body: ` + 你必须在管理器内启动游戏。 + 若不进行手动修改,通过 Steam 启动将不能启用模组。 + ` + } + } + }, + states: { + preparing: '准备中', + checkingForUpdates: '检查更新', + checkingForLocalCache: '检查本地缓存中的模组列表', + checkingForThunderstoreUpdates: '检查Thunderstore的模组列表更新', + loadingLatestThunderstoreList: '正在从Thunderstore加载最新模组列表', + pruningLocalCache: '修剪操作从本地缓存中移除了已安装的模组', + processingModList: '处理模组列表', + } +} diff --git a/src/i18n/zh-CN/platforms/PlatformTranslation.ts b/src/i18n/zh-CN/platforms/PlatformTranslation.ts new file mode 100644 index 000000000..efa3c0cf5 --- /dev/null +++ b/src/i18n/zh-CN/platforms/PlatformTranslation.ts @@ -0,0 +1,11 @@ +import {PlatformMessageFormat} from "../../base/platforms/PlatformMessageFormat"; + +export const PlatformTranslation: PlatformMessageFormat = { + STEAM: "Steam", + STEAM_DIRECT: "Steam", + EPIC_GAMES_STORE: "Epic 游戏商店", + OCULUS_STORE: "Oculus 商店", + ORIGIN: "Origin / EA App", + XBOX_GAME_PASS: "Xbox Game Pass", + OTHER: "其他", +}