klocmod

A simple module providing facilities to localize small programs via textual files.


Keywords
localization, library
License
MIT
Install
pip install klocmod==0.1.0

Documentation

klocmod -- Kozalo's Localization Module

Screw you, gettext! I don't wanna bother of compiling strings into binary files!

Build Status Documentation Status

This module provides a very simple, suboptimal way for localizing your scripts, bots or applications. The advantage is its simplicity: to supply some sets of different string literals for different languages, you just need a simple JSON, YAML or INI file (or even a dict) fed to the library. After that, the only thing you should take care of is to get an instance of the dictionary for a specific language and extract messages from it by key values.

All you mostly want is the LocalizationsContainer class. In particular, its static method LocalizationsContainer.from_file() that reads a localization file and returns an instance of the factory. The factory is supposed to produce instances of the LanguageDictionary class. Most likely, you will encounter instances of its subclass -- the SpecificLanguageDictionary class (the base class is only used as a fallback that returns passed key values back).

Installation

# basic installation
pip install klocmod
# or with YAML files support enabled
pip install klocmod[YAML]

Examples of localization files

JSON (language first)

{
  "en": {
    "yes": "yes",
    "no": "no"
  },
  "ru-RU": {
    "yes": "да",
    "no": "нет"
  }
}

JSON (phrase first)

{
  "yes": {
    "en": "yes",
    "ru-RU": "да"
  },
  "no": {
    "en": "no",
    "ru-RU": "нет"
  }
}

INI

[DEFAULT]
yes = yes
no = no

[ru-RU]
yes = да
no = нет

YAML

Requires an extra dependency: PyYAML.

# language first
en:
  yes: yes
  no: no
ru-RU:
  yes: да
  no: нет
---
# phrase first
yes:
  en: yes
  ru-RU: да
no:
  en: no
  ru-RU: нет

Code example

from klocmod import LocalizationsContainer

localizations = LocalizationsContainer.from_file("localization.json")
ru = localizations.get_lang("ru")
# or
en = localizations.get_lang()    # get default language
# then
print(ru['yes'])    # output: да
# alternative ways to get a specific phrase:
localizations.get_phrase("ru-RU", "no")
localizations['ru-RU']['no']