quintodrome/resources/i18n
nenadjokic 545a9ecc3c
fix(ui): update Serbian translation (#5444)
* fix(i18n): correct grammar errors in Serbian (sr) translation

Eight objective grammatical / lexical errors in `resources/i18n/sr.json`.
No stylistic or strategic re-wording — only corrections where the
current string is grammatically wrong, contains a non-word, or breaks
plural / case agreement.

| Key | Before | After | Why |
| --- | --- | --- | --- |
| `resources.song.fields.bitDepth` | `Битова` | `Битска дубина` | "Битова" is genitive plural of "bit" ("of bits") and drops the "depth" semantics. Adjective+noun shape matches `Битски проток` already used for the adjacent "Bit rate" field |
| `resources.song.fields.channels` | `Канала` | `Канали` | "Канала" is genitive plural ("of channels"); a column header needs nominative plural "Канали" |
| `resources.radio.name` plural | `Радији` | `Радио-станице` | "Радији" is not a valid plural of "Радио" in Serbian. The standard plural for radio stations is "Радио-станице" |
| `ra.input.file.upload_*` and `ra.input.image.upload_*` | `Упустите фајлове / слике …` | `Превуците фајлове / слике …` | "Упустити" means "to engage in / to indulge", not "to drop". For drag-and-drop UIs the standard Serbian verb is "Превуците" ("Drag") |
| `ra.navigation.prev` | `Претход` | `Претх.` | "Претход" is not a word — looks like a truncated "Претходна" missing the period. Restored as a proper abbreviation |
| `about.links.featureRequests` | `Захтеви за функцијама` | `Захтеви за функције` | Wrong case. Serbian "захтев за X" takes accusative ("захтев за помоћ"), not instrumental ("за функцијама") |
| `player.clickToPauseText` / `clickToPlayText` | `Кликни за паузирање / пуштање` | `Кликните за паузирање / пуштање` | The rest of the file uses formal plural imperative ("Кликните…"). Only these two used the singular informal "Кликни", which broke the consistent register |

JSON validated with `python3 -m json.tool`. No keys added, removed, or
re-ordered — diff is purely value substitution. Stylistic and lexical
modernization (e.g. "Уметник" → "Извођач" for music artist, filling
the missing `library` / `plugin` / `nowPlaying` blocks added in upstream
en.json) intentionally left for a follow-up PR after this baseline of
objective fixes lands.

* fix(i18n): fill missing keys in Serbian (sr) translation — 100% coverage

The Serbian translation was at 70% of upstream `en.json` (389 of 553 keys).
This commit fills all 164 missing keys, bringing coverage to 100%.

The file is also re-ordered to match `en.json`'s key sequence so that
future translation drift is easy to detect by diffing the two files
side-by-side. This is the same regeneration pattern used by the previous
maintainer's PR #3941.

## What was missing

| Block | Keys | Notes |
| --- | ---: | --- |
| `resources.plugin` | 58 | Whole Plugin system block — settings, config schema, permissions, notifications |
| `resources.library` | 43 | Whole Library management block — fields, scan actions, validation, notifications |
| `about.config` + `about.tabs` | 12 | Configuration export feature (TOML) |
| `message.*` | 11 | Cover-art upload/remove + Instant Mix + remove-all-missing |
| `resources.song` | 9 | composer, sample rate, gain fields, instant mix, show-in-playlist |
| `resources.playlist` | 6 | search-or-create UX, save-queue-to-playlist |
| `resources.artist` | 5 | top songs / shuffle / radio actions, missing field, maincredit role |
| `resources.user` | 5 | Per-user library access controls |
| `menu.librarySelector` | 4 | Multi-library selector |
| `activity` | 4 | selectiveScan, scanType, status, elapsedTime |
| `nowPlaying` | 3 | Now Playing widget (title / empty / minutesAgo plural) |
| `resources.album` | 2 | libraryName, missing |
| `resources.missing` | 2 | remove_all action, libraryName field |

## Translation conventions followed

- Stuck with the existing terminology already in `sr.json` for consistency
  — e.g. `Уметник` for "Artist", `Плејлиста` for "Playlist", `Жетон`
  for "Token". Whether `Уметник` → `Извођач` (music-context "performer")
  is a worthwhile rename is a separate question that deserves its own PR
  with a focused review surface; not in scope here.
- Cyrillic throughout (matches `languageName: "српски"`).
- Variable interpolation (`%{var}`) preserved exactly.
- Pluralisation separator (` |||| `) preserved on plural-aware keys
  (`nowPlaying.minutesAgo`, `resources.library.name`, `resources.plugin.name`,
  `resources.artist.roles.maincredit`).

## Validation

- JSON validated with `python3 -m json.tool`
- Key-count parity check: 553 keys in `en.json` → 553 keys in `sr.json`,
  zero missing, zero extra.
- Diff is +408 / -200 (line moves due to canonical ordering plus the
  net 164 new translations). All existing translations preserved verbatim.

## Builds on PR #5444

This branch sits on top of `i18n-sr-grammar-fixes` (PR #5444). If that
PR merges first, this one auto-rebases cleanly. If this one merges first,
PR #5444 has trivial conflicts in the same 7 strings (all already
resolved here as part of regeneration).
2026-05-19 14:50:34 -03:00
..
ar.json Update translations (#2329) 2023-06-19 12:27:56 -04:00
bg.json feat: add artist image uploads and image-folder artwork source (#5198) 2026-03-15 22:19:55 -04:00
bs.json feat(ui): add new Bosnian translation (#4399) 2025-07-29 12:06:09 -04:00
ca.json feat: add artist image uploads and image-folder artwork source (#5198) 2026-03-15 22:19:55 -04:00
cs.json Update translations (#2409) 2023-11-14 19:21:26 -05:00
da.json fix(ui): update Danish, German, Greek, Finnish, Galician, Portuguese (BR), Swedish, Ukrainian, Chinese (traditional) translations from POEditor (#5218) 2026-03-27 18:04:47 -04:00
de.json fix(ui): update Danish, German, Greek, Finnish, Galician, Portuguese (BR), Swedish, Ukrainian, Chinese (traditional) translations from POEditor (#5218) 2026-03-27 18:04:47 -04:00
el.json fix(ui): update Danish, German, Greek, Finnish, Galician, Portuguese (BR), Swedish, Ukrainian, Chinese (traditional) translations from POEditor (#5218) 2026-03-27 18:04:47 -04:00
eo.json fix(ui): update Esperanto, Dutch translations from POEditor (#5301) 2026-04-04 15:18:00 -04:00
es.json fix(ui): update Spanish, French translations from POEditor (#5260) 2026-03-29 19:55:29 -04:00
et.json feat(i18n): add Estonian translation file 2026-05-18 09:31:57 -03:00
eu.json fix(ui): update Basque localisation (#5278) 2026-04-04 15:17:40 -04:00
fa.json fix: languageName for Persian (#3011) 2024-05-09 17:08:43 -04:00
fi.json fix(ui): update Danish, German, Greek, Finnish, Galician, Portuguese (BR), Swedish, Ukrainian, Chinese (traditional) translations from POEditor (#5218) 2026-03-27 18:04:47 -04:00
fr.json fix(ui): update Spanish, French translations from POEditor (#5260) 2026-03-29 19:55:29 -04:00
gl.json fix(ui): update Danish, German, Greek, Finnish, Galician, Portuguese (BR), Swedish, Ukrainian, Chinese (traditional) translations from POEditor (#5218) 2026-03-27 18:04:47 -04:00
hi.json feat(ui): add Hindi language translation (#4390) 2025-07-28 11:21:27 -04:00
hu.json fix(ui): update Hungarian translation (#5263) 2026-03-29 19:50:58 -04:00
id.json fix(ui): update Catalan, German, Spanish, French, Indonesian, Polish translations from POEditor (#4960) 2026-02-03 12:50:16 -05:00
it.json fix(ui): completed Italian translation (#5407) 2026-04-25 16:18:51 -04:00
ja.json fix(ui): update Danish, German, Greek, Spanish, French, Japanese, Polish, Russian, Swedish, Thai, Ukrainian translations from POEditor (#4687) 2025-12-02 11:38:26 -05:00
ko.json fix(ui): update ko.json (#4443) 2025-11-07 18:10:38 -05:00
nl.json fix(ui): update Esperanto, Dutch translations from POEditor (#5301) 2026-04-04 15:18:00 -04:00
no.json fix(ui): update Esperanto, Finnish, Galician, Dutch, Norwegian, Turkish translations from POEditor (#4760) 2025-12-05 19:36:06 -05:00
pl.json fix(ui): update Catalan, German, Spanish, French, Indonesian, Polish translations from POEditor (#4960) 2026-02-03 12:50:16 -05:00
pt-br.json fix(ui): add albumGain and trackGain translations in Brazilian Portuguese 2026-04-12 13:22:56 -04:00
ru.json fix(ui): update Russian translations and add missing gain keys (#5329) 2026-04-12 13:17:46 -04:00
sk.json feat(ui): add Slovak language translation (#5231) 2026-03-19 13:33:09 -04:00
sl.json feat: add artist image uploads and image-folder artwork source (#5198) 2026-03-15 22:19:55 -04:00
sr.json fix(ui): update Serbian translation (#5444) 2026-05-19 14:50:34 -03:00
sv.json fix(ui): update Danish, German, Greek, Finnish, Galician, Portuguese (BR), Swedish, Ukrainian, Chinese (traditional) translations from POEditor (#5218) 2026-03-27 18:04:47 -04:00
th.json feat: add artist image uploads and image-folder artwork source (#5198) 2026-03-15 22:19:55 -04:00
tr.json fix(ui): update Esperanto, Finnish, Galician, Dutch, Norwegian, Turkish translations from POEditor (#4760) 2025-12-05 19:36:06 -05:00
uk.json fix(ui): update Danish, German, Greek, Finnish, Galician, Portuguese (BR), Swedish, Ukrainian, Chinese (traditional) translations from POEditor (#5218) 2026-03-27 18:04:47 -04:00
zh-Hans.json fix(ui): update Chinese (Simplified) translation (#5323) 2026-04-07 11:11:05 -04:00
zh-Hant.json fix(ui): update zh-Hant.json (#5470) 2026-05-06 08:49:13 -04:00