|
import os |
|
import locale |
|
import logging |
|
import commentjson as json |
|
|
|
class I18nAuto: |
|
def __init__(self): |
|
if os.path.exists("config.json"): |
|
with open("config.json", "r", encoding='utf-8') as f: |
|
config = json.load(f) |
|
else: |
|
config = {} |
|
language = config.get("language", "auto") |
|
language = os.environ.get("LANGUAGE", language) |
|
language = language.replace("-", "_") |
|
if language == "auto": |
|
language = locale.getdefaultlocale()[0] |
|
self.language_map = {} |
|
self.file_is_exists = os.path.isfile(f"./locale/{language}.json") |
|
if self.file_is_exists: |
|
with open(f"./locale/{language}.json", "r", encoding="utf-8") as f: |
|
self.language_map.update(json.load(f)) |
|
else: |
|
logging.warning(f"Language file for {language} does not exist. Using English instead.") |
|
logging.warning(f"Available languages: {', '.join([x[:-5] for x in os.listdir('./locale')])}") |
|
with open(f"./locale/en_US.json", "r", encoding="utf-8") as f: |
|
self.language_map.update(json.load(f)) |
|
|
|
def change_language(self, language): |
|
language = language.replace("-", "_") |
|
self.language_map = {} |
|
self.file_is_exists = os.path.isfile(f"./locale/{language}.json") |
|
if self.file_is_exists: |
|
with open(f"./locale/{language}.json", "r", encoding="utf-8") as f: |
|
self.language_map.update(json.load(f)) |
|
else: |
|
logging.warning(f"Language file for {language} does not exist. Using English instead.") |
|
logging.warning(f"Available languages: {', '.join([x[:-5] for x in os.listdir('./locale')])}") |
|
with open(f"./locale/en_US.json", "r", encoding="utf-8") as f: |
|
self.language_map.update(json.load(f)) |
|
|
|
def __call__(self, key): |
|
if self.file_is_exists and key in self.language_map: |
|
return self.language_map[key] |
|
else: |
|
return key |
|
|