Add comprehensive Chinese internationalization support

- Implemented i18n framework with react-i18next for multi-language support
- Added Chinese (zh) and English (en) translation files with comprehensive coverage
- Localized Admin interface, authentication flows, and error messages
- Translated FileManager operations and UI elements
- Updated HomepageAuth component with localized authentication messages
- Localized LeftSidebar navigation and host management
- Added language switcher component (shown after login only)
- Configured default language as English with Chinese as secondary option
- Localized TOTPSetup two-factor authentication interface
- Updated Docker build to include translation files
- Achieved 95%+ UI localization coverage across core components

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ZacharyZcR
2025-09-02 20:36:48 +08:00
parent 26c1cacc9d
commit 70a26359b6
24 changed files with 1805 additions and 362 deletions

View File

@@ -0,0 +1,593 @@
{
"common": {
"login": "登录",
"logout": "登出",
"register": "注册",
"username": "用户名",
"password": "密码",
"confirmPassword": "确认密码",
"back": "返回",
"email": "邮箱",
"submit": "提交",
"cancel": "取消",
"save": "保存",
"delete": "删除",
"edit": "编辑",
"add": "添加",
"search": "搜索",
"loading": "加载中...",
"error": "错误",
"success": "成功",
"warning": "警告",
"info": "信息",
"confirm": "确认",
"yes": "是",
"no": "否",
"ok": "确定",
"close": "关闭",
"enabled": "已启用",
"disabled": "已禁用",
"important": "重要",
"notEnabled": "未启用",
"settingUp": "设置中...",
"back": "返回",
"next": "下一步",
"previous": "上一步",
"refresh": "刷新",
"settings": "设置",
"profile": "个人资料",
"help": "帮助",
"about": "关于",
"language": "语言",
"autoDetect": "自动检测"
},
"nav": {
"home": "首页",
"hosts": "主机",
"terminal": "终端",
"tunnels": "隧道",
"fileManager": "文件管理器",
"serverStats": "服务器统计",
"admin": "管理员",
"tools": "工具",
"newTab": "新标签页",
"splitScreen": "分屏",
"closeTab": "关闭标签页",
"sshManager": "SSH 管理器",
"cannotSplitTab": "无法分割此标签页"
},
"admin": {
"title": "管理员设置",
"users": "用户",
"userManagement": "用户管理",
"makeAdmin": "设为管理员",
"removeAdmin": "移除管理员",
"deleteUser": "删除用户",
"allowRegistration": "允许注册",
"oidcSettings": "OIDC 设置",
"clientId": "客户端 ID",
"clientSecret": "客户端密钥",
"issuerUrl": "颁发者 URL",
"authorizationUrl": "授权 URL",
"tokenUrl": "令牌 URL",
"updateSettings": "更新设置",
"confirmDelete": "确定要删除此用户吗?",
"confirmMakeAdmin": "确定要将此用户设为管理员吗?",
"confirmRemoveAdmin": "确定要移除此用户的管理员权限吗?",
"externalAuthentication": "外部认证 (OIDC)",
"configureExternalProvider": "配置 OIDC/OAuth2 认证的外部身份提供者。",
"userIdentifierPath": "用户标识符路径",
"displayNamePath": "显示名称路径",
"scopes": "作用域",
"saving": "保存中...",
"saveConfiguration": "保存配置",
"reset": "重置",
"success": "成功",
"loading": "加载中...",
"refresh": "刷新",
"loadingUsers": "加载用户中...",
"username": "用户名",
"type": "类型",
"actions": "操作",
"external": "外部",
"local": "本地",
"adminManagement": "管理员管理",
"makeUserAdmin": "设置用户为管理员",
"adding": "添加中...",
"currentAdmins": "当前管理员",
"adminBadge": "管理员",
"removeAdminButton": "移除管理员"
},
"hosts": {
"title": "主机管理",
"addHost": "添加主机",
"editHost": "编辑主机",
"deleteHost": "删除主机",
"hostName": "主机名",
"ipAddress": "IP 地址",
"port": "端口",
"authType": "认证类型",
"passwordAuth": "密码",
"keyAuth": "SSH 密钥",
"keyPassword": "密钥密码",
"keyType": "密钥类型",
"folder": "文件夹",
"tags": "标签",
"pin": "固定",
"enableTerminal": "启用终端",
"enableTunnel": "启用隧道",
"enableFileManager": "启用文件管理器",
"defaultPath": "默认路径",
"testConnection": "测试连接",
"connect": "连接",
"disconnect": "断开连接",
"connected": "已连接",
"disconnected": "已断开",
"connecting": "连接中...",
"connectionFailed": "连接失败",
"connectionSuccess": "连接成功",
"connectionDetails": "连接详情",
"organization": "组织管理",
"addTags": "添加标签(空格添加)"
},
"terminal": {
"title": "终端",
"connect": "连接主机",
"disconnect": "断开连接",
"clear": "清屏",
"copy": "复制",
"paste": "粘贴",
"find": "查找",
"fullscreen": "全屏",
"splitHorizontal": "水平分屏",
"splitVertical": "垂直分屏",
"closePanel": "关闭面板",
"reconnect": "重新连接",
"sessionEnded": "会话已结束",
"connectionLost": "连接已断开",
"error": "错误",
"disconnected": "已断开连接",
"connectionClosed": "连接已关闭",
"connectionError": "连接错误"
},
"fileManager": {
"title": "文件管理器",
"file": "文件",
"folder": "文件夹",
"connectToSsh": "连接 SSH 以使用文件操作",
"uploadFile": "上传文件",
"newFile": "新建文件",
"newFolder": "新建文件夹",
"rename": "重命名",
"renameItem": "重命名项目",
"deleteItem": "删除项目",
"currentPath": "当前路径",
"uploadFileTitle": "上传文件",
"maxFileSize": "最大100MBJSON/ 200MB二进制",
"removeFile": "移除文件",
"clickToSelectFile": "点击选择文件",
"chooseFile": "选择文件",
"uploading": "上传中...",
"createNewFile": "创建新文件",
"fileName": "文件名",
"creating": "创建中...",
"createFile": "创建文件",
"createNewFolder": "创建新文件夹",
"folderName": "文件夹名",
"createFolder": "创建文件夹",
"warningCannotUndo": "警告:此操作无法撤销",
"itemPath": "项目路径",
"thisIsDirectory": "这是一个目录(将递归删除)",
"deleting": "删除中...",
"currentPathLabel": "当前路径",
"newName": "新名称",
"thisIsDirectoryRename": "这是一个目录",
"renaming": "重命名中...",
"fileUploadedSuccessfully": "文件 \"{{name}}\" 上传成功",
"failedToUploadFile": "上传文件失败",
"fileCreatedSuccessfully": "文件 \"{{name}}\" 创建成功",
"failedToCreateFile": "创建文件失败",
"folderCreatedSuccessfully": "文件夹 \"{{name}}\" 创建成功",
"failedToCreateFolder": "创建文件夹失败",
"itemDeletedSuccessfully": "{{type}}删除成功",
"failedToDeleteItem": "删除项目失败",
"itemRenamedSuccessfully": "{{type}}重命名成功",
"failedToRenameItem": "重命名项目失败",
"upload": "上传",
"download": "下载",
"newFile": "新建文件",
"newFolder": "新建文件夹",
"rename": "重命名",
"delete": "删除",
"permissions": "权限",
"size": "大小",
"modified": "修改时间",
"path": "路径",
"fileName": "文件名",
"folderName": "文件夹名",
"confirmDelete": "确定要删除 {{name}} 吗?",
"uploadSuccess": "文件上传成功",
"uploadFailed": "文件上传失败",
"downloadSuccess": "文件下载成功",
"downloadFailed": "文件下载失败",
"permissionDenied": "权限被拒绝",
"checkDockerLogs": "请检查 Docker 日志以获取详细的错误信息",
"internalServerError": "内部服务器错误发生",
"serverError": "服务器错误",
"error": "错误",
"requestFailed": "请求失败,状态码",
"unknown": "未知",
"cannotReadFile": "无法读取文件",
"noSshSessionId": "没有可用的 SSH 会话 ID",
"noFilePath": "没有可用的文件路径",
"noCurrentHost": "没有可用的当前主机",
"fileSavedSuccessfully": "文件保存成功",
"saveTimeout": "保存操作超时。文件可能已成功保存,但操作用时过长。请检查 Docker 日志以确认。",
"failedToSaveFile": "保存文件失败",
"folder": "文件夹",
"file": "文件",
"deletedSuccessfully": "删除成功",
"failedToDeleteItem": "删除项目失败",
"connectToServer": "连接到服务器",
"selectServerToEdit": "从侧边栏选择服务器以开始编辑文件",
"fileOperations": "文件操作",
"confirmDeleteMessage": "确定要删除 <strong>{{name}}</strong> 吗?",
"deleteDirectoryWarning": "这将删除文件夹及其所有内容。",
"actionCannotBeUndone": "此操作无法撤销。",
"recent": "最近的",
"pinned": "固定的",
"folderShortcuts": "文件夹快捷方式",
"noRecentFiles": "没有最近的文件。",
"noPinnedFiles": "没有固定的文件。",
"enterFolderPath": "输入文件夹路径",
"noShortcuts": "没有快捷方式。",
"searchFilesAndFolders": "搜索文件和文件夹...",
"noFilesOrFoldersFound": "没有找到文件或文件夹。"
},
"tunnels": {
"title": "SSH 隧道",
"addTunnel": "添加隧道",
"editTunnel": "编辑隧道",
"deleteTunnel": "删除隧道",
"tunnelName": "隧道名称",
"localPort": "本地端口",
"remoteHost": "远程主机",
"remotePort": "远程端口",
"autoStart": "自动启动",
"status": "状态",
"active": "活动",
"inactive": "未激活",
"start": "启动",
"stop": "停止",
"restart": "重启",
"connectionType": "连接类型",
"local": "本地",
"remote": "远程",
"dynamic": "动态",
"noSshTunnels": "没有 SSH 隧道",
"createFirstTunnelMessage": "创建您的第一个 SSH 隧道以开始使用。使用 SSH 管理器添加具有隧道连接的主机。",
"unknown": "未知",
"connected": "已连接",
"connecting": "连接中...",
"disconnecting": "断开连接中...",
"disconnected": "已断开连接",
"portMapping": "端口 {{sourcePort}} → {{endpointHost}}:{{endpointPort}}",
"disconnect": "断开连接",
"connect": "连接",
"canceling": "取消中..."
},
"serverStats": {
"title": "服务器统计",
"cpu": "CPU",
"memory": "内存",
"disk": "磁盘",
"network": "网络",
"uptime": "运行时间",
"loadAverage": "平均负载",
"processes": "进程",
"connections": "连接",
"usage": "使用率",
"available": "可用",
"total": "总计",
"free": "空闲",
"used": "已用",
"percentage": "百分比",
"refreshStatusAndMetrics": "刷新状态和指标",
"refreshStatus": "刷新状态",
"fileManagerAlreadyOpen": "此主机的文件管理器已打开",
"openFileManager": "打开文件管理器",
"cpuCores_one": "{{count}} 个 CPU",
"cpuCores_other": "{{count}} 个 CPU",
"naCpus": "N/A CPU",
"loadAverage": "平均: {{avg1}}, {{avg5}}, {{avg15}}",
"loadAverageNA": "平均: N/A",
"cpuUsage": "CPU 使用率",
"memoryUsage": "内存使用率",
"rootStorageSpace": "根目录存储空间",
"of": "的",
"feedbackMessage": "对服务器管理的下一步功能有想法?在这里分享吧"
},
"auth": {
"loginTitle": "登录 Termix",
"registerTitle": "创建账户",
"loginButton": "登录",
"registerButton": "注册",
"forgotPassword": "忘记密码?",
"rememberMe": "记住我",
"noAccount": "还没有账户?",
"hasAccount": "已有账户?",
"loginSuccess": "登录成功",
"loginFailed": "登录失败",
"registerSuccess": "注册成功",
"registerFailed": "注册失败",
"logoutSuccess": "登出成功",
"invalidCredentials": "用户名或密码错误",
"accountCreated": "账户创建成功",
"passwordReset": "密码重置链接已发送",
"twoFactorAuth": "双因素认证",
"enterCode": "输入验证码",
"backupCode": "使用备用码",
"verifyCode": "验证码",
"enableTwoFactor": "启用双因素认证",
"disableTwoFactor": "禁用双因素认证",
"scanQRCode": "使用您的身份验证器应用扫描此二维码",
"backupCodes": "备用码",
"saveBackupCodes": "请将这些备用码保存在安全的地方",
"twoFactorEnabledSuccess": "双因素认证启用成功!",
"twoFactorDisabled": "双因素认证已禁用",
"newBackupCodesGenerated": "新备用码已生成",
"backupCodesDownloaded": "备用码已下载",
"pleaseEnterSixDigitCode": "请输入 6 位验证码",
"invalidVerificationCode": "无效的验证码",
"failedToDisableTotp": "禁用 TOTP 失败",
"failedToGenerateBackupCodes": "生成备用码失败",
"enterPassword": "输入您的密码",
"lockedOidcAuth": "已锁定 (OIDC 认证)",
"twoFactorTitle": "双因素认证",
"twoFactorProtected": "您的账户已启用双因素认证保护",
"twoFactorActive": "双因素认证当前在您的账户上处于活动状态",
"disable2FA": "禁用 2FA",
"disableTwoFactorWarning": "禁用双因素认证将降低您账户的安全性",
"passwordOrTotpCode": "密码或 TOTP 验证码",
"or": "或",
"generateNewBackupCodesText": "如果您丢失了现有的备用码,请生成新的备用码",
"generateNewBackupCodes": "生成新的备用码",
"yourBackupCodes": "您的备用码",
"download": "下载",
"setupTwoFactorTitle": "设置双因素认证",
"step1ScanQR": "步骤 1使用您的身份验证器应用扫描二维码",
"manualEntryCode": "手动输入代码",
"cannotScanQRText": "如果无法扫描二维码,请在身份验证器应用中手动输入此代码",
"nextVerifyCode": "下一步:验证代码",
"verifyAuthenticator": "验证您的身份验证器",
"step2EnterCode": "步骤 2输入身份验证器应用中的6位数代码",
"verificationCode": "验证码",
"back": "返回",
"verifyAndEnable": "验证并启用",
"saveBackupCodesTitle": "保存您的备用码",
"step3StoreCodesSecurely": "步骤 3将这些代码保存在安全的地方",
"importantBackupCodesText": "请将这些备用码保存在安全的地方。如果您丢失了身份验证器设备,可以使用它们访问您的账户。",
"completeSetup": "完成设置",
"notEnabledText": "双因素认证通过在登录时要求来自身份验证器应用的代码,为您的账户增加额外的安全层。",
"enableTwoFactorButton": "启用双因素认证",
"addExtraSecurityLayer": "为您的账户添加额外的安全层",
"firstUser": "首位用户",
"firstUserMessage": "您是第一个用户,将被设为管理员。您可以在侧边栏用户下拉菜单中查看管理员设置。如果您认为这是错误,请检查 docker 日志,或创建",
"external": "外部",
"loginWithExternal": "使用外部提供商登录",
"loginWithExternalDesc": "使用您配置的外部身份提供商登录",
"resetPasswordButton": "重置密码",
"sendResetCode": "发送重置代码",
"resetCodeDesc": "输入您的用户名以接收密码重置代码。代码将记录在 docker 容器日志中。",
"resetCode": "重置代码",
"verifyCodeButton": "验证代码",
"enterResetCode": "输入来自 docker 容器日志中用户的 6 位数代码:",
"goToLogin": "转到登录",
"newPassword": "新密码",
"confirmNewPassword": "确认密码",
"enterNewPassword": "为用户输入新密码:",
"passwordResetSuccess": "成功!",
"passwordResetSuccessDesc": "您的密码已成功重置!您现在可以使用新密码登录。",
"signUp": "注册"
},
"errors": {
"notFound": "页面未找到",
"unauthorized": "未授权访问",
"forbidden": "访问被禁止",
"serverError": "服务器错误",
"networkError": "网络错误",
"databaseConnection": "无法连接到数据库。请稍后再试。",
"unknownError": "未知错误",
"failedPasswordReset": "无法启动密码重置",
"failedVerifyCode": "验证重置代码失败",
"failedCompleteReset": "无法完成密码重置",
"invalidTotpCode": "无效的 TOTP 代码",
"failedOidcLogin": "无法启动 OIDC 登录",
"failedUserInfo": "OIDC 登录后无法获取用户信息",
"oidcAuthFailed": "OIDC 认证失败",
"noTokenReceived": "登录未收到令牌",
"invalidAuthUrl": "从后端收到无效的授权 URL",
"connectionTimeout": "连接超时",
"invalidInput": "输入无效",
"requiredField": "此字段为必填项",
"minLength": "最小长度为 {{min}}",
"maxLength": "最大长度为 {{max}}",
"invalidEmail": "邮箱地址无效",
"passwordMismatch": "密码不匹配",
"weakPassword": "密码强度太弱",
"usernameExists": "用户名已存在",
"emailExists": "邮箱已存在",
"loadFailed": "加载数据失败",
"saveError": "保存失败"
},
"messages": {
"saveSuccess": "保存成功",
"saveError": "保存失败",
"deleteSuccess": "删除成功",
"deleteError": "删除失败",
"updateSuccess": "更新成功",
"updateError": "更新失败",
"copySuccess": "已复制到剪贴板",
"copyError": "复制失败",
"copiedToClipboard": "{{item}} 已复制到剪贴板",
"connectionEstablished": "连接已建立",
"connectionClosed": "连接已关闭",
"reconnecting": "重新连接中...",
"processing": "处理中...",
"pleaseWait": "请稍候...",
"registrationDisabled": "新用户注册已被管理员禁用。请登录或联系管理员。"
},
"profile": {
"title": "用户资料",
"description": "管理您的账户设置和安全",
"security": "安全",
"changePassword": "修改密码",
"twoFactorAuth": "双因素认证",
"accountInfo": "账户信息",
"role": "角色",
"admin": "管理员",
"user": "用户",
"authMethod": "认证方式",
"local": "本地",
"external": "外部 (OIDC)"
},
"placeholders": {
"language": "语言",
"username": "用户名",
"hostname": "主机名",
"folder": "文件夹",
"password": "密码",
"keyPassword": "密钥密码",
"sshConfig": "端点 SSH 配置",
"homePath": "/home",
"clientId": "您的客户端 ID",
"clientSecret": "您的客户端密钥",
"authUrl": "https://your-provider.com/application/o/authorize/",
"redirectUrl": "https://your-provider.com/application/o/termix/",
"tokenUrl": "https://your-provider.com/application/o/token/",
"userIdField": "sub",
"usernameField": "name",
"scopes": "openid email profile",
"enterUsername": "输入用户名以设为管理员",
"searchHosts": "按名称、用户名、IP、文件夹、标签搜索主机...",
"enterPassword": "输入您的密码",
"totpCode": "6 位 TOTP 验证码",
"searchHostsAny": "按任意信息搜索主机...",
"confirmPassword": "输入您的密码以确认",
"typeHere": "在此输入",
"fileName": "输入文件名例如example.txt",
"folderName": "输入文件夹名",
"fullPath": "输入项目的完整路径",
"currentPath": "输入项目的当前路径",
"newName": "输入新名称"
},
"leftSidebar": {
"failedToLoadHosts": "加载主机失败",
"noFolder": "无文件夹",
"passwordRequired": "需要输入密码",
"failedToDeleteAccount": "删除账户失败",
"failedToMakeUserAdmin": "设为管理员失败",
"userIsNowAdmin": "用户 {{username}} 现在是管理员",
"removeAdminConfirm": "确定要移除 {{username}} 的管理员权限吗?",
"deleteUserConfirm": "确定要删除用户 {{username}} 吗?此操作无法撤销。",
"deleteAccount": "删除账户",
"closeDeleteAccount": "关闭删除账户",
"deleteAccountWarning": "此操作无法撤销。这将永久删除您的账户和所有相关数据。",
"deleteAccountWarningDetails": "删除您的账户将删除所有数据,包括 SSH 主机、配置和设置。此操作不可逆。",
"cannotDeleteAccount": "无法删除账户",
"lastAdminWarning": "您是最后一个管理员用户。您不能删除自己的账户,否则系统将没有任何管理员。请先将其他用户设为管理员,或联系系统支持。",
"confirmPassword": "确认密码",
"deleting": "删除中...",
"cancel": "取消"
},
"interface": {
"sidebar": "侧边栏",
"toggleSidebar": "切换侧边栏",
"close": "关闭",
"online": "在线",
"offline": "离线",
"maintenance": "维护中",
"degraded": "降级",
"noTunnelConnections": "未配置隧道连接",
"discord": "Discord",
"connectToSshForOperations": "连接 SSH 以使用文件操作",
"uploadFile": "上传文件",
"newFile": "新建文件",
"newFolder": "新建文件夹",
"rename": "重命名",
"deleteItem": "删除项目",
"createNewFile": "创建新文件",
"createNewFolder": "创建新文件夹",
"deleteItem": "删除项目",
"renameItem": "重命名项目",
"clickToSelectFile": "点击选择文件",
"noSshHosts": "没有 SSH 主机",
"sshHosts": "SSH 主机",
"importSshHosts": "从 JSON 导入 SSH 主机",
"hostViewer": "主机查看器",
"clientId": "客户端 ID",
"clientSecret": "客户端密钥",
"error": "错误",
"warning": "警告",
"deleteAccount": "删除账户",
"closeDeleteAccount": "关闭删除账户",
"cannotDeleteAccount": "无法删除账户",
"confirmPassword": "确认密码",
"deleting": "删除中...",
"externalAuth": "外部认证 (OIDC)",
"configureExternalProvider": "配置外部身份提供者",
"waitingForRetry": "等待重试",
"retryingConnection": "重试连接中",
"resetSplitSizes": "重置分屏大小",
"sshManagerAlreadyOpen": "SSH 管理器已打开",
"disabledDuringSplitScreen": "分屏期间禁用",
"unknown": "未知",
"connected": "已连接",
"disconnected": "已断开连接",
"maxRetriesExhausted": "已达到最大重试次数",
"endpointHostNotFound": "未找到端点主机",
"administrator": "管理员",
"user": "用户",
"external": "外部",
"local": "本地",
"saving": "保存中...",
"saveConfiguration": "保存配置",
"loading": "加载中...",
"refresh": "刷新",
"adding": "添加中...",
"makeAdmin": "设为管理员",
"verifying": "验证中...",
"verifyAndEnable": "验证并启用",
"secretKey": "密钥",
"totpQrCode": "TOTP 二维码",
"passwordRequired": "使用密码认证时需要密码",
"sshKeyRequired": "使用密钥认证时需要 SSH 私钥",
"keyTypeRequired": "使用密钥认证时需要密钥类型",
"validSshConfigRequired": "必须从列表中选择有效的 SSH 配置",
"updateHost": "更新主机",
"addHost": "添加主机",
"editHost": "编辑主机",
"productionFolder": "生产环境",
"databaseServer": "数据库服务器",
"unknownError": "未知错误",
"failedToInitiatePasswordReset": "启动密码重置失败",
"failedToVerifyResetCode": "验证重置代码失败",
"failedToCompletePasswordReset": "完成密码重置失败",
"invalidTotpCode": "无效的 TOTP 代码",
"failedToStartOidcLogin": "启动 OIDC 登录失败",
"failedToGetUserInfoAfterOidc": "OIDC 登录后获取用户信息失败",
"loginWithExternalProvider": "使用外部提供者登录",
"loginWithExternal": "使用外部提供者登录",
"sendResetCode": "发送重置代码",
"verifyCode": "验证代码",
"resetPassword": "重置密码",
"login": "登录",
"signUp": "注册",
"failedToUpdateOidcConfig": "更新 OIDC 配置失败",
"failedToMakeUserAdmin": "设为管理员失败",
"failedToStartTotpSetup": "启动 TOTP 设置失败",
"invalidVerificationCode": "无效的验证码",
"failedToDisableTotp": "禁用 TOTP 失败",
"failedToGenerateBackupCodes": "生成备用码失败"
}
}