Modlama:Mod Rehberi/API'ler/Çeviri

< Modlama:Mod Rehberi/API'ler
Peaw (mesaj | katkılar) tarafından oluşturulmuş 10.28, 15 Eylül 2024 tarihli sürüm (Created)
(fark) ← Önceki hâli | Güncel sürüm (fark) | Sonraki hâli → (fark)

Modlama:İndeks

Ç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
Bu kısımdakiler, SMAPI'in gelecek 4.1.0 sürümü için belirtilmiştir ve bilgiler değişebilir.
İsteğe bağlı olarak, büyük modlarda her dil için bir klasör ve her birinin içinde farklı sayıda .json dosyaları bulundurulabilir. Ancak diller arasındaki senkronizeyi zorlaştırabildiğinden ve çeviri araçları tarafından daha az desteklendiğinden çoğu mod için önerilmez. Örnek:
Modunuz/
   i18n/
      default/
         dialogue.json
         events.json
      fr/
         dialogue.json
         events.json
   manifest.json
   Modunuz.dll
Hem 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.