51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
import logging
|
|
import json
|
|
import os
|
|
from .const import LANGUAGE_FILES_DIR, SUPPORTED_LANGUAGES
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def localize(string, language):
|
|
# try opening language file
|
|
language = language.lower()
|
|
translated_string = None
|
|
main_path = os.path.dirname(__file__)
|
|
stringpath = string.split(".")
|
|
try:
|
|
# if the language is not english and the language is supported
|
|
if language != "en" and language in SUPPORTED_LANGUAGES:
|
|
with open(
|
|
os.path.join(
|
|
main_path, LANGUAGE_FILES_DIR + os.sep + language + ".json"
|
|
)
|
|
) as f:
|
|
data = json.load(f)
|
|
translated_string = get_string_from_data(stringpath, data)
|
|
# fallback to english in case string wasn't found
|
|
if language == "en" or not isinstance(translated_string, str):
|
|
with open(
|
|
os.path.join(main_path, LANGUAGE_FILES_DIR + os.sep + "en.json")
|
|
) as f:
|
|
data = json.load(f)
|
|
translated_string = get_string_from_data(stringpath, data)
|
|
# if still not found, just return the string parameter
|
|
if isinstance(translated_string, str):
|
|
return translated_string
|
|
else:
|
|
return string
|
|
except OSError:
|
|
_LOGGER.error(
|
|
"Couldn't load translations language file for {}".format(language)
|
|
)
|
|
|
|
|
|
def get_string_from_data(stringpath, data):
|
|
data_to_walk = data
|
|
for p in stringpath:
|
|
if isinstance(data_to_walk, str):
|
|
return data_to_walk
|
|
if p in data_to_walk:
|
|
data_to_walk = data_to_walk[p]
|
|
return data_to_walk
|