Coverage for src/refinire/core/message.py: 88%

16 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-15 18:51 +0900

1""" 

2Module for localized message strings 

3日本語/英語のメッセージ文字列を提供するモジュール 

4""" 

5 

6import os # English: Import os to read environment variables. 日本語: 環境変数読み取りのためosをインポート 

7import locale # English: Import locale to get system locale. 日本語: システムロケール取得のためlocaleをインポート 

8 

9def _detect_default_language() -> str: 

10 """ 

11 Detect default language from environment variable or OS setting. 

12 環境変数やOS設定からデフォルトの言語を判定します。 

13 日本語の場合 'ja' を返し、それ以外は 'en' を返します。 

14 """ 

15 # Check environment variables commonly used for locale 

16 for env_var in ("LANG", "LC_ALL", "LC_MESSAGES"): 

17 lang_val = os.environ.get(env_var, "") 

18 if lang_val.lower().startswith("ja"): 

19 return "ja" 

20 # Fallback to system locale 

21 sys_loc = locale.getdefaultlocale()[0] or "" 

22 if sys_loc.lower().startswith("ja"): 

23 return "ja" 

24 return "en" 

25 

26DEFAULT_LANGUAGE = _detect_default_language() 

27 

28# Supported languages: English (en) and Japanese (ja) 

29MESSAGES: dict[str, dict[str, str]] = { 

30 "evaluation_feedback_header": { 

31 "en": "Evaluation feedback:", 

32 "ja": "評価フィードバック:" 

33 }, 

34 "ai_history_header": { 

35 "en": "Past AI outputs:", 

36 "ja": "過去のAI出力:" 

37 }, 

38 "user_input_prefix": { 

39 "en": "UserInput:", 

40 "ja": "ユーザー入力:" 

41 }, 

42 # Trace labels for console tracing 

43 "trace_instruction": { 

44 "en": "Instruction:", 

45 "ja": "インストラクション:" 

46 }, 

47 "trace_prompt": { 

48 "en": "Prompt:", 

49 "ja": "プロンプト:" 

50 }, 

51 "trace_output": { 

52 "en": "Output:", 

53 "ja": "LLM出力:" 

54 }, 

55 # Evaluation format instructions 

56 "eval_output_format_header": { 

57 "en": "Output format:", 

58 "ja": "出力フォーマット:" 

59 }, 

60 "eval_json_schema_instruction": { 

61 "en": "JSON with the following format:", 

62 "ja": "JSONで以下の形式にしてください:" 

63 } 

64} 

65 

66def get_message(key: str, lang: str = DEFAULT_LANGUAGE) -> str: 

67 """ 

68 Get localized message by key and language 

69 キーと言語からローカライズされたメッセージを取得する 

70 

71 Args: 

72 key: Message key / メッセージキー 

73 lang: Language code ('en' or 'ja') / 言語コード('en' または 'ja') 

74 

75 Returns: 

76 Localized message string / ローカライズされたメッセージ文字列 

77 """ 

78 # Ensure lang is either 'ja' or 'en' 

79 use_lang = lang if lang in ("en", "ja") else DEFAULT_LANGUAGE 

80 return MESSAGES.get(key, {}).get(use_lang, MESSAGES.get(key, {}).get("en", ""))