#!/usr/bin/python # -*- coding: utf-8 -*- # --------------------------------------------------------------------------------------------------------- # Author : Ulrich Carmesin # Source : gitea.ucarmesin.de # --------------------------------------------------------------------------------------------------------- import utils.config_tool import utils.path_const as P import basic.constants as B import basic.program DEFAULT_LANGUAGE = "en" EXP_KEY_MISSING = "key is missing {}" EXP_KEY_DOESNT_EXIST = "key doesnt exist in domain {}" class I18n: __instance = None cache = {} """ in this class there should be managed each defined key-value-pairs the pairs ara loaded from the path testdata/catalog: * initially the csv-file catalog.csv * on demand other csv-files in the path """ def __init__(self): self.cache = {} self.cache = utils.config_tool.getConfig(P.KEY_TOOL, "i18n") I18n.__instance = self pass @staticmethod def getInstance(): if I18n.__instance == None: return I18n() return I18n.__instance def getMessage(self, job, key, args=[]): print("getMessage "+key+" "+str(args)) out = self.getText(key, job) out = out.format(args) return out def getText(self, key, job=None): """ this function gets the text depending on language which is set in job.conf :param key: MUST GIVEN WITH (f"{CONST=}", .. :return: return self.cache[language][key] """ if job is None: job = basic.program.Job.getInstance() if "language" in job.conf.confs: language = job.conf.confs["language"] else: language = "en" if language not in self.cache: raise Exception(EXP_KEY_MISSING, (key)) if "=" in key: out = self.extractText(key) key = self.extractKey(key) if key in self.cache[language]: out = self.cache[language][key] elif key in self.cache[DEFAULT_LANGUAGE]: out = self.cache[DEFAULT_LANGUAGE][key] return out def getAliasList(self, key, job=None): if job is None: jon = basic.program.Job.getInstance() out = [] out.append(self.extractText(key)) key = self.extractKey(key) for language in self.cache: if key not in self.cache[language]: continue out.append(self.cache[language][key]) return out def extractKey(self, key): if "=" in key: i = key.find("=") x = key[0:i] if "." in x: i = x.find(".") y = x[i + 1:] else: y = x key = y else: y = key return key def extractText(self, key): if "=" in key: i = key.find("=") return key[i + 2:-1] return ""