
Python i18n: celovit vodnik za lokalizacijo
Nastavite python-i18n s prevodnimi datotekami JSON ali YAML, obravnavajte označbe mest in množinske oblike ter nato avtomatizirajte prevajanje z umetno inteligenco.
Namestite python-i18n
python-i18n je lahka knjižnica za internacionalizacijo Pythona. Že takoj podpira prevodne datoteke JSON in YAML, ugnezdene ključe, vstavljanje označb mest ter množinske oblike.
pip install python-i18n# To use YAML translation files instead of JSON:
pip install python-i18n[YAML]Konfigurirajte prevode
Nastavite obliko datotek, dodajte poti do prevodnih datotek ter konfigurirajte privzete in nadomestne področne nastavitve. To konfiguracijo uvozite na vstopni točki aplikacije pred vsemi klici prevodov.
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)Ustvarite prevodne datoteke
Za vsak jezik ustvarite po eno datoteko v obliki JSON ali YAML. Nize razvrstite po funkcijah ali straneh z ugnezdenimi ključi. Izvorni jezik (običajno angleščina) naj ostane edini zanesljivi vir.
// 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"
}
}Uporabite prevode v kodi
Pokličite i18n.t() s potjo ključa, ločeno s pikami, da poiščete prevedene nize. Področne nastavitve lahko preglasite za posamezen klic, ne da bi spremenili splošno nastavitev.
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"Označbe mest in množinske oblike
python-i18n podpira vstavljanje označb mest s skladnjo %{name} in osnovne množinske oblike s podključi 'zero', 'one' in 'many'. Za obe funkciji posredujte imenovane argumente funkciji 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"Preklapljanje področnih nastavitev med izvajanjem
Dejavne področne nastavitve splošno preklopite z i18n.set('locale', code), za posamezen klic pa jih preglasite z imenovanim argumentom locale. V spletnih ogrodjih iz zahteve zaznajte uporabnikov prednostni jezik in pred izrisom nastavite področne nastavitve.
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")Pametno nadomeščanje področnih nastavitev s python-i18n-locale-chain
python-i18n privzeto podpira le ene nadomestne področne nastavitve. Če za uporabnika pt-BR ni prevodov pt-BR, knjižnica preskoči naravnost na nadomestno angleščino in prezre povsem ustrezne prevode pt-PT. python-i18n-locale-chain to odpravi z nastavljivimi nadomestnimi verigami, ki zajemajo 75 različic področnih nastavitev.
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()Avtomatizirajte prevajanje
Ko je nastavitev i18n dokončana, prevedite datoteke področnih nastavitev z umetno inteligenco. V svojem razvojnem okolju prosite pomočnika z umetno inteligenco, naj prevede izvorno datoteko, ali pa v cevovodu CI/CD uporabite vmesnik ukazne vrstice i18n Agent.
# 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,esAvtomatizirajte zagotavljanje kakovosti prevodov
Pogoste težave
Prevodi vračajo neobdelane ključe
Datoteke YAML se ne naložijo
Iskanje ugnezdenih ključev ne uspe
Spremembe področnih nastavitev se prenašajo med zahtevami
Priporočena struktura datotek
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
└── ...Preizkusite i18n Agent zdaj
Spustite prevajalsko datoteko sem
JSON, YAML, PO, XML, CSV, Markdown, Properties
ali kliknite za izbiro
Ciljni jeziki
Nadomeščanje področnih nastavitev s python-i18n-locale-chain
Ko v regionalnih področnih nastavitvah, kot je es-419, manjka prevodni ključ, python-i18n preskoči naravnost na privzete področne nastavitve, namesto da bi najprej preveril nadrejene področne nastavitve 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'],
'}')
# Uporaba: t('greeting', locale='es') — uporabi nadomestne vrednosti po verigiCeloten seznam podprtih ogrodij in 75 vgrajenih verig najdete v našem vodniku za nadomeščanje področnih nastavitev. Learn more →