
Python i18n: Kapsamlı yerelleştirme rehberi
python-i18n'i JSON veya YAML çeviri dosyalarıyla ayarlayın, yer tutucuları ve çoğulları yönetin, ardından çevirileri yapay zeka ile otomatikleştirin.
python-i18n'i yükleyin
python-i18n, Python için hafif bir uluslararasılaştırma kütüphanesidir. JSON ve YAML çeviri dosyalarını, iç içe anahtarları, yer tutucu eklemeyi ve çoğullaştırmayı kullanıma hazır olarak destekler.
pip install python-i18n# To use YAML translation files instead of JSON:
pip install python-i18n[YAML]Çevirileri yapılandırın
Dosya biçimini belirleyin, çeviri dosyası yollarını ekleyin ve varsayılan yerel ayarınızla geri dönüş yerel ayarınızı yapılandırın. Bu yapılandırmayı herhangi bir çeviri çağrısından önce uygulamanızın giriş noktasında içe aktarın.
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)Çeviri dosyalarını oluşturun
JSON veya YAML biçiminde her dil için bir dosya oluşturun. Dizeleri özelliğe veya sayfaya göre düzenlemek için iç içe anahtarlar kullanın. Kaynak dilinizi (genellikle İngilizce) tek doğruluk kaynağı olarak koruyun.
// 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"
}
}Çevirileri kodunuzda kullanın
Çevrilmiş dizeleri bulmak için i18n.t() işlevini noktalarla ayrılmış bir anahtar yoluyla çağırın. Genel ayarı değiştirmeden her çağrı için yerel ayarı geçersiz kılabilirsiniz.
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"Yer tutucuları ve çoğullaştırmayı kullanın
python-i18n, %{name} söz dizimiyle yer tutucu eklemeyi ve 'zero', 'one' ve 'many' alt anahtarlarını kullanan temel çoğullaştırmayı destekler. Her iki özellik için de i18n.t() işlevine anahtar sözcük bağımsız değişkenleri aktarın.
# 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"Çalışma zamanında yerel ayarı değiştirin
Etkin yerel ayarı i18n.set('locale', code) ile genel olarak değiştirin veya locale anahtar sözcük bağımsız değişkeniyle her çağrı için geçersiz kılın. Web çerçevelerinde kullanıcının tercih ettiği dili istekten algılayın ve içeriği oluşturmadan önce yerel ayarı belirleyin.
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")python-i18n-locale-chain ile akıllı yerel ayar geri dönüşü
python-i18n varsayılan olarak yalnızca tek bir geri dönüş yerel ayarını destekler. pt-BR kullanıcısı için pt-BR çevirileri bulunmadığında kütüphane, kullanılabilir pt-PT çevirilerini yok sayarak doğrudan İngilizce geri dönüşe geçer. python-i18n-locale-chain, 75 yerel ayar çeşidini kapsayan yapılandırılabilir geri dönüş zincirleriyle bu sorunu giderir.
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()Çevirileri otomatikleştirin
i18n kurulumunuzu tamamladıktan sonra yerel ayar dosyalarınızı yapay zeka kullanarak çevirin. IDE'nizde yapay zeka yardımcınızdan kaynak dosyanızı çevirmesini isteyin veya CI/CD işlem hattınızda i18n Agent CLI'ı kullanın.
# 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Çeviri kalitesini otomatikleştirin
Yaygın sorunlar
Çeviriler işlenmemiş anahtarları döndürüyor
YAML dosyaları yüklenmiyor
İç içe anahtar aramaları başarısız oluyor
Yerel ayar değişiklikleri istekler arasında sızıyor
Önerilen dosya yapısı
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'ı şimdi deneyin
Çeviri dosyanızı buraya bırakın
JSON, YAML, PO, XML, CSV, Markdown, Properties
veya göz atmak için tıklayın
Hedef diller
python-i18n-locale-chain ile yerel ayar geri dönüşü
es-419 gibi bölgesel bir yerel ayarda çeviri anahtarı eksik olduğunda python-i18n, önce üst yerel ayar es'i denetlemek yerine doğrudan varsayılan yerel ayara geçer.
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'],
'}')
# Kullanım: t('greeting', locale='es') — zincir boyunca geri dönüş yaparDesteklenen çerçevelerin tam listesi ve yerleşik 75 zincir için Yerel Ayar Geri Dönüşü Rehberimize bakın. Learn more →