diff --git a/.gitignore b/.gitignore index a6369871c4..a3da65fe35 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,7 @@ e2e/cypress/integration/examples/ /webapp/yarn-error.log* /**/.vscode +/**/.history /**/.idea .VERSION diff --git a/webapp/src/i18n/zh-Hans.json b/webapp/src/i18n/zh-Hans.json deleted file mode 100644 index 0f50e6aae3..0000000000 --- a/webapp/src/i18n/zh-Hans.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "account-deleted-message" : "帐户已删除", - "feature-explanation-setup-license" : "升级计划", - "namespace_rename_placeholder" : "新名称...", - "paid-feature-banner-title" : "您的计划不包括此功能。" -} \ No newline at end of file diff --git a/webapp/src/i18n/zh.json b/webapp/src/i18n/zh.json index 2b10001f63..84f086d8c3 100644 --- a/webapp/src/i18n/zh.json +++ b/webapp/src/i18n/zh.json @@ -139,6 +139,7 @@ "activity_entity_webhook_config": "Webhook 配置", "activity_filter_indicator_clear": "清除预筛选条件", "activity_filter_indicator_label": "按活动预筛选", + "activity_group_create_key_item_table_header_key_name": "词条名", "activity_import": "{KeyCount, plural, one {导入了一个词条 ({TranslationCount, plural, \n one {1 个翻译} \n other {# 个翻译}\n})} other {导入了 # 个词条 ({TranslationCount, plural, \n one {1 个翻译} \n other {# 个翻译}\n})}}", "activity_key_delete": "{KeyCount, plural, one {删除了 1 个词条。} other {删除了 # 个词条。}}", "activity_key_name_edit": "编辑了词条名", @@ -413,6 +414,7 @@ "announcement_labels": "我们 已 发布 译文标签 !", "announcement_llm_providers_and_playground": "我们已发布 AI PlaygroundCustom LLM Providers!", "announcement_new_pricing": "Tolgee 将为自托管实例引入新的定价方式", + "announcement_suggestions_and_labels": "我们已发布 SuggestionsLabels!", "announcement_visual_editor_and_formats_support": "发布了可视化编辑器和对iOS、Android、Flutter等的支持", "api-key-delete-button": "删除", "api-key-deleted-message": "API 密钥已删除", @@ -621,6 +623,8 @@ "cannot_modify_reviewed_translation": "无法修改已审核的翻译", "cannot_set_sso_provider_missing_fields": "无法保存单点登录配置 - 某些字段缺少值。", "cannot_store_file_to_content_storage": "无法将文件存储在内容存储中", + "change_auth_provider_description": "您正在尝试使用{new_provider}来登录,但您的当前登录方式为{current_provider}。如果您确实要改变认证方式,请点击确定按钮,然后像平常一样登录。", + "change_auth_provider_title": "您似乎正使用和您平时不一样的方式来登录。", "choose_color": "选择颜色", "clipboard_copy_success": "已复制到剪贴板!", "confirmation_dialog_cancel": "取消", @@ -774,7 +778,9 @@ "ee_license_status_label_unknown": "非当前套餐", "ee_license_status_label_unpaid": "未支付", "email_already_invited_or_member": "已邀请过使用此电子邮箱地址的用户", + "email-greetings": "您好 {username},", "email_not_verified": "您的电子邮箱暂未通过验证。请检查收件箱并按照说明进行操作。", + "email-signature": "祝您翻译愉快,\nTolgee", "email_verified_message": "电子邮箱已验证", "email_waiting_for_verification": "电子邮箱等待验证:{email}", "empty_description": "暂无描述", @@ -791,6 +797,7 @@ "export-format-apple-strings": "Apple .strings 和 .stringsdict", "export-format-apple-xcstrings": "Apple .xcstrings", "export-format-apple-xliff": "Apple .xliff", + "export-format-compose-xml": "导出多平台 .xml", "export-format-csv": "CSV", "export-format-flat-json": "扁平 JSON", "export-format-flat-yaml": "扁平 YAML", @@ -852,6 +859,8 @@ "file_too_big": "文件太大", "filter_by_agency": "按代理筛选...", "flag_selector_search_flag": "搜索旗帜...", + "footer-cloud-address": "Letovická 1421/22, Řečkovice, 621 00 Brno, Czech Republic", + "footer-cloud-sent-by": "🐭 由 Tolgee 发送 - 查看 blog 和我们的社区!🧀", "formality_not_supported_by_service": "服务不支持礼貌语态", "former-user-name": "前用户", "form_field_optional": "{label}(可选)", @@ -1171,6 +1180,7 @@ "llm_provider_form_openai_format_hint": "某些 OpenAI 模型不支持格式化输出,对于这些模型,请保持该字段为空。", "llm_provider_form_openai_model_hint": "模型 API 名称(例如 \"gpt-4o\")", "llm_provider_form_openai_reasoning_effort": "推理强度", + "llm_provider_form_openai_reasoning_effort_hint": "适用于推理模型 (gpt-5 等), 对于其他模型,请保持该字段为空。", "llm_provider_form_priority": "优先级", "llm_provider_form_priority_hint": "当您使用同一提供程序的多个部署时使用。低 - 用于批处理操作,高 - 用于建议。阅读文档以获取更多信息。", "llm_provider_form_select_empty": "无", @@ -1504,6 +1514,7 @@ "plan_seat_limit_exceeded": "此 Tolgee 实例已超出席位限制。请联系管理公司的系统管理员。", "plan_seat_limit_exceeded_while_accepting_invitation_message": "我们无法接受您的邀请,因为邀请组织已达到席位限制。请联系他们释放或购买额外的席位,然后您才能加入。", "plan_translation_limit_exceeded": "翻译计划超出限制", + "powered-by": "Powered by Tolgee 🐁", "project_ai_prompt_add": "描述", "project_ai_prompt_dialog_description_too_long": "描述太长", "project_ai_prompt_dialog_tip_language": "使用英语进行描述", @@ -1659,7 +1670,11 @@ "really_want_to_change_role_confirmation": "你确定要更换角色吗?", "regenerate_api_key_title": "重新生成项目 API 密钥", "regenerate_pat_title": "重新生成令牌", + "registration-confirm-cta": "确认我的邮箱", + "registration-confirm-link": "或者,复制粘贴此链接到您的浏览器:\n{confirmUrl}", + "registration-confirm-subject": "确认您的账户", "registrations_not_allowed": "未启用注册功能", + "registration-welcome-enjoy-your-stay": "我们希望您能享受这次体验!", "registration-welcome-text": "欢迎并感谢您创建账户!要开始使用 Tolgee ,您需要确认您的邮箱。", "request_parse_error": "发生了内部错误", "reset_password_back_to_login": "返回登录界面", @@ -1681,6 +1696,7 @@ "scroll_right": "向右滚动", "seat_spending_limit_exceeded_while_accepting_invitation_message": "我们无法接受您的邀请,因为邀请组织已达到按需付费支出限制。请联系他们增加此限制或释放席位,然后您才能加入。", "seats_spending_limit_exceeded": "已超出座位消费限额", + "send-reason-created-account": "您之所以收到这封邮件,是因为您在 {instanceQualifier} 创建了一个账户", "sensitive-authentication-dialog-title": "身份验证", "sensitive-authentication-message": "要继续此操作,请再次进行身份验证。 ", "sensitive-auth-submit-button": "确认", @@ -1788,8 +1804,8 @@ "suggestions_other_tooltip": "其他建议", "task_actions_tooltip": "任务操作", "task_all_done_placeholder_finish_task": "将任务标记为完成", - "task_all_done_placeholder_review_label": "全部审核完毕 \uD83C\uDF89", - "task_all_done_placeholder_translate_label": "所有内容已翻译 \uD83C\uDF89", + "task_all_done_placeholder_review_label": "全部审核完毕 🎉", + "task_all_done_placeholder_translate_label": "所有内容已翻译 🎉", "task_board_closed_column_title": "关闭", "task_board_closed_column_title_hint": "已取消或已完成的任务", "task_board_empty_closed": "没有已关闭的任务", @@ -1856,6 +1872,7 @@ "task_scope_total_to_translate": "待翻译总数", "task_scope_words_label": "单词", "tasks_feature_description": "升级以访问任务并提高您的生产力!", + "tasks_filter_by_language": "选择语言...", "tasks_order_translation": "翻译了", "tasks_order_translation_tooltip": "订购专业翻译", "tasks_search_placeholder": "搜索...", diff --git a/webapp/src/index.tsx b/webapp/src/index.tsx index a31cfdf94d..fba47bc5c6 100644 --- a/webapp/src/index.tsx +++ b/webapp/src/index.tsx @@ -55,6 +55,7 @@ const tolgee = Tolgee() pt: () => import('./i18n/pt.json').then((m) => m.default), da: () => import('./i18n/da.json').then((m) => m.default), ja: () => import('./i18n/ja.json').then((m) => m.default), + zh: () => import('./i18n/zh.json').then((m) => m.default), }, }); diff --git a/webapp/src/locales.ts b/webapp/src/locales.ts index 81e88d346c..1c832874e7 100644 --- a/webapp/src/locales.ts +++ b/webapp/src/locales.ts @@ -6,6 +6,7 @@ import deDateLocale from 'date-fns/locale/de'; import ptDateLocale from 'date-fns/locale/pt'; import daDateLocale from 'date-fns/locale/da'; import jaDateLocale from 'date-fns/locale/ja'; +import zhCNDateLocale from 'date-fns/locale/zh-CN'; export const locales = { en: { @@ -48,4 +49,9 @@ export const locales = { flag: '🇯🇵', dateFnsLocale: jaDateLocale, }, + zh: { + name: '简体中文', + flag: '🇨🇳', + dateFnsLocale: zhCNDateLocale, + }, };