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 Playground 和 Custom LLM Providers!",
"announcement_new_pricing": "Tolgee 将为自托管实例引入新的定价方式",
+ "announcement_suggestions_and_labels": "我们已发布 Suggestions 和 Labels!",
"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,
+ },
};