Cinsiyet uyumu
Bazı dillerde fiiller ve sıfatlar, cümlenin konu aldığı kişinin cinsiyetine göre çekimlenir. İngilizcede çoğunlukla böyle olmaz; bu yüzden {username} has been invited olarak yazdığınız ifade İngilizcede tek cümle, İspanyolca, Fransızca veya Rusçada ise iki ya da üç cümledir. Langsys bunu çeviri sırasında, çoğul biçimlerini üretme şekliyle aynı yöntemle halleder ve siz tek bir argüman iletirsiniz.
İşlem hattının ürettiği sonuç
Bir hedef dil uyum gerektirdiğinde Langsys, o yerel ayarın dizesini ihtiyaç duyduğu dallara yeniden yazar — bir ICU select ifadesi. Kaynak ifadeniz hiç değişmez ve dalları asla elle yazmazsınız.
// Your source phrase, unchanged:
"{username} has been invited"
// What the Spanish translation becomes — note invitado / invitada:
"{username_gender, select, male {{username} ha sido invitado} \
female {{username} ha sido invitada} \
other {{username} ha sido invitado/a}}" Benimsemeye değer iki sonuç var. Argümanın adı, çekimlediği değişkenin adına _gender eklenerek verilir — {username} size username_gender adını verir — ve dallar her zaman male, female, other olur. Ayrıca yalnızca ihtiyaç duyan dillerde görünür: biri uygulamayı cinsiyetli bir dilde açana kadar bu fark edilmez.
İletme
Argümanı bildiğiniz her durumda iletin; okuyucu doğru çekimlenmiş cümleyi görsün:
// The argument is named after the variable it inflects, + _gender.
// Branches are always male / female / other.
t('{username} has been invited', 'Team', {
username: user.name,
username_gender: user.gender ?? 'other',
}); Cinsiyeti bilmiyor musunuz? 'other' değerini açıkça iletin; bu, nötr daldır. Eksik bir argümanın ne olarak görüntüleneceği SDK'ya göre değişir; her SDK sayfası bunu belirtir. Ayrıca her SDK sayfası çağrıyı kendi deyimiyle gösterir.
Hangi ifadelerde gerekli?
Bunu kendi kodunuzdan anlayamazsınız ve bu doğaldır: argüman, çeviri sırasında hedef dil bazında eklenir; dolayısıyla kaynak ifadede ya da kod tabanınızda buna dair bir ipucu bulunmaz. Öğrenmenin üç yolu var.
Kataloğu okuyun. Uygulamanızın çektiği çeviriler, yayına alınmış dizelerin kendisi olduğundan yanıt zaten istemcide bulunuyor. Desteklediğiniz bir dil için kataloğu çekin — her SDK bunu sunar — ve , select, içeren girdileri arayın. Bu size tam ifadeleri ve argüman adlarını verir; ayrıca yayınladığınız her dil için CI'da çalıştırmak üzere yeterince ucuzdur.
// The catalog your app fetches IS the promoted strings — grep it.
const wanting = Object.entries(catalog)
.filter(([, translation]) => translation.includes(', select,'))
.map(([phrase]) => phrase);
// → every phrase (and, from the string, every argument) this locale needs Hata ayıklamayı açın (JavaScript SDK'ları). Başlatma yapılandırmanızda debug: true geçirin ve uygulamayı cinsiyetli bir dil ayarında gezin: SDK, çevirisi sizin sağlamadığınız bir argüman gerektiren her ifade için argümanın adını belirterek bir Langsys Warning kaydeder. Her ifade için dil ayarı başına yalnızca bir kez kaydedilir ve üretimde sessizdir. Bir püf noktası: içerik bloğu ve ifade bileşenlerinde, önlem olarak geçirilen bir _gender da eşleşmeyen parametre olarak bildirilir, çünkü bu denetim kaynak metniniz üzerinde çalışır — orada select hiç görünmez.
Emin değilseniz iletin. Dizenin sahip olmadığı bir argüman için verilen değer oluşturma sırasında yok sayılır; bu yüzden kişiyi ifade eden her değişken için _gender göndermek güvenlidir ve henüz incelemediğiniz yerel ayarları da kapsar.
İfade başına tek değişken. Uyumu yalnızca tek bir değişken belirleyebilir. İkisinin birden etkili olduğu bir metin (bir sayı ve bir cinsiyet) iç içe ICU'ya dönüştürülmez, olduğu gibi bırakılır; dolayısıyla tek bir düz cümle olarak çevrilir.