- Author: Tuomas Lähteenmäki
- License: MIT
- Version: 0.2.5
- Type: Library
- Status: Stable
- Canonical Repository (Codeberg): https://codeberg.org/lahtis/Self_Healing_Localization
- GitHub Mirror: https://github.com/lahtis/Self-Healing-Localization
- Documentation: https://codeberg.org/lahtis/Self_Healing_Localization/src/branch/main/docs
Self-Healing Localization Layer (SHL) is a Python localization engine that automatically creates, synchronizes, and maintains language files throughout the lifetime of your application.
pip install self-healing-localizationpip install -i https://test.pypi.org/simple/ self-healing-localization==0.2.4Create a .env file in your project root (optional):
MYMEMORY_EMAIL=your@email.com
LIBRETRANSLATE_API_KEY=your-api-key
LIBRETRANSLATE_URL=https://libretranslate.comCreate a config.conf in your project root:
[SETTINGS]
language = fi
base_lang = en
m_translation_enabled = trueInitialize the engine and start retrieving text. Missing keys are added to your JSON files automatically.
from shl.engine import LocalizationEngine
shl.setup_logging("DEBUG")
# Initialize the engine (user language = Finnish, base = English)
engine = LocalizationEngine(base_lang="en")
# If 'welcome_msg' is missing, it is created with the given default value
title = engine.ui_text("welcome_msg", "Welcome to the App!")
print(title) # "Tervetuloa sovellukseen!" (if translation exists)- base_lang="en" → source code strings are English
- lang_code="fi" → user wants Finnish UI
So SHL does:
-
- Look for welcome_msg in fi.json
-
- If missing:
- Create the key in fi.json
- Use the default value "Welcome to the App!" as the English source
- Translate English → Finnish
-
- Return the Finnish result
- base_lang = the language your source JSON files are written in
- lang_code = the language the user wants to see in the UI right now Everything else in SHL’s behavior flows from that.
This is the language of your canonical UI strings — the language your codebase “speaks”.
Examples:
- If your app is written in English → base_lang="en"
- If your app is written in Finnish → base_lang="fi"
- If your app is written in Italian → base_lang="it"
SHL uses base_lang to:
- now which JSON file is the authoritative source
- know what language missing keys should be stored in
- know what language to translate from when generating other languages
This is the language the user wants to see.
Examples:
- Finnish user → lang_code="fi"
- English user → lang_code="en"
- Italian user → lang_code="it"
SHL uses lang_code to:
- decide which JSON file to read from
- decide which JSON file to write new keys into
- decide which language to translate to
Machine translation is disabled by default. Enable it when you want missing texts to be translated automatically.
config = {"m_translation_enabled": True} # you can overwrite config in code
engine = LocalizationEngine(lang_code="fi", config=config)
text = engine.ui_text("new_key", "Hello World!")
# → "Hei maailma!" (automatically translated to Finnish)SHL handles localized AI prompt templates the same way as UI text.
prompt = engine.template("summarize_task", "Please summarize the following text:")If the template file for the current language does not exist, it is created automatically using the base language as the source.
Switch languages at runtime without restarting the application.
engine = LocalizationEngine(lang_code="en", config={"m_translation_enabled": True})
# Switch to Finnish
engine.set_language("fi")
print(engine.ui_text("greeting", "Hello!")) # "Hei!" (Machine-translated)
# Switch to Swedish
engine.set_language("sv")
print(engine.ui_text("greeting", "Hello!")) # "Hej!" (Machine-translated)# Brazilian Portuguese and European Portuguese in separate files
engine = LocalizationEngine(lang_code="pt-BR") # → pt-br.json
engine = LocalizationEngine(lang_code="pt-PT") # → pt-pt.json
# Traditional and Simplified Chinese in separate files
engine = LocalizationEngine(lang_code="zh-TW") # → zh-tw.json
engine = LocalizationEngine(lang_code="zh-CN") # → zh-cn.jsonfrom shl.engine.translation import translate_text
# Automatically chooses the best provider
result = translate_text("Hello World", target_lang="fi")
print(result) # "Hei maailma"Check the latest documentation files.
Contributions are welcome.
This project aims to become a new standard for open‑source localization — simple, automatic, and self‑maintaining.
MIT License — free for personal and commercial use.
Localization should never be a burden.
With SHL, any project can become multilingual — automatically, reliably, and without manual maintenance.
No more missing translations.
No more incomplete language packs.
Localization that heals itself.
#localization • #i18n • #l10n • #self-healing • #translation • #multilingual #json • #python • #developer-tools • #automation • #templates • #cli #ai-assisted • #language-files • #internationalization • #localization-engine