mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2025-10-09 10:22:05 +00:00
176 lines
3.2 KiB
Python
176 lines
3.2 KiB
Python
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
|