Skip to content

Conversation

amirsaam
Copy link
Contributor

  • I'm the original Persian translator of Ghost to Persian, now I'm maintaining it.

  • This PR adds missed strings for Persian translation

  • I've read and followed the Contributor Guide

  • I've explained my change

  • I've written an automated test to prove my change works

@github-actions github-actions bot added community [triage] Community features and bugs affects:i18n labels Oct 11, 2025
cursor[bot]

This comment was marked as outdated.

Copy link
Contributor

coderabbitai bot commented Oct 11, 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 PR populates many previously empty Persian (fa) i18n values and adds/updates keys across four locale files: ghost/i18n/locales/fa/comments.json, ghost/i18n/locales/fa/ghost.json, ghost/i18n/locales/fa/portal.json (including a sample phone number change to +989123456789), and ghost/i18n/locales/fa/search.json. Changes are text-only localizations (translations and minor wording adjustments); there are no changes to application logic, control flow, or data structures.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related issues

  • 🌐 i18n mega-issue #23361 — This PR completes and updates Persian (fa) locale translations, which aligns with the i18n completion/fix effort described in that issue.

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title accurately reflects the primary change by stating that missing Persian translations have been added and directly relates to the content of the changeset without unnecessary jargon or ambiguity.
Description Check ✅ Passed The description clearly states the contributor’s background and the purpose of the PR, namely adding missed Persian translation strings, which aligns with the actual changes without veering off-topic.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ 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 c06070b and 1cbe7ca.

📒 Files selected for processing (2)
  • ghost/i18n/locales/fa/ghost.json (1 hunks)
  • ghost/i18n/locales/fa/portal.json (8 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
ghost/i18n/locales/*/*.json

📄 CodeRabbit inference engine (AGENTS.md)

All translations must be centralized under ghost/i18n/locales/{locale}/{namespace}.json

Files:

  • ghost/i18n/locales/fa/ghost.json
  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/@(ghost|portal|signup-form|comments|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Only the documented namespaces (ghost, portal, signup-form, comments, search) should be used for i18n files

Files:

  • ghost/i18n/locales/fa/ghost.json
  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/@(portal|comments|signup-form|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Public UI translations must use separate namespaces (portal.json, comments.json, signup-form.json, search.json) per locale

Files:

  • ghost/i18n/locales/fa/portal.json
🧠 Learnings (4)
📓 Common learnings
Learnt from: cathysarisky
PR: TryGhost/Ghost#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.
📚 Learning: 2025-10-11T13:51:07.673Z
Learnt from: amirsaam
PR: TryGhost/Ghost#25138
File: ghost/i18n/locales/fa/portal.json:46-46
Timestamp: 2025-10-11T13:51:07.673Z
Learning: In Persian (fa) translations for Ghost, "Complimentary" plan label should be translated as "افتخاری" in portal.json, as confirmed by the original Persian translator amirsaam.

Applied to files:

  • ghost/i18n/locales/fa/ghost.json
  • ghost/i18n/locales/fa/portal.json
📚 Learning: 2025-10-09T17:25:12.411Z
Learnt from: CR
PR: TryGhost/Ghost#0
File: AGENTS.md:0-0
Timestamp: 2025-10-09T17:25:12.411Z
Learning: Applies to ghost/i18n/locales/en/ghost.json : Admin UI translations must be added to ghost/i18n/locales/en/ghost.json

Applied to files:

  • ghost/i18n/locales/fa/ghost.json
📚 Learning: 2025-01-29T15:27:29.391Z
Learnt from: cathysarisky
PR: TryGhost/Ghost#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/fa/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). (8)
  • GitHub Check: Legacy tests (Node 22.13.1, sqlite3)
  • GitHub Check: Legacy tests (Node 22.13.1, mysql8)
  • GitHub Check: Ghost-CLI tests
  • GitHub Check: Acceptance tests (Node 22.13.1, sqlite3)
  • GitHub Check: Acceptance tests (Node 22.13.1, mysql8)
  • GitHub Check: Lint
  • GitHub Check: Unit tests (Node 22.13.1)
  • GitHub Check: Build & Push

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.

cursor[bot]

This comment was marked as outdated.

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: 3

♻️ Duplicate comments (2)
ghost/i18n/locales/fa/ghost.json (2)

69-69: Remove mixed English and fix sentence flow

English “to {site}” leaked into Persian. Keep placeholders intact and natural order.

-    "You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.": "شما این را دریافت کرده‌اید چرا که <strong>مشترک %%{status}%%</strong> وب‌سایت to {site}. هستید.",
+    "You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.": "شما این ایمیل را دریافت کرده‌اید زیرا <strong>مشترک %%{status}%%</strong> {site} هستید.",

Based on learnings


44-45: Fix placeholder order and sentence structure

Current output interleaves placeholders unnaturally. Keep {siteTitle} before {otc}.

-    "Sign in to {siteTitle} with code {otc}": "ورود به وب‌سایت {otc} {siteTitle} با کد",
+    "Sign in to {siteTitle} with code {otc}": "ورود به وب‌سایت {siteTitle} با کد {otc}",

As per coding guidelines (placeholder integrity)

🧹 Nitpick comments (5)
ghost/i18n/locales/fa/search.json (1)

2-8: LGTM; optional typographic tweak for search prompt

Consider using ZWNJ in “جست‌وجو” for standard Persian typography.

-    "Search posts, tags and authors": "جستوجو میان نوشته‌ها، برچسب‌ها و نویسندگان",
+    "Search posts, tags and authors": "جست‌وجو میان نوشته‌ها، برچسب‌ها و نویسندگان",
ghost/i18n/locales/fa/comments.json (1)

40-41: Improve phrasing and consistency: “Load more”, “removed”, “Reply to”, “Show 1 more reply”

  • Use standard spelling “بارگذاری”.
  • Prefer “حذف شده” for consistency with “Deleted”.
  • Natural phrasing: “پاسخ به”.
  • Use “پاسخ” (reply) instead of “دیدگاه” (comment).
-    "Load more ({amount})": "({amount}) بارگزاری بیشتر",
+    "Load more ({amount})": "({amount}) بارگذاری بیشتر",
-    "removed": "از بین رفته",
+    "removed": "حذف شده",
-    "Reply to": "پاسخی بدهید به",
+    "Reply to": "پاسخ به",
-    "Show 1 more reply": "نمایش یک دیدگاه بیشتر",
+    "Show 1 more reply": "نمایش یک پاسخ دیگر",

Based on learnings

Also applies to: 50-50, 53-54, 63-63

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

15-15: Minor punctuation/typos for clarity

  • Add colon where present in source.
  • Fix typo “موراد” → “موارد”.
-    "Device:": "دستگاه",
+    "Device:": "دستگاه:",
-    "Less like this": "موراد کمتری شبیه به این",
+    "Less like this": "موارد کمتری شبیه به این",
-    "When:": "چه زمانی",
+    "When:": "چه زمانی:",
-    "Where:": "چه مکانی",
+    "Where:": "چه مکانی:",

Also applies to: 27-27, 67-68

ghost/i18n/locales/fa/portal.json (2)

6-6: Fix typos across portal UI strings

Correct spelling to avoid user-facing glitches.

-    "{amount} off for first {period}.": "{amount} تخقیف برای اولین {period}.",
+    "{amount} off for first {period}.": "{amount} تخفیف برای اولین {period}.",

-    "Account details updated successfully": "مشخصات کابری با موفقیت به‌روز شد",
+    "Account details updated successfully": "مشخصات کاربری با موفقیت به‌روز شد",

-    "After a free trial ends, you will be charged the regular price for the tier you've chosen. You can always cancel before then.": "پس از این‌که دوره رایکان شما پایان یابد، براساس بسته‌ی انتخابی شما مبلغی از حساب شما برداشت می‌شود. شما همیشه می‌توانید قبل از آن تاریخ، بسته‌ی خود را تغییر و یا لغو کنید.",
+    "After a free trial ends, you will be charged the regular price for the tier you've chosen. You can always cancel before then.": "پس از این‌که دوره رایگان شما پایان یابد، براساس بسته‌ی انتخابی شما مبلغی از حساب شما برداشت می‌شود. شما همیشه می‌توانید قبل از آن تاریخ، بسته‌ی خود را تغییر یا لغو کنید.",

-    "Here are a few other sites you may enjoy.": "وب‌سایت‌های که ممکن است شما بپسندید.",
+    "Here are a few other sites you may enjoy.": "وب‌سایت‌هایی که ممکن است شما بپسندید.",

-    "Invalid verification code": "کد تأییدیه نامعبتر است",
+    "Invalid verification code": "کد تأییدیه نامعتبر است",

-    "Permanent failure (bounce)": "خظای دائمی (bounce)",
+    "Permanent failure (bounce)": "خطای دائمی (bounce)",

-    "Plan checkout was cancelled.": "تسویه صورت‌حساب بسته لفو شد.",
+    "Plan checkout was cancelled.": "تسویه‌حسابِ بسته لغو شد.",
-    "Plan upgrade was cancelled.": "ارتقاء بسته لفو شد.",
+    "Plan upgrade was cancelled.": "ارتقای بسته لغو شد.",

Also applies to: 16-16, 19-19, 94-94, 105-105, 125-125, 128-129


208-208: Optional: add “year” translation for consistency with “month”

Not blocking, but consider adding “سال”.

-    "year": "",
+    "year": "سال",

Based on learnings

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 45277cb and 0bb899e.

📒 Files selected for processing (4)
  • ghost/i18n/locales/fa/comments.json (3 hunks)
  • ghost/i18n/locales/fa/ghost.json (1 hunks)
  • ghost/i18n/locales/fa/portal.json (8 hunks)
  • ghost/i18n/locales/fa/search.json (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
ghost/i18n/locales/*/@(portal|comments|signup-form|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Public UI translations must use separate namespaces (portal.json, comments.json, signup-form.json, search.json) per locale

Files:

  • ghost/i18n/locales/fa/search.json
  • ghost/i18n/locales/fa/comments.json
  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/*.json

📄 CodeRabbit inference engine (AGENTS.md)

All translations must be centralized under ghost/i18n/locales/{locale}/{namespace}.json

Files:

  • ghost/i18n/locales/fa/search.json
  • ghost/i18n/locales/fa/ghost.json
  • ghost/i18n/locales/fa/comments.json
  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/@(ghost|portal|signup-form|comments|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Only the documented namespaces (ghost, portal, signup-form, comments, search) should be used for i18n files

Files:

  • ghost/i18n/locales/fa/search.json
  • ghost/i18n/locales/fa/ghost.json
  • ghost/i18n/locales/fa/comments.json
  • ghost/i18n/locales/fa/portal.json
🧠 Learnings (3)
📓 Common learnings
Learnt from: cathysarisky
PR: TryGhost/Ghost#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.
📚 Learning: 2025-01-29T15:27:29.391Z
Learnt from: cathysarisky
PR: TryGhost/Ghost#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/fa/ghost.json
📚 Learning: 2025-10-09T17:25:12.411Z
Learnt from: CR
PR: TryGhost/Ghost#0
File: AGENTS.md:0-0
Timestamp: 2025-10-09T17:25:12.411Z
Learning: Applies to ghost/i18n/locales/en/ghost.json : Admin UI translations must be added to ghost/i18n/locales/en/ghost.json

Applied to files:

  • ghost/i18n/locales/fa/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). (9)
  • GitHub Check: Unit tests (Node 22.13.1)
  • GitHub Check: Ghost-CLI tests
  • GitHub Check: Acceptance tests (Node 22.13.1, sqlite3)
  • GitHub Check: Legacy tests (Node 22.13.1, mysql8)
  • GitHub Check: Legacy tests (Node 22.13.1, sqlite3)
  • GitHub Check: Acceptance tests (Node 22.13.1, mysql8)
  • GitHub Check: Lint
  • GitHub Check: Cursor Bugbot
  • GitHub Check: Build & Push

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: 4

♻️ Duplicate comments (1)
ghost/i18n/locales/fa/portal.json (1)

45-45: Adjust “Complimentary” translation for accuracy.

«تعریف‌ها» means “praises,” not “complimentary/complimentary plan.” Please align with the established term («افتخاری» per ghost.json, or «رایگان» if that style is preferred).

-    "Complimentary": "تعریف‌ها",
+    "Complimentary": "افتخاری",
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0bb899e and eaeac27.

📒 Files selected for processing (2)
  • ghost/i18n/locales/fa/comments.json (3 hunks)
  • ghost/i18n/locales/fa/portal.json (8 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • ghost/i18n/locales/fa/comments.json
🧰 Additional context used
📓 Path-based instructions (3)
ghost/i18n/locales/*/@(portal|comments|signup-form|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Public UI translations must use separate namespaces (portal.json, comments.json, signup-form.json, search.json) per locale

Files:

  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/*.json

📄 CodeRabbit inference engine (AGENTS.md)

All translations must be centralized under ghost/i18n/locales/{locale}/{namespace}.json

Files:

  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/@(ghost|portal|signup-form|comments|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Only the documented namespaces (ghost, portal, signup-form, comments, search) should be used for i18n files

Files:

  • ghost/i18n/locales/fa/portal.json
🧠 Learnings (1)
📓 Common learnings
Learnt from: cathysarisky
PR: TryGhost/Ghost#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.
⏰ 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). (9)
  • GitHub Check: Acceptance tests (Node 22.13.1, sqlite3)
  • GitHub Check: Acceptance tests (Node 22.13.1, mysql8)
  • GitHub Check: Unit tests (Node 22.13.1)
  • GitHub Check: Legacy tests (Node 22.13.1, sqlite3)
  • GitHub Check: Legacy tests (Node 22.13.1, mysql8)
  • GitHub Check: Ghost-CLI tests
  • GitHub Check: Lint
  • GitHub Check: Cursor Bugbot
  • GitHub Check: Build & Push

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
ghost/i18n/locales/fa/portal.json (1)

6-6: Fix typos and small language errors

Spelling/wording corrections; placeholders preserved.

-    "{amount} off for first {period}.": "{amount} تخقیف برای اولین {period}.",
+    "{amount} off for first {period}.": "{amount} تخفیف برای اولین {period}.",
-    "A login link has been sent to your inbox. If it doesn't arrive in 3 minutes, be sure to check your spam folder.": "یک پیوند ورود برای ایمیل شما ارسال شد. در صورتی که به دست شما نرسید، پوشه اسپم خود را برررسی کنید",
+    "A login link has been sent to your inbox. If it doesn't arrive in 3 minutes, be sure to check your spam folder.": "یک پیوند ورود برای ایمیل شما ارسال شد. اگر ظرف ۳ دقیقه نرسید، پوشه اسپم خود را بررسی کنید",
-    "Account details updated successfully": "مشخصات کابری با موفقیت به‌روز شد",
+    "Account details updated successfully": "مشخصات کاربری با موفقیت به‌روز شد",
-    "Here are a few other sites you may enjoy.": "وب\u200cسایت\u200cهای که ممکن است شما بپسندید.",
+    "Here are a few other sites you may enjoy.": "وب\u200cسایت\u200cهایی که ممکن است بپسندید.",
-    "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "در صورتی که مایل هستید که دوباره ایمیل\u200cها را دریافت کید، بهترین راه\u200cکار بررسی آدرس ایمیل خود و سپس کلیک برروی گزینه دریافت اشتراک در صفحه قبلی است.",
+    "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "در صورتی که مایل هستید دوباره ایمیل\u200cها را دریافت کنید، بهترین راه\u200cکار بررسی آدرس ایمیل خود و سپس کلیک روی گزینه دریافت اشتراک در صفحه قبلی است.",
-    "Permanent failure (bounce)": "خظای دائمی (bounce)",
+    "Permanent failure (bounce)": "خطای دائمی (bounce)",
-    "Plan checkout was cancelled.": "تسویه صورت\u200cحساب بسته لفو شد.",
+    "Plan checkout was cancelled.": "تسویه\u200cحساب بسته لغو شد.",
-    "Plan upgrade was cancelled.": "ارتقاء بسته لفو شد.",
+    "Plan upgrade was cancelled.": "ارتقاء بسته لغو شد.",
-    "Something went wrong, please try again later.": "چیزی با خطا روبرو شد، لطفاً بعداً تلاش کنید.",
+    "Something went wrong, please try again later.": "مشکلی پیش آمد، لطفاً بعداً دوباره تلاش کنید.",
-    "To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "برای تکمیل نام‌نویسی، برروی پیوند تأیید در صندوق ورودی ایمیل خود کلیک کنید. در صورتی که به دست شما نرسید، پوشه اسپم خود را برررسی کنید!",
+    "To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "برای تکمیل نام\u200cنویسی، روی پیوند تأیید در صندوق ورودی کلیک کنید. اگر ظرف ۳ دقیقه نرسید، پوشه اسپم را بررسی کنید!",

Also applies to: 14-14, 16-16, 94-94, 99-99, 125-125, 128-129, 149-149, 180-180

♻️ Duplicate comments (2)
ghost/i18n/locales/fa/ghost.json (2)

44-44: Fix placeholder order

Swap placeholders to match source: siteTitle before otc.

-    "Sign in to {siteTitle} with code {otc}": "ورود به وب‌سایت {otc} {siteTitle} با کد",
+    "Sign in to {siteTitle} with code {otc}": "ورود به وب‌سایت {siteTitle} با کد {otc}",

69-69: Remove mixed English fragment ("to {site}")

Keep Persian only and preserve placeholder.

-    "You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.": "شما این را دریافت کرده‌اید چرا که <strong>مشترک %%{status}%%</strong> وب‌سایت to {site}. هستید.",
+    "You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.": "شما این را دریافت کرده‌اید چرا که <strong>مشترک %%{status}%%</strong> وب‌سایت {site} هستید.",
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0bb899e and 4398a20.

📒 Files selected for processing (3)
  • ghost/i18n/locales/fa/comments.json (3 hunks)
  • ghost/i18n/locales/fa/ghost.json (1 hunks)
  • ghost/i18n/locales/fa/portal.json (8 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • ghost/i18n/locales/fa/comments.json
🧰 Additional context used
📓 Path-based instructions (3)
ghost/i18n/locales/*/*.json

📄 CodeRabbit inference engine (AGENTS.md)

All translations must be centralized under ghost/i18n/locales/{locale}/{namespace}.json

Files:

  • ghost/i18n/locales/fa/ghost.json
  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/@(ghost|portal|signup-form|comments|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Only the documented namespaces (ghost, portal, signup-form, comments, search) should be used for i18n files

Files:

  • ghost/i18n/locales/fa/ghost.json
  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/@(portal|comments|signup-form|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Public UI translations must use separate namespaces (portal.json, comments.json, signup-form.json, search.json) per locale

Files:

  • ghost/i18n/locales/fa/portal.json
🧠 Learnings (2)
📓 Common learnings
Learnt from: cathysarisky
PR: TryGhost/Ghost#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.
📚 Learning: 2025-10-11T13:46:49.530Z
Learnt from: amirsaam
PR: TryGhost/Ghost#25138
File: ghost/i18n/locales/fa/portal.json:46-46
Timestamp: 2025-10-11T13:46:49.530Z
Learning: In Persian (fa) translations for Ghost, "Complimentary" plan label is correctly translated as "تعریف‌ها" in portal.json, as confirmed by the original Persian translator amirsaam.

Applied to files:

  • ghost/i18n/locales/fa/ghost.json
  • ghost/i18n/locales/fa/portal.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). (8)
  • GitHub Check: Ghost-CLI tests
  • GitHub Check: Acceptance tests (Node 22.13.1, sqlite3)
  • GitHub Check: Unit tests (Node 22.13.1)
  • GitHub Check: Acceptance tests (Node 22.13.1, mysql8)
  • GitHub Check: Legacy tests (Node 22.13.1, sqlite3)
  • GitHub Check: Legacy tests (Node 22.13.1, mysql8)
  • GitHub Check: Lint
  • GitHub Check: Build & Push
🔇 Additional comments (1)
ghost/i18n/locales/fa/portal.json (1)

45-45: Complimentary label is OK as-is (“تعریف‌ها”)

Keeping this matches the locale maintainer’s preference.

Based on learnings

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
ghost/i18n/locales/fa/portal.json (3)

6-6: Fix typo: تخقیف → تخفیف

-    "{amount} off for first {period}.": "{amount} تخقیف برای اولین {period}.",
+    "{amount} off for first {period}.": "{amount} تخفیف برای اولین {period}.",

94-94: Grammar: «وب‌سایت‌های که» → «وب‌سایت‌هایی که»

-    "Here are a few other sites you may enjoy.": "وب\u200cسایت\u200cهای که ممکن است شما بپسندید.",
+    "Here are a few other sites you may enjoy.": "وب\u200cسایت\u200cهایی که ممکن است شما بپسندید.",

99-99: Fix typo: «کید» → «کنید»

-    "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "در صورتی که مایل هستید که دوباره ایمیل\u200cها را دریافت کید، بهترین راه\u200cکار بررسی آدرس ایمیل خود و سپس کلیک برروی گزینه دریافت اشتراک در صفحه قبلی است.",
+    "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "در صورتی که مایل هستید که دوباره ایمیل\u200cها را دریافت کنید، بهترین راه\u200cکار بررسی آدرس ایمیل خود و سپس کلیک برروی گزینه دریافت اشتراک در صفحه قبلی است.",
♻️ Duplicate comments (2)
ghost/i18n/locales/fa/portal.json (2)

45-45: Use agreed translation for “Complimentary”: افتخاری

Replace current value to match the confirmed term.

-    "Complimentary": "تعریف\u200cها",
+    "Complimentary": "افتخاری",

Based on learnings


180-180: Fix repeated letter typo: «برررسی» → «بررسی»

-    "To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "برای تکمیل نام‌نویسی، برروی پیوند تأیید در صندوق ورودی ایمیل خود کلیک کنید. در صورتی که به دست شما نرسید، پوشه اسپم خود را برررسی کنید!",
+    "To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "برای تکمیل نام‌نویسی، برروی پیوند تأیید در صندوق ورودی ایمیل خود کلیک کنید. در صورتی که به دست شما نرسید، پوشه اسپم خود را بررسی کنید!",
🧹 Nitpick comments (1)
ghost/i18n/locales/fa/portal.json (1)

161-161: Consistency: prefer «پیوند» over «لینک»

To match the rest of the file, use «پیوند».

-    "Success! Check your email for magic link to sign-in.": "انجام شد! ایمیل خود را برای لینک ورود بررسی کنید.",
+    "Success! Check your email for magic link to sign-in.": "انجام شد! ایمیل خود را برای پیوند ورود بررسی کنید.",
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4398a20 and b994957.

📒 Files selected for processing (1)
  • ghost/i18n/locales/fa/portal.json (8 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
ghost/i18n/locales/*/@(portal|comments|signup-form|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Public UI translations must use separate namespaces (portal.json, comments.json, signup-form.json, search.json) per locale

Files:

  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/*.json

📄 CodeRabbit inference engine (AGENTS.md)

All translations must be centralized under ghost/i18n/locales/{locale}/{namespace}.json

Files:

  • ghost/i18n/locales/fa/portal.json
ghost/i18n/locales/*/@(ghost|portal|signup-form|comments|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Only the documented namespaces (ghost, portal, signup-form, comments, search) should be used for i18n files

Files:

  • ghost/i18n/locales/fa/portal.json
🧠 Learnings (3)
📓 Common learnings
Learnt from: cathysarisky
PR: TryGhost/Ghost#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.
📚 Learning: 2025-01-29T15:27:29.391Z
Learnt from: cathysarisky
PR: TryGhost/Ghost#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/fa/portal.json
📚 Learning: 2025-10-11T13:51:07.673Z
Learnt from: amirsaam
PR: TryGhost/Ghost#25138
File: ghost/i18n/locales/fa/portal.json:46-46
Timestamp: 2025-10-11T13:51:07.673Z
Learning: In Persian (fa) translations for Ghost, "Complimentary" plan label should be translated as "افتخاری" in portal.json, as confirmed by the original Persian translator amirsaam.

Applied to files:

  • ghost/i18n/locales/fa/portal.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). (8)
  • GitHub Check: Ghost-CLI tests
  • GitHub Check: Acceptance tests (Node 22.13.1, sqlite3)
  • GitHub Check: Legacy tests (Node 22.13.1, sqlite3)
  • GitHub Check: Acceptance tests (Node 22.13.1, mysql8)
  • GitHub Check: Legacy tests (Node 22.13.1, mysql8)
  • GitHub Check: Unit tests (Node 22.13.1)
  • GitHub Check: Cursor Bugbot
  • GitHub Check: Build & Push

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: 0

♻️ Duplicate comments (2)
ghost/i18n/locales/fa/ghost.json (2)

44-44: Fix placeholder order and sentence structure

Current Persian places {otc} before {siteTitle} and reads awkwardly.

Apply:

-"Sign in to {siteTitle} with code {otc}": "ورود به وب‌سایت {otc} {siteTitle} با کد",
+"Sign in to {siteTitle} with code {otc}": "ورود به وب‌سایت {siteTitle} با کد {otc}",

69-69: Remove stray English “to” and keep placeholders intact

The value contains “to {site}.”; also improve flow while preserving %%{status}%%.

Apply:

-"You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.": "شما این را دریافت کرده‌اید چرا که <strong>مشترک %%{status}%%</strong> وب‌سایت to {site}. هستید.",
+"You are receiving this because you are a <strong>%%{status}%% subscriber</strong> to {site}.": "این پیام را دریافت کرده‌اید زیرا <strong>مشترک %%{status}%%</strong> وب‌سایت {site} هستید.",

Based on learnings

🧹 Nitpick comments (8)
ghost/i18n/locales/fa/ghost.json (8)

18-18: Trim trailing spaces

Avoid trailing spaces at end of translated values.

-"For your security, the link will expire in 24 hours time.": "به خاطر حفظ امنیت شما، این پیوند بعد از ۲۴ ساعت منقضی می\u200cشود. ",
+"For your security, the link will expire in 24 hours time.": "به خاطر حفظ امنیت شما، این پیوند بعد از ۲۴ ساعت منقضی می\u200cشود.",
-"Sent to {email}": "ارسال شده به {email} ",
+"Sent to {email}": "ارسال شده به {email}",

Also applies to: 40-40


15-15: Keep colon parity for label keys

Add Persian colons to match source labels.

-"Device:": "دستگاه",
+"Device:": "دستگاه:",
-"When:": "چه زمانی",
+"When:": "زمان:",
-"Where:": "چه مکانی",
+"Where:": "مکان:",

Also applies to: 67-67, 68-68


25-25: Clarify and de-duplicate phrasing

Make it natural and concise.

-"If you didn't try to sign in recently, you can safely ignore this email to deny access.": "اگر به تازگی برای ورود تلاش نکرده‌اید، می‌توانید از این ایمیل برای رد کردن دسترسی، چشم‌پوشی کنید.",
+"If you didn't try to sign in recently, you can safely ignore this email to deny access.": "اگر اخیراً تلاشی برای ورود نکرده‌اید، می‌توانید این ایمیل را نادیده بگیرید تا دسترسی رد شود.",

49-49: Simplify signup sentence and fix prepositions

Avoid duplicated “برای … برای” and use standard terms.

-"Tap the link below to complete the signup process for {siteTitle}, and be automatically signed in:": "برای تکمیل عضویت خود برای وب\u200cسایت {siteTitle} برروی پیوند زیر کلیک کنید، پس از آن شما به صورت خودکار وارد حساب خود خواهید شد:",
+"Tap the link below to complete the signup process for {siteTitle}, and be automatically signed in:": "برای تکمیل فرایند عضویت در {siteTitle} روی پیوند زیر کلیک کنید تا به‌صورت خودکار وارد حساب شوید:",

59-60: Use standard “ارتقا” and smoother phrasing

Unify spelling and improve flow.

-"Upgrade": "ارتقاء",
+"Upgrade": "ارتقا",
-"Upgrade to continue reading.": "برای خواندن ادامه نوشته حسابتان را ارتقاء دهید.",
+"Upgrade to continue reading.": "برای ادامه خواندن، حسابتان را ارتقا دهید.",

56-56: More natural “trialing”

-"trialing": "در حال گذر آزمایشی",
+"trialing": "در دوره آزمایشی",

63-64: Natural “Welcome back” phrasing

Current form is stilted; prefer common Persian greeting.

-"Welcome back to {siteTitle}!": "بازگشت شما را به {siteTitle} خوش آمد می\u200cگوییم!",
+"Welcome back to {siteTitle}!": "به {siteTitle} خوش برگشتید!",
-"Welcome back to {siteTitle}! Your verification code is {otc}.": "بازگشت شما را به {siteTitle} خوش آمد می\u200cگوییم! کد تأیید شما {otc} است.",
+"Welcome back to {siteTitle}! Your verification code is {otc}.": "به {siteTitle} خوش برگشتید! کد تأیید شما {otc} است.",

5-5: Byline wording

“نوشته {authors}” is the typical byline.

-"By {authors}": "به دست {authors}",
+"By {authors}": "نوشته {authors}",
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b994957 and 8555c70.

📒 Files selected for processing (1)
  • ghost/i18n/locales/fa/ghost.json (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
ghost/i18n/locales/*/*.json

📄 CodeRabbit inference engine (AGENTS.md)

All translations must be centralized under ghost/i18n/locales/{locale}/{namespace}.json

Files:

  • ghost/i18n/locales/fa/ghost.json
ghost/i18n/locales/*/@(ghost|portal|signup-form|comments|search).json

📄 CodeRabbit inference engine (AGENTS.md)

Only the documented namespaces (ghost, portal, signup-form, comments, search) should be used for i18n files

Files:

  • ghost/i18n/locales/fa/ghost.json
🧠 Learnings (4)
📓 Common learnings
Learnt from: cathysarisky
PR: TryGhost/Ghost#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.
📚 Learning: 2025-10-11T13:51:07.673Z
Learnt from: amirsaam
PR: TryGhost/Ghost#25138
File: ghost/i18n/locales/fa/portal.json:46-46
Timestamp: 2025-10-11T13:51:07.673Z
Learning: In Persian (fa) translations for Ghost, "Complimentary" plan label should be translated as "افتخاری" in portal.json, as confirmed by the original Persian translator amirsaam.

Applied to files:

  • ghost/i18n/locales/fa/ghost.json
📚 Learning: 2025-10-09T17:25:12.411Z
Learnt from: CR
PR: TryGhost/Ghost#0
File: AGENTS.md:0-0
Timestamp: 2025-10-09T17:25:12.411Z
Learning: Applies to ghost/i18n/locales/en/ghost.json : Admin UI translations must be added to ghost/i18n/locales/en/ghost.json

Applied to files:

  • ghost/i18n/locales/fa/ghost.json
📚 Learning: 2025-01-29T15:27:29.391Z
Learnt from: cathysarisky
PR: TryGhost/Ghost#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/fa/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). (8)
  • GitHub Check: Legacy tests (Node 22.13.1, mysql8)
  • GitHub Check: Legacy tests (Node 22.13.1, sqlite3)
  • GitHub Check: Ghost-CLI tests
  • GitHub Check: Unit tests (Node 22.13.1)
  • GitHub Check: Acceptance tests (Node 22.13.1, mysql8)
  • GitHub Check: Acceptance tests (Node 22.13.1, sqlite3)
  • GitHub Check: Lint
  • GitHub Check: Build & Push
🔇 Additional comments (1)
ghost/i18n/locales/fa/ghost.json (1)

9-9: Complimentary → افتخاری (consistent)

Matches the agreed Persian label for plan status. Looks good.

Based on learnings

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

Labels

affects:i18n community [triage] Community features and bugs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant