feat(i18n): complete the Simplified Chinese UI translation

Merged
EV
14d ago
+2268-332

Summary

Completes the Simplified Chinese web UI translation and adds a reusable parity/placeholder checker for UI catalogues.

  • zh.json now has all 7,438 / 7,438 keys of en.json, in the key order of en.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:test spec), wired into static-checks.yml in report mode.
  • en.json: the two plugin-version toasts showed the raw text v{{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 only zh.json has (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_SYNC strings as a second GITHUB_PAGE object at the top of INTEGRATIONS (the old zh.json had no GITHUB_PAGE). Next to this PR's full GITHUB_PAGE that would have been a duplicate JSON key, and JSON.parse keeps only the last one, so those strings would have been silently lost. They now sit inside the one GITHUB_PAGE, where en.json has 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.json and 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 only other) passes.
  • node tools/scripts/i18n-parity-check.mjs zh fails on a missing key or a placeholder mismatch for the named languages. Options: --list missing|extra|identical|placeholders, --json, --dir <folder> (works for plugin src/i18n folders too).
  • --all reports every language and fails only on a catalogue that does not parse; a folder with only en.json (most plugin folders) has its English catalogue checked.

.github/workflows/static-checks.yml

  • Two steps in platform-gates (both if: always()): node tools/scripts/i18n-parity-check.mjs --all and the spec. The existing gate-wiring check requires every *-check.mjs to be wired. CI holds no language to parity: enforcing zh would 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.CREATED and UPDATED: v{{version}} → v{{number}}. plugin-version.effect.ts passes { number: created.number } / { number: updatedVersion.number }, so English showed v{{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/i18n ships non-English languages, and its zh.json was already complete (checker: 55/55, 0 mismatches). The other plugin src/i18n folders hold only en.json, so no zh.json was added there.
  • Server-side packages/core/src/lib/i18n (bg/he/ru exist): deliberately no zh added. Its only consumer is the invoice/estimate PDF, which PdfmakerService draws 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:

CommandResult
node --test tools/scripts/i18n-parity-check.test.mjs14 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 zhexit 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/i18n55/55, 0 missing, 0 mismatches
node tools/scripts/i18n-parity-check.mjs --allexit 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.mjsPASSED
node --test tools/egress-audit/static-hostnames.test.mjs7 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 filesall formatted
cspell and eslint on the script, spec and workflow0 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 zh catalogue 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.json placeholder bug: fixed here (two values), so the English toasts render the version number and zh reaches 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 zh holds 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, UTC and 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.BG
  • English (United States) — SM_TABLE.REGION.EN
  • Русский (Россия) — SM_TABLE.REGION.RU
  • עברית ישראל — SM_TABLE.REGION.HE
  • Français (France) — SM_TABLE.REGION.FR
  • Español (España) — SM_TABLE.REGION.ES
  • 中文 (中国) — SM_TABLE.REGION.ZH
  • Deutsch (Deutschland) — SM_TABLE.REGION.DE
  • Português (Portugal) — SM_TABLE.REGION.PT
  • Italiano (Italia) — SM_TABLE.REGION.IT
  • Nederlands (Nederland) — SM_TABLE.REGION.NL
  • Polski (Polska) — SM_TABLE.REGION.PL
  • العربية (العراق) — SM_TABLE.REGION.AR
  • Instagram — FORM.LABELS.INSTAGRAM, FORM.PLACEHOLDERS.INSTAGRAM
  • GitHub — FORM.LABELS.GITHUB, FORM.PLACEHOLDERS.GITHUB, HELP_PAGE.GITHUB
  • Gitlab — FORM.LABELS.GITLAB, FORM.PLACEHOLDERS.GITLAB
  • Upwork — FORM.LABELS.UPWORK, FORM.PLACEHOLDERS.UPWORK, JOBS.UPWORK
  • Stackoverflow — FORM.LABELS.STACK_OVERFLOW
  • HH:mm — FORM.PLACEHOLDERS.START_TIME
  • URL — FORM.PLACEHOLDERS.UPLOADER_DOCUMENT_PLACEHOLDER, RICH_TEXT_EDITOR.LINK_DIALOG.URL
  • Make.com — MENU.MAKE_COM
  • Zapier — MENU.ZAPIER
  • Activepieces — MENU.ACTIVEPIECES, INTEGRATIONS.ACTIVEPIECES_PAGE.TITLE, INTEGRATIONS.ACTIVEPIECES_PAGE.AUTHORIZE.TITLE
  • Hubstaff — INTEGRATIONS.HUBSTAFF_PAGE.TITLE
  • Webhooks — INTEGRATIONS.MAKE_COM_PAGE.WEBHOOKS, INTEGRATIONS.ZAPIER_PAGE.TAB.WEBHOOKS, INTEGRATIONS.ZAPIER_PAGE.WEBHOOKS.TITLE
  • Webhook URL — INTEGRATIONS.MAKE_COM.SETTINGS.WEBHOOK_URL, INTEGRATIONS.ZAPIER_PAGE.SETTINGS.WEBHOOK_URL
  • Zaps — INTEGRATIONS.ZAPIER_PAGE.TAB.ZAPS, INTEGRATIONS.ZAPIER_PAGE.ZAPS.TITLE
  • OAuth 2.0 — INTEGRATIONS.ACTIVEPIECES_PAGE.CONNECTIONS.TYPE.OAUTH2
  • MCP — INTEGRATIONS.ACTIVEPIECES_PAGE.MCP_SERVERS.TITLE
  • SIM AI — INTEGRATIONS.SIM_PAGE.TITLE, INTEGRATIONS.SIM_PAGE.AUTHORIZE.TITLE
  • { "key": "value" } — INTEGRATIONS.SIM_PAGE.WORKFLOWS.INPUT_PLACEHOLDER
  • Ever Async — INTEGRATIONS.EVER_ASYNC_PAGE.TITLE
  • Gauzy API URL — INTEGRATIONS.EVER_ASYNC_PAGE.GAUZY_API_URL
  • Plane — INTEGRATIONS.PLANE_PAGE.TITLE
  • https://plane.example.com — INTEGRATIONS.PLANE_PAGE.WEB_URL_PLACEHOLDER
  • https://plane-admin.example.com — INTEGRATIONS.PLANE_PAGE.ADMIN_URL_PLACEHOLDER
  • Plane Space URL — INTEGRATIONS.PLANE_PAGE.SPACE_URL
  • https://plane-space.example.com — INTEGRATIONS.PLANE_PAGE.SPACE_URL_PLACEHOLDER
  • KPI — KEY_RESULT_PAGE.TYPE.KPI, KEY_RESULT_PAGE.FORM.LABELS.SELECT_KPI
  • ID — TASKS_PAGE.TASK_ID
  • name@company.com — INVITE_PAGE.FORM.EMAILS_PLACEHOLDER
  • GraphQL — 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.ERROR
  • CDN URL — TIMER_TRACKER.SETTINGS.CDN_URL, SETTINGS_FILE_STORAGE.DIGITALOCEAN.LABELS.CDN_URL, SETTINGS_FILE_STORAGE.DIGITALOCEAN.PLACEHOLDERS.CDN_URL, PLUGIN.FORM.CDN.URL
  • HubStaff — TIMESHEET.SOURCES.HUBSTAFF
  • UTC — TIMESHEET.TIME_ZONE_OPTION.UTC
  • Amazon S3 — SETTINGS_FILE_STORAGE.PROVIDERS.S3.NAME
  • Wasabi — SETTINGS_FILE_STORAGE.PROVIDERS.WASABI.NAME
  • Cloudinary — SETTINGS_FILE_STORAGE.PROVIDERS.CLOUDINARY.NAME
  • DigitalOcean Spaces — SETTINGS_FILE_STORAGE.PROVIDERS.DIGITALOCEAN.NAME
  • https://app.posthog.com — SETTINGS_GENERAL.POSTHOG.HOST_PLACEHOLDER, SETTINGS_MONITORING.POSTHOG.HOST_PLACEHOLDER
  • 10000 — SETTINGS_GENERAL.POSTHOG.FLUSH_INTERVAL_PLACEHOLDER, SETTINGS_MONITORING.POSTHOG.FLUSH_INTERVAL_PLACEHOLDER
  • DSN — SETTINGS_MONITORING.SENTRY.DSN
  • https://xxx@sentry.io/xxx — SETTINGS_MONITORING.SENTRY.DSN_PLACEHOLDER
  • https://your-jitsu-host.com — SETTINGS_MONITORING.JITSU.HOST_PLACEHOLDER
  • Twilio — SMS_GATEWAY_PAGE.TWILIO
  • you@company.com — DELETE_ACCOUNT_PAGE.REQUEST.EMAIL_PLACEHOLDER
  • name@workspace-email.com — WORKSPACES.PLACEHOLDERS.EMAIL
  • CDN — PLUGIN.FORM.SOURCE_TYPES.CDN
  • NPM — PLUGIN.FORM.SOURCE_TYPES.NPM
  • Gauzy — PLUGIN.FORM.SOURCE_TYPES.GAUZY
  • Gauzy Desktop — PLUGIN.DIALOG.APP_SELECTOR.DESKTOP
  • Gauzy Timer — PLUGIN.DIALOG.APP_SELECTOR.TIMER
  • Gauzy Server — PLUGIN.DIALOG.APP_SELECTOR.SERVER
  • Gauzy API Server — PLUGIN.DIALOG.APP_SELECTOR.API_SERVER
  • Gauzy Agent — PLUGIN.DIALOG.APP_SELECTOR.AGENT
  • https://your-app.example.com/oauth/callback — OAUTH_CLIENTS.FORM.REDIRECT_URI_PLACEHOLDER
The 99 pre-existing values fixed
KeyEnglishBeforeAfter
SM_TABLE.TRANSACTION_TYPEType类型 (Lèixíng)类型
FORM.LABELS.ROLERole角色 (jué sè)角色
FORM.LABELS.UNITUnit单位 (Dānwèi)单位
FORM.PLACEHOLDERS.NAMEName名字 (Míngzì)名称
POP_UPS.EMPLOYEEEmployee员工 (yuángōng)员工
POP_UPS.DATEDate日期 (Rìqī)日期
DASHBOARD_PAGE.DEVELOPER.BONUSBonus奖金 (Jiǎngjīn)奖金
GOALS_PAGE.FORM.LABELS.OWNEROwner拥有者 (Yǒngyǒu zhě)所有者
CONTACTS_PAGE.STREETStreet街道 (jiēdào)街道
PUBLIC_PAGE.ACTIVEActive活跃 (Huóyuè)活跃
TIME_OFF_PAGE.POLICY.NAMEName姓名 (Xìngmíng)名称
SKILLS_PAGE.HEADERSkills技能 (Jìnéng)技能
EQUIPMENT_SHARING_PAGE.ACTIONAction行动 (Xíngdòng)操作
INVENTORY_PAGE.IS_EQUIPMENTIs equipment设备 (Shèbèi)是否为设备
PROFILE_PAGE.FIRST_NAMEFirst Name名字 (Míngzì)名
TIMER_TRACKER.NO_LIMIT∞ No Limit∞ 无限制 (wúxiànzhì)∞ 无限制
TIMESHEET.CALENDARCalendar日历 (Rìlì)日历
TIMESHEET.ACTIONAction行动 (Xíngdòng)操作
FORM.LABELS.TOTo进行翻译,将以下文本翻译为中文:To至
FORM.LABELS.TAX_AND_DISCOUNT_INVOICE_ITEMS_SEPARATELYTax And Discount Invoice Items Separately将以下文本翻译为中文:将税收和折扣的发票项目分开。对发票项目分别计算税费和折扣
FORM.LABELS.UPWORKUpwork翻译:UpworkUpwork
FORM.LABELS.INSTAGRAMInstagramInstagram (中文:照片墙)是一款拍照及分享应用程序。它于2010年10月由Kevin Systrom和Mike Kriege...Instagram
FORM.LABELS.GITHUBGitHubGitHub 仓库是一个用于存储和共享代码的在线平台。它提供了版本控制和协作功能,使多个开发者能够共同合作和管理项目。GitHub 也...GitHub
FORM.LABELS.GITLABGitlabGitlab是一个基于web的Git仓库管理工具,用于版本控制和协作开发。它允许团队成员追踪代码更改、协同编辑和审查代码,以及管理项目...Gitlab
FORM.LABELS.STACK_OVERFLOWStackoverflowStackoverflow 可以在程序设计和开发过程中提供帮助和解答,它是一个面向开发者的问答社区。这个网站上有大量的问题和答案,覆盖...Stackoverflow
FORM.PLACEHOLDERS.START_TIMEHH:mmHH:mm 是指24小时制的时间格式,例如 13:45 表示下午 1 点 45 分。HH:mm
FORM.PLACEHOLDERS.UPLOADER_DOCUMENT_PLACEHOLDERURLURL (Uniform Resource Locator) 的中文翻译是统一资源定位符。URL
FORM.PLACEHOLDERS.INSTAGRAMInstagramInstagram (翻译为中文:Instagram)Instagram
FORM.PLACEHOLDERS.GITHUBGitHubGitHub (GitHub.com) 是一个基于Git版本控制系统的代码托管平台。它允许开发者以版本控制的方式协同合作,共同开发项目...GitHub
FORM.PLACEHOLDERS.GITLABGitlabGitLab 是一个基于 web 的 Git 仓库管理工具,提供了完整的 DevOps 解决方案。它具有版本控制、问题跟踪、CI/CD...Gitlab
FORM.PLACEHOLDERS.UPWORKUpworkUpwork
翻译:優聘Upwork
INTEGRATIONS.HUBSTAFF_PAGE.TITLEHubstaffHubstaff是一家提供时间追踪和团队管理工具的公司。其软件允许雇主监控员工的工作时间、项目进展和任务分配。此外,它还提供计时器、截...Hubstaff
EMPLOYEES_PAGE.EDIT_EMPLOYEE.HRhr将以下文本翻译为中文(简体):小时
GOALS_PAGE.SETTINGS.GENERALGeneral将以下文本翻译成中文: General常规
KEY_RESULT_PAGE.TYPE.KPIKPIKPI的翻译是关键绩效指标。KPI
INVENTORY_PAGE.NO_OPTIONS_LABEL(no options)请提供要翻译的文本。(无选项)
TASKS_PAGE.TASK_IDIDID (identification)ID
JOBS.UPWORKUpworkUpwork的中文翻译是 "優聘" 或 "优聘"。Upwork
INVOICES_PAGE.TOTO转换代码认为这个是一个不完整的句子,所以无法准确翻译。请提供完整的句子以获得更准确的翻译。至
SETTINGS_FEATURES_DESCRIPTION.JOBS.JOB_SEARCH_JOBS_MATCHINGJob 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_DELETEDScreenshot for '{{ name }}' removed from '{{ organization }}'截图“{{名称}}”已从“{{组织}}”中删除。已从“{{ organization }}”中删除“{{ name }}”的截图
NOTES.INVOICE.EDIT_INVOICEInvoice edited for '{{ name }}'发票已编辑为“{{ 名称 }}”.已为“{{ name }}”编辑发票
NOTES.EXPENSES.ADD_EXPENSEExpense added for '{{ name }}'为'{{ 名字 }}'添加了费用已为“{{ name }}”添加费用
PIPELINE_DEALS_PAGE.HEADERPipeline Deals市场化交流是一种促进和促进销售的策略。在该方法中, 销售流程被视为一个管道,其中包含从潜在客户到最终销售的所有步骤。每个步骤都有对应的...管道交易
SM_TABLE.LINK_TO_JOBPOSTLink to Job Post職位連結职位发布链接
FORM.LABELS.INVITE_EXPIRY_PERIODInvite Expiry Period (in Days)邀請有效期(以天為單位)邀请有效期(天)
FORM.PLACEHOLDERS.RECURRING_WEEKLY_LIMITRecurring Weekly Limit (hours)每週限制重複發生(小時)每周循环限额(小时)
CANDIDATES_PAGE.DELETEDDeleted已刪除已删除
CANDIDATES_PAGE.CRITERIONS.TECHNOLOGY_PLACEHOLDERIf you want to add criteria from the technology stack, you need to ...如果您想從技術堆棧中添加標準,您需要創建它們。如果要从技术栈中添加标准,需要先创建它们
ORGANIZATIONS_PAGE.EDIT.SETTINGS.ALLOW_MANUAL_TIMEAllow Manual Time允許手動時間允许手动时间
ORGANIZATIONS_PAGE.EDIT.SETTINGS.ALLOW_MANUAL_TIME_INFOAllow employee to add manual time.允許員工添加手動時間。允许员工添加手动时间。
ORGANIZATIONS_PAGE.PERMISSIONS.DELETE_SCREENSHOTSAllow Delete Screenshot允許刪除屏幕截圖允许删除截图
PROPOSALS_PAGE.REGISTER.JOB_POST_URLJob Post URL職位發布網址职位发布网址
PROPOSALS_PAGE.PROPOSAL_DETAILS.JOB_POST_URLJob Post URL職位網址职位发布网址
JOB_EMPLOYEE.JOB_SEARCH_STATUSJob Search Status職業搜尋狀態求职状态
INVOICES_PAGE.PAYMENTS.SEND_RECEIPTSend this receipt to {{ name }} ?把這份收據發送給{{ name }}嗎?要将此收据发送给 {{ name }} 吗?
NOTES.ORGANIZATIONS.EDIT_ORGANIZATIONS_POSITIONS.REMOVE_POSITIONPosition '{{ name }}' was removed職位 '{{ name }}' 已被刪除职位“{{ name }}”已删除
NOTES.ORGANIZATIONS.EDIT_ORGANIZATIONS_CLIENTS.ADD_CLIENTNew client '{{ name }}' successfully added!新客戶 '{{ name }}' 成功添加!已成功添加新客户“{{ name }}”!
NOTES.ORGANIZATIONS.EDIT_ORGANIZATIONS_EMPLOYMENT_TYPES.ADD_EMPLOYMENT_TYPEEmployment type '{{ name }}' was added職業類型'{{ name }}'已被添加已添加雇佣类型“{{ name }}”
NOTES.DANGER_ZONE.RECORD_TYPEIf Yes, please type '{{ type }}' to confirm.如果是,請鍵入“{{ type }}”以確認。如果是,请输入“{{ type }}”以确认。
TIMER_TRACKER.SETTINGS.AUTOMATIC_UPDATE_CHECKAutomatic Update Check自動更新檢查自动检查更新
EMAIL_TEMPLATES_PAGE.TEMPLATE_NAMES.time-off-report-actionTime off policy action請假政策措施休假政策操作
FORGOT_PASSWORD_PAGE.BACK_TO_LOGINBack to?回到哪裡?返回
EMPLOYEES_PAGE.DISABLEDDisabled残疾已禁用
INVOICES_PAGE.TOTALTotal总。总计
INVOICES_PAGE.SEND.SENTSent句子已发送
CUSTOM_SMTP_PAGE.HOSTHost主人主机
FORM.PLACEHOLDERS.OWNEROwner主人所有者
ORGANIZATIONS_PAGE.EDIT.OWNEROwner业主所有者
CONTACTS_PAGE.LEADSLeads领导潜在客户
GOALS_PAGE.FORM.LABELS.LEADLead领导负责人
PIPELINES_PAGE.STAGEStage舞台阶段
PIPELINES_PAGE.VIEW_DEALSView Deals查看优惠查看交易
CANDIDATES_PAGE.EDIT_CANDIDATE.FEEDBACK_STATUSStatus地位状态
CANDIDATES_PAGE.EDIT_CANDIDATE.INTERVIEW.INTERVIEWSInterviews采访面试
ORGANIZATIONS_PAGE.PERMISSIONS.ORG_CANDIDATES_INTERVIEW_VIEWView Interview查看采访查看面试
TIMER_TRACKER.MENU.WINDOWWindow窗户窗口
TIMESHEET.VIEW_WINDOWSView windows查看窗户查看窗口
CANDIDATES_PAGE.APPLIEDApplied应用已申请
JOBS.APPLIEDApplied应用已申请
JOBS.VIEWView观看查看
INVENTORY_PAGE.TYPEType输入类型
FORM.PLACEHOLDERS.BUDGET_TYPEType输入类型
MENU.IMPORT_EXPORT.TENANTTenant租客租户
BUTTONS.YESYes是的是
BUTTONS.NONo不否
PROPOSAL_TEMPLATE.YESYes是的是
PROPOSAL_TEMPLATE.NONo没有否
INVOICES_PAGE.YESYes是的是
INVOICES_PAGE.NONo没有否
EVENT_TYPE_PAGE.YESYes是的是
EVENT_TYPE_PAGE.NONo没有否
SM_TABLE.NONENone没有无
KEY_RESULT_PAGE.UPDATE.STATUS.NONEnone没有无
ORGANIZATIONS_PAGE.EDIT.SETTINGS.PROOF_OF_COMPLETION_TYPE_DROPDOWN.NONENone没有无

🤖 Generated with Claude Code