feat(i18n): complete the Simplified Chinese UI translation
Summary
Completes the Simplified Chinese web UI translation and adds a reusable parity/placeholder checker for UI catalogues.
zh.jsonnow has all 7,438 / 7,438 keys ofen.json, in the key order ofen.json. When this started it had 6,056 of 7,051 (the 995 missing keys showed in English); the 387 keys the integration branch added since (#11587, #11591, #11594, #11598) came with their Chinese values and are merged in.- 1,019 new Chinese values: the 995 missing keys plus 24 values that were still the English text.
- 99 pre-existing values fixed that rendered wrongly (table at the end), including 7 whose placeholders had been translated or duplicated, so the value the code passes in never appeared.
- New
tools/scripts/i18n-parity-check.mjs(+node:testspec), wired intostatic-checks.ymlin report mode. en.json: the two plugin-version toasts showed the raw textv{{version}}in English; they now use{{number}}, the parameter the code passes (every other language already did).
Why
#9448 asks for a complete Chinese UI. Chinese was selectable but about 14% of the strings fell back to English, and a scan of the existing translation found machine-translation artifacts shown to users: whole encyclopedia paragraphs as the label for "GitHub", "Instagram", "Hubstaff"; "将以下文本翻译为中文:…" prefixes; pinyin annotations such as 技能 (Jìnéng); Traditional characters; "Disabled" as 残疾, "Sent" as 句子, "Host" as 主人; {{名称}} in place of {{ name }}.
What changed
packages/ui-core/i18n/assets/i18n/zh.json
- Translated the 995 missing keys and 24 English-identical values. Natural UI wording, consistent terminology (glossary under Decisions), full-width punctuation in Chinese sentences, Chinese quotes “…” around names; every placeholder, HTML tag, leading/trailing space and
.../…kept. - Re-ordered to the key order of
en.json(145 lines moved, no other formatting change). The 3 keys onlyzh.jsonhas (MENU.IMPORT_EXPORT.EXIT_AGENT_LOGIN_CONFIRM,MENU.IMPORT_EXPORT.EXIT_AGENT_PREVENT_CONFIRM,ORGANIZATIONS_PAGE.EDIT.SETTINGS.ENABLE_DETECTION_INACTIVITY_INFO) are stale copies under old paths; they are kept in place (no removals) and their real keys are now translated. - Fixed 99 existing values (table at the end), plus the last two Traditional characters (
公司名稱→公司名称,橫幅→横幅). - Merge with the integration branch: #11594 had added its
INTEGRATIONS.GITHUB_PAGE.PROJECT_SYNCstrings as a secondGITHUB_PAGEobject at the top ofINTEGRATIONS(the oldzh.jsonhad noGITHUB_PAGE). Next to this PR's fullGITHUB_PAGEthat would have been a duplicate JSON key, andJSON.parsekeeps only the last one, so those strings would have been silently lost. They now sit inside the oneGITHUB_PAGE, whereen.jsonhas them, and say 问题 for GitHub issues like the rest of the GitHub integration (同步中的问题, 问题和标签已成功同步) instead of the Latin "issue". - Reviewed the 368 permission descriptions from #11591 (
ORGANIZATIONS_PAGE.PERMISSIONS.DESCRIPTIONS): accurate, natural translations. 14 used other words than the rest of the UI for the same thing and now follow the glossary: 跟踪 for time tracking (not 追踪), 工时表 for timesheets (not 时间表), 估算 for task estimates (not 预估), 套餐 for subscription plans (not 方案; shipping profiles stay 配送方案), and 禁用 where the English says "disable" (停用 stays for "deactivate"). Names the UI already shows were kept: 估计 (Estimates menu), 批准政策 / 批准请求 (approval pages), 经理 (team and project managers).
tools/scripts/i18n-parity-check.mjs + i18n-parity-check.test.mjs (plain Node, no dependencies)
- Flattens
en.jsonand a translation and reports: keys the translation lacks, keys only it has, values identical to English, and placeholder mismatches. Placeholders are compared with repeats counted, order and the whitespace around a name ignored ({{name}}={{ name }}, but{{ user name }}≠{{ username }}):{{ name }}interpolations, HTML tags (by name and kind),%s-style tokens,{count}and ICU arguments. ICU arguments are read with their braces matched: branch text (one {item} other {items}) is translatable, the placeholders inside branches count once per argument, so a language with other branches (Chinese plurals need onlyother) passes. node tools/scripts/i18n-parity-check.mjs zhfails on a missing key or a placeholder mismatch for the named languages. Options:--list missing|extra|identical|placeholders,--json,--dir <folder>(works for pluginsrc/i18nfolders too).--allreports every language and fails only on a catalogue that does not parse; a folder with onlyen.json(most plugin folders) has its English catalogue checked.
.github/workflows/static-checks.yml
- Two steps in
platform-gates(bothif: always()):node tools/scripts/i18n-parity-check.mjs --alland the spec. The existing gate-wiring check requires every*-check.mjsto be wired. CI holds no language to parity: enforcingzhwould make every new English key wait for a Chinese translation, which is a policy decision for the owner.
packages/ui-core/i18n/assets/i18n/en.json (two values)
PLUGIN.TOASTR.SUCCESS.VERSION.CREATEDandUPDATED:v{{version}}→v{{number}}.plugin-version.effect.tspasses{ number: created.number }/{ number: updatedVersion.number }, so English showedv{{version}}literally after creating or updating a plugin version. All 12 other languages already used{{number}}, so no other file needed the change.
Not changed
- The other languages: untouched.
- Plugin UI folders: only
dashboard-time-track-angular-ui/src/i18nships non-English languages, and itszh.jsonwas already complete (checker: 55/55, 0 mismatches). The other pluginsrc/i18nfolders hold onlyen.json, so nozh.jsonwas added there. - Server-side
packages/core/src/lib/i18n(bg/he/ru exist): deliberately nozhadded. Its only consumer is the invoice/estimate PDF, whichPdfmakerServicedraws with the built-in Helvetica of pdfkit (no embedded font). That font cannot draw CJK, so Chinese PDF labels would come out garbled where English renders fine today.
Flags / settings
None. Data-only change for the UI, plus a CI report step that never fails on translation completeness.
Tests
Run from the worktree root with Node 26:
| Command | Result |
|---|---|
node --test tools/scripts/i18n-parity-check.test.mjs | 14 tests, 14 pass (the 4 added for the review findings fail on the previous version) |
node tools/scripts/i18n-parity-check.mjs --all --dir <each plugin src/i18n> | exit 0 for all 9 plugin folders, including the English-only ones such as ai-chat-react-ui |
node tools/scripts/i18n-parity-check.mjs zh | exit 0: 7438/7438 keys, 0 missing, 0 placeholder mismatches, 116 identical, 3 extra |
node tools/scripts/i18n-parity-check.mjs zh --dir packages/plugins/dashboard-time-track-angular-ui/src/i18n | 55/55, 0 missing, 0 mismatches |
node tools/scripts/i18n-parity-check.mjs --all | exit 0 (report for all 13 languages) |
node tools/scripts/i18n-parity-check.mjs --all --dir <folder with a truncated xx.json> | exit 1, names the file |
node tools/scripts/gate-wiring-check.mjs | PASSED |
node --test tools/egress-audit/static-hostnames.test.mjs | 7 tests, 7 pass (on the committed tree; see the note below) |
duplicate-key scan of zh.json and en.json (scratch script) | 0 duplicate keys; zh.json key order matches en.json; no Traditional-only characters |
prettier --check on the 4 touched files | all formatted |
cspell and eslint on the script, spec and workflow | 0 issues |
Before this PR the same checker reported for zh: 995 missing, 9 placeholder mismatches, 108 identical.
Note on the egress test: run in a working tree where the web app's environment was generated, it reports gauzy.co / ever.co in packages/ui-config/src/lib/environments/environment.ts and environment.prod.ts. Those two files are git-ignored build output that the audit walks because it reads the disk, not the git index; with them set aside, all 7 cases pass. A clean checkout (CI) does not have them.
Spot checks in context: PLUGIN.BY, PLUGIN.DOWNLOADS, PLUGIN.PENDING_INSTALLATION.COMPLETE and FAILED_LOWERCASE are fragments the templates join to a value (an author, a number, a percentage), so they were translated as fragments (作者 / 次下载 / 已完成 / 个失败); EMPLOYEES_PAGE.EDIT_EMPLOYEE.HR is the unit in "USD 50 / hr" (now 小时, was translation chatter); FORGOT_PASSWORD_PAGE.BACK_TO_LOGIN precedes the 登录 link (now 返回); DASHBOARD_PAGE.CUSTOM.COPY_SUFFIX is appended after a space; SETTINGS_MENU.BILLING_*, FOOTER.*, PLUGIN.UPDATED and PLUGIN.RELEASED are labels next to a value.
Manual verification still needed
Not run in a browser here. Suggested pass with the language set to 中文: Dashboard builder (widget palette, tabs), Settings → Billing, Integrations (GitHub, Ever Async, Plane, Zapier), plugin marketplace and pending-installation dialog (desktop), the employee wizard, the rich-text editor toolbar, the footer version row. Watch for strings that are too long for their buttons.
Not in this PR
- Invoice PDF font (follow-up for the owner): the invoice/estimate PDF uses the built-in Helvetica, which cannot draw CJK and most likely not the Cyrillic/Hebrew labels of the existing bg/ru/he server catalogues either. An embedded Unicode/CJK font is needed before a server-side
zhcatalogue makes sense. - The other languages also miss about 1,000 keys each and have a few placeholder mismatches;
node tools/scripts/i18n-parity-check.mjs --all(or<lang> --list placeholders) lists them.
Risk and rollback
Low. Runtime impact is limited to the strings Chinese users see, plus the two English plugin-version toasts; no code path changes. The new CI step can only fail on a catalogue that is not valid JSON. Rollback: revert the commits (zh.json returns to the previous partial translation).
Decisions
Decided for this PR:
en.jsonplaceholder bug: fixed here (two values), so the English toasts render the version number andzhreaches 0 placeholder mismatches.- CI parity for
zh: not enforced. CI stays report-only and fails only on invalid JSON; full parity would block every English addition until it is translated.node tools/scripts/i18n-parity-check.mjs zhholds it to parity locally. - Invoice PDF CJK font: left as a follow-up for the owner (see "Not in this PR").
Translation choices:
- Simplified Chinese, with the glossary taken from the dominant existing translations: 员工 employee, 组织 organization, 租户 tenant, 时间记录 time log, 工时表 timesheet, 发票 invoice, 任务 task, 项目 project, 客户 client, 联系人 contact, 团队 team, 集成 integration, 插件 plugin, 仪表板 dashboard, 小部件 widget, 截图 screenshot, 手动时间 manual time, 时间跟踪 time tracking, 估算 estimate, 审批 approval / 批准 approve, 订阅 subscription, 套餐 plan, 账单 billing, 市场 marketplace, 工作区 workspace, 仓库 repository, 问题 issue, 冲刺 sprint, 负责人 assignee/manager, 商家 merchant, 凭据 credential, 密钥 key/secret, 权限 permission, 启用/禁用 enable/disable, 移除 remove, 删除 delete.
- Brand and product names stay in English (Gauzy, Ever Async, GitHub, Upwork, Zapier, Plane, PostHog, Stripe, OpenAI, NPM, CDN, MCP …), with a space between Chinese and Latin text.
Webhooks,Zaps,OAuth 2.0,URL,API,KPI,ID,DSN,UTCand similar technical terms are left as they are.- Values that only hold a placeholder, a URL or e-mail example, or a language's own name (the language picker shows native names) stay identical to English.
- The pre-existing fixes were limited to values that were clearly broken (found by scanning for chatter, pinyin, Traditional characters, oversized values and translated placeholders, plus obvious wrong-meaning words). A full proof-read of the other ~5,900 existing values was out of scope.
Closes #9448
The 116 values left identical to English (69 distinct strings)
Български (България)—SM_TABLE.REGION.BGEnglish (United States)—SM_TABLE.REGION.ENРусский (Россия)—SM_TABLE.REGION.RUעברית ישראל—SM_TABLE.REGION.HEFrançais (France)—SM_TABLE.REGION.FREspañol (España)—SM_TABLE.REGION.ES中文 (中国)—SM_TABLE.REGION.ZHDeutsch (Deutschland)—SM_TABLE.REGION.DEPortuguês (Portugal)—SM_TABLE.REGION.PTItaliano (Italia)—SM_TABLE.REGION.ITNederlands (Nederland)—SM_TABLE.REGION.NLPolski (Polska)—SM_TABLE.REGION.PLالعربية (العراق)—SM_TABLE.REGION.ARInstagram—FORM.LABELS.INSTAGRAM,FORM.PLACEHOLDERS.INSTAGRAMGitHub—FORM.LABELS.GITHUB,FORM.PLACEHOLDERS.GITHUB,HELP_PAGE.GITHUBGitlab—FORM.LABELS.GITLAB,FORM.PLACEHOLDERS.GITLABUpwork—FORM.LABELS.UPWORK,FORM.PLACEHOLDERS.UPWORK,JOBS.UPWORKStackoverflow—FORM.LABELS.STACK_OVERFLOWHH:mm—FORM.PLACEHOLDERS.START_TIMEURL—FORM.PLACEHOLDERS.UPLOADER_DOCUMENT_PLACEHOLDER,RICH_TEXT_EDITOR.LINK_DIALOG.URLMake.com—MENU.MAKE_COMZapier—MENU.ZAPIERActivepieces—MENU.ACTIVEPIECES,INTEGRATIONS.ACTIVEPIECES_PAGE.TITLE,INTEGRATIONS.ACTIVEPIECES_PAGE.AUTHORIZE.TITLEHubstaff—INTEGRATIONS.HUBSTAFF_PAGE.TITLEWebhooks—INTEGRATIONS.MAKE_COM_PAGE.WEBHOOKS,INTEGRATIONS.ZAPIER_PAGE.TAB.WEBHOOKS,INTEGRATIONS.ZAPIER_PAGE.WEBHOOKS.TITLEWebhook URL—INTEGRATIONS.MAKE_COM.SETTINGS.WEBHOOK_URL,INTEGRATIONS.ZAPIER_PAGE.SETTINGS.WEBHOOK_URLZaps—INTEGRATIONS.ZAPIER_PAGE.TAB.ZAPS,INTEGRATIONS.ZAPIER_PAGE.ZAPS.TITLEOAuth 2.0—INTEGRATIONS.ACTIVEPIECES_PAGE.CONNECTIONS.TYPE.OAUTH2MCP—INTEGRATIONS.ACTIVEPIECES_PAGE.MCP_SERVERS.TITLESIM AI—INTEGRATIONS.SIM_PAGE.TITLE,INTEGRATIONS.SIM_PAGE.AUTHORIZE.TITLE{ "key": "value" }—INTEGRATIONS.SIM_PAGE.WORKFLOWS.INPUT_PLACEHOLDEREver Async—INTEGRATIONS.EVER_ASYNC_PAGE.TITLEGauzy API URL—INTEGRATIONS.EVER_ASYNC_PAGE.GAUZY_API_URLPlane—INTEGRATIONS.PLANE_PAGE.TITLEhttps://plane.example.com—INTEGRATIONS.PLANE_PAGE.WEB_URL_PLACEHOLDERhttps://plane-admin.example.com—INTEGRATIONS.PLANE_PAGE.ADMIN_URL_PLACEHOLDERPlane Space URL—INTEGRATIONS.PLANE_PAGE.SPACE_URLhttps://plane-space.example.com—INTEGRATIONS.PLANE_PAGE.SPACE_URL_PLACEHOLDERKPI—KEY_RESULT_PAGE.TYPE.KPI,KEY_RESULT_PAGE.FORM.LABELS.SELECT_KPIID—TASKS_PAGE.TASK_IDname@company.com—INVITE_PAGE.FORM.EMAILS_PLACEHOLDERGraphQL—SETTINGS_FEATURES.GRAPHQL(empty string)—SETTINGS_FEATURES_TEXT.INCOME.,SETTINGS_FEATURES_TEXT.PAYMENT.,SETTINGS_FEATURES_TEXT.JOBS.,SETTINGS_FEATURES_TEXT.TIME_ACTIVITY.,SETTINGS_FEATURES_TEXT.TIMESHEET.,SETTINGS_FEATURES_TEXT.APPOINTMENT_SCHEDULE.,SETTINGS_FEATURES_TEXT.PRODUCT_INVENTORY.,SETTINGS_FEATURES_TEXT.PROJECT.,SETTINGS_FEATURES_TEXT.ORGANIZATION_TEAM.,SETTINGS_FEATURES_TEXT.ORGANIZATION_DOCUMENT.,SETTINGS_FEATURES_TEXT.LEAD_CUSTOMER_CLIENT.,SETTINGS_FEATURES_TEXT.ALL_REPORT.,SETTINGS_FEATURES_TEXT.USERS.,SETTINGS_FEATURES_TEXT.ORGANIZATIONS.,SETTINGS_FEATURES_TEXT.APPS_INTEGRATIONS.,SETTINGS_FEATURES_TEXT.ENTITY_IMPORT_EXPORT.,SETTINGS_FEATURES_TEXT.CUSTOM_SMTP.,SETTINGS_FEATURES_TEXT.ROLES_PERMISSIONS.,SETTINGS_FEATURES_TEXT.TIME_TRACKING.,SETTINGS_FEATURES_TEXT.DASHBOARD.API—ABOUT_PAGE.API,FOOTER.API{{ error }}—NOTES.INCOME.INCOME_ERROR,NOTES.INVOICE.INVOICE_ERROR,NOTES.PROPOSALS.REGISTER_PROPOSAL_ERROR,NOTES.POLICY.ERROR,NOTES.CANDIDATE.EXPERIENCE.ERROR,NOTES.ORGANIZATIONS.DATA_ERROR,NOTES.EVENT_TYPES.ERROR,NOTES.AVAILABILITY_SLOTS.ERRORCDN URL—TIMER_TRACKER.SETTINGS.CDN_URL,SETTINGS_FILE_STORAGE.DIGITALOCEAN.LABELS.CDN_URL,SETTINGS_FILE_STORAGE.DIGITALOCEAN.PLACEHOLDERS.CDN_URL,PLUGIN.FORM.CDN.URLHubStaff—TIMESHEET.SOURCES.HUBSTAFFUTC—TIMESHEET.TIME_ZONE_OPTION.UTCAmazon S3—SETTINGS_FILE_STORAGE.PROVIDERS.S3.NAMEWasabi—SETTINGS_FILE_STORAGE.PROVIDERS.WASABI.NAMECloudinary—SETTINGS_FILE_STORAGE.PROVIDERS.CLOUDINARY.NAMEDigitalOcean Spaces—SETTINGS_FILE_STORAGE.PROVIDERS.DIGITALOCEAN.NAMEhttps://app.posthog.com—SETTINGS_GENERAL.POSTHOG.HOST_PLACEHOLDER,SETTINGS_MONITORING.POSTHOG.HOST_PLACEHOLDER10000—SETTINGS_GENERAL.POSTHOG.FLUSH_INTERVAL_PLACEHOLDER,SETTINGS_MONITORING.POSTHOG.FLUSH_INTERVAL_PLACEHOLDERDSN—SETTINGS_MONITORING.SENTRY.DSNhttps://xxx@sentry.io/xxx—SETTINGS_MONITORING.SENTRY.DSN_PLACEHOLDERhttps://your-jitsu-host.com—SETTINGS_MONITORING.JITSU.HOST_PLACEHOLDERTwilio—SMS_GATEWAY_PAGE.TWILIOyou@company.com—DELETE_ACCOUNT_PAGE.REQUEST.EMAIL_PLACEHOLDERname@workspace-email.com—WORKSPACES.PLACEHOLDERS.EMAILCDN—PLUGIN.FORM.SOURCE_TYPES.CDNNPM—PLUGIN.FORM.SOURCE_TYPES.NPMGauzy—PLUGIN.FORM.SOURCE_TYPES.GAUZYGauzy Desktop—PLUGIN.DIALOG.APP_SELECTOR.DESKTOPGauzy Timer—PLUGIN.DIALOG.APP_SELECTOR.TIMERGauzy Server—PLUGIN.DIALOG.APP_SELECTOR.SERVERGauzy API Server—PLUGIN.DIALOG.APP_SELECTOR.API_SERVERGauzy Agent—PLUGIN.DIALOG.APP_SELECTOR.AGENThttps://your-app.example.com/oauth/callback—OAUTH_CLIENTS.FORM.REDIRECT_URI_PLACEHOLDER
The 99 pre-existing values fixed
| Key | English | Before | After |
|---|---|---|---|
SM_TABLE.TRANSACTION_TYPE | Type | 类型 (Lèixíng) | 类型 |
FORM.LABELS.ROLE | Role | 角色 (jué sè) | 角色 |
FORM.LABELS.UNIT | Unit | 单位 (Dānwèi) | 单位 |
FORM.PLACEHOLDERS.NAME | Name | 名字 (Míngzì) | 名称 |
POP_UPS.EMPLOYEE | Employee | 员工 (yuángōng) | 员工 |
POP_UPS.DATE | Date | 日期 (Rìqī) | 日期 |
DASHBOARD_PAGE.DEVELOPER.BONUS | Bonus | 奖金 (Jiǎngjīn) | 奖金 |
GOALS_PAGE.FORM.LABELS.OWNER | Owner | 拥有者 (Yǒngyǒu zhě) | 所有者 |
CONTACTS_PAGE.STREET | Street | 街道 (jiēdào) | 街道 |
PUBLIC_PAGE.ACTIVE | Active | 活跃 (Huóyuè) | 活跃 |
TIME_OFF_PAGE.POLICY.NAME | Name | 姓名 (Xìngmíng) | 名称 |
SKILLS_PAGE.HEADER | Skills | 技能 (Jìnéng) | 技能 |
EQUIPMENT_SHARING_PAGE.ACTION | Action | 行动 (Xíngdòng) | 操作 |
INVENTORY_PAGE.IS_EQUIPMENT | Is equipment | 设备 (Shèbèi) | 是否为设备 |
PROFILE_PAGE.FIRST_NAME | First Name | 名字 (Míngzì) | 名 |
TIMER_TRACKER.NO_LIMIT | ∞ No Limit | ∞ 无限制 (wúxiànzhì) | ∞ 无限制 |
TIMESHEET.CALENDAR | Calendar | 日历 (Rìlì) | 日历 |
TIMESHEET.ACTION | Action | 行动 (Xíngdòng) | 操作 |
FORM.LABELS.TO | To | 进行翻译,将以下文本翻译为中文:To | 至 |
FORM.LABELS.TAX_AND_DISCOUNT_INVOICE_ITEMS_SEPARATELY | Tax And Discount Invoice Items Separately | 将以下文本翻译为中文:将税收和折扣的发票项目分开。 | 对发票项目分别计算税费和折扣 |
FORM.LABELS.UPWORK | Upwork | 翻译:Upwork | Upwork |
FORM.LABELS.INSTAGRAM | Instagram (中文:照片墙)是一款拍照及分享应用程序。它于2010年10月由Kevin Systrom和Mike Kriege... | ||
FORM.LABELS.GITHUB | GitHub | GitHub 仓库是一个用于存储和共享代码的在线平台。它提供了版本控制和协作功能,使多个开发者能够共同合作和管理项目。GitHub 也... | GitHub |
FORM.LABELS.GITLAB | Gitlab | Gitlab是一个基于web的Git仓库管理工具,用于版本控制和协作开发。它允许团队成员追踪代码更改、协同编辑和审查代码,以及管理项目... | Gitlab |
FORM.LABELS.STACK_OVERFLOW | Stackoverflow | Stackoverflow 可以在程序设计和开发过程中提供帮助和解答,它是一个面向开发者的问答社区。这个网站上有大量的问题和答案,覆盖... | Stackoverflow |
FORM.PLACEHOLDERS.START_TIME | HH:mm | HH:mm 是指24小时制的时间格式,例如 13:45 表示下午 1 点 45 分。 | HH:mm |
FORM.PLACEHOLDERS.UPLOADER_DOCUMENT_PLACEHOLDER | URL | URL (Uniform Resource Locator) 的中文翻译是统一资源定位符。 | URL |
FORM.PLACEHOLDERS.INSTAGRAM | Instagram (翻译为中文:Instagram) | ||
FORM.PLACEHOLDERS.GITHUB | GitHub | GitHub (GitHub.com) 是一个基于Git版本控制系统的代码托管平台。它允许开发者以版本控制的方式协同合作,共同开发项目... | GitHub |
FORM.PLACEHOLDERS.GITLAB | Gitlab | GitLab 是一个基于 web 的 Git 仓库管理工具,提供了完整的 DevOps 解决方案。它具有版本控制、问题跟踪、CI/CD... | Gitlab |
FORM.PLACEHOLDERS.UPWORK | Upwork | Upwork | |
| 翻译:優聘 | Upwork | ||
INTEGRATIONS.HUBSTAFF_PAGE.TITLE | Hubstaff | Hubstaff是一家提供时间追踪和团队管理工具的公司。其软件允许雇主监控员工的工作时间、项目进展和任务分配。此外,它还提供计时器、截... | Hubstaff |
EMPLOYEES_PAGE.EDIT_EMPLOYEE.HR | hr | 将以下文本翻译为中文(简体): | 小时 |
GOALS_PAGE.SETTINGS.GENERAL | General | 将以下文本翻译成中文: General | 常规 |
KEY_RESULT_PAGE.TYPE.KPI | KPI | KPI的翻译是关键绩效指标。 | KPI |
INVENTORY_PAGE.NO_OPTIONS_LABEL | (no options) | 请提供要翻译的文本。 | (无选项) |
TASKS_PAGE.TASK_ID | ID | ID (identification) | ID |
JOBS.UPWORK | Upwork | Upwork的中文翻译是 "優聘" 或 "优聘"。 | Upwork |
INVOICES_PAGE.TO | TO | 转换代码认为这个是一个不完整的句子,所以无法准确翻译。请提供完整的句子以获得更准确的翻译。 | 至 |
SETTINGS_FEATURES_DESCRIPTION.JOBS.JOB_SEARCH_JOBS_MATCHING | Job Search & Jobs Matching | 在zh中,翻译以下文本:求职搜索与职位匹配。 | 职位搜索与职位匹配 |
NOTES.INCOME.INCOME_ERROR | {{ error }} | {{ error }} => {{ error }} | {{ error }} |
NOTES.EVENT_TYPES.ERROR | {{ error }} | {{ error }} – {{ error }} | {{ error }} |
NOTES.PROPOSALS.REGISTER_PROPOSAL_ERROR | {{ error }} | {{错误}} | {{ error }} |
NOTES.POLICY.ERROR | {{ error }} | {{错误}} | {{ error }} |
TOASTR.MESSAGE.SCREENSHOT_DELETED | Screenshot for '{{ name }}' removed from '{{ organization }}' | 截图“{{名称}}”已从“{{组织}}”中删除。 | 已从“{{ organization }}”中删除“{{ name }}”的截图 |
NOTES.INVOICE.EDIT_INVOICE | Invoice edited for '{{ name }}' | 发票已编辑为“{{ 名称 }}”. | 已为“{{ name }}”编辑发票 |
NOTES.EXPENSES.ADD_EXPENSE | Expense added for '{{ name }}' | 为'{{ 名字 }}'添加了费用 | 已为“{{ name }}”添加费用 |
PIPELINE_DEALS_PAGE.HEADER | Pipeline Deals | 市场化交流是一种促进和促进销售的策略。在该方法中, 销售流程被视为一个管道,其中包含从潜在客户到最终销售的所有步骤。每个步骤都有对应的... | 管道交易 |
SM_TABLE.LINK_TO_JOBPOST | Link to Job Post | 職位連結 | 职位发布链接 |
FORM.LABELS.INVITE_EXPIRY_PERIOD | Invite Expiry Period (in Days) | 邀請有效期(以天為單位) | 邀请有效期(天) |
FORM.PLACEHOLDERS.RECURRING_WEEKLY_LIMIT | Recurring Weekly Limit (hours) | 每週限制重複發生(小時) | 每周循环限额(小时) |
CANDIDATES_PAGE.DELETED | Deleted | 已刪除 | 已删除 |
CANDIDATES_PAGE.CRITERIONS.TECHNOLOGY_PLACEHOLDER | If you want to add criteria from the technology stack, you need to ... | 如果您想從技術堆棧中添加標準,您需要創建它們。 | 如果要从技术栈中添加标准,需要先创建它们 |
ORGANIZATIONS_PAGE.EDIT.SETTINGS.ALLOW_MANUAL_TIME | Allow Manual Time | 允許手動時間 | 允许手动时间 |
ORGANIZATIONS_PAGE.EDIT.SETTINGS.ALLOW_MANUAL_TIME_INFO | Allow employee to add manual time. | 允許員工添加手動時間。 | 允许员工添加手动时间。 |
ORGANIZATIONS_PAGE.PERMISSIONS.DELETE_SCREENSHOTS | Allow Delete Screenshot | 允許刪除屏幕截圖 | 允许删除截图 |
PROPOSALS_PAGE.REGISTER.JOB_POST_URL | Job Post URL | 職位發布網址 | 职位发布网址 |
PROPOSALS_PAGE.PROPOSAL_DETAILS.JOB_POST_URL | Job Post URL | 職位網址 | 职位发布网址 |
JOB_EMPLOYEE.JOB_SEARCH_STATUS | Job Search Status | 職業搜尋狀態 | 求职状态 |
INVOICES_PAGE.PAYMENTS.SEND_RECEIPT | Send this receipt to {{ name }} ? | 把這份收據發送給{{ name }}嗎? | 要将此收据发送给 {{ name }} 吗? |
NOTES.ORGANIZATIONS.EDIT_ORGANIZATIONS_POSITIONS.REMOVE_POSITION | Position '{{ name }}' was removed | 職位 '{{ name }}' 已被刪除 | 职位“{{ name }}”已删除 |
NOTES.ORGANIZATIONS.EDIT_ORGANIZATIONS_CLIENTS.ADD_CLIENT | New client '{{ name }}' successfully added! | 新客戶 '{{ name }}' 成功添加! | 已成功添加新客户“{{ name }}”! |
NOTES.ORGANIZATIONS.EDIT_ORGANIZATIONS_EMPLOYMENT_TYPES.ADD_EMPLOYMENT_TYPE | Employment type '{{ name }}' was added | 職業類型'{{ name }}'已被添加 | 已添加雇佣类型“{{ name }}” |
NOTES.DANGER_ZONE.RECORD_TYPE | If Yes, please type '{{ type }}' to confirm. | 如果是,請鍵入“{{ type }}”以確認。 | 如果是,请输入“{{ type }}”以确认。 |
TIMER_TRACKER.SETTINGS.AUTOMATIC_UPDATE_CHECK | Automatic Update Check | 自動更新檢查 | 自动检查更新 |
EMAIL_TEMPLATES_PAGE.TEMPLATE_NAMES.time-off-report-action | Time off policy action | 請假政策措施 | 休假政策操作 |
FORGOT_PASSWORD_PAGE.BACK_TO_LOGIN | Back to? | 回到哪裡? | 返回 |
EMPLOYEES_PAGE.DISABLED | Disabled | 残疾 | 已禁用 |
INVOICES_PAGE.TOTAL | Total | 总。 | 总计 |
INVOICES_PAGE.SEND.SENT | Sent | 句子 | 已发送 |
CUSTOM_SMTP_PAGE.HOST | Host | 主人 | 主机 |
FORM.PLACEHOLDERS.OWNER | Owner | 主人 | 所有者 |
ORGANIZATIONS_PAGE.EDIT.OWNER | Owner | 业主 | 所有者 |
CONTACTS_PAGE.LEADS | Leads | 领导 | 潜在客户 |
GOALS_PAGE.FORM.LABELS.LEAD | Lead | 领导 | 负责人 |
PIPELINES_PAGE.STAGE | Stage | 舞台 | 阶段 |
PIPELINES_PAGE.VIEW_DEALS | View Deals | 查看优惠 | 查看交易 |
CANDIDATES_PAGE.EDIT_CANDIDATE.FEEDBACK_STATUS | Status | 地位 | 状态 |
CANDIDATES_PAGE.EDIT_CANDIDATE.INTERVIEW.INTERVIEWS | Interviews | 采访 | 面试 |
ORGANIZATIONS_PAGE.PERMISSIONS.ORG_CANDIDATES_INTERVIEW_VIEW | View Interview | 查看采访 | 查看面试 |
TIMER_TRACKER.MENU.WINDOW | Window | 窗户 | 窗口 |
TIMESHEET.VIEW_WINDOWS | View windows | 查看窗户 | 查看窗口 |
CANDIDATES_PAGE.APPLIED | Applied | 应用 | 已申请 |
JOBS.APPLIED | Applied | 应用 | 已申请 |
JOBS.VIEW | View | 观看 | 查看 |
INVENTORY_PAGE.TYPE | Type | 输入 | 类型 |
FORM.PLACEHOLDERS.BUDGET_TYPE | Type | 输入 | 类型 |
MENU.IMPORT_EXPORT.TENANT | Tenant | 租客 | 租户 |
BUTTONS.YES | Yes | 是的 | 是 |
BUTTONS.NO | No | 不 | 否 |
PROPOSAL_TEMPLATE.YES | Yes | 是的 | 是 |
PROPOSAL_TEMPLATE.NO | No | 没有 | 否 |
INVOICES_PAGE.YES | Yes | 是的 | 是 |
INVOICES_PAGE.NO | No | 没有 | 否 |
EVENT_TYPE_PAGE.YES | Yes | 是的 | 是 |
EVENT_TYPE_PAGE.NO | No | 没有 | 否 |
SM_TABLE.NONE | None | 没有 | 无 |
KEY_RESULT_PAGE.UPDATE.STATUS.NONE | none | 没有 | 无 |
ORGANIZATIONS_PAGE.EDIT.SETTINGS.PROOF_OF_COMPLETION_TYPE_DROPDOWN.NONE | None | 没有 | 无 |
🤖 Generated with Claude Code