
Python i18n: Kumpletong Gabay sa Localization
I-setup ang python-i18n gamit ang mga JSON o YAML translation file, hawakan ang mga placeholder at plural, at pagkatapos ay i-automate ang mga pagsasalin gamit ang AI.
I-install ang python-i18n
Magaan na internationalization library para sa Python ang python-i18n. Sinusuportahan nito ang mga JSON at YAML translation file, mga nested key, placeholder interpolation, at pluralization out of the box.
pip install python-i18n# To use YAML translation files instead of JSON:
pip install python-i18n[YAML]I-configure ang Mga Pagsasalin
Itakda ang file format, idagdag ang mga path ng translation file, at i-configure ang inyong default at fallback locale. I-import ang configuration na ito sa entry point ng inyong application bago tumawag ng anumang translation.
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)Gumawa ng Mga Translation File
Gumawa ng isang file bawat wika sa JSON o YAML format. Gumamit ng mga nested key para ayusin ang mga string ayon sa feature o page. Panatilihin ang source language (karaniwang English) bilang nag-iisang source of truth.
// 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"
}
}Gamitin ang Mga Pagsasalin sa Inyong Code
Tawagin ang i18n.t() gamit ang dot-separated na key path para hanapin ang mga naisaling string. Maaari ninyong i-override ang locale sa bawat tawag nang hindi binabago ang global setting.
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"Mga Placeholder at Pluralization
Sinusuportahan ng python-i18n ang placeholder interpolation gamit ang %{name} syntax at basic pluralization gamit ang 'zero', 'one', at 'many' na sub-key. I-pass ang mga keyword argument sa i18n.t() para sa parehong feature.
# 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"Pagpapalit ng Locale sa Runtime
Palitan ang active locale nang global gamit ang i18n.set('locale', code) o i-override sa bawat tawag gamit ang locale keyword argument. Sa mga web framework, tuklasin ang preferred language ng user mula sa request at itakda ang locale bago mag-render.
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")Smart Locale Fallback gamit ang python-i18n-locale-chain
Bilang default, iisang fallback locale lang ang sinusuportahan ng python-i18n. Kapag walang pt-BR translation ang pt-BR user, dumidiretso ang library sa English fallback at hindi pinapansin ang maayos na pt-PT translation. Inaayos ito ng python-i18n-locale-chain gamit ang mga configurable na fallback chain na sumasaklaw sa 75 locale variant.
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()I-automate ang Mga Salin
Kapag kumpleto na ang i18n setup ninyo, isalin ang inyong mga locale file gamit ang AI. Sa inyong IDE, hilingin sa AI assistant na isalin ang source file ninyo, o gamitin ang i18n Agent CLI sa inyong 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,esI-automate ang Kalidad ng Pagsasalin
Mga Karaniwang Pagkakamali
Nagbabalik ang Mga Salin ng Mga Raw Key
Hindi Naglo-load ang Mga YAML File
Pumapalya ang Nested Key Lookup
Tumatagas ang Pagbabago ng Locale sa Ibang Request
Inirerekomendang Istruktura ng File
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
└── ...Subukan ang i18n Agent Ngayon
I-drop dito ang inyong translation file
JSON, YAML, PO, XML, CSV, Markdown, Properties
o i-click para mag-browse
Mga target language
Locale Fallback gamit ang python-i18n-locale-chain
Kapag nawawala ang translation key sa isang regional locale tulad ng es-419, dumidiretso ang python-i18n sa default locale sa halip na i-check muna ang parent locale na 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'],
'}')
# Paggamit: t('greeting', locale='es') — magfa-fallback sa buong chainTingnan ang aming Locale Fallback Guide para sa buong listahan ng mga sinusuportahang framework at 75 built-in chain. Learn more →