🌐 Updated Serbian translations - #29768
Conversation
ref TryGhost#23361 Completed missing strings in comments, ghost, and portal for the sr locale; added {count} month_few / year_few plural keys per Serbian plural rules. Native speaker.
There was a problem hiding this comment.
🌐 Automated translation review
Verdict:
Reviewed 110 translations across 3 files.
This is an impressively thorough and well-crafted translation. The Serbian plural forms (one/few/other) for months and years are correctly handled, the formal register with courtesy-capitalised "Vaš/Vašu/Vašim" is consistent throughout, placeholder variables are all intact, and the overall tone fits Ghost's friendly style nicely. I have only a couple of small questions to raise below. Hvala vam!
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
WalkthroughCompleted Serbian translations for previously empty entries in the comments, Ghost, and Portal localization files. The translations cover navigation, reactions, memberships, subscriptions, billing, gifts, support, sharing, account management, and related email messages. Existing translated entries remain unchanged. Possibly related PRs
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ 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.
Pull request overview
Completes missing Serbian (sr) locale strings across Ghost’s i18n namespaces, primarily covering Portal UI, email template strings, and Comments UI labels.
Changes:
- Filled previously-empty strings in
sr/portal.jsonfor membership, gifting, sharing, and billing-related Portal UI. - Added Serbian plural forms for
{count} month_*/{count} year_*and completed remaining membership/gift email strings insr/ghost.json. - Completed missing UI labels/actions in
sr/comments.json(e.g., like/dislike, pin/unpin, navigation).
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| packages/i18n/locales/sr/portal.json | Completes Portal-facing Serbian UI strings (membership, gifting, share/copy actions, offers). |
| packages/i18n/locales/sr/ghost.json | Completes Serbian strings used by Ghost emails, including plural forms and gift/membership messaging. |
| packages/i18n/locales/sr/comments.json | Completes Serbian strings for the Comments UI interaction labels and states. |
Suppressed comments (2)
packages/i18n/locales/sr/portal.json:197
- "Share" is translated as informal "Podeli", but the surrounding text uses formal address (e.g. "…da biste ga podelili…", and the next line starts with "Podelite…"). This creates inconsistent tone.
"Share": "Podeli",
packages/i18n/locales/sr/ghost.json:28
- "Gift subscription" is translated as an imperative ("Poklonite…"), but other related strings in this same locale use the noun "poklon-pretplata" (e.g. "Redeem your gift subscription"). Consider using a consistent noun label here too.
"Gift subscription": "Poklonite članarinu",
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "This email address will not be used.": "Ova email adresa neće biti korišćena.", | ||
| "This message was sent from {siteDomain} to {email}.": "Ova poruka je poslata sa {siteDomain} na {email}.", | ||
| "To keep your {tierName} membership, continue with a paid subscription today and we'll automatically add the rest of your gift period as a free trial.": "", | ||
| "To keep your {tierName} membership, continue with a paid subscription today and we'll automatically add the rest of your gift period as a free trial.": "Da biste zadržali svoje {tierName} članstvo, nastavite sa plaćenom pretplatom već danas, a mi ćemo automatski dodati ostatak vašeg poklon perioda kao besplatan probni period.", |
| "{count} year_other": "{count} godina", | ||
| "{date}": "{date}", | ||
| "{tierName} membership": "", | ||
| "{tierName} membership": "{tierName} članarina", |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/i18n/locales/sr/comments.json`:
- Around line 56-57: Update the Serbian translations for “Remove dislike” and
“Remove like” in the locale entries to use natural labels formed with the
existing reaction names and the word “reakcija”, replacing the current literal
noun forms while preserving the translation keys.
- Line 77: Update the Serbian translation for “The linked comment is no longer
available.” to “Povezani komentar više nije dostupan.”, preserving the
linked-comment meaning without asserting that the comment was deleted.
In `@packages/i18n/locales/sr/ghost.json`:
- Line 9: Update the “{tierName} membership” translation in the Serbian locale
to use “{tierName} članstvo” instead of “{tierName} članarina”, matching the
locale’s existing membership terminology.
- Line 25: Update the Serbian translation for the key “For security
verification, enter the code below to sign in to {siteTitle}:” in ghost.json to
use the purpose phrase “Radi bezbednosne provere” while preserving the remainder
of the translated sentence and the {siteTitle} placeholder.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: c9452823-e2c9-4007-a959-7454c22db7f9
📒 Files selected for processing (3)
packages/i18n/locales/sr/comments.jsonpackages/i18n/locales/sr/ghost.jsonpackages/i18n/locales/sr/portal.json
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🌐 Automated translation review
Verdict:
Reviewed 110 translations across 3 files.
This is a thorough and well-crafted Serbian translation. The plural forms (one/few/other) for months and years are correctly handled, the formal "Vi/Vaš" register is applied consistently throughout, placeholder variables are all intact, and the overall tone matches Ghost's voice well. I have just a couple of small observations below worth double-checking. Hvala vam!
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
| "{count} month_one": "{count} mesec", | ||
| "{count} month_few": "{count} meseca", | ||
| "{count} month_other": "{count} meseci", | ||
| "{count} year_one": "{count} godina", |
There was a problem hiding this comment.
❓ For {count} year_one, the translation is "{count} godina". In Serbian, the singular form (count = 1) is typically "godinu" (accusative) when used as a duration label, e.g. "1 godinu". "Godina" is the genitive singular / nominative form used with 1 in some contexts, but "1 godina" can sound awkward in a duration context. Could you confirm that "godina" is the intended form here, or should it be "godinu"?
Automated suggestion — verify against your judgement as a native speaker.
| "{count} month_other": "{count} meseci", | ||
| "{count} year_one": "{count} godina", | ||
| "{count} year_few": "{count} godine", | ||
| "{count} year_other": "{count} godina", |
There was a problem hiding this comment.
❓ For {count} year_other, the translation is "{count} godina" — which is the same string as {count} year_one. In Serbian, the "other" (5+) form should also be "godina" (genitive plural), so this may well be correct. Just flagging in case it was an accidental copy from the singular; please confirm this is intentional.
Automated suggestion — verify against your judgement as a native speaker.
| "Gift subscription": "", | ||
| "Here's how to keep your {tierName} membership.": "", | ||
| "Gift subscription": "Poklonite članarinu", | ||
| "Here's how to keep your {tierName} membership.": "Zadržite svoj {tierName} status", |
There was a problem hiding this comment.
❓ The English source is "Here's how to keep your {tierName} membership." (with a period), translated as "Zadržite svoj {tierName} status" (no period, and the meaning shifts from "here's how to keep" to an imperative "keep your status"). Is the change in meaning intentional? Also, the ending punctuation (period) appears to be missing — should it end with a full stop?
Automated suggestion — verify against your judgement as a native speaker.
| "Copy link": "", | ||
| "Continue with a paid subscription anytime. Your remaining gift period will be added as a free trial.": "Nastavite sa plaćenom pretplatom u bilo kom trenutku. Ostatak Vašeg poklon perioda biće dodat kao besplatan probni period.", | ||
| "Copied": "Kopirano", | ||
| "Copy": "Kopiraj", |
There was a problem hiding this comment.
💡 "Copy" is translated as "Kopiraj" (informal imperative), while the rest of the file consistently uses the formal imperative (e.g. "Kopirajte link" for "Copy link"). For consistency with the formal register used throughout, consider using "Kopirajte" here as well.
Automated suggestion — verify against your judgement as a native speaker.
There was a problem hiding this comment.
🌐 Automated translation review
Verdict:
Reviewed 110 translations across 3 files.
This is a very thorough and well-crafted Serbian translation. The formal register (courtesy-capitalized "Vaš/Vaše/Vašu") is applied consistently, the plural forms (one/few/other) for months and years are correct for Serbian, the placeholder name "Jamie Larson" has been sensibly replaced with "Pera Perić", and all {placeholders} and <tags> appear intact. I have only two small questions to raise inline. Hvala!
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
| "Gift subscription": "", | ||
| "Here's how to keep your {tierName} membership.": "", | ||
| "Gift subscription": "Poklonite članarinu", | ||
| "Here's how to keep your {tierName} membership.": "Zadržite svoj {tierName} status", |
There was a problem hiding this comment.
❓ The English source is "Here's how to keep your {tierName} membership." (a full sentence ending with a period), but the translation "Zadržite svoj {tierName} status" ends without a period and also shifts the meaning from an informational heading ("Here's how to keep…") to an imperative ("Keep your… status"). Could this be adjusted to something closer to "Evo kako da zadržite svoje {tierName} članstvo." to preserve both the meaning and the trailing period?
Automated suggestion — verify against your judgement as a native speaker.
| "Copy link": "", | ||
| "Continue with a paid subscription anytime. Your remaining gift period will be added as a free trial.": "Nastavite sa plaćenom pretplatom u bilo kom trenutku. Ostatak Vašeg poklon perioda biće dodat kao besplatan probni period.", | ||
| "Copied": "Kopirano", | ||
| "Copy": "Kopiraj", |
There was a problem hiding this comment.
❓ "Copy" is translated as "Kopiraj" (informal imperative), while the rest of the file consistently uses the formal imperative (e.g. "Kopirajte link" for "Copy link" just below). Could this be changed to "Kopirajte" to match the formal register used throughout the file?
Automated suggestion — verify against your judgement as a native speaker.
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
🌐 Automated translation review
Verdict:
Reviewed 110 translations across 3 files.
This is a very thorough and high-quality contribution. The translations are natural, consistent in register (the formal "Vaš/Vi" convention is applied uniformly throughout all three files), and the Serbian plural forms (one/few/other) for months and years are correctly handled. Placeholder integrity is perfect across all strings. The chosen placeholder name "Pera Perić" is a well-known Serbian example name — a good choice. Just a couple of small points worth a quick look. Hvala vam!
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
| "Gift subscription": "", | ||
| "Here's how to keep your {tierName} membership.": "", | ||
| "Gift subscription": "Poklon-pretplata", | ||
| "Here's how to keep your {tierName} membership.": "Zadržite svoj {tierName} status.", |
There was a problem hiding this comment.
💡 The English source is "Here's how to keep your {tierName} membership." — it explains the steps to retain a membership. The translation "Zadržite svoj {tierName} status." ("Keep your {tierName} status") shifts the meaning somewhat: it reads as an imperative instruction rather than a description of what follows. A closer rendering might be something like "Evo kako da zadržite svoje {tierName} članstvo." — but please confirm whether your phrasing is intentional.
Automated suggestion — verify against your judgement as a native speaker.
| "{count} month_other": "{count} meseci", | ||
| "{count} year_one": "{count} godina", | ||
| "{count} year_few": "{count} godine", | ||
| "{count} year_other": "{count} godina", |
There was a problem hiding this comment.
❓ For "{count} year_other", the translation is "{count} godina", which is the same as "{count} year_one". In Serbian, the "other" (genitive plural) form for 'godina' should be "{count} godina" — which happens to be the same word, so this may well be correct. Just flagging it in case it was an accidental copy; if it is intentional (as Serbian 'godina' is identical in nominative singular and genitive plural), please disregard.
Automated suggestion — verify against your judgement as a native speaker.
| "Gift details": "Detalji o poklonu", | ||
| "Gift redeemed! You're all set.": "Poklon je uspešno preuzet! Sve je spremno.", | ||
| "Gift subscription": "Poklon-pretplata", | ||
| "Gift subscriptions are not available right now.": "Poklon-pretplate trenutno nisu dostupne", |
There was a problem hiding this comment.
💡 The English source "Gift subscriptions are not available right now." ends with a period, but the Serbian translation "Poklon-pretplate trenutno nisu dostupne" is missing the closing period. Please consider adding it for consistency with punctuation rules.
Automated suggestion — verify against your judgement as a native speaker.
There was a problem hiding this comment.
🌐 Automated translation review
Verdict:
Reviewed 111 translations across 3 files.
This is a thorough and clearly well-considered translation of the Serbian locale. The plural forms for months and years are correctly handled with the paucal _few form, the formal register (courtesy-capitalized "Vaš/Vašu/Vaše") is applied consistently, placeholders are all intact, and inline HTML tags are preserved. Just one small query about a potentially misleading paraphrase — see the inline comment. Hvala!
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
There was a problem hiding this comment.
🌐 Automated translation review
Verdict: ✅ Looks good — no concerns flagged
Reviewed 111 translations across 3 files.
This is an excellent, thorough translation of the Serbian locale. The plural forms (_one, _few, _other) for months and years are correctly handled using Serbian's paucal system. The placeholder names ("Pera Perić") are natural Serbian names rather than transliterations. The formal register (courtesy-capitalized "Vaš/Vašu/Vaše") is applied consistently throughout all three files, which the translator has already noted. Translations are accurate, placeholders are preserved, and inline tags are intact. Hvala!
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
ref #23361
What & why
This PR completes the Serbian (
sr) locale. I'm a native Serbian speaker, and I've filled in all the previously-empty strings acrosscomments.json,ghost.json, andportal.json— including the Serbian plural forms ({count} month_*/{count} year_*, which need the_fewpaucal form).I kept the files' existing formal register (the courtesy-capitalized "Vaš" convention) for consistency with the strings already present. Happy to do a normalization pass to the informal register if maintainers prefer that per the translation guidelines.
The diff is value-only — no keys added, removed, or reordered — and
pnpm --filter @tryghost/i18n testpasses locally.ref #23361
Checklist
pnpm --filter @tryghost/i18n testpasses.