Files
brain_dogfood/app/utils/i18n.py
T

42 lines
1.2 KiB
Python

import json
import os
from flask import current_app # type: ignore
class I18n:
_locales = {}
_default_lang = 'en'
@classmethod
def load_locales(cls):
locales_dir = os.path.join(current_app.static_folder, 'locales')
for filename in os.listdir(locales_dir):
if filename.endswith('.json'):
lang = filename.split('.')[0]
with open(os.path.join(locales_dir, filename), 'r', encoding='utf-8') as f:
cls._locales[lang] = json.load(f)
@classmethod
def t(cls, key, lang=None):
if not lang:
# 기본적으로 config에서 언어를 가져오거나 'en' 사용
lang = current_app.config.get('lang', cls._default_lang)
if not cls._locales:
cls.load_locales()
data = cls._locales.get(lang, cls._locales.get(cls._default_lang, {}))
# 중첩 키 지원 (예: "groups.done")
parts = key.split('.')
for p in parts:
if isinstance(data, dict):
data = data.get(p)
else:
return key
return data or key
# 숏컷 함수
def _t(key, lang=None):
return I18n.t(key, lang)