57 lines
1.4 KiB
Python
57 lines
1.4 KiB
Python
import yaml
|
|
import os
|
|
from functools import lru_cache
|
|
import math
|
|
from gettext import ngettext
|
|
from flask import current_app as app
|
|
from atst.utils import getattr_path
|
|
|
|
ENV = os.getenv("FLASK_ENV", "dev")
|
|
|
|
|
|
class LocalizationInvalidKeyError(Exception):
|
|
def __init__(self, key, variables):
|
|
self.key = key
|
|
self.variables = variables
|
|
|
|
def __str__(self):
|
|
return "Requested {key} and variables {variables} with but an error occured".format(
|
|
key=self.key, variables=self.variables
|
|
)
|
|
|
|
|
|
@lru_cache(maxsize=None)
|
|
def _translations_file():
|
|
file_name = "translations.yaml"
|
|
|
|
if app:
|
|
file_name = app.config.get("DEFAULT_TRANSLATIONS_FILE", file_name)
|
|
|
|
f = open(file_name)
|
|
|
|
return yaml.safe_load(f)
|
|
|
|
|
|
def translate(key, variables=None):
|
|
translations = _translations_file()
|
|
value = getattr_path(translations, key)
|
|
|
|
if variables is None:
|
|
variables = {}
|
|
|
|
if value is None:
|
|
raise LocalizationInvalidKeyError(key, variables)
|
|
|
|
return value.format(**variables).replace("\n", "")
|
|
|
|
|
|
def translate_duration(duration_in_months):
|
|
duration = []
|
|
years = math.floor(duration_in_months / 12)
|
|
months = duration_in_months % 12
|
|
if years > 0:
|
|
duration.append("{} {}".format(years, ngettext("year", "years", years)))
|
|
if months > 0:
|
|
duration.append("{} {}".format(months, ngettext("month", "months", months)))
|
|
return (", ").join(duration)
|