Modlama:Mod Rehberi/API'ler/Çeviri
- Başlangıç Kılavuzu
- Oyunun Temelleri
- Test ve Sorun Giderme
- Yayınlama
- API Referansı
- Basit SMAPI API'leri:
- Gelişmiş SMAPI API'leri:
- Belirli Rehberler
Çeviri API'si ile modunuzun çevirileri yapılabilir ve SMAPI de oyuncunun oyun diline bağlı olarak modun dilini değiştirebilir.
Genel Bakış
SMAPI, mod klasörünüzdeki dosyalardan çevirileri okur. Oyuncunun kullandığı oyun dili, modda desteklenmiyorsa SMAPI otomatik olarak İngilizce (default.json) üzerinden çalıştırır. Çeviriler, basit bir metin veya değişen değerler (tokenler) barındıran metinler olabilir.
i18n Klasörü
Dosya Yapısı
SMAPI, mod klasörünüzün içindeki i18n klasöründen JSON dosyalarındaki çevirileri okur:
Modunuz/ i18n/ default.json es.json fr.json manifest.json Modunuz.dll
İstenilen çeviri bulunmuyorsa default.json dosyasındaki varsayılan metin gösterilir. Her dil için ayrı bir dosya oluşturulabilir. Her çeviri dosyasının ismi şunlardan biri olur:
Dil | Dosya Adı |
---|---|
Çince | zh.json |
Fransızca | fr.json |
Almanca | de.json |
Macarca | hu.json |
İtalyanca | it.json |
Japonca | ja.json |
Korece | ko.json |
Portekizce | pt.json |
Rusça | ru.json |
İspanyolca | es.json |
Türkçe | tr.json |
Modunuz/ i18n/ default/ dialogue.json events.json fr/ dialogue.json events.json manifest.json Modunuz.dllHem klasör hem de dosya kullanamazsınız. Örneğin tr.json dosyanız zaten varsa bunun yanında tr/dialogue.json şeklinde başka bir klasör ve içinde çeviriler barındıramazsınız.
Özel diller için dosya adında LanguageCode (dil kodu) değerini kullanmanız gerekir.
Dosya Formatı
Her .json dosyasında bir key ve normal metin değeri bulunmalıdır. Keyler; büyük küçük harf duyarlıdır ve sayı, alt çizgi, çizgi, nokta karakterlerini barındırabilir. Çevirileri düzenli tutmak ve çevirmenlere bilgi sağlamak amacıyla JavaScript yorumları eklenilebilir. Örnek:
{
// örnek çeviriler
"item-type.label": "Öge türü",
"item-type.fruit-tree": "{{fruitName}} ağacı",
}
Yukarıdaki örnekte {{fruitName}}
bir tokendir. İsminde yalnızca karakterler olacak şekilde istenilen kadar token koyulabilir ve kod ile yerlerine başka bir değer koyulabilir (bkz. çeviri okuma).
Çevirmenler İçin İpuçları
- Oyunda bozuk semboller olmaması için i18n dosyaları UTF-8 kodlaması ile kaydedileblir.
- SMAPI konsoluna
reload_i18n
komutunu girerek oyundan çıkmaya gerek kalmadan çeviriler güncellenebilir. (Mod, çeviriyi dahili depolamışsa güncellenmeyebilir.)
Çeviri Okuma
Dahili API
i18n dosyalarınız kurulduğunda mevcut yerelden çeviriler okunabilir:
// basit bir çeviriyi okuma
string label = helper.Translation.Get("item-type.label");
// token barındıran bir çeviriyi okuma (bir nesne, sözlük veya model kabul eder)
string text = helper.Translation.Get("item-type.fruit-tree", new { fruitName = "apple" });
helper.Translate(…) metodu ile akıcı bir arayüz döndürülür — çeviriyi özelleştirmek için dönüş değeri üzerinde metotları çağırabilirsiniz (Mevcut metotların bir açıklaması için IntelliSense'e göz atın). Metni almak için bir string'e atamanız yeterlidir:
// use fluent chain
string text = helper.Translation.Get(key).Tokens(tokens).Tokens(moreTokens).Default("eksik çeviri?");
Gelişmiş API
Dahili API'de eşzamanlı doğrulama yoktur. Örneğin fruitName
argümanını belirlerseniz ancak çeviride {{fruit}}
kullanılmışsa bunu, oyunda bu mesajı alıp bozuk mesajı görene dek bozuk olduğunu bilemezsiniz. Çoğu mod için bir sorun çıkarmasa da birçok arayüz arasında yüzlerce çeviri barındıran büyük modlar için bir sorun olabilir.
İsteğe bağlı, SMAPI mod çeviri sınıfı yapımı paketi ile çevirileri aşağıdaki gibi okuyabilmeyi sağlayan bir gelişmiş sınıf üretilebilir:
string label = I18n.ItemType_Label();
string text = I18n.ItemType_FruitTree(fruitName: "apple");
Böylece bir çeviri bozuksa derlenmediğinden anında öğrenmiş olacaksınız.
Ayrıca Bakınız
Çeviriler için event formatlamak için LINQ script.