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
- 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:
- 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