Coverage for graphica/core/i18n.py: 100.0%

21 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-12 16:38 +0000

1"""簡単な翻訳の仕組み: 日本語の原文をキーに、言語ごとの辞書を引く。 

2 

3Qt の .ts / .qm は外部のツールが要るので使わない。訳の無い文字列は原文のまま返る。 

4対象はメニューや主なボタンなど目に触れる所だけ。言語の切り替えは次の起動から(作った画面は訳し直さない)。 

5""" 

6import logging 

7 

8logger = logging.getLogger(__name__) 

9 

10SUPPORTED_LANGUAGES = {"ja": "日本語", "en": "English"} 

11DEFAULT_LANGUAGE = "ja" 

12 

13_current_language = DEFAULT_LANGUAGE 

14_translations: dict[str, dict[str, str]] = {} # {言語コード: {原文: 訳文}} 

15 

16 

17def register_translations(lang_code: str, mapping: dict[str, str]) -> None: 

18 _translations.setdefault(lang_code, {}).update(mapping) 

19 

20 

21def set_language(lang_code: str) -> None: 

22 """対応していない言語なら日本語にする。""" 

23 global _current_language 

24 if lang_code not in SUPPORTED_LANGUAGES: 

25 lang_code = DEFAULT_LANGUAGE 

26 _current_language = lang_code 

27 

28 

29def get_language() -> str: 

30 return _current_language 

31 

32 

33def tr(text: str) -> str: 

34 """日本語のとき、または訳が無いときは原文のまま。""" 

35 if _current_language == DEFAULT_LANGUAGE: 

36 return text 

37 return _translations.get(_current_language, {}).get(text, text) 

38 

39 

40try: 

41 from graphica.core.translations_en import TRANSLATIONS as _EN_TRANSLATIONS 

42 register_translations("en", _EN_TRANSLATIONS) 

43except ImportError: 

44 logger.warning("英語翻訳辞書 (core/translations_en.py) の読み込みに失敗しました。")