Merge pull request #1032 from oddstr13/fix-translations

Fix translation file naming
This commit is contained in:
Odd Stråbø 2025-09-09 06:42:23 +02:00 committed by GitHub
commit b972bfbe24
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
34 changed files with 204 additions and 1277 deletions

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Justin Tamblyn <just1689@gmail.com>\n"
"Language-Team: Afrikaans <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/af/>\n"
"Language: af\n"
"Language: af_za\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Hasan Abdulaal <hassan.b2018@gmail.com>\n"
"Language-Team: Arabic <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/ar/>\n"
"Language: ar\n"
"Language: ar_sa\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: \"Troj@\" <d.iwowi.b@gmail.com>\n"
"Language-Team: Belarusian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/be/>\n"
"Language: be\n"
"Language: be_by\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Zhelyan Radoev <jelioradoev@gmail.com>\n"
"Language-Team: Bulgarian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/bg/>\n"
"Language: bg\n"
"Language: bg_bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Gargotaire <gargots@gmail.com>\n"
"Language-Team: Catalan <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/ca/>\n"
"Language: ca\n"
"Language: ca_es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Brett Healey <Bearach.goll@gmail.com>\n"
"Language-Team: Welsh <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/cy/>\n"
"Language: cy\n"
"Language: cy_gb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: TheLostDims <mailtilmark@gmail.com>\n"
"Language-Team: Danish <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/da/>\n"
"Language: da\n"
"Language: da_dk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -1,212 +0,0 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2025-09-08 00:52+0000\n"
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
"Language-Team: English (United Kingdom) <https://translate.jellyfin.org/"
"projects/jellyfin/jellyfin-kodi/en_GB/>\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.11.4\n"
msgctxt "#30001"
msgid "Server name"
msgstr "Server name"
msgctxt "#29999"
msgid "Jellyfin for Kodi"
msgstr "Jellyfin for Kodi"
msgctxt "#30000"
msgid "Server address"
msgstr "Server address"
msgctxt "#30002"
msgid "Force HTTP playback"
msgstr "Force HTTP playback"
msgctxt "#30003"
msgid "Login method"
msgstr "Login method"
msgctxt "#30004"
msgid "Log level"
msgstr "Log level"
msgctxt "#30016"
msgid "Device name"
msgstr "Device name"
msgctxt "#30022"
msgid "Advanced"
msgstr "Advanced"
msgctxt "#30024"
msgid "Username"
msgstr "Username"
msgctxt "#30091"
msgid "Confirm file deletion"
msgstr "Confirm file deletion"
msgctxt "#30114"
msgid "Offer delete after playback"
msgstr "Offer delete after playback"
#, fuzzy
msgctxt "#30115"
msgid "For Episodes"
msgstr "For Episodes"
#, fuzzy
msgctxt "#30116"
msgid "For Movies"
msgstr "For Movies"
#, fuzzy
msgctxt "#30160"
msgid "Max stream bitrate"
msgstr "Max stream bitrate"
#, fuzzy
msgctxt "#30161"
msgid "Preferred video codec"
msgstr "Preferred video codec"
#, fuzzy
msgctxt "#30163"
msgid "Audio bitrate"
msgstr "Audio bitrate"
#, fuzzy
msgctxt "#30164"
msgid "Audio max channels"
msgstr "Audio max channels"
#, fuzzy
msgctxt "#30165"
msgid "Allow burned subtitles"
msgstr "Allow burned subtitles"
#, fuzzy
msgctxt "#30174"
msgid "Recently Added Movies"
msgstr "Recently Added Movies"
#, fuzzy
msgctxt "#30179"
msgid "Next Episodes"
msgstr "Next Episodes"
msgctxt "#30180"
msgid "Favorite Movies"
msgstr "Favorite Movies"
msgctxt "#30181"
msgid "Favorite Shows"
msgstr "Favorite Shows"
#, fuzzy
msgctxt "#30182"
msgid "Favorite Episodes"
msgstr "Favourite Episodes"
#, fuzzy
msgctxt "#30185"
msgid "Boxsets"
msgstr "Boxsets"
#, fuzzy
msgctxt "#30189"
msgid "Unwatched Movies"
msgstr "Unwatched Movies"
#, fuzzy
msgctxt "#30229"
msgid "Random Items"
msgstr "Random Items"
#, fuzzy
msgctxt "#30170"
msgid "Recently Added TV Shows"
msgstr "Recently Added TV Shows"
#, fuzzy
msgctxt "#30157"
msgid "Enable enhanced artwork (i.e. cover art)"
msgstr "Enable enhanced artwork (i.e. cover art)"
#, fuzzy
msgctxt "#30162"
msgid "Preferred audio codec"
msgstr "Preferred audio codec"
#, fuzzy
msgctxt "#30175"
msgid "Recently Added Episodes"
msgstr "Recently Added Episodes"
#, fuzzy
msgctxt "#30171"
msgid "In Progress TV Shows"
msgstr "In Progress TV Shows"
#, fuzzy
msgctxt "#30177"
msgid "In Progress Movies"
msgstr "In Progress Movies"
#, fuzzy
msgctxt "#30178"
msgid "In Progress Episodes"
msgstr "In Progress Episodes"
msgctxt "#30230"
msgid "Recommended Items"
msgstr "Recommended Items"
msgctxt "#30235"
msgid "Interface"
msgstr "Interface"
msgctxt "#30239"
msgid "Reset local Kodi database"
msgstr "Reset local Kodi database"
msgctxt "#30249"
msgid "Enable welcome message"
msgstr "Enable welcome message"
msgctxt "#30253"
msgid "Favourite Home Videos"
msgstr "Favourite Home Videos"
msgctxt "#30255"
msgid "Favourite Albums"
msgstr "Favourite Albums"
msgctxt "#30251"
msgid "Recently added Home Videos"
msgstr "Recently added Home Videos"
msgctxt "#30252"
msgid "Recently added Photos"
msgstr "Recently added Photos"
msgctxt "#30254"
msgid "Favourite Photos"
msgstr "Favourite Photos"
msgctxt "#30256"
msgid "Recently added Music videos"
msgstr "Recently added Music videos"
msgctxt "#30257"
msgid "In progress Music videos"
msgstr "In progress Music videos"
msgctxt "#30258"
msgid "Unwatched Music videos"
msgstr "Unwatched Music videos"

View file

@ -10,7 +10,7 @@ msgstr ""
"Last-Translator: WWWesten <wwwesten@gmail.com>\n"
"Language-Team: English <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/en/>\n"
"Language: en\n"
"Language: en_gb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -1,2 +0,0 @@
msgid ""
msgstr "X-Generator: Weblate\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Alpha <alphagma@gmail.com>\n"
"Language-Team: Spanish (Argentina) <https://translate.jellyfin.org/projects/"
"jellyfin/jellyfin-kodi/es_AR/>\n"
"Language: es_AR\n"
"Language: es_ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: rimasx <riks_12@hot.ee>\n"
"Language-Team: Estonian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/et/>\n"
"Language: et\n"
"Language: et_ee\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Canopus <sohilj23@yahoo.com>\n"
"Language-Team: Persian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/fa/>\n"
"Language: fa\n"
"Language: fa_ir\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: RoboDoc <theonlyrobodoc@gmail.com>\n"
"Language-Team: Finnish <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/fi/>\n"
"Language: fi\n"
"Language: fi_fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>\n"
"Language-Team: Irish <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/ga/>\n"
"Language: ga\n"
"Language: ga_ie\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Tal Sarid <sarid.tal@gmail.com>\n"
"Language-Team: Hebrew <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/he/>\n"
"Language: he\n"
"Language: he_il\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language-Team: Croatian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/hr/>\n"
"Language: hr\n"
"Language: hr_hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Nirwan <ny.unpar@gmail.com>\n"
"Language-Team: Indonesian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/id/>\n"
"Language: id\n"
"Language: id_id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -1,2 +0,0 @@
msgid ""
msgstr "X-Generator: Weblate\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit"

View file

@ -1,2 +0,0 @@
msgid ""
msgstr "X-Generator: Weblate\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: WWWesten <wwwesten@gmail.com>\n"
"Language-Team: Kazakh <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/kk/>\n"
"Language: kk\n"
"Language: kk_kz\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: sharanchius <sharanchius@gmail.com>\n"
"Language-Team: Lithuanian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/lt/>\n"
"Language: lt\n"
"Language: lt_lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Kliment <kliment.lambevski@gmail.com>\n"
"Language-Team: Macedonian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/mk/>\n"
"Language: mk\n"
"Language: mk_mk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Battseren Badral <bbattseren88@gmail.com>\n"
"Language-Team: Mongolian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/mn/>\n"
"Language: mn\n"
"Language: mn_mn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: WWWesten <wwwesten@gmail.com>\n"
"Language-Team: Norwegian Nynorsk <https://translate.jellyfin.org/projects/"
"jellyfin/jellyfin-kodi/nn/>\n"
"Language: nn\n"
"Language: nn_no\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Acrotos <alexandrufly@gmail.com>\n"
"Language-Team: Romanian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/ro/>\n"
"Language: ro\n"
"Language: ro_ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: SaddFox <filip.rutar@gmail.com>\n"
"Language-Team: Slovenian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/sl/>\n"
"Language: sl\n"
"Language: sl_si\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Ajoro <folkeeert@gmail.com>\n"
"Language-Team: Swedish <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/sv/>\n"
"Language: sv\n"
"Language: sv_se\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Oatavandi <oatavandi@gmail.com>\n"
"Language-Team: Tamil <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/ta/>\n"
"Language: ta\n"
"Language: ta_in\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Mykhailo Zaichkov <mykhailo.zaichkov@gmail.com>\n"
"Language-Team: Ukrainian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/uk/>\n"
"Language: uk\n"
"Language: uk_ua\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Nguyen Thanh <congquynh284@yahoo.com>\n"
"Language-Team: Vietnamese <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/vi/>\n"
"Language: vi\n"
"Language: vi_vn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: jhih_yu <jy@jhihyulin.live>\n"
"Language-Team: Chinese (Traditional) <https://translate.jellyfin.org/"
"projects/jellyfin/jellyfin-kodi/zh_Hant/>\n"
"Language: zh_Hant\n"
"Language: zh_tw\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

176
tests/test_translations.py Normal file
View file

@ -0,0 +1,176 @@
import os
from pathlib import Path
import pytest
BASEDIR = Path(__file__).parent.parent
TRANSLATIONS_BASE = BASEDIR / "resources" / "language"
TRANSLATION_DIRS = os.listdir(TRANSLATIONS_BASE)
KNOWN_KODI_LANGUAGE_CODES = {
"en_gb", # Base language
"es_es",
"ta_in",
"fr_ca",
"en_nz",
"eo",
"fa_ir",
"szl",
"nb_no",
"vi_vn",
"sk_sk",
"mn_mn",
"ru_ru",
"fi_fi",
"nl_nl",
"lv_lv",
"hi_in",
"pt_pt",
"de_de",
"it_it",
"ja_jp",
"ms_my",
"sr_rs@latin",
"is_is",
"pl_pl",
"fo_fo",
"si_lk",
"es_mx",
"hu_hu",
"pt_br",
"en_us",
"ar_sa",
"tg_tj",
"el_gr",
"ast_es",
"es_ar",
"be_by",
"af_za",
"sv_se",
"am_et",
"my_mm",
"fr_fr",
"sq_al",
"et_ee",
"ga_ie",
"ko_kr",
"id_id",
"gl_es",
"bg_bg",
"cs_cz",
"eu_es",
"fa_af",
"ro_ro",
"th_th",
"zh_tw",
"mi",
"mt_mt",
"ml_in",
"uk_ua",
"da_dk",
"cy_gb",
"az_az",
"he_il",
"kn_in",
"zh_cn",
"hy_am",
"te_in",
"hr_hr",
"ca_es",
"tr_tr",
"bs_ba",
"sr_rs",
"uz_uz",
"lt_lt",
"os_os",
"fil",
"sl_si",
"en_au",
"mk_mk",
}
ADDITIONAL_LANGUAGE_EXCEPTIONS = {
"es_419", # Spanish, Latin America
}
@pytest.mark.parametrize(
"dir",
TRANSLATION_DIRS,
)
def test_langcode_lower(dir: str):
_, code = dir.rsplit(".", 1)
assert code.islower()
@pytest.mark.parametrize(
"dir",
TRANSLATION_DIRS,
)
def test_langcode_country(dir: str):
_, code = dir.rsplit(".", 1)
if (
code not in KNOWN_KODI_LANGUAGE_CODES
and code not in ADDITIONAL_LANGUAGE_EXCEPTIONS
):
for c in KNOWN_KODI_LANGUAGE_CODES:
if code in c:
print(f"Maybe {code} should be {c}?")
assert len(code) == 5
assert "_" in code
lang, country = code.split("_", 1)
assert lang.isalpha()
assert country.isalpha()
def parse_language_headers(file):
with open(file, "rt", encoding="utf-8") as fh:
sections = {}
section = None
for line in fh:
line = line.strip()
if not line:
break
if line[0] == "#":
continue
elif line[0] == '"':
sections[section].append(line)
else:
section, value = line.split(None, 1)
sections[section] = [value]
for section in sections.keys():
sections[section] = "".join(
[
x[1:-1].replace('\\"', '"').replace("\\n", "\n")
for x in sections[section]
]
)
d = {"file": file}
for line in sections["msgstr"].split("\n"):
line = line.strip()
if not line:
continue
key, value = line.split(":", 1)
d[key] = value.strip()
return d
@pytest.mark.parametrize(
"dir",
TRANSLATION_DIRS,
)
def test_langcode_matches(dir: str):
_, code = dir.rsplit(".", 1)
headers = parse_language_headers(TRANSLATIONS_BASE / dir / "strings.po")
assert "Language" in headers
assert headers["Language"] == code