Çoğul Biçimler Sorunu
Önceki gettext İleti Katalogları Sonraki
Çoğul Biçimler Sorunu
Bir önceki bölümde sorun ile ilgili bir açıklama yapılmıştı. Şimdi burada sorunun nasıl çözümlendiğini açıklayacağız. Dilbilimciler olmaksızın, desteklenen her dil için çoğul biçimlerin neye göre şekillendiği, kaç çoğul biçim olduğu gibi bilgileri elde etmek mümkün olmazdı.
Bu bakımdan, çoğul biçimlerin seçim kurallarını belirlemeleri çevirmenlere bırakılarak çözüme ulaşıldı. Formül her dil için değişiklik gösterdiğinden, bilgiyi kodun içine yerleştirerek bu mümkün oldu (yeni dillerin kullanımını engellememek için hala bazı genişletmeler gerekiyor). Bu konu GNU gettext kılavuzunda daha ayrıntılı bulunabilir. Burada daha az bilgi vermekle yetineceğiz.
Çoğul biçimin seçimi hakkındaki bilgi ileti kataloğunun başlık kısmında (Başlık, boş bir msgid dizgesidir) şuna benzer bir girdi olarak bulunur:
Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;
nplurals değeri bu dilde kaç çoğul biçim olduğunu belirten bir tamsayı olmalıdır. plural ise C dilinin sözdizimine uygun bir ifade olmalıdır. Ancak bu ifadede, negatif sayılar bulunmamalı, sayılar onluk tabanda olmalı ve değişken olarak sadece n bulunmalıdır. Bu ifade ngettext, dngettext veya dcngettextişlevlerinden biri ile değerlendirilecektir. Bu işlevlere aktarılan n değeri bu ifadede yerine konarak değerlendirilir. Sonuç, nplurals değerinden küçük, eşit veya büyük olmalıdır.
Bu noktada bilinen kurallar aşağıda dil ailelerine göre sınıflandırılarak listelenmiştir. Fakat, listeden de görüleceği gibi kurallar bir dil ailesinin tamamına genelleştirilememektedir.[94]
Sadece bir biçim:
Bazı dillerde tekil/çoğul biçim farkı yoktur. Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=1; plural=0;
Bu özellikteki diller:
Uralca/Fin-Uygur Dil Ailesi
Macarca
Asya Dilleri
Japonca, Korece
Altay/Türkçe Dil Ailesi
Türkçe[95]
Biri tekil biçim olmak üzere iki biçim
Yazılımların çoğu İngilizce olduğundan bu biçimi kullanır. Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=2; plural=n != 1;
(Not: Burada sıfır ya da bir ile sonuçlanan mantıksal C ifadesi kullanılmıştır.)
Bu özellikteki diller:
Germen Dil Ailesi
Danca, Felemenkçe, İngilizce, Almanca, Norveççe, İsveççe
Uralca/Fin-Uygur Dil Ailesi
Estonca, Fince
Helen Dil Ailesi
Yunanca
Batı Samî/Kenan Dil Ailesi
İbranice
İtalik/Latin Dil Ailesi
İtalyanca, Portekizce, İspanyolca
Hint-Arî Dil Ailesi
Esperanto
Biri 0 ve 1 için tekil biçim olmak üzere 2 biçim
Dil ailesindeki olağandışı durum. Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=2; plural=n>1;
Bu özellikteki diller:
İtalik/Latin Dil Ailesi
Fransızca, Brezilya Portekizcesi
Sıfır için özel bir durum ile üç biçim
Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;
Bu özellikteki diller:
Baltık Dil Ailesi
Latviya dili
1 ve 2 için özel bir durum ile üç biçim
Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;
Bu özellikteki diller:
Keltçe Dil Ailesi
İrlanda Dili
1[2-9] ile biten sayılar için özel bir durum ile üç biçim
Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=3; \
    plural=n%10==1 && n%100!=11 ? 0 : \
           n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;
Bu özellikteki diller:
Baltık Dil Ailesi
Litvanya dili
1[1-4] ile bitenler hariç; 1, 2, 3, 4 ile biten sayılar için özel bir durum ile üç biçim
Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=3; \
    plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%103 ? 2 : 1;
Bu özellikteki diller:
İslav Dil Ailesi
Hırvatça, Çekçe, Rusça, Ukrayna dili
1, 2, 3, 4 için özel bir durum ile üç biçim
Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=3; \
     plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;
Bu özellikteki diller:
İslav Dil Ailesi
Slovakça
1 için ve 2, 3 veya 4 ile biten bazı sayılar için özel bir durum ile üç biçim
Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=3; \
    plural=n==1 ? 0 : \
           n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
Bu özellikteki diller:
İslav Dil Ailesi
Lehçe
1 için ve 02, 03 veya 04 ile biten tüm sayılar için özel bir durum ile dört biçim
Böyle bir dil için ileti kataloğunun başlığında şu satır bulunur:
Plural-Forms: nplurals=4; \
    plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;
Bu özellikteki diller:
İslav Dil Ailesi
Slovence


[94] Bu listeye eklenmesini istediğiniz bilgileri adresine bekliyoruz.
[95] Çevirenin Notu:
Her ne kadar Türkçe'de miktar belirtirken tekil/çoğul farkı yoksa da bir uygulama nedeniyle tekil ve çoğul biçimler için ayrı iletiler gerekli olmaktadır. Ben (NBB) GNU gettext paketinin ileti kataloğu dosyasının da çevirmeni olduğumdan o dosyadaki bir örneği vererek ne demek istediğimi açıklamaya çalışayım.
#: src/msgfmt.c:1095
#, c-format
msgid "...but some messages have one plural form"
msgid_plural "...but some messages have %lu plural forms"
msgstr[0] "...ama bazı iletiler tek çoğul biçim içeriyor"
msgstr[1] "...ama bazı iletiler %lu çoğul biçim içeriyor"
Burada dikkat ederseniz tekil biçimli ileti içinde miktar %lu belirtimi ile değil, yazıyla, one yazılmış. Bu kılavuzun İngilizce’sinde belirtildiği gibi tek çoğul biçim kullanma şansımız böyle bir örnek karşısında kalmıyor. Çünkü Türkçe iletiye, İngilizce iletide bulunmayan %lu belirtecini koyarsak ve dosyayı msgfmt ile derlemeye çalışırsak bunun bir hata olduğunu görürüz. Böyle bir durumda her iki ileti için birer çeviri olmak zorunda, dolayısıyla bir tekil ve bir çoğul biçim belirtmek zorundayız:
Plural-Forms: nplurals=2; plural=n != 1;
Bunun bize bir zararı yok, en kötü durumda çoğul biçimli iletilerde birbirinin aynı iki ileti olur. Ama dosya böyle özel bir duruma sahip tek bir ileti dahi içermedikçe tekil biçim de kullanılabilir.
Önceki Üst Ana Başlık Sonraki
Gelişkin gettext işlevleri Başlangıç gettext'te karakter kümesi dönüşümü
Bir Linux Kitaplığı Sayfası