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()