Skip to content

Conversation

@lujuldotcom
Copy link
Contributor

@lujuldotcom lujuldotcom commented Nov 21, 2025

ref: #23361

Added the missing French translations for the one-time code (OTP) sign-in feature.
Also corrected a few typos, missing words, and minor inconsistencies in the French locale files.


Note

Adds missing French OTP/verification strings and improves wording/punctuation across fr ghost.json and portal.json.

  • i18n (French)
    • ghost/i18n/locales/fr/ghost.json
      • Add translations for OTP sign-in strings: Or use this link to securely sign in, Or, skip the code and sign in directly, Sign in now, Sign in to {siteTitle} with code {otc}, Welcome back to {siteTitle}! Your verification code is {otc}., Welcome back! Here's your code to sign in to {siteTitle}.
      • Fix grammar/punctuation (e.g., "Please confirm your email address with this link:").
    • ghost/i18n/locales/fr/portal.json
      • Add/complete OTP-related strings: An email has been sent to {submittedEmailOrInbox}..., Code, Enter code above, Invalid verification code, Failed to verify code, please try again, Verifying..., your inbox.
      • Refine wording/capitalization/punctuation across various messages (spam/help text, unsubscribe, support/contact).

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

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 21, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

This pull request updates French translations in two localization files: ghost/i18n/locales/fr/ghost.json and ghost/i18n/locales/fr/portal.json. Previously empty or inconsistent entries were populated and many strings were refined for wording, punctuation, and French typography. Changes affect authentication, sign-in, email verification, inbox/notification, subscription, and account-settings text. No application logic, control flow, or public API signatures were modified.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Areas to pay attention to:

  • Verify placeholder variables remain correct and in place (e.g., {submittedEmailOrInbox}, {siteTitle}, {otc}, {memberEmail}, {senderEmail}, {supportAddress}).
  • Ensure embedded HTML fragments (e.g., <button>) are intact and valid within strings.
  • Check French typography/formatting consistency (e‑mail vs e-mails, capitalization, punctuation and spacing).

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding French translations for OTP and updating wording in French locale files, which matches the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description check ✅ Passed The PR description clearly describes adding missing French translations for OTP sign-in and correcting typos/wording in French locale files, directly matching the changeset.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f1904b9 and e0254f2.

📒 Files selected for processing (2)
  • ghost/i18n/locales/fr/ghost.json (2 hunks)
  • ghost/i18n/locales/fr/portal.json (10 hunks)
🧰 Additional context used
🧠 Learnings (10)
📓 Common learnings
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: 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: 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.
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 22175
File: ghost/i18n/locales/pt-BR/portal.json:18-18
Timestamp: 2025-02-12T20:09:12.731Z
Learning: In the Ghost project, new translation keys are first added with empty string values, and the actual translations are added later in separate PRs to maintain better organization of translation work.
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: cathysarisky
Repo: TryGhost/Ghost PR: 21982
File: ghost/i18n/locales/hu v2/portal.json:70-70
Timestamp: 2025-01-29T15:23:58.658Z
Learning: Typos and spelling errors within localization files (ghost/i18n/locales/*.json) must be treated as important problems, not nitpicks, as they directly affect the user experience for speakers of that language. These issues should be flagged with high priority during code review.
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 22075
File: ghost/i18n/locales/pt-BR/portal.json:0-0
Timestamp: 2025-01-30T15:11:25.199Z
Learning: When reviewing translation files in i18n/locales/*, focus on identifying spelling errors in the translation values (right side) of the JSON key-value pairs, not the keys (left side).
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 22175
File: ghost/i18n/locales/lt/portal.json:16-16
Timestamp: 2025-02-12T20:23:47.777Z
Learning: When reviewing localization changes, verify the actual history of translations before flagging potential deletions. Empty translation strings may be intentional placeholders rather than deleted content.
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 0
File: :0-0
Timestamp: 2025-02-07T18:07:34.152Z
Learning: Always review translation changes in language files unless the right side (value) of the key-value pair is blank. This includes reviewing both the correctness and appropriateness of the translations.
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 21651
File: ghost/i18n/locales/ar/comments.json:1-1
Timestamp: 2025-01-29T15:35:26.447Z
Learning: All JSON files containing translation strings in ghost/i18n/locales must include both opening and closing braces to maintain valid JSON structure.
📚 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/fr/ghost.json
  • ghost/i18n/locales/fr/portal.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/fr/ghost.json
  • ghost/i18n/locales/fr/portal.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/fr/ghost.json
  • ghost/i18n/locales/fr/portal.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/fr/ghost.json
  • ghost/i18n/locales/fr/portal.json
📚 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/fr/ghost.json
📚 Learning: 2025-02-12T20:09:12.731Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 22175
File: ghost/i18n/locales/pt-BR/portal.json:18-18
Timestamp: 2025-02-12T20:09:12.731Z
Learning: In the Ghost project, new translation keys are first added with empty string values, and the actual translations are added later in separate PRs to maintain better organization of translation work.

Applied to files:

  • ghost/i18n/locales/fr/ghost.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/fr/portal.json
📚 Learning: 2025-01-29T15:23:58.658Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 21982
File: ghost/i18n/locales/hu v2/portal.json:70-70
Timestamp: 2025-01-29T15:23:58.658Z
Learning: Typos and spelling errors within localization files (ghost/i18n/locales/*.json) must be treated as important problems, not nitpicks, as they directly affect the user experience for speakers of that language. These issues should be flagged with high priority during code review.

Applied to files:

  • ghost/i18n/locales/fr/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/fr/portal.json
🔇 Additional comments (2)
ghost/i18n/locales/fr/portal.json (1)

21-224: Comprehensive French translations—all placeholder preservation and grammar checks pass.

I've reviewed all 19 translation changes across the file. The translations consistently maintain placeholder integrity ({memberEmail}, {submittedEmailOrInbox}, {senderEmail}, {supportAddress}), preserve HTML tags (, ), and apply correct French grammar, punctuation conventions, and idiomatic phrasing. Complex multi-sentence messages (e.g., lines 109, 124, 206) are well-structured and convey their original meaning accurately. No spelling errors, grammar issues, or technical violations detected.

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

37-37: Remaining translations are grammatically sound and placeholder-preserving.

Lines 37, 42, 44, and 64 all maintain correct French grammar, proper punctuation (colon after line 37, exclamation marks, periods), and preserve placeholders ({siteTitle}, {otc}) accurately. The sign-in verification messages use appropriate formal tone with "Veuillez" and "Quel plaisir."

Also applies to: 42-42, 44-44, 64-64

Copy link
Member

@cathysarisky cathysarisky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📋 My AI helper 🤖 left you a few comments. I always believe the human over the AI, so feel free to disregard them after you take a careful look!

Leave me a comment when you're satisfied with everything, please. :)

🤖 AI: Overall, the translations are clear and consistent with a friendly tone. I noticed only a few minor whitespace issues and a couple of UI phrasing questions around the spam-marking terminology. Merci !


Drafted with my new i18n tooling - feedback welcome

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is being reviewed by Cursor Bugbot

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

…efer to the email content rather than the inbox
…re l’abonnement' to reflect resuming rather than extending the subscription
@lujuldotcom
Copy link
Contributor Author

Hi @cathysarisky do you need anything else from me regarding the translation? Everything looks correct on my end.

@cathysarisky
Copy link
Member

Thanks for your patience, and sorry for the delay. (I'm a volunteer, and the paying work has kept me away for a few days.) I'm merging now. Expect changes live in 1-2 weeks, depending on when exactly the next version of portal is released.

@cathysarisky cathysarisky enabled auto-merge (squash) December 3, 2025 11:53
@cathysarisky cathysarisky merged commit 1dbcfa5 into TryGhost:main Dec 3, 2025
31 of 33 checks passed
@lujuldotcom lujuldotcom deleted the french-translations-v2 branch December 5, 2025 11:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants