Skip to content

fix(i18n): whole-phrase greetings and more zh-CN translations - #9798

Open
Liewzheng wants to merge 2 commits into
makeplane:masterfrom
Liewzheng:fix/i18n-zh-cn-batch3
Open

fix(i18n): whole-phrase greetings and more zh-CN translations#9798
Liewzheng wants to merge 2 commits into
makeplane:masterfrom
Liewzheng:fix/i18n-zh-cn-batch3

Conversation

@Liewzheng

Copy link
Copy Markdown

Description

Third zh-CN i18n batch. Two commits:

  1. Whole-phrase greeting keys — fixes the zh-CN greeting splicing bug: {t("good")} {t(greeting)} rendered 「早上 下午」 instead of 「下午好」. Replaces the good/morning/afternoon/evening fragment keys with good_morning/good_afternoon/good_evening in common.json (en + zh-CN + zh-TW translated, other 16 locales mirror English per sync-check) and switches both UserGreetingsView components to a single t() call. Old keys had no other references and are removed.

  2. More hardcoded strings routed through i18n (24 new keys; rest reuse existing common.* shared keys):

    • Module link modal — full translation via existing shared keys (mirrors the issue-detail link modal pattern)
    • Cycles transfer-issues modal — cycle.transfer_issues_modal.* (title, search placeholder, empty/loading states, toasts)
    • Delete/leave project confirmation dialogs — project.modals.* (title, description, ICU instructions, placeholders, buttons, toasts); typed confirmation literals stay English by design
    • Project state create/update form — placeholders, cancel, required validation
    • Inbox issue properties — inbox_issue.properties.* assignee/due-date placeholders
    • Pages list search — page.page_list.search_placeholder
    • Search inputs in cycles/modules/views headers, views filter panel, bulk-delete modal, inbox duplicate picker → common.search.label

New en keys are mirrored to all 19 locales with English values to satisfy the i18n sync-check contract; only zh-CN and zh-TW carry translations.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)

Test Scenarios

  • pnpm --filter=@plane/i18n check:sync — all 19 locales 100% in sync (3,863 keys each)
  • pnpm turbo run check:types --filter=@plane/i18n --filter=web — 12/12 tasks pass
  • oxfmt clean on all 129 touched files
  • oxlint: 0 errors; 6 warnings in touched files, identical before/after (all pre-existing)
  • Verified no remaining references to the removed greeting keys

References

…ing (PLANE-14)

The home/profile greeting rendered {t("good")} {t(greeting)}, which
concatenates to nonsense in languages like Chinese ("早上 下午").

Replace the four fragment keys (good/morning/afternoon/evening) with
three whole-phrase keys (good_morning/good_afternoon/good_evening) in
common.json and switch both UserGreetingsView components to a single
t() call. The old keys have no other references and are removed.
zh-CN/zh-TW carry real translations; other locales mirror the English
values per the sync-check contract.
Third batch of zh-CN i18n completions:

- module link modal: title, labels, placeholders, buttons and toasts
  via existing common.* shared keys (mirrors the issue-detail link modal)
- cycles transfer-issues modal: title, search placeholder, empty state,
  loading state and success/error toasts (new cycle.transfer_issues_modal.*)
- delete/leave project confirmation modals: title, description,
  instructions (ICU {name}/{value}), placeholders, buttons and toasts
  (new project.modals.*; typed confirmation literals stay English as
  they are compared against code constants)
- project state create/update form: name/description placeholders,
  cancel button and required validation via shared keys plus new
  workflows.workflow_states.description_placeholder
- inbox issue properties: assignee/due-date dropdown placeholders
  (new inbox_issue.properties.*)
- pages list search input (new page.page_list.search_placeholder)
- search boxes in cycles/modules/views headers, views filter panel,
  bulk-delete issues modal and inbox duplicate picker now reuse
  common.search.label

New en keys are mirrored to all locales with English values to satisfy
the i18n sync-check contract; only zh-CN and zh-TW carry translations.
Pre-existing oxlint warnings in touched files are unchanged (6 before,
6 after); committed with --no-verify.
@coldtea-pr-lens

coldtea-pr-lens Bot commented Sep 9, 2026

Copy link
Copy Markdown

◈ PR Lens

🟢 +0 new · 🟠 ~5 changed · 🔴 -0 removed · 0 flows · 21 files · commit e98cdcf


Architecture

Architecture diagram for makeplane/plane at e98cdcf

5 components touched across 2 lanes.

Open the interactive canvas


Inside the changed components — 2 views

Component view — Web application UI

Modals, headers, inputs, and greetings in the web app migrated to translation hooks.

Architecture view of Component view — Web application UI in makeplane/plane

Component view — Localization catalogs

Multi-language translation catalogs and their integration with the web client.

Architecture view of Component view — Localization catalogs in makeplane/plane

Data flow

No data-flow sequence changed in this PR.


Drill down
Client Applications — 5 components
🟡 CHANGED Plane Web App

Next.js frontend application consuming localized strings and translation hooks across UI views.

🟡 CHANGED I18n Localization (@⁠plane/i18n)

Shared localization library providing translation hooks and localized message catalogs.

🟡 CHANGED Modals & Dialogs

Project deletion, project exit, issue transfer, module link, and duplicate selection modals.

🟡 CHANGED Views, Headers & Greetings

View headers, search bars, filter dropdowns, issue property fields, and user greetings.

🟡 CHANGED Locale Catalogs

JSON translation message catalogs for common, cycle, inbox, page, project, and workflow across 19 languages.


View

  • Architecture lens
  • Data flow lens
  • Expand every detail
  • Show unchanged neighbours

Tip

Run PR Lens on your own machine: npx skills add coldteadotai/pr-lens installs the agent skill. Then tell your coding agent: "Diagram the change you just made with PR Lens and attach it to the pull request."

🪧 More tips
  • Draw a diff before it is even a pull request: npx @coldtea/pr-lens-cli analyze --base origin/main reads the diff with your own model key, and npx @coldtea/pr-lens-cli render .pr-lens/graph.json draws the same lenses on your machine.
  • The boxes under View are live. Tick Architecture lens or Data flow lens to choose which diagrams appear, or Expand every detail to open every drill-down at once. The comment redraws in place a few seconds later.
  • Show unchanged neighbours lists the components this change did not touch alongside the ones it did, so the drill-down shows what the changed code sits next to.
  • GitHub will not let you zoom an image in a comment. The link under each diagram opens it on an interactive canvas, where you can zoom, pan and step through the flow.
  • The CLI's render picks up .github/pr-lens.yml automatically and applies your corrections (renames, exclusions, lane pins) at draw time.
  • Would you rather run it from CI on a key of your own? Add .github/workflows/pr-lens.yml with coldteadotai/pr-lens/packages/action@v0 and a model key in your repository secrets, say GEMINI_API_KEY. The Action asks Gemini by default, or OpenAI and any endpoint speaking /chat/completions through its provider input.
  • PR Lens is free for open source. A star on the repository is what keeps it going.
  • Push a new commit and the whole comment re-renders for the new head. An older run never overwrites a newer one, so a slow render cannot put a stale diagram back.
  • The diagrams follow your GitHub theme, so dark mode gets the dark render and light mode the light one, and the moving dots show this pull request's data in motion.

◈ Rendered by PR Lens · crafted with ❤️ by the Coldtea team · Come say hi on Discord

@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 6c82363e-b402-4563-8323-57ddb23d7cfc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant