Update Serbian translations (Cyrillic & Latin)#25826
Update Serbian translations (Cyrillic & Latin)#25826cathysarisky merged 19 commits intoTryGhost:mainfrom
Conversation
📝 WalkthroughWalkthroughThis pull request populates and refines Serbian localization strings across both Cyrillic (sr-Cyrl) and Latin (sr) locale JSON files: comments.json, ghost.json, portal.json, search.json, and signup-form.json. Many previously empty or placeholder values are replaced with complete translations (time phrases, UI actions, account/subscription texts, prompts, and example names), with adjustments to formality, capitalization, and phone formatting. Changes are content-only localization updates; there are no modifications to program logic, control flow, file structure, or exported/public declarations. Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
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.
Actionable comments posted: 0
🧹 Nitpick comments (3)
ghost/i18n/locales/sr-Cyrl/search.json (1)
6-6: Consider using consistent Cyrillic script for loanwords.Lines 6 and 8 mix Latin script "tag" with Cyrillic text. For consistency in a Cyrillic locale file, consider either:
- Transliterating to Cyrillic: "таг-ове" and "Таг-ови"
- Using a Serbian equivalent: "ознаке" (labels/tags)
This ensures a uniform reading experience for users who have selected Cyrillic script.
Option 1: Transliterate to Cyrillic
- "Search posts, tags and authors": "Претражи објаве, tag-ове и ауторе", + "Search posts, tags and authors": "Претражи објаве, таг-ове и ауторе",- "Tags": "Tag-ови" + "Tags": "Таг-ови"Option 2: Use Serbian word
- "Search posts, tags and authors": "Претражи објаве, tag-ове и ауторе", + "Search posts, tags and authors": "Претражи објаве, ознаке и ауторе",- "Tags": "Tag-ови" + "Tags": "Ознаке"Also applies to: 8-8
ghost/i18n/locales/sr/search.json (1)
6-6: Consider using Serbian term for "tags" for improved localization.While "tag" is commonly used in tech contexts, using the Serbian word "oznake" would provide better localization. The current approach of adding Serbian case endings to the English loanword (tag-ove, Tag-ovi) is grammatically valid but less idiomatic.
Suggested change
- "Search posts, tags and authors": "Pretraži objave, tag-ove i autore", + "Search posts, tags and authors": "Pretraži objave, oznake i autore",- "Tags": "Tag-ovi" + "Tags": "Oznake"Also applies to: 8-8
ghost/i18n/locales/sr/portal.json (1)
14-14: Consider localizing "inbox" for improved Serbian readability.The English loanword "inbox" appears in several translations. While understood in tech contexts, using "prijemno sanduče" or the shorter "dolazna pošta" would provide more complete localization for Serbian users.
Also applies to: 35-35, 123-123, 199-199, 219-219
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
ghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/signup-form.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr/signup-form.json
🧰 Additional context used
🧠 Learnings (17)
📓 Common learnings
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: 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/{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: 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: 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: 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.
📚 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/sr/comments.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr/signup-form.jsonghost/i18n/locales/sr-Cyrl/portal.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/sr/comments.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr/signup-form.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/signup-form.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/sr/comments.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr/signup-form.jsonghost/i18n/locales/sr-Cyrl/portal.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/sr/comments.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr/signup-form.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/signup-form.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/sr/comments.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr/signup-form.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/signup-form.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/sr/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/search.json
📚 Learning: 2025-02-12T20:23:47.777Z
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: Empty translation strings in localization files are often intentional placeholders, not necessarily indicating deleted content. Many languages may have empty strings as translations are added incrementally over time.
Applied to files:
ghost/i18n/locales/sr/comments.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/sr/comments.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr/portal.json
📚 Learning: 2025-02-12T20:23:47.777Z
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.
Applied to files:
ghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr-Cyrl/comments.json
📚 Learning: 2025-02-15T16:00:03.347Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 21982
File: ghost/i18n/locales/hu/portal.json:207-207
Timestamp: 2025-02-15T16:00:03.347Z
Learning: In Hungarian translations for Ghost, ensure that all variables like {{title}} are preserved in the translated strings and not omitted.
Applied to files:
ghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/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/sr-Cyrl/search.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.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/sr/ghost.json
📚 Learning: 2025-01-29T15:35:26.447Z
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.
Applied to files:
ghost/i18n/locales/sr-Cyrl/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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/portal.json
📚 Learning: 2025-10-11T13:51:07.686Z
Learnt from: amirsaam
Repo: TryGhost/Ghost PR: 25138
File: ghost/i18n/locales/fa/portal.json:46-46
Timestamp: 2025-10-11T13:51:07.686Z
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/sr/portal.json
📚 Learning: 2025-05-26T09:16:03.215Z
Learnt from: yovko
Repo: TryGhost/Ghost PR: 23515
File: ghost/i18n/locales/bg/portal.json:141-141
Timestamp: 2025-05-26T09:16:03.215Z
Learning: For Bulgarian translations in UI contexts, "Регистрация" (noun form) is the standard caption for "Sign up" buttons on Bulgarian websites, preferred over the imperative form "Регистрирайте се" due to brevity and established web conventions.
Applied to files:
ghost/i18n/locales/sr/signup-form.jsonghost/i18n/locales/sr-Cyrl/signup-form.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 (8)
ghost/i18n/locales/sr/comments.json (1)
2-73: Translation quality looks good.The Serbian translations are well-executed with proper grammar and appropriate formality level. All placeholders (e.g.,
{amount},{publication}) are correctly preserved. The translations maintain consistency throughout the file.ghost/i18n/locales/sr-Cyrl/signup-form.json (1)
2-4: Use consistent Cyrillic script throughout the file.Multiple lines mix Latin characters with Cyrillic text, which is inconsistent for a Cyrillic locale file:
- Line 2: "Email послат" (Latin "Email")
- Line 3: "email!" (Latin "email")
- Line 4: "email адресу" (Latin "email")
- Line 7: "inbox-у" (Latin "inbox")
- Line 8: "email адреса" (Latin "email")
For proper Cyrillic localization, consider:
- "Email/email" → "Емаил" or "Имејл" (Cyrillic transliteration)
- "inbox" → "пријемно сандуче" or transliterated "инбокс"
Suggested corrections
- "Email sent": "Email послат", + "Email sent": "Емаил послат",- "Now check your email!": "Сада проверите свој email!", + "Now check your email!": "Сада проверите свој емаил!",- "Please enter a valid email address": "Молимо Вас унесите валидну email адресу", + "Please enter a valid email address": "Молимо Вас унесите валидну емаил адресу",- "To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "Да бисте завршили регистрацију, кликните на линк за потврду у inbox-у. Ако не стигне у року од 3 минута, проверите фасциклу за нежељену пошту!", + "To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "Да бисте завршили регистрацију, кликните на линк за потврду у пријемном сандучету. Ако не стигне у року од 3 минута, проверите фасциклу за нежељену пошту!",- "Your email address": "Ваша email адреса" + "Your email address": "Ваша емаил адреса"Also applies to: 7-8
⛔ Skipped due to learnings
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: 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: 21651 File: ghost/i18n/locales/ar/portal.json:13-13 Timestamp: 2025-01-29T15:36:04.321Z Learning: Phone number field localization should be ignored in Ghost CMS UI reviews. These fields should retain their original format rather than being localized to Arabic or other scripts.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: 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.ghost/i18n/locales/sr/portal.json (1)
12-12: Fix formality level inconsistency across translations.The translations mix informal (ti) and formal (Vi) address forms inconsistently, which creates a jarring user experience. For example:
- Line 12: "Već si član?" (informal "you are")
- Line 73: "Vaš zahtev će biti poslat" (formal "your request")
- Line 91: "Primite obaveštenje kada neko odgovori na Vaš komentar" (formal)
Choose one formality level and apply it consistently throughout. For a professional publishing platform, formal address (Vi/Vaš/Vam) is typically more appropriate.
Example corrections for consistent formal tone
- "Already a member?": "Već si član?", + "Already a member?": "Već ste član?",Note: All instances using informal pronouns (si, tvoj, ti, etc.) should be updated to formal equivalents (ste, Vaš, Vi, etc.) for consistency. This affects multiple lines throughout the file.
Also applies to: 15-15, 73-73, 91-91, 199-199, 220-220
⛔ Skipped due to 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: 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: 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: 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: 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.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: 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: 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: 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 featuresghost/i18n/locales/sr-Cyrl/portal.json (1)
10-10: Mixed Latin-Cyrillic script usage for technical termsThroughout this file, Latin script is used for technical terms like "email", "inbox", and "mail" within Cyrillic text (e.g., "email-ове", "inbox-у", "email адреса"). This appears to be a systematic choice rather than an oversight.
This is common practice in many languages where technical/borrowed terms remain in Latin script. However, please confirm this aligns with Serbian Cyrillic translation standards for the Ghost project.
Note: All placeholders are correctly preserved, and the translations maintain consistent formality throughout.
Also applies to: 14-14, 21-21, 35-35, 61-67, 93-103, 108-110, 134-140
ghost/i18n/locales/sr-Cyrl/ghost.json (1)
1-83: Translations look good with consistent approachThe translations follow the same pattern as portal.json with technical terms like "email" remaining in Latin script. All placeholders including special formats like
%%{status}%%,{site},{siteTitle},{date}, etc. are correctly preserved.The status words ("бесплатно", "плаћено", "проба") are properly translated and will integrate correctly with the message templates based on learnings.
ghost/i18n/locales/sr-Cyrl/comments.json (1)
1-74: Appropriate informal tone for community discussionsThe translations appropriately use informal tone for the comments section (e.g., "Већ си члан?", "Додај коментар", "Пријави се"), which is suitable for community discussions. This contrasts appropriately with the more formal tone used in portal.json for account-related interactions.
All placeholders are correctly preserved, and the translations are technically sound.
ghost/i18n/locales/sr/ghost.json (1)
1-83: Latin script translations properly alignedThe Latin script (sr) translations correctly mirror the Cyrillic (sr-Cyrl) versions. All placeholders are preserved, including special formats like
%%{status}%%, and the translations maintain consistency with the Cyrillic version.The status words ("besplatno", "plaćeno", "proba") are properly translated and will work correctly in message templates.
ghost/i18n/locales/sr/signup-form.json (1)
1-9: Signup form translations completedThe signup form translations are now complete with appropriate formal tone ("Vaša"). The translations maintain consistency with the broader Serbian localization effort.
Technical terms like "email" and "inbox" remain in Latin script, consistent with the approach across other Serbian locale files.
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Fix all issues with AI agents
In @ghost/i18n/locales/sr-Cyrl/ghost.json:
- Around line 12-14: The translations for the keys "Confirm your email address"
and "Confirm your subscription to {siteTitle}" use the informal possessive
"твоју"; update both to the formal "Вашу" to match the rest of the locale
(change "Потврди твоју email адресу" → "Потврди Вашу email адресу" and "Потврди
твоју претплату на {siteTitle}" → "Потврди Вашу претплату на {siteTitle}"),
ensuring capitalization and punctuation remain consistent with surrounding
entries.
In @ghost/i18n/locales/sr/comments.json:
- Line 12: Translations mix informal and formal address (e.g., key "Already a
member?" => "Već si član?" vs "Da li ste sigurni?" and
"Postanite"/"Dodaj"/"Unesi"); decide on a single register (informal "ti" or
formal "vi") and update all Serbian locale strings to match that choice
consistently, e.g., change "Već si član?" to the formal "Već ste član?" if
choosing formal, or change "Da li ste sigurni?" and "Postanite" to informal
equivalents if choosing informal; ensure keys referenced in the diff such as
"Already a member?", the string for confirmation ("Da li ste sigurni?"),
"Postanite", "Dodaj", and "Unesi" are all updated to the selected register.
In @ghost/i18n/locales/sr/ghost.json:
- Line 12: The translation for the key "Confirm your email address" uses
informal "tvoju" and a singular imperative; update it to the consistent formal
address and tone used elsewhere (capitalize "Vašu" and use polite plural
imperative), e.g. replace "Potvrdi tvoju email adresu" with a formal variant
like "Potvrdite Vašu email adresu"; apply the same change to the other affected
entry mentioned (line 14) so both keys use the formal "Vašu" and polite
imperative.
- Line 5: The current translation value for the key "By {authors}" reads
"Napravili {authors}", which incorrectly implies creation; update the
translation string for "By {authors}" to an authorship phrasing such as "Autor:
{authors}" or "Od {authors}" (choose the preferred form), making sure to replace
the existing value exactly for the "By {authors}" key in the ghost.json locale
so the placeholder {authors} remains intact.
🧹 Nitpick comments (1)
ghost/i18n/locales/sr/ghost.json (1)
31-31: Verify context for "Name" translation."Naziv" typically refers to the name of an entity/organization/product in Serbian. If this translation key is used for a person's name (e.g., in a user profile form), it should be "Ime" instead. If it refers to a site name or organization name, "Naziv" is correct.
Please verify the usage context to ensure the appropriate translation is used.
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
ghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr/portal.json
🧰 Additional context used
🧠 Learnings (16)
📓 Common learnings
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: 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: 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: 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: 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: 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: 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-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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr-Cyrl/portal.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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr-Cyrl/portal.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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr-Cyrl/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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr-Cyrl/portal.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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/portal.json
📚 Learning: 2025-02-15T16:00:03.347Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 21982
File: ghost/i18n/locales/hu/portal.json:207-207
Timestamp: 2025-02-15T16:00:03.347Z
Learning: In Hungarian translations for Ghost, ensure that all variables like {{title}} are preserved in the translated strings and not omitted.
Applied to files:
ghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/portal.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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/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/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/portal.json
📚 Learning: 2025-01-29T15:35:26.447Z
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.
Applied to files:
ghost/i18n/locales/sr-Cyrl/ghost.json
📚 Learning: 2025-02-12T20:23:47.777Z
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: Empty translation strings in localization files are often intentional placeholders, not necessarily indicating deleted content. Many languages may have empty strings as translations are added incrementally over time.
Applied to files:
ghost/i18n/locales/sr/comments.json
📚 Learning: 2025-02-12T20:23:47.777Z
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.
Applied to files:
ghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr-Cyrl/comments.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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/portal.json
📚 Learning: 2025-10-11T13:51:07.686Z
Learnt from: amirsaam
Repo: TryGhost/Ghost PR: 25138
File: ghost/i18n/locales/fa/portal.json:46-46
Timestamp: 2025-10-11T13:51:07.686Z
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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/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). (1)
- GitHub Check: Cursor Bugbot
🔇 Additional comments (5)
ghost/i18n/locales/sr/portal.json (1)
1-224: Excellent translation work!The Serbian (Latin) translations are technically sound and well-executed:
- All placeholders ({variableName}) are correctly preserved
- HTML tags (, ) remain intact
- Terminology is consistent throughout (using "email", "inbox", "bilten", "pretplata", "nalog")
- Formal tone (Vi/Vaš/Vaše) is applied consistently
- Example names appropriately localized (Jamie Larson → Pera Perić)
- No keys modified, only translated values updated
The translations successfully complete previously empty strings and maintain consistency with the translation patterns across the Ghost Portal UI.
Based on learnings, this localization work properly fills empty translations which is the expected workflow for the Ghost project.
ghost/i18n/locales/sr-Cyrl/ghost.json (1)
4-82: All placeholders correctly preserved throughout the file.Excellent work ensuring that all variable placeholders ({site}, {siteTitle}, {email}, {date}, {postTitle}, {otc}, %%{status}%%, etc.) are properly maintained in all translated strings. This is critical for proper variable interpolation at runtime.
ghost/i18n/locales/sr-Cyrl/portal.json (2)
2-223: Excellent placeholder preservation across all translations.All variable placeholders throughout portal.json ({memberEmail}, {newsletterName}, {siteTitle}, {amount}, {senderEmail}, {supportAddress}, {periodEnd}, etc.) are correctly preserved in their translated strings. This ensures proper runtime interpolation.
106-107: Thoughtful localization of example data.Replacing the generic English example names with culturally appropriate Serbian equivalents ("Пера Перић") makes the UI more relatable and natural for Serbian-speaking users. This is a nice localization touch.
ghost/i18n/locales/sr-Cyrl/comments.json (1)
2-74: All placeholders correctly preserved and tone is internally consistent.All variable placeholders ({amount}, {publication}) are properly maintained throughout the file. The informal tone used in the comments UI (e.g., "Већ си члан?", "Унеси своје име") is consistently applied within this file, which is appropriate given the conversational nature of comment interactions.
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Fix all issues with AI agents
In @ghost/i18n/locales/sr-Cyrl/portal.json:
- Line 40: The translation for the key "Click here to retry" mixes formal and
informal forms; update the value from "Кликните овде да покушаш поново" to the
formal "Кликните овде да покушате поново" so the verb form matches the formal
tone used elsewhere (modify the value for the "Click here to retry" entry in
portal.json).
- Line 49: The translation for the "Contact support" key uses an informal verb
("Контактирај") and should be changed to the formal plural form for consistency;
update the value for the "Contact support" key to "Контактирајте подршку" so the
portal uses the formal address.
- Line 197: The translation for the key "Update your preferences" uses the
informal verb "Ажурирај"; change it to the formal plural form "Ажурирајте своје
преференце" to match the repository's formal tone and maintain consistency with
other translations.
In @ghost/i18n/locales/sr/ghost.json:
- Around line 29-33: The translation for the "Name" key in
ghost/i18n/locales/sr/ghost.json is incorrect for user/member contexts; update
the value for the "Name" key from "Naziv" to "Ime" so it reads correctly for
personal names within account/member UI strings (leave other keys like "Member
since", "More like this", "New comment on {postTitle}" unchanged).
In @ghost/i18n/locales/sr/portal.json:
- Around line 28-41: Several translations use informal 2nd-person singular;
update them to the formal "Vi" forms to match the rest of the file: change
"Kliknite ovde da pokušaš ponovo" to "Kliknite ovde da pokušate ponovo", change
any "Kontaktiraj podršku" occurrences to "Kontaktirajte podršku", and change
informal "Ažuriraj email" to "Ažurirajte email" (or "Ažurirajte e‑mail") so all
prompts use the formal imperative.
🧹 Nitpick comments (2)
ghost/i18n/locales/sr/search.json (1)
2-8: LGTM; consider “tagove/tagovi” (no hyphen) or a fully localized term if desired.
Current wording is understandable; this is purely a consistency/style call.ghost/i18n/locales/sr-Cyrl/search.json (1)
2-8: Avoid mixed Latin/Cyrillic (“tag-ове”, “Tag-ови”) insr-Cyrl.
Recommend either fully Cyrillic loanword forms or a translated term for “Tags”.Option A (Cyrillic loanword)
- "Search posts, tags and authors": "Претражите објаве, tag-ове и ауторе", + "Search posts, tags and authors": "Претражите објаве, тагове и ауторе", - "Tags": "Tag-ови" + "Tags": "Тагови"Option B (translated)
- "Search posts, tags and authors": "Претражите објаве, tag-ове и ауторе", + "Search posts, tags and authors": "Претражите објаве, ознаке и ауторе", - "Tags": "Tag-ови" + "Tags": "Ознаке"
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
ghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/signup-form.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr/portal.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr/signup-form.json
🚧 Files skipped from review as they are similar to previous changes (1)
- ghost/i18n/locales/sr/signup-form.json
🧰 Additional context used
🧠 Learnings (18)
📓 Common learnings
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: 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: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Follow commit message format: max 80 chars on 1st line (past tense), blank 2nd line, then ref/fixes/closes with issue link, then context. Use emojis for user-facing changes (✨ feature, 🎨 improvement, 🐛 bug fix, 🌐 i18n, 💡 other)
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: 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: 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: 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: 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).
📚 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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/signup-form.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/sr/portal.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr-Cyrl/portal.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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/signup-form.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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/signup-form.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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/comments.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr/search.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/ghost.json
📚 Learning: 2025-10-11T13:51:07.686Z
Learnt from: amirsaam
Repo: TryGhost/Ghost PR: 25138
File: ghost/i18n/locales/fa/portal.json:46-46
Timestamp: 2025-10-11T13:51:07.686Z
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/sr/portal.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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/portal.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/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/sr/portal.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/comments.jsonghost/i18n/locales/sr/ghost.json
📚 Learning: 2025-02-15T16:00:03.347Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 21982
File: ghost/i18n/locales/hu/portal.json:207-207
Timestamp: 2025-02-15T16:00:03.347Z
Learning: In Hungarian translations for Ghost, ensure that all variables like {{title}} are preserved in the translated strings and not omitted.
Applied to files:
ghost/i18n/locales/sr-Cyrl/search.jsonghost/i18n/locales/sr-Cyrl/ghost.jsonghost/i18n/locales/sr/ghost.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/sr-Cyrl/portal.jsonghost/i18n/locales/sr/ghost.jsonghost/i18n/locales/sr-Cyrl/signup-form.json
📚 Learning: 2025-01-29T15:35:26.447Z
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.
Applied to files:
ghost/i18n/locales/sr-Cyrl/ghost.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/sr-Cyrl/ghost.json
📚 Learning: 2025-02-12T20:23:47.777Z
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: Empty translation strings in localization files are often intentional placeholders, not necessarily indicating deleted content. Many languages may have empty strings as translations are added incrementally over time.
Applied to files:
ghost/i18n/locales/sr/comments.json
📚 Learning: 2025-02-12T20:23:47.777Z
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.
Applied to files:
ghost/i18n/locales/sr/comments.json
📚 Learning: 2025-05-26T09:16:03.215Z
Learnt from: yovko
Repo: TryGhost/Ghost PR: 23515
File: ghost/i18n/locales/bg/portal.json:141-141
Timestamp: 2025-05-26T09:16:03.215Z
Learning: For Bulgarian translations in UI contexts, "Регистрация" (noun form) is the standard caption for "Sign up" buttons on Bulgarian websites, preferred over the imperative form "Регистрирайте се" due to brevity and established web conventions.
Applied to files:
ghost/i18n/locales/sr-Cyrl/signup-form.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 (5)
ghost/i18n/locales/sr/comments.json (1)
2-73: Looks good: keys/placeholders preserved; translations read consistently formal.
No placeholder/key-format changes spotted (e.g.,{amount},{publication}), which is the main i18n footgun here. As per learnings, keeping placeholder styles intact is essential.ghost/i18n/locales/sr-Cyrl/signup-form.json (1)
2-8: LGTM!The translations are accurate, use formal language consistently ("Вас", "Ваша"), and maintain appropriate terminology. The mix of Cyrillic with transliterated terms like "email" and "inbox" follows common Serbian web localization conventions.
ghost/i18n/locales/sr-Cyrl/comments.json (1)
2-73: LGTM!The translations are well done with:
- Consistent formal language (imperative forms like "Откажите", "Обришите", "Прикажите")
- All placeholders (
{amount},{publication}) correctly preserved- Appropriate localization of example name ("Jamie Larson" → "Пера Перић")
- Accurate time expressions ("пре {amount} сати", "Пре сат")
ghost/i18n/locales/sr-Cyrl/portal.json (1)
1-223: Overall translation quality is good.The translations are comprehensive with:
- All placeholders correctly preserved
- Appropriate localization of example data (Serbian phone format, localized names/emails)
- Consistent formal pronoun usage ("Ви", "Вас", "Ваш")
Three minor formality inconsistencies were noted above; otherwise the translations are well done.
ghost/i18n/locales/sr-Cyrl/ghost.json (1)
4-82: LGTM!Excellent translation work:
- All placeholders correctly preserved, including the special Mailgun format
%%{status}%%on line 69- Consistent formal language throughout
- Proper grammatical handling of placeholders (e.g., "{site}-а" using genitive case)
- Good coverage of email, subscription, and verification messaging
cathysarisky
left a comment
There was a problem hiding this comment.
📋 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!
I don't have strong feelings about whether the translations should use the informal or formal mode, but whichever you choose should be consistent. [As the translator, you get to decide which is going to be most generally appropriate for all sites using these locales.]
Leave me a comment or request re-review when you're satisfied with everything, please. :)
🤖 AI: Overall, the new Serbian (Cyrillic) translations look thorough and consistent. I noticed a mix of Latin terms like “email” and “inbox” alongside Cyrillic text; please ensure this aligns with your style guide or audience expectations. Thank you! Благодарим!
Drafted with my new i18n tooling - feedback welcome
There was a problem hiding this comment.
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/sr-Cyrl/portal.json (1)
6-6: Potential grammar mismatch with{period}.
If{period}can be pluralized or include a number, “први” won’t agree. Consider neutral “првих” for broader correctness.✏️ Suggested fix
- "{amount} off for first {period}.": "{amount} попуста за први {period}.", + "{amount} off for first {period}.": "{amount} попуста за првих {period}.",
🤖 Fix all issues with AI agents
In `@ghost/i18n/locales/sr/portal.json`:
- Line 6: The translation for the source string "{amount} off for first
{period}." in portal.json uses "prvi" which may not agree when {period} is
plural or includes a numeral; update the value for that key to a
neutral/plural-safe form (e.g., replace "popusta za prvi {period}." with
"popusta za prvih {period}.") so the adjective agrees with numeric/plural
periods and covers cases like "3 months".
| "{memberEmail} will no longer receive emails when someone replies to your comments.": "{memberEmail} više neće primati mejlove kada neko odgovori na Vaš komentar.", | ||
| "{memberEmail} will no longer receive this newsletter.": "{memberEmail} više neće primati ovaj bilten.", | ||
| "{amount} off for first {number} months.": "{amount} popusta za prvih {number} meseci.", | ||
| "{amount} off for first {period}.": "{amount} popusta za prvi {period}.", |
There was a problem hiding this comment.
Potential grammar mismatch with {period}.
If {period} can be pluralized or include a number (e.g., “3 months”), “prvi” won’t agree. Consider neutral “prvih” to cover all cases.
✏️ Suggested fix
- "{amount} off for first {period}.": "{amount} popusta za prvi {period}.",
+ "{amount} off for first {period}.": "{amount} popusta za prvih {period}.",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "{amount} off for first {period}.": "{amount} popusta za prvi {period}.", | |
| "{amount} off for first {period}.": "{amount} popusta za prvih {period}.", |
🤖 Prompt for AI Agents
In `@ghost/i18n/locales/sr/portal.json` at line 6, The translation for the source
string "{amount} off for first {period}." in portal.json uses "prvi" which may
not agree when {period} is plural or includes a numeral; update the value for
that key to a neutral/plural-safe form (e.g., replace "popusta za prvi
{period}." with "popusta za prvih {period}.") so the adjective agrees with
numeric/plural periods and covers cases like "3 months".
cathysarisky
left a comment
There was a problem hiding this comment.
Thank you for your contributions!
cathysarisky
left a comment
There was a problem hiding this comment.
Thank you for your contribution!
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.
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.
ref: #23361
Hello @cathysarisky, I'm happy to see that Serbian language was already supported in Ghost. However, it wasn't fully translated so I wanted to help. I already have an experience with Serbian translations in React docs, Notepad++ and few other open-source projects.
I saw that Serbian was maintained by others before, so I'm open to hear there suggestions about these changes as well: @cadoo (#16814), @djordjevlais (#17841) & @zivko-koraci (#20940).
Please let me know if I need to change/improve anything 🚀
Note
Low Risk
Translation-only JSON changes with no functional logic changes; main risk is copy/terminology accuracy or unintended tone changes in user-facing text.
Overview
Improves Serbian localization by adding many missing translations and refining existing wording for both
sr(Latin) andsr-Cyrl(Cyrillic) across user-facing surfaces.Updates cover comments UI strings, Portal membership/checkout/account flows, Ghost email templates, and basic search/signup-form labels, including consistency tweaks (e.g., “email/inbox” terminology, punctuation, and example placeholder names).
Written by Cursor Bugbot for commit 1f11aa5. This will update automatically on new commits. Configure here.