
Python-i18n: Der vollständige Lokalisierungsleitfaden
Richten Sie python-i18n mit JSON- oder YAML-Übersetzungsdateien ein, verarbeiten Sie Platzhalter und Pluralformen und automatisieren Sie anschließend Übersetzungen mit KI.
python-i18n installieren
python-i18n ist eine schlanke Internationalisierungsbibliothek für Python. Sie unterstützt JSON- und YAML-Übersetzungsdateien, verschachtelte Schlüssel, Platzhalterinterpolation und Pluralbildung.
pip install python-i18n# To use YAML translation files instead of JSON:
pip install python-i18n[YAML]Übersetzungen konfigurieren
Legen Sie das Dateiformat fest, fügen Sie Pfade zu Übersetzungsdateien hinzu und konfigurieren Sie Ihre Standard- und Fallback-Locales. Importieren Sie diese Konfiguration am Einstiegspunkt Ihrer Anwendung vor sämtlichen Übersetzungsaufrufen.
import i18n
# Set the file format (json or yaml)
i18n.set("file_format", "json")
# Add the directory containing your translation files
i18n.load_path.append("translations/")
# Set the default locale
i18n.set("locale", "en")
# Set the fallback locale (used when a key is missing)
i18n.set("fallback", "en")
# Enable/disable error on missing translations
i18n.set("error_on_missing_translation", False)Übersetzungsdateien erstellen
Erstellen Sie eine Datei pro Sprache im JSON- oder YAML-Format. Gliedern Sie Zeichenfolgen mit verschachtelten Schlüsseln nach Funktion oder Seite. Verwenden Sie Ihre Ausgangssprache, üblicherweise Englisch, als einzige maßgebliche Quelle.
// translations/en.json
{
"greeting": "Hello!",
"welcome": "Welcome to our application",
"nav": {
"home": "Home",
"about": "About",
"settings": "Settings"
},
"cart": {
"item_count": "%{count} item(s) in your cart"
}
}
// translations/de.json
{
"greeting": "Hallo!",
"welcome": "Willkommen in unserer Anwendung",
"nav": {
"home": "Startseite",
"about": "Über uns",
"settings": "Einstellungen"
},
"cart": {
"item_count": "%{count} Artikel in Ihrem Warenkorb"
}
}Übersetzungen im Code verwenden
Rufen Sie i18n.t() mit einem durch Punkte getrennten Schlüsselpfad auf, um übersetzte Zeichenfolgen abzurufen. Sie können die Locale pro Aufruf überschreiben, ohne die globale Einstellung zu ändern.
import i18n
# Simple translation
print(i18n.t("greeting")) # "Hello!"
print(i18n.t("nav.home")) # "Home"
print(i18n.t("nav.about")) # "About"
# Translation with a specific locale
print(i18n.t("greeting", locale="de")) # "Hallo!"
print(i18n.t("nav.home", locale="ja")) # "ホーム"
# Missing key returns a placeholder
print(i18n.t("missing.key")) # "Missing.Key"Platzhalter und Pluralbildung
python-i18n unterstützt Platzhalterinterpolation mit der Syntax %{name} und einfache Pluralbildung mit den Unterschlüsseln zero, one und many. Übergeben Sie für beide Funktionen Schlüsselwortargumente an i18n.t().
# translations/en.json
# {
# "welcome_user": "Welcome, %{name}!",
# "order_status": "Order #%{order_id}: %{status}",
# "file_size": "File size: %{size} %{unit}"
# }
import i18n
# Single placeholder
print(i18n.t("welcome_user", name="Alice"))
# "Welcome, Alice!"
# Multiple placeholders
print(i18n.t("order_status", order_id=12345, status="shipped"))
# "Order #12345: shipped"
# Reusable with different values
print(i18n.t("file_size", size=2.5, unit="MB"))
# "File size: 2.5 MB"
print(i18n.t("file_size", size=800, unit="KB"))
# "File size: 800 KB"# translations/en.json
# {
# "inbox": {
# "zero": "No messages",
# "one": "1 message",
# "many": "%{count} messages"
# }
# }
import i18n
print(i18n.t("inbox", count=0)) # "No messages"
print(i18n.t("inbox", count=1)) # "1 message"
print(i18n.t("inbox", count=42)) # "42 messages"Locale-Wechsel zur Laufzeit
Wechseln Sie die aktive Locale global mit i18n.set('locale', code) oder überschreiben Sie sie pro Aufruf mit dem Schlüsselwortargument locale. Erkennen Sie in Webframeworks die bevorzugte Sprache aus der Anfrage und setzen Sie die Locale vor dem Rendern.
import i18n
# Set locale globally
i18n.set("locale", "de")
print(i18n.t("greeting")) # "Hallo!"
# Switch to Japanese
i18n.set("locale", "ja")
print(i18n.t("greeting")) # "こんにちは!"
# Override per-call without changing global locale
i18n.set("locale", "en")
print(i18n.t("greeting")) # "Hello!"
print(i18n.t("greeting", locale="de")) # "Hallo!"from flask import Flask, request, g
import i18n
app = Flask(__name__)
i18n.set("file_format", "json")
i18n.load_path.append("translations/")
SUPPORTED_LOCALES = ["en", "de", "ja", "es", "fr"]
@app.before_request
def set_locale():
# Check URL parameter, cookie, then Accept-Language header
locale = request.args.get("lang")
if not locale:
locale = request.cookies.get("locale")
if not locale:
locale = request.accept_languages.best_match(SUPPORTED_LOCALES)
g.locale = locale or "en"
i18n.set("locale", g.locale)
@app.route("/")
def index():
return i18n.t("welcome")Intelligenter Locale-Fallback mit python-i18n-locale-chain
Standardmäßig unterstützt python-i18n nur eine einzelne Fallback-Locale. Fehlen für eine Person mit pt-BR pt-BR-Übersetzungen, wechselt die Bibliothek direkt zum englischen Fallback und ignoriert vollständig geeignete pt-PT-Übersetzungen. python-i18n-locale-chain behebt dies mit konfigurierbaren Fallback-Ketten für 75 Locale-Varianten.
pip install python-i18n-locale-chainfrom locale_chain import configure
import i18n
i18n.set("file_format", "json")
i18n.load_path.append("translations/")
# Activate smart fallback chains (75 built-in chains)
configure()
# Now pt-BR falls back to pt-PT -> pt -> en (instead of just en)
result = i18n.t("greeting", locale="pt-BR")
# es-MX falls back to es-419 -> es -> en
result = i18n.t("greeting", locale="es-MX")
# zh-Hant-HK falls back to zh-Hant-TW -> zh-Hant -> en
result = i18n.t("greeting", locale="zh-Hant-HK")from locale_chain import configure, reset
# Override specific chains
configure(overrides={
"pt-BR": ["pt"], # Skip pt-PT, go straight to pt
"ja-JP": ["ja"], # Add a new chain
})
# Full custom map (no defaults)
configure(
fallbacks={"pt-BR": ["pt-PT"]},
merge_defaults=False
)
# Use German as final fallback instead of English
configure(default_locale="de")
# Restore original i18n.t() behaviour
reset()Übersetzungen automatisieren
Wenn Ihre i18n-Einrichtung abgeschlossen ist, übersetzen Sie Ihre Locale-Dateien mit KI. Bitten Sie Ihren KI-Assistenten in Ihrer IDE, Ihre Ausgangsdatei zu übersetzen, oder verwenden Sie die CLI von i18n Agent in Ihrer CI/CD-Pipeline.
# In your IDE, ask your AI assistant:
> Translate translations/en.json to German, Japanese, and Spanish
translations/de.json created (1.2s)
translations/ja.json created (1.5s)
translations/es.json created (1.1s)
# Or use the CLI in CI/CD:
npx i18n-agent translate translations/en.json --lang de,ja,esÜbersetzungsqualität automatisieren
Häufige Fallstricke
Übersetzungen geben unverarbeitete Schlüssel zurück
YAML-Dateien werden nicht geladen
Abfragen verschachtelter Schlüssel schlagen fehl
Locale-Änderungen treten zwischen Anfragen über
Empfohlene Dateistruktur
my-python-app/
├── translations/
│ ├── en.json # Source language (JSON)
│ ├── de.json # German
│ ├── ja.json # Japanese
│ ├── es.json # Spanish
│ └── pt-BR.json # Brazilian Portuguese
├── app.py # Application entry point
├── i18n_config.py # i18n setup and configuration
├── requirements.txt # pip dependencies
└── pyproject.toml # Project metadata
# Or with YAML files:
my-python-app/
├── translations/
│ ├── en.yml
│ ├── de.yml
│ └── ja.yml
├── app.py
└── ...i18n Agent jetzt testen
Legen Sie Ihre Übersetzungsdatei hier ab
JSON, YAML, PO, XML, CSV, Markdown, Properties
oder zum Auswählen klicken
Zielsprachen
Locale-Fallback mit python-i18n-locale-chain
Fehlt ein Übersetzungsschlüssel in einer regionalen Locale wie es-419, wechselt python-i18n direkt zur Standard-Locale, statt zuerst die übergeordnete Locale es zu prüfen.
pip install python-i18n-locale-chainfrom i18n_locale_chain import configure_chain
configure_chain('{'
'es': ['en', 'ru'],
'pt-BR': ['pt', 'en'],
'zh-Hant-HK': ['zh-Hant', 'zh', 'en'],
'}')
# Usage: t('greeting', locale='es') — falls back through chainIn unserem Leitfaden zu Locale-Fallbacks finden Sie die vollständige Liste unterstützter Frameworks und 75 integrierter Ketten. Learn more →