Skip to content

🌐 Updated Serbian translations - #29768

Open
esterkane wants to merge 6 commits into
TryGhost:mainfrom
esterkane:i18n-serbian-translations
Open

🌐 Updated Serbian translations#29768
esterkane wants to merge 6 commits into
TryGhost:mainfrom
esterkane:i18n-serbian-translations

Conversation

@esterkane

Copy link
Copy Markdown

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 across comments.json, ghost.json, and portal.json — including the Serbian plural forms ({count} month_* / {count} year_*, which need the _few paucal 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 test passes locally.

ref #23361

Checklist

  • I've read and followed the Contributor Guide
  • I've explained my change
  • Automated test — N/A: locale value-only change; Ghost's translation JSON isn't covered by per-string tests, and pnpm --filter @tryghost/i18n test passes.

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.
Copilot AI lite review requested due to automatic review settings August 5, 2026 09:42

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🌐 Automated translation review

Verdict: ⚠️ Has questions — 4 inline comments

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.

Comment thread packages/i18n/locales/sr/ghost.json Outdated
Comment thread packages/i18n/locales/sr/ghost.json Outdated
Comment thread packages/i18n/locales/sr/portal.json Outdated
Comment thread packages/i18n/locales/sr/portal.json Outdated
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 48c9cbac-a654-4796-bbf0-f2bb0b036249

📥 Commits

Reviewing files that changed from the base of the PR and between 8343467 and b5adc10.

📒 Files selected for processing (1)
  • packages/i18n/locales/sr/ghost.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/i18n/locales/sr/ghost.json

Walkthrough

Completed 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)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the completed Serbian translation updates.
Description check ✅ Passed The description explains the Serbian locale changes, affected files, translation details, and test result.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.json for membership, gifting, sharing, and billing-related Portal UI.
  • Added Serbian plural forms for {count} month_* / {count} year_* and completed remaining membership/gift email strings in sr/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.

Comment thread packages/i18n/locales/sr/portal.json Outdated
Comment thread packages/i18n/locales/sr/portal.json Outdated
"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.",
Comment thread packages/i18n/locales/sr/ghost.json Outdated
"{count} year_other": "{count} godina",
"{date}": "{date}",
"{tierName} membership": "",
"{tierName} membership": "{tierName} članarina",

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 97fcc57 and b1014dd.

📒 Files selected for processing (3)
  • packages/i18n/locales/sr/comments.json
  • packages/i18n/locales/sr/ghost.json
  • packages/i18n/locales/sr/portal.json

Comment thread packages/i18n/locales/sr/comments.json Outdated
Comment thread packages/i18n/locales/sr/comments.json Outdated
Comment thread packages/i18n/locales/sr/ghost.json Outdated
Comment thread packages/i18n/locales/sr/ghost.json Outdated
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🌐 Automated translation review

Verdict: ⚠️ Has questions — 4 inline comments

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",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

❓ 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",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

❓ 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.

Comment thread packages/i18n/locales/sr/ghost.json Outdated
"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",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

❓ 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.

Comment thread packages/i18n/locales/sr/portal.json Outdated
"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",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

💡 "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.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🌐 Automated translation review

Verdict: ⚠️ Has questions — 2 inline comments

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.

Comment thread packages/i18n/locales/sr/ghost.json Outdated
"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",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

❓ 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.

Comment thread packages/i18n/locales/sr/portal.json Outdated
"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",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

❓ "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.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

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.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🌐 Automated translation review

Verdict: ⚠️ Has questions — 3 inline comments

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.

Comment thread packages/i18n/locales/sr/ghost.json Outdated
"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.",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

💡 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",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

❓ 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",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

💡 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.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🌐 Automated translation review

Verdict: ⚠️ Has questions — 1 inline comment

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.

Comment thread packages/i18n/locales/sr/ghost.json Outdated

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🌐 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.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants