90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
import json
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
|
|
|
|
SRC_ROOT = Path(__file__).resolve().parents[2] / "src"
|
|
|
|
if str(SRC_ROOT) not in sys.path:
|
|
sys.path.insert(0, str(SRC_ROOT))
|
|
|
|
|
|
from ffx.i18n import ( # noqa: E402
|
|
detect_system_language,
|
|
read_configured_language,
|
|
resolve_application_language,
|
|
set_current_language,
|
|
t,
|
|
)
|
|
from ffx.iso_language import IsoLanguage # noqa: E402
|
|
|
|
|
|
class I18nTests(unittest.TestCase):
|
|
def tearDown(self):
|
|
set_current_language("de")
|
|
|
|
def test_cli_language_takes_precedence_over_config_and_system(self):
|
|
self.assertEqual(
|
|
"es",
|
|
resolve_application_language(
|
|
cli_language="es",
|
|
config_language="fr",
|
|
system_language="ja",
|
|
),
|
|
)
|
|
|
|
def test_config_language_takes_precedence_over_system(self):
|
|
self.assertEqual(
|
|
"fr",
|
|
resolve_application_language(
|
|
config_language="fr",
|
|
system_language="ja",
|
|
),
|
|
)
|
|
|
|
def test_system_language_is_used_when_no_cli_or_config_is_present(self):
|
|
self.assertEqual("ja", resolve_application_language(system_language="ja"))
|
|
|
|
def test_german_is_default_when_no_supported_language_is_available(self):
|
|
self.assertEqual(
|
|
"de",
|
|
resolve_application_language(
|
|
env={
|
|
"LANG": "C.UTF-8",
|
|
"LC_ALL": "C.UTF-8",
|
|
"LC_MESSAGES": "C.UTF-8",
|
|
}
|
|
),
|
|
)
|
|
|
|
def test_system_language_detection_normalizes_norwegian_bokmal(self):
|
|
self.assertEqual(
|
|
"nb",
|
|
detect_system_language({"LANG": "nb_NO.UTF-8"}),
|
|
)
|
|
|
|
def test_read_configured_language_normalizes_language_code(self):
|
|
with tempfile.TemporaryDirectory() as tempdir:
|
|
config_path = Path(tempdir) / "ffx.json"
|
|
config_path.write_text(
|
|
json.dumps({"language": "pt_BR.UTF-8"}),
|
|
encoding="utf-8",
|
|
)
|
|
self.assertEqual("pt", read_configured_language(config_path))
|
|
|
|
def test_phrase_translation_uses_catalog_for_selected_language(self):
|
|
set_current_language("fr")
|
|
self.assertEqual("Ajouter", t("Add"))
|
|
|
|
def test_iso_language_labels_use_catalog_for_selected_language(self):
|
|
set_current_language("de")
|
|
self.assertEqual("Deutsch", IsoLanguage.GERMAN.label())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|