Skip to content

Conversation

@tyreseluo
Copy link

@tyreseluo tyreseluo commented Dec 11, 2025

PR Content

This branch tightens up the zh-CN wording; no new files added.

  • Updated ghost/i18n/locales/zh/ghost.json for subscription/comment phrasing aligned with mainland usage and filled the missing “Subscription details” translation.
  • Refined ghost/i18n/locales/zh/comments.json copy: consistent “评论/名字” terms and clearer load/show hints.
  • Smoothed ghost/i18n/locales/zh/portal.json wording across subscription, email preferences, and error messages for a more natural, consistent tone.

Net result: portal and comments Chinese strings read more naturally, with the last missing translation now covered.

This PR modification applies solely to language conventions in mainland China.

Related PR


Note

Aligns zh-CN translations to mainland terminology across comments, portal, and email/notification strings, including adding the missing “Subscription details”.

  • i18n (zh-CN):
    • ghost/i18n/locales/zh/comments.json
      • Standardizes terminology (e.g., 评论, 名字).
      • Clarifies pagination strings (e.g., 加载更多({amount})条, 显示更多{amount}条评论).
      • Updates profile/name input phrasing.
    • ghost/i18n/locales/zh/ghost.json
      • Aligns comment/subscription terms with mainland usage (评论, 订阅).
      • Refines various email/notification phrases.
      • Adds missing translation for Subscription details.
    • ghost/i18n/locales/zh/portal.json
      • Broad copy tweaks for subscription, email preferences, and error/unsubscribe messaging.
      • Standardizes 姓名/邮件 phrasing and “More/Less like this”.

Written by Cursor Bugbot for commit 5af089a. This will update automatically on new commits. Configure here.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 11, 2025

Walkthrough

This pull request updates Chinese locale translations across three Ghost configuration files (comments.json, ghost.json, and portal.json). The changes consist of retranslated UI strings with refined wording, adjusted terminology for consistency, and the addition of explicit item counts in certain translations. All modifications are purely textual—no functional logic, structural changes, or behavioral alterations are introduced.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Homogeneous changes: All updates follow the same pattern (string translations), making this a repetitive review task rather than requiring varied reasoning per file.
  • No logic verification needed: Translations require accuracy checking but do not demand code logic or control flow analysis.
  • Areas for attention:
    • Verify consistency of terminology across the three files (e.g., "名字" vs. "姓名" for "name")
    • Confirm proper handling of parameter placeholders like {amount}, {date}, and {email} in updated strings
    • Validate that translated phrases convey the intended meaning and maintain appropriate tone for subscription and user-facing UI contexts

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Align zh translations with mainland terminology' clearly and directly describes the main change—updating Chinese translations across locale files to align with mainland China conventions.
Description check ✅ Passed The description is directly related to the changeset, providing specific details about which files were updated, what terminology was standardized, and the overall intent of the changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 15f7190 and 5af089a.

📒 Files selected for processing (3)
  • ghost/i18n/locales/zh/comments.json (5 hunks)
  • ghost/i18n/locales/zh/ghost.json (3 hunks)
  • ghost/i18n/locales/zh/portal.json (6 hunks)
🧰 Additional context used
🧠 Learnings (17)
📓 Common learnings
Learnt from: kasnol
Repo: TryGhost/Ghost PR: 24523
File: ghost/i18n/locales/zh-Hant/ghost.json:25-26
Timestamp: 2025-07-29T05:18:41.313Z
Learning: In Ghost's Traditional Chinese localization, when source English text is modified (such as removing words like "safely"), the corresponding Chinese translations should be updated to match. For example, if "safely" is removed from English security-related messages, the corresponding "放心" should also be removed from the Chinese translation to maintain translation accuracy.
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 0
File: :0-0
Timestamp: 2025-05-20T21:08:21.026Z
Learning: In the Ghost project, translation files (ghost/i18n/locales/*/*.json) commonly have blank values for translations, and this is normal behavior that should not be flagged in reviews. These empty translations will be filled in separate PRs.
Learnt from: kevinansfield
Repo: TryGhost/Ghost PR: 25118
File: apps/portal/src/App.js:719-719
Timestamp: 2025-10-09T14:16:58.334Z
Learning: In Ghost Portal (apps/portal), avoid suggesting changes to translation strings (wrapped in `t()`) unless directly related to the PR's primary objective, as changing them invalidates existing translations and creates unnecessary churn. If a typo or improvement is found in a translation string, it should be fixed across all instances in a dedicated PR.
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Applies to ghost/i18n/locales/en/ghost.json : Add UI translations to `ghost/i18n/locales/en/ghost.json` for Admin UI features
Learnt from: sagzy
Repo: TryGhost/Ghost PR: 24673
File: ghost/i18n/lib/i18n.js:34-35
Timestamp: 2025-11-24T11:12:15.712Z
Learning: In the Ghost i18n package (ghost/i18n/lib/i18n.js), changing existing locale codes requires backwards compatibility handling for users who have already configured those locales. Such changes should be done in a separate PR with migration logic rather than included in feature PRs.
Learnt from: kasnol
Repo: TryGhost/Ghost PR: 24523
File: ghost/i18n/locales/zh-Hant/comments.json:45-46
Timestamp: 2025-07-29T05:08:05.874Z
Learning: For Traditional Chinese localization in Ghost's comments.json, "Oldest" should be translated as "最早" (not "最初") when used in comment sorting selectors, as "最早" better conveys the temporal sorting context.
Learnt from: kasnol
Repo: TryGhost/Ghost PR: 24523
File: ghost/i18n/locales/zh-Hant/portal.json:107-108
Timestamp: 2025-07-29T05:24:43.780Z
Learning: In Ghost's Traditional Chinese localization for portal.json, when translating membership restriction messages, "目前不接受此 email 網域的會員申請" is preferred over "此 email 網域的註冊目前不接受會員登記" as it provides better sentence flow and uses more natural phrasing while maintaining the same meaning.
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Applies to ghost/i18n/locales/en/{portal,comments,signup-form,search}.json : Add UI translations to namespace-specific files in `ghost/i18n/locales/en/` for public UI apps (portal.json for Portal, comments.json for Comments UI, etc.)
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 0
File: :0-0
Timestamp: 2025-01-29T15:27:29.391Z
Learning: When reviewing translation files in ghost/i18n/locales, translators should only modify the translated values and must not change the keys or placeholder styles (e.g., %%{status}%%, {site}, etc.) as they serve specific purposes like Mailgun string replacement.
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Centralized i18n translations should be maintained in `ghost/i18n/locales/{locale}/{namespace}.json` files with 60+ supported locales
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 23070
File: ghost/i18n/locales/hu/comments.json:45-45
Timestamp: 2025-04-30T16:27:03.542Z
Learning: In the Ghost project, new translation string keys are intentionally added with empty values initially and will be translated in a separate PR. Do not report missing translations for entirely new string additions.
📚 Learning: 2025-07-29T05:18:41.313Z
Learnt from: kasnol
Repo: TryGhost/Ghost PR: 24523
File: ghost/i18n/locales/zh-Hant/ghost.json:25-26
Timestamp: 2025-07-29T05:18:41.313Z
Learning: In Ghost's Traditional Chinese localization, when source English text is modified (such as removing words like "safely"), the corresponding Chinese translations should be updated to match. For example, if "safely" is removed from English security-related messages, the corresponding "放心" should also be removed from the Chinese translation to maintain translation accuracy.

Applied to files:

  • ghost/i18n/locales/zh/comments.json
  • ghost/i18n/locales/zh/portal.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-07-29T04:57:10.163Z
Learnt from: kasnol
Repo: TryGhost/Ghost PR: 24523
File: ghost/i18n/locales/zh-Hant/comments.json:11-11
Timestamp: 2025-07-29T04:57:10.163Z
Learning: In Ghost's Traditional Chinese localization, the "Add your expertise" label appears as a link in comments when expertise is not yet provided, specifically to request additional professional background information from commenters. The translation should reflect this context of inviting additional information rather than just adding new information.

Applied to files:

  • ghost/i18n/locales/zh/comments.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-07-29T05:08:05.874Z
Learnt from: kasnol
Repo: TryGhost/Ghost PR: 24523
File: ghost/i18n/locales/zh-Hant/comments.json:45-46
Timestamp: 2025-07-29T05:08:05.874Z
Learning: For Traditional Chinese localization in Ghost's comments.json, "Oldest" should be translated as "最早" (not "最初") when used in comment sorting selectors, as "最早" better conveys the temporal sorting context.

Applied to files:

  • ghost/i18n/locales/zh/comments.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-11-25T14:28:50.351Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Applies to ghost/i18n/locales/en/ghost.json : Add UI translations to `ghost/i18n/locales/en/ghost.json` for Admin UI features

Applied to files:

  • ghost/i18n/locales/zh/comments.json
  • ghost/i18n/locales/zh/portal.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-11-25T14:28:50.351Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Applies to ghost/i18n/locales/en/{portal,comments,signup-form,search}.json : Add UI translations to namespace-specific files in `ghost/i18n/locales/en/` for public UI apps (portal.json for Portal, comments.json for Comments UI, etc.)

Applied to files:

  • ghost/i18n/locales/zh/comments.json
  • ghost/i18n/locales/zh/portal.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-10-01T20:13:20.920Z
Learnt from: tommywong-theinitium
Repo: TryGhost/Ghost PR: 25030
File: ghost/i18n/locales/zh/ghost.json:28-31
Timestamp: 2025-10-01T20:13:20.920Z
Learning: In Ghost's localization files, "More like this" and "Less like this" are labels for thumbs-up/thumbs-down feedback buttons at the bottom of email newsletters, not features to show similar content. Therefore, translations should reflect the "like/dislike" feedback action rather than "show more/less similar content".

Applied to files:

  • ghost/i18n/locales/zh/comments.json
📚 Learning: 2025-01-29T15:27:29.391Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 0
File: :0-0
Timestamp: 2025-01-29T15:27:29.391Z
Learning: When reviewing translation files in ghost/i18n/locales, translators should only modify the translated values and must not change the keys or placeholder styles (e.g., %%{status}%%, {site}, etc.) as they serve specific purposes like Mailgun string replacement.

Applied to files:

  • ghost/i18n/locales/zh/comments.json
  • ghost/i18n/locales/zh/portal.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-05-20T21:08:21.026Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 0
File: :0-0
Timestamp: 2025-05-20T21:08:21.026Z
Learning: In the Ghost project, translation files (ghost/i18n/locales/*/*.json) commonly have blank values for translations, and this is normal behavior that should not be flagged in reviews. These empty translations will be filled in separate PRs.

Applied to files:

  • ghost/i18n/locales/zh/comments.json
  • ghost/i18n/locales/zh/portal.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-10-09T14:16:58.334Z
Learnt from: kevinansfield
Repo: TryGhost/Ghost PR: 25118
File: apps/portal/src/App.js:719-719
Timestamp: 2025-10-09T14:16:58.334Z
Learning: In Ghost Portal (apps/portal), avoid suggesting changes to translation strings (wrapped in `t()`) unless directly related to the PR's primary objective, as changing them invalidates existing translations and creates unnecessary churn. If a typo or improvement is found in a translation string, it should be fixed across all instances in a dedicated PR.

Applied to files:

  • ghost/i18n/locales/zh/portal.json
📚 Learning: 2025-07-29T05:24:43.780Z
Learnt from: kasnol
Repo: TryGhost/Ghost PR: 24523
File: ghost/i18n/locales/zh-Hant/portal.json:107-108
Timestamp: 2025-07-29T05:24:43.780Z
Learning: In Ghost's Traditional Chinese localization for portal.json, when translating membership restriction messages, "目前不接受此 email 網域的會員申請" is preferred over "此 email 網域的註冊目前不接受會員登記" as it provides better sentence flow and uses more natural phrasing while maintaining the same meaning.

Applied to files:

  • ghost/i18n/locales/zh/portal.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-11-24T11:12:15.712Z
Learnt from: sagzy
Repo: TryGhost/Ghost PR: 24673
File: ghost/i18n/lib/i18n.js:34-35
Timestamp: 2025-11-24T11:12:15.712Z
Learning: In the Ghost i18n package (ghost/i18n/lib/i18n.js), changing existing locale codes requires backwards compatibility handling for users who have already configured those locales. Such changes should be done in a separate PR with migration logic rather than included in feature PRs.

Applied to files:

  • ghost/i18n/locales/zh/portal.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-04-30T16:27:03.542Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 23070
File: ghost/i18n/locales/hu/comments.json:45-45
Timestamp: 2025-04-30T16:27:03.542Z
Learning: In the Ghost project, new translation string keys are intentionally added with empty values initially and will be translated in a separate PR. Do not report missing translations for entirely new string additions.

Applied to files:

  • ghost/i18n/locales/zh/portal.json
📚 Learning: 2025-07-29T05:28:28.664Z
Learnt from: kasnol
Repo: TryGhost/Ghost PR: 24523
File: ghost/i18n/locales/zh-Hant/portal.json:143-144
Timestamp: 2025-07-29T05:28:28.664Z
Learning: In Ghost's Traditional Chinese localization, when translating signup/registration restriction messages, it's important to consider the specific context (e.g., member signup vs. general signup) to choose the most appropriate terminology. For member signup contexts, "新會員註冊" (new member registration) is more contextually accurate than just "註冊" (registration).

Applied to files:

  • ghost/i18n/locales/zh/portal.json
📚 Learning: 2025-01-28T13:58:08.393Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 22007
File: ghost/i18n/locales/sl/newsletter.json:18-18
Timestamp: 2025-01-28T13:58:08.393Z
Learning: When reviewing translations of newsletter.json, check that the translations of status words (free/complimentary/paid/trialing) will form grammatically correct sentences when substituted into the message template. The status words should agree grammatically with the word "subscriber" in the target language.

Applied to files:

  • ghost/i18n/locales/zh/portal.json
📚 Learning: 2025-03-03T12:22:11.423Z
Learnt from: michivonah
Repo: TryGhost/Ghost PR: 22323
File: ghost/i18n/locales/de-CH/ghost.json:31-31
Timestamp: 2025-03-03T12:22:11.423Z
Learning: In Swiss German (de-CH) localization for Ghost, "anmelden" is the preferred term for newsletter subscriptions, while "Abo" is used when referring to paid subscriptions. "Sie werden nicht angemeldet" is the correct translation for "You will not be subscribed" in newsletter contexts.

Applied to files:

  • ghost/i18n/locales/zh/portal.json
  • ghost/i18n/locales/zh/ghost.json
📚 Learning: 2025-11-25T14:28:50.351Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Centralized i18n translations should be maintained in `ghost/i18n/locales/{locale}/{namespace}.json` files with 60+ supported locales

Applied to files:

  • ghost/i18n/locales/zh/ghost.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Cursor Bugbot
🔇 Additional comments (3)
ghost/i18n/locales/zh/portal.json (1)

58-224: Translations read naturally and placeholders are preserved correctly.

The text-only updates across portal.json maintain proper handling of template variables (e.g., {email}, {fieldName}, {supportAddress}) and translate mainland Chinese terminology smoothly. The refined phrasing—such as "联系我们获取帮助" (line 90) and subscription status messages (lines 212-214)—improves readability for mainland users.

ghost/i18n/locales/zh/comments.json (1)

29-29: Terminology inconsistency: "名字" vs. "姓名" for name fields across files.

Comments.json uses "名字" (given name) for the "Enter your name" prompt (line 29) and "Name" field label (line 43), while portal.json and ghost.json both use "姓名" (full name). This creates inconsistent user-facing terminology across the Ghost interface.

Consider standardizing on "姓名" across all three locale files for consistency, or clarify if the semantic distinction (given name vs. full name) is intentional for different contexts.

Also applies to: 43-43

ghost/i18n/locales/zh/ghost.json (1)

6-6: Most changes approved; subscription and name terminology updates are clear and natural.

The translation refinements across ghost.json are well-executed:

  • Line 6: "评论" reinforces comment terminology consistency
  • Lines 28-31: Subscription management and member field labels properly refactored
  • Lines 39-40: Farewell and email confirmation phrasing is natural
  • Line 48: New "订阅详情" (Subscription details) translation fills the previously missing entry, as noted in the PR objectives
  • Lines 78-81: Subscription status messages (cancellation, expiration, renewal) read naturally for mainland users

Note: Line 31 ("姓名") continues the name field inconsistency flagged in comments.json (which uses "名字"). Verify this inconsistency across portal, comments, and ghost files before merging.

Also applies to: 28-31, 39-40, 48-48, 78-81


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 and usage tips.

@tyreseluo
Copy link
Author

Hi! @cathysarisky, I absolutely love Ghost. I use it for writing documentation, blogging, and more. This is my first contribution to the project, and certainly not my last.

This time, I revised certain terms used to translate expressions specific to mainland China, making them more consistent with current mainland Chinese usage.

Thank you for taking the time to review this PR.

@tyreseluo tyreseluo marked this pull request as ready for review December 11, 2025 09:04
@tyreseluo tyreseluo changed the title Align zh translations with mainland terminology. Dec 11, 2025
@cathysarisky
Copy link
Member

Hi @tyreseluo , thank you for this contribution, and welcome to the Ghost repo!

@tommywong-theinitium, you most recently contributed to these translations. Do you have a few minutes to review these revisions and offer any feedback? Thank you! 🙏

@cathysarisky
Copy link
Member

"This PR modification applies solely to language conventions in mainland China."

My understanding is that zh is zh-Hans (simplified Chinese), and is largely CN-specific, and we have zh-Hant for traditional Chinese, largely TW-specific. If we need additional localization option for zh-*, or for other codes like zh-CN to fall back to existing localization options (i.e. zh-CN results in the current zh translations), please let me know. :)

@tyreseluo
Copy link
Author

tyreseluo commented Dec 11, 2025

"This PR modification applies solely to language conventions in mainland China."

My understanding is that zh is zh-Hans (simplified Chinese), and is largely CN-specific, and we have zh-Hant for traditional Chinese, largely TW-specific. If we need additional localization option for zh-*, or for other codes like zh-CN to fall back to existing localization options (i.e. zh-CN results in the current zh translations), please let me know. :)

@cathysarisky,In fact, Hong Kong(China) and Macau(China) also require their own set of standards, as their Chinese usage differs from that of Taiwan(China) , despite all three regions employing Traditional Chinese.🧐🧐🧐

like this:
image

@cathysarisky
Copy link
Member

Thanks for the image. If translators are identified who'd like to contribute generically-named and could probably be more correctly labeled 'zh-Hans' or 'zh-CN'. I've got some language code clean-up on my eventual to-do list, but we can't further split zh-Hant to locales without volunteers to provide those translations.

@tyreseluo
Copy link
Author

Yes, I agree. Thank you again for your reply.

@cathysarisky cathysarisky self-assigned this Dec 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

2 participants