Custom loader
Writing a custom loader with an example of a loader for XML file format.
To create your own loader, you have to inherit from PyI18nBaseLoader
class and implement load
method.
Note
Your custom loader load
method should return dictionary with translations otherwise your loader will not work.
class PyI18nXMLLoader(PyI18nBaseLoader):
_type: str = "xml" # type of loader
def load(self, locales: tuple) -> dict:
# XML loader logic
loaded: dict = {}
for locale in locales:
file_path: str = f"{self.load_path}{locale}.xml"
if not exists(file_path):
continue
with open(file_path, "r", encoding="utf-8") as _f:
loaded[locale] = parse(_f.read())[locale]
return loaded
Pass custom loader to PyI18n constructor
Tip
Don't pass load_path
argument to PyI18n
constructor if you're using loader other than PyI18nYamlLoader
(build-in). You should specify load_path
argument in your loader instead.
if __name__ == "__main__":
loader: PyI18nXMLLoader = PyI18nXMLLoader("locales/")
i18n: PyI18n = PyI18n(('en', 'pl'), loader=loader)
print(i18n.gettext("en", "hello.world"))
print(i18n.gettext("pl", "hello.world"))
# >> Hello world!
# >> Witaj świecie!