-
-
Notifications
You must be signed in to change notification settings - Fork 11.1k
Added missed translation for Persian #25138
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Note Other AI code review bot(s) detectedCodeRabbit 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. WalkthroughThis 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
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (2)
🧰 Additional context used📓 Path-based instructions (3)ghost/i18n/locales/*/*.json📄 CodeRabbit inference engine (AGENTS.md)
Files:
ghost/i18n/locales/*/@(ghost|portal|signup-form|comments|search).json📄 CodeRabbit inference engine (AGENTS.md)
Files:
ghost/i18n/locales/*/@(portal|comments|signup-form|search).json📄 CodeRabbit inference engine (AGENTS.md)
Files:
🧠 Learnings (4)📓 Common learnings
📚 Learning: 2025-10-11T13:51:07.673Z
Applied to files:
📚 Learning: 2025-10-09T17:25:12.411Z
Applied to files:
📚 Learning: 2025-01-29T15:27:29.391Z
Applied to files:
⏰ 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)
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. Comment |
There was a problem hiding this 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 flowEnglish “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 structureCurrent 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 promptConsider 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 stringsCorrect 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
📒 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
There was a problem hiding this 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
📒 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
There was a problem hiding this 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 errorsSpelling/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 orderSwap 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
📒 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
There was a problem hiding this 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
📒 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
There was a problem hiding this 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 structureCurrent 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 intactThe 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 spacesAvoid 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 keysAdd 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 phrasingMake 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 prepositionsAvoid 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 phrasingUnify 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” phrasingCurrent 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
📒 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
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