# Localize Sr

> Use when translating or localizing UI strings, marketing copy, documentation, or any source text into Serbian (sr / sr-Cyrl / sr-Latn). Asks the user to choose Cyrillic vs Latin on first use (both official, never mixed in one text). Enforces ekavian forms (vreme not vrijeme), 7-case grammar, 3-gender agreement, ICU one/few/other plurals, perfective/imperfective aspect, Vi/ti formality, clitic sec…

- **Type:** Skill
- **Install:** `agentstack add skill-i18n-agent-i18nstack-localize-sr`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [i18n-agent](https://agentstack.voostack.com/s/i18n-agent)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [i18n-agent](https://github.com/i18n-agent)
- **Source:** https://github.com/i18n-agent/i18nstack/tree/main/localize-sr
- **Website:** https://i18nagent.ai

## Install

```sh
agentstack add skill-i18n-agent-i18nstack-localize-sr
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Translate to Serbian (sr) — High-Fidelity Skill

## Scope & Variants — CRITICAL

Serbian has **TWO officially equal writing systems**, mandated by Article 10 of the Serbian Constitution: **Cyrillic (ћирилица)** and **Latin (латиница)**. They are NOT regional dialects or formality registers — they are **alternate scripts for the same language**, fully interchangeable letter-by-letter via a 1:1 mapping.

| Locale | Script | Usage | Preference signal |
|--------|--------|-------|-------------------|
| `sr-Cyrl` / `sr` (default in many CLDR contexts) | Ћирилица (Cyrillic) | Official documents, government, schools, traditional press, religious texts, formal institutional copy | Older audiences, conservative branding, state institutions, Republika Srpska |
| `sr-Latn` | Latinica (Latin) | Internet, business, IT, advertising, modern UI, international-facing material | Younger audiences, tech products, web/mobile UI, globally-facing brands |

**Practical reality:**
- The Serbian government promotes Cyrillic as primary by law (2021 Law on Use of Serbian Language).
- In **digital products** the Latin script dominates ~70-80% of real-world use because keyboards default to it and URL/email systems handle it without ambiguity.
- **Most software localization targets Latin first**, then Cyrillic if the product needs institutional credibility.

### Hard rule — NEVER mix scripts within one text (severity 3.0)

The single most-failed Serbian rule by AI translators: **producing one string with both scripts**. This is unambiguously wrong.

✓ Correct: `Кликните на дугме „Сачувај"` (all Cyrillic)
✓ Correct: `Kliknite na dugme „Sačuvaj"` (all Latin)
✗ Wrong: `Кликните na dugme „Сачувај"` (mixed — auto-fail)
✗ Wrong: `Kliknite на dugme "Sačuvaj"` (mixed — auto-fail)

**The only exception:** technical identifiers (Git, API, JSON, npm, React, URLs, placeholders `{var}`, file paths) stay in Latin script **even inside Cyrillic text**. This is the standard convention, not a violation. See "Technical identifiers" below.

### When the target locale is unspecified

**Always ask** on first use if the user requests just "Serbian":

> Serbian has two official writing systems — both equal, fully interchangeable, but never mixed within one text. Which one should I target?
>
> - **Latin (`sr-Latn`, Recommended for software)** — Dominant in IT, web, business, advertising. Default for most product UI. Modern feel.
> - **Cyrillic (`sr-Cyrl`)** — Officially primary per Serbian Constitution. Used in government, traditional press, schools, religious texts. Required for state-facing and institutional products.
> - **Both (parity localization)** — Some products legally require both. I'll deliver Latin + Cyrillic side-by-side.

Default to **`sr-Latn`** if no answer (software default).

### Cyrillic ↔ Latin 1:1 mapping table (for self-conversion verification)

| Cyrillic | Latin | Cyrillic | Latin | Cyrillic | Latin |
|----------|-------|----------|-------|----------|-------|
| А а | A a | К к | K k | Т т | T t |
| Б б | B b | Л л | L l | Ћ ћ | Ć ć |
| В в | V v | Љ љ | **Lj lj** | У у | U u |
| Г г | G g | М м | M m | Ф ф | F f |
| Д д | D d | Н н | N n | Х х | H h |
| Ђ ђ | Đ đ | Њ њ | **Nj nj** | Ц ц | C c |
| Е е | E e | О о | O o | Ч ч | Č č |
| Ж ж | Ž ž | П п | P p | Џ џ | **Dž dž** |
| З з | Z z | Р р | R r | Ш ш | Š š |
| И и | I i | С с | S s | | |
| Ј ј | J j | | | | |

**Critical: three Cyrillic digraphs (Љ Њ Џ) become TWO-letter Latin sequences (Lj Nj Dž).** Case-sensitive — `Љубав` → `Ljubav`, `ЉУБАВ` → `LJUBAV`.

**Diacritics are essential in Latin script** — Č Ć Ž Š Đ. Replacing them with C, Z, S, Dj is a critical readability failure (`crna` and `crna` are nonsense for "crna" → blackness; but `Sacuvaj` for `Sačuvaj` is genuinely broken text, even though some legacy systems strip them).

### BCMS continuum note (NOT mutual locales)

Serbian, Croatian, Bosnian, and Montenegrin are mutually intelligible South Slavic varieties (collectively "BCMS"), but they are **politically and orthographically distinct languages** with their own ISO codes (sr / hr / bs / cnr). Do NOT treat them as variants of each other. Critical differences vs Croatian (`hr`):

| Concept | Serbian (sr) — ekavian | Croatian (hr) — ijekavian |
|---------|------------------------|---------------------------|
| time | vreme | vrijeme |
| nice | lepo | lijepo |
| milk | mleko | mlijeko |
| child | dete | dijete |
| children | deca | djeca |
| river | reka | rijeka |
| world | svet | svijet |
| beautiful | lep | lijep |

If a string contains `vrijeme / lijepo / mlijeko / dijete`, **it is Croatian, not Serbian** — flag and fix to ekavian (`vreme / lepo / mleko / dete`).

Other BCMS giveaways that mean "not Serbian":
- `tjedan` (Croatian) vs `nedelja` (Serbian) — week
- `siječanj/veljača/ožujak` (Croatian month names) vs `januar/februar/mart` (Serbian)
- `kruh` (Croatian) vs `hleb` (Serbian) — bread
- `tisuća` (Croatian) vs `hiljada` (Serbian) — thousand
- `tko` (Croatian) vs `ko` (Serbian) — who
- `što` (Croatian) vs `šta` (Serbian) — what
- `nogomet` (Croatian) vs `fudbal` (Serbian) — football

---

## Register Auto-Detection (Apply Before Translating)

Serbian formality is set by **pronoun + verb-ending** choice, with capitalization conventions for the formal form. Auto-detect from source:

| Source signal | Target register |
|---------------|-----------------|
| Casual / conversational / personal (`Hey!`, contractions, emoji, marketing voice, social) | **Informal (ti)** — `ti` pronoun, lowercase, 2nd-person sg. verb endings (-š), familiar imperative (`Sačuvaj`, `Klikni`). Allow short forms, allow established loanwords (`klipbord`, `link`, `imejl`). |
| Neutral product UI / docs / consumer software (DEFAULT) | **Formal (Vi)** — `Vi` capitalized for direct address, 2nd-person pl. verb endings (-te), polite imperative (`Sačuvajte`, `Kliknite`). Possessive `Vaš/Vaša/Vaše` also capitalized. |
| Legal / banking / government / enterprise B2B | **Formal (Vi) elevated** — same `Vi` form but full constructions, no contractions, prefer reflexive impersonal (`Vrši se / Obavlja se`), avoid casual loanwords (use `elektronska pošta` over `imejl` in legal text). |

**Hard rule: never mix levels in one text.** A string with `Možete da promenite` (formal) and `tvoja podešavanja` (informal possessive) is broken.

**Capitalization rule for Vi:** `Vi / Vaš / Vaša / Vaše / Vaši / Vam / Vas` are capitalized in direct second-person address (whether you're writing to one person or many). This signals respect — failing to capitalize is read as informal even if the verb forms are formal.

**Default for software UI: Vi (formal)** unless brand voice is explicitly youth/casual.

---

## Critical Hard Rules (Severity ≥ 2.0 — Auto-Fail If Wrong)

### 1. Script consistency — never mix Cyrillic + Latin (severity 3.0)

Documented above. The only exception is Latin technical identifiers inside Cyrillic text.

### 2. Word integrity — verb prefixes NEVER split (severity 3.0)

Serbian verbs with prefixes are **single words**. Splitting them by a space changes meaning catastrophically or produces gibberish.

| ✗ Wrong (split) | ✓ Correct (joined) | What the split means |
|-----------------|--------------------|-----------------------|
| `pre vesti` / `пре вести` | **`prevesti`** / **`превести`** | "pre" (prefix alone) + "vesti" (news) — nonsense |
| `iz vršiti` / `из вршити` | **`izvršiti`** / **`извршити`** | nonsense |
| `pre nositi` / `пре носити` | **`prenositi`** / **`преносити`** | nonsense |
| `na praviti` / **`направити`** | nonsense |
| `sa čuvati` / `са чувати` | **`sačuvati`** / **`сачувати`** | nonsense |
| `pre uzmi` / `пре узми` | **`preuzmi`** / **`преузми`** | nonsense |
| `o pozovi` / `о позови` | **`opozovi`** / **`опозови`** | nonsense |

**Reflexive `se` is the OPPOSITE pattern** — `se` is a **separate clitic word**, NEVER attached. `prijavi se`, `registruj se`, `odjavi se`. Writing `prijavise` or `registrujse` is wrong.

### 3. Ekavian forms — never ijekavian (severity 2.0)

Serbian standard is **ekavian** (the historical "yat" → `e`). Croatian and Bosnian use **ijekavian** (yat → `ije` / `je`). Any ijekavian form in a Serbian translation is wrong.

Full ekavian/ijekavian table:

| English | Serbian (ekavian) | Croatian/Bosnian (ijekavian) — DO NOT USE |
|---------|---------------------|--------------------------------------------|
| time | vreme / време | vrijeme |
| nice | lepo / лепо | lijepo |
| milk | mleko / млеко | mlijeko |
| child | dete / дете | dijete |
| children | deca / деца | djeca |
| river | reka / река | rijeka |
| world | svet / свет | svijet |
| light | svetlost / светлост | svjetlost |
| flower | cvet / цвет | cvijet |
| star | zvezda / звезда | zvijezda |
| song | pesma / песма | pjesma |
| place | mesto / место | mjesto |
| beautiful | lep / леп | lijep |
| bread (formal poetic) | hleb / хлеб | hljeb |
| arrow | strela / стрела | strijela |
| left | levi / леви | lijevi |
| measure | mera / мера | mjera |
| change (n.) | promena / промена | promjena |
| section | odeljak / одељак | odjeljak |

### 4. Seven-case system (severity 2.5)

Serbian uses **all 7 Slavic cases**, including the vocative (used for direct address — `korisniče!` "user!"). Every noun, adjective, and pronoun declines.

| Case | Question | Use | Example (m. sg. "korisnik" — user) | Example (f. sg. "datoteka" — file) |
|------|----------|-----|------------------------------------|-------------------------------------|
| Nominativ (NOM) | ko? šta? | Subject | korisnik | datoteka |
| Genitiv (GEN) | koga? čega? | Possession, "of", absence, 5+ count | korisnika | datoteke |
| Dativ (DAT) | kome? čemu? | Indirect object, "to" | korisniku | datoteci |
| Akuzativ (ACC) | koga? šta? | Direct object | korisnika (animate=GEN) / sistem (inanimate=NOM) | datoteku |
| Vokativ (VOC) | — | Direct address | korisniče! | datoteko! |
| Instrumental (INS) | s kim? čim? | "With", means | korisnikom | datotekom |
| Lokativ (LOC) | o kome? čemu? | Location (always w/ prep) | korisniku (o korisniku) | datoteci (o datoteci) |

**Critical: animate masculine accusative = genitive form.** `vidim korisnika` ("I see [the] user"), NOT `vidim korisnik`. Inanimate masculines keep ACC = NOM: `vidim sistem`.

### 5. Preposition + governed case (severity 2.5)

| Preposition | Case | Example |
|-------------|------|---------|
| u (in/into) | LOC (location) / ACC (motion) | u sistemu (in system) / u sistem (into system) |
| na (on/onto) | LOC / ACC | na ekranu (on screen) / na ekran (onto screen) |
| s / sa (with) | INS | s korisnikom, sa Vama |
| bez (without) | GEN | bez sistema, bez greške |
| za (for) | ACC | za korisnika, za sistem |
| od (from) | GEN | od korisnika |
| do (until/to) | GEN | do kraja |
| iz (out of) | GEN | iz mape |
| o (about) | LOC | o korisniku, o sistemu |
| po (per / along) | LOC | po korisniku, po datoteci |
| pre (before) | GEN | pre vremena |
| posle (after) | GEN | posle prijave |
| prema (toward) | DAT | prema korisniku |
| sa (down from) | GEN | sa stranice (depending on sense; sa = with takes INS) |
| kroz (through) | ACC | kroz aplikaciju |

`po` for "per" with rate: `po datoteci` (per file), `po korisniku` (per user), `dnevno` / `na dan` (per day).

### 6. ICU plurals — one / few / other (1 / 2-4 / 5+ pattern) (severity 2.5)

```icu
{count, plural,
  one {# datoteka}
  few {# datoteke}
  other {# datoteka}
}
```

**CLDR plural category boundaries** (memorize):

| Category | Rule | Examples | Noun form |
|----------|------|----------|-----------|
| `one` | n % 10 = 1, n % 100 ≠ 11 | 1, 21, 31, 41, 101, 121 | **NOM singular** (datoteka) |
| `few` | n % 10 ∈ {2,3,4}, n % 100 ∉ {12,13,14} | 2, 3, 4, 22, 23, 24, 102, 103 | **GEN singular** (datoteke) |
| `other` | everything else | 0, 5-20, 25-30, 100, 1000 | **GEN plural** (datoteka) |

**Critical:** 11/12/13/14 use `other` (they are exceptions to the otherwise simple "ends in 1/2-4" pattern). Same for 111, 112, 113, 114. This is identical to Russian but different from Croatian (some details vary).

### 7. Numeral-noun agreement (severity 2.0)

The plural-form rule manifests directly in number constructions:

| Count | Pattern | Example |
|-------|---------|---------|
| 1 | NOM sg | 1 datoteka, 1 korisnik, 1 sistem |
| 2, 3, 4 | GEN sg | 2 datoteke, 3 korisnika, 4 sistema |
| 5+ | GEN pl | 5 datoteka, 10 korisnika, 20 sistema |
| 11-14 | GEN pl (exception) | 11 datoteka (NOT datoteke), 12 sistema |
| 21 | NOM sg (back to "one") | 21 datoteka |
| 22-24 | GEN sg | 22 datoteke |
| 25+ | GEN pl | 25 datoteka |

### 8. Verb aspect — perfective vs imperfective (severity 2.0)

Every Serbian verb has aspect — most concepts have a perfective/imperfective **pair**. Choosing the wrong aspect changes meaning from "doing X" to "having done X" (or vice versa).

| Imperfective (process, ongoing) | Perfective (single completed event) | English |
|--------------------------------|--------------------------------------|---------|
| čuvati | sačuvati | save |
| brisati | obrisati | delete |
| otpremati | otpremiti | upload |
| preuzimati | preuzeti | download |
| otvarati | otvoriti | open |
| zatvarati | zatvoriti | close |
| stvarati | stvoriti / napraviti | create |
| uređivati | urediti | edit |
| menjati | promeniti | change |
| pisati | napisati | write |
| čitati | pročitati | read |
| slati | poslati | send |
| birati | izabrati | choose / select |
| prijavljivati se | prijaviti se | log in (process / single act) |

**UI patterns by aspect:**

- **Buttons (single action)** → **perfective imperative**: `Sačuvaj`, `Obriši`, `Pošalji`, `Izaberi`. (NOT `Čuvaj`, which implies "keep saving repeatedly".)
- **Ongoing status messages** → **imperfective verbal noun + …**: `Čuvanje…`, `Otpremanje…`, `Učitavanje…`, `Slanje…`.
- **Completed status** → **perfective past participle** + **je**: `Datoteka je sačuvana`, `Otpremanje je završeno`.
- **Failed status** → **perfective past + nije**: `Otpremanje nije uspelo`, `Datoteka nije sačuvana`.

### 9. Clitic second-position rule (Wackernagel's law) (severity 2.0)

Serbian clitics (`je`, `se`, `mi`, `ti`, `mu`, `joj`, `nam`, `vam`, `im`, `bi`, `li`) MUST go in the **second position** of their clause (after the first stressed word).

| ✗ Wrong | ✓ Correct |
|---------|-----------|
| `Se meni to ne sviđa` | **`To mi se ne sviđa`** (clitics in 2nd position) |
| `Datoteka se mu prikazuje` | **`Datoteka mu se prikazuje`** (dative `mu` before reflexive `se`) |
| `Mi se to dopada` (in narrative) | **`Meni se to dopada`** (when emphatic, use full pronoun) |

**Clitic order within the cluster** (when multiple clitics stack):
1. `li` (question particle)
2. AUX `je/sam/si/smo/ste/su/bi/bih`
3. DAT (`mi/ti/mu/joj/nam/vam/im`)
4. ACC (`me/te/ga/je/nas/vas/ih`)
5. Reflexive `se`

Example: `Da li mu se to dopada?` (Q-AUX-DAT-REFL — does he like it?)

### 10. Three-gender adjective agreement (severity 2.0)

| Gender | Indef. example | Adjective ending (sg.) |
|--------|---------------|------------------------|
| Masculine (consonant ending) | sistem | novi sistem (anim/inanim sg. NOM same) |
| Feminine (-a ending) | aplikacija | nova aplikacija |
| Neuter (-o/-e ending) | podešavanje | novo podešavanje |

Wrong gender adjective is auto-fail: `nova sistem` ✗, `novi aplikacija` ✗.

### 11. Past-tense gender agreement (severity 1.5)

Past tense in Serbian = AUX (`sam/si/je/smo/ste/su`) + L-participle, which agrees with subject in gender + number:

| Subject | L-participle | Example |
|---------|--------------|---------|
| m. sg. | -o | on je radio (he worked) |
| f. sg. | -la | ona je radila (she worked) |
| n. sg. | -lo | ono je radilo (it worked) |
| m. pl. | -li | oni su radili |
| f. pl. | -le | one su radile |
| n. pl. | -la | ona su radila |

`ona je radio` ✗ (gender mismatch) → `ona je radila` ✓.

### 12. Verb-construction integrity — no stacked finite verbs (severity 2.0)

English `-ing` forms (gerund as adverbial: "I spent 6 yea

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [i18n-agent](https://github.com/i18n-agent)
- **Source:** [i18n-agent/i18nstack](https://github.com/i18n-agent/i18nstack)
- **License:** MIT
- **Homepage:** https://i18nagent.ai

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-i18n-agent-i18nstack-localize-sr
- Seller: https://agentstack.voostack.com/s/i18n-agent
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
