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
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-12 16:38 +0000
1"""簡単な翻訳の仕組み: 日本語の原文をキーに、言語ごとの辞書を引く。
3Qt の .ts / .qm は外部のツールが要るので使わない。訳の無い文字列は原文のまま返る。
4対象はメニューや主なボタンなど目に触れる所だけ。言語の切り替えは次の起動から(作った画面は訳し直さない)。
5"""
6import logging
8logger = logging.getLogger(__name__)
10SUPPORTED_LANGUAGES = {"ja": "日本語", "en": "English"}
11DEFAULT_LANGUAGE = "ja"
13_current_language = DEFAULT_LANGUAGE
14_translations: dict[str, dict[str, str]] = {} # {言語コード: {原文: 訳文}}
17def register_translations(lang_code: str, mapping: dict[str, str]) -> None:
18 _translations.setdefault(lang_code, {}).update(mapping)
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
29def get_language() -> str:
30 return _current_language
33def tr(text: str) -> str:
34 """日本語のとき、または訳が無いときは原文のまま。"""
35 if _current_language == DEFAULT_LANGUAGE:
36 return text
37 return _translations.get(_current_language, {}).get(text, text)
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) の読み込みに失敗しました。")