
Python i18n: guia completa de localització
Configuri python-i18n amb fitxers de traducció JSON o YAML, gestioni els marcadors de posició i els plurals i, després, automatitzi les traduccions amb IA.
Instal·lar python-i18n
python-i18n és una biblioteca lleugera d'internacionalització per a Python. Admet de sèrie fitxers de traducció JSON i YAML, claus imbricades, interpolació de marcadors de posició i pluralització.
pip install python-i18n# To use YAML translation files instead of JSON:
pip install python-i18n[YAML]Configurar les traduccions
Defineixi el format dels fitxers, afegeixi els camins dels fitxers de traducció i configuri la configuració regional predeterminada i l’alternativa. Importi aquesta configuració al punt d'entrada de l'aplicació abans de fer cap crida de traducció.
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)Crear els fitxers de traducció
Creï un fitxer per llengua en format JSON o YAML. Faci servir claus imbricades per organitzar les cadenes per funcionalitat o pàgina. Mantingui la llengua d'origen, habitualment l'anglès, com a única font de referència.
// 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"
}
}Utilitzar les traduccions al codi
Cridi i18n.t() amb un camí de claus separades per punts per cercar cadenes traduïdes. Pot substituir la configuració regional en cada crida sense canviar la configuració global.
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"Marcadors de posició i pluralització
python-i18n admet la interpolació de marcadors de posició amb la sintaxi %{name} i la pluralització bàsica mitjançant les subclaus 'zero', 'one' i 'many'. Passi arguments amb nom a i18n.t() per utilitzar totes dues funcions.
# 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"Canviar la configuració regional en temps d'execució
Canviï globalment la configuració regional activa amb i18n.set('locale', code) o substitueixi-la en cada crida mitjançant l'argument amb nom locale. Als entorns de treball web, detecti la llengua preferida de l'usuari a partir de la sol·licitud i defineixi la configuració regional abans de renderitzar.
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")Selecció intel·ligent de configuracions regionals alternatives amb python-i18n-locale-chain
Per defecte, python-i18n només admet una configuració regional alternativa. Quan no hi ha traduccions pt-BR per a un usuari pt-BR, la biblioteca passa directament a l'anglès alternatiu i ignora les traduccions pt-PT perfectament vàlides. python-i18n-locale-chain ho resol amb cadenes alternatives configurables que cobreixen 75 variants de configuració regional.
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()Automatitzar les traduccions
Un cop completada la configuració d'i18n, tradueixi els fitxers de configuració regional mitjançant IA. A l'IDE, demani a l'assistent d'IA que tradueixi el fitxer d'origen o utilitzi la CLI d'i18n Agent a la canalització de CI/CD.
# 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,esAutomatitzar la qualitat de les traduccions
Errors habituals
Les traduccions retornen les claus sense processar
Els fitxers YAML no es carreguen
Les cerques de claus imbricades fallen
Els canvis de configuració regional es filtren entre sol·licituds
Estructura de fitxers recomanada
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
└── ...Provar i18n Agent ara
Arrossegar aquí el fitxer de traducció
JSON, YAML, PO, XML, CSV, Markdown, Properties
o fer clic per explorar
Idiomes de destinació
Configuracions regionals alternatives amb python-i18n-locale-chain
Quan falta una clau de traducció en una configuració regional com es-419, python-i18n passa directament a la configuració regional predeterminada en lloc de comprovar primer la configuració regional superior es.
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 chainConsulti la guia de configuracions regionals de reserva per veure la llista completa de frameworks compatibles i les 75 cadenes integrades. Learn more →