This is a list of the plural forms, as used by Gettext PO, that are appropriate to each language.
If your language isn't represented - please add it, or if the information is inaccurate or inadequate in some way - please edit it. The Plural information is usually very hard to find and also in many ways hard for a new localiser to understand. So please see this as a repository that can help localisers. Understanding how the Gettext functions use plural forms will help you design a correct plural form.
Note: Launchpad also has plural information about many languages, please add it here if your language is missing.
Note: Mozilla now also uses plural forms. Although they follow a slightly different form, the underlying equations seem to be the same as those used by Gettext.
Note: Unicode CLDR also collects plural information about many languages.
| ISO | English name | Plurals header in .po files |
|---|---|---|
| af | Afrikaans | nplurals=2; plural=(n != 1) |
| am | Amharic | nplurals = 2; plural=(n > 1) |
| ar | Arabic notes | nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5; |
| arn | Mapudungun | nplurals=2; plural=(n > 1) |
| az | Azerbaijani | nplurals=2; plural=(n != 1) |
| be | Belarusian | nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2) |
| bg | Bulgarian | nplurals=2; plural=(n != 1) |
| bn | Bengali | nplurals=2; plural=(n != 1) |
| bo | Tibetan | nplurals=1; plural=0 |
| bs | Bosnian | nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2) |
| ca | Catalan | nplurals=2; plural=(n != 1) | ||
| cs | Czech | nplurals=3; plural=(n==1) ? 0 : (n>=2 && n< =4) ? 1 : 2 | ||
| csb | Kashubian | nplurals=3; n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 | n%100>=20) ? 1 : 2 | |
| cy | Welsh | nplurals=4; plural= (n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3 | ||
| da | Danish | nplurals=2; plural=(n != 1) |
| de | German | nplurals=2; plural=(n != 1) |
| dz | Dzongkha | nplurals=1; plural=0 |
| el | Greek | nplurals=2; plural=(n != 1) |
| en | English | nplurals=2; plural=(n != 1) |
| eo | Esperanto | nplurals=2; plural=(n != 1) |
| es | Spanish | nplurals=2; plural=(n != 1) |
| es_AR | Argentinean Spanish | nplurals=2; plural=(n != 1) |
| et | Estonian | nplurals=2; plural=(n != 1) |
| eu | Basque | nplurals=2; plural=(n != 1) |
| fa | Persian | nplurals=1; plural=0 |
| fi | Finnish | nplurals=2; plural=(n != 1) |
| fil | Filipino | nplurals=2; plural=n > 1 |
| fo | Faroese | nplurals=2; plural=(n != 1) |
| fr | French | nplurals=2; plural=(n > 1) |
| fur | Friulian | nplurals=2; plural=(n != 1) |
| fy | Frisian | nplurals=2; plural=(n != 1) |
| ga | Irish | nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4 |
| gl | Galician | nplurals=2; plural=(n != 1) |
| gu | Gujarati | nplurals=2; plural=(n != 1) |
| gun | Gun | nplurals=1; plural = (n > 1) |
| ha | Hausa | nplurals=2; plural=(n != 1) |
| he | Hebrew | nplurals=2; plural=(n != 1) |
| hi | Hindi | nplurals=2; plural=(n != 1) |
| hy | Armenian | nplurals=1; plural=0 |
| hr | Croatian | nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2) |
| hu | Hungarian | nplurals=1; plural=0 |
| id | Indonesian | nplurals=1; plural=0 |
| is | Icelandic | nplurals=2; plural=(n != 1) |
| it | Italian | nplurals=2; plural=(n != 1) |
| ja | Japanese | nplurals=1; plural=0 |
| jv | Javanese | nplurals=2; plural=n!=0 |
| ka | Georgian | nplurals=1; plural=0 |
| km | Khmer | nplurals=1; plural=0 |
| kn | Kannada | nplurals=1; plural=0 |
| ko | Korean | nplurals=1; plural=0 |
| ku | Kurdish | nplurals=2; plural=(n!= 1) |
| ky | Kyrgyz | nplurals=1; plural=0 |
| lb | Letzeburgesch | nplurals=2; plural=(n != 1) |
| ln | Lingala | nplurals=2; plural=n>1; |
| lt | Lithuanian | nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 or n%100>=20) ? 1 : 2) |
| lv | Latvian | nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2) |
| mk | Macedonian | nplurals=3; plural= n==1 or n%10==1 ? 0 : 1 |
| mg | Malagasy | nplurals=2; plural=(n > 1) |
| mi | Maori | nplurals=2; plural=(n > 1) |
| ml | Malayalam | nplurals=2; plural=(n != 1) |
| ms | Malay | nplurals=1; plural=0 |
| mt | Maltese | nplurals=4; plural=(n==1 ? 0 : n==0 or ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3) |
| mr | Marathi | nplurals=2; plural=(n != 1) |
| mn | Mongolian | nplurals=2; plural=(n != 1) |
| nah | Nahuatl | nplurals=2; plural=(n != 1) |
| nb | Norwegian Bokmal | nplurals=2; plural=(n != 1) |
| ne | Nepali | nplurals=2; plural=(n != 1) |
| nl | Dutch | nplurals=2; plural=(n != 1) |
| nn | Norwegian Nynorsk | nplurals=2; plural=(n != 1) |
| no | Norwegian (old code) | nplurals=2; plural=(n != 1) |
| nso | Northern Sotho | nplurals=2; plural=(n > 1) |
| or | Oriya | nplurals=2; plural=(n != 1) |
| pa | Punjabi | nplurals=2; plural=(n != 1) |
| pap | Papiamento | nplurals=2; plural=(n != 1) |
| pl | Polish | nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2) |
| pt | Portuguese | nplurals=2; plural=(n != 1) |
| pt_BR | Brazilian Portuguese | nplurals=2; plural=(n > 1) |
| ro | Romanian | nplurals=3; plural=(n==1 ? 0 : (n==0 or (n%100 > 0 && n%100 < 20)) ? 1 : 2); |
| ru | Russian | nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2) |
| sco | Scots | nplurals=2; plural=(n != 1) |
| sk | Slovak | nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2 |
| sl | Slovenian | nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 or n%100==4 ? 2 : 3) |
| so | Somali | nplurals=2; plural=n != 1 |
| sq | Albanian | nplurals=2; plural=(n != 1) |
| sr | Serbian | nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 or n%100>=20) ? 1 : 2 |
| su | Sundanese | nplurals=1; plural=0 |
| sv | Swedish | nplurals=2; plural=(n != 1) |
| ta | Tamil | nplurals=2; plural=(n != 1) |
| te | Telugu | nplurals=2; plural=(n != 1) |
| tg | Tajik | nplurals=2; plural=(n != 1) |
| ti | Tigrinya | nplurals=2; plural=n > 1 |
| th | Thai | nplurals=1; plural=0 |
| tk | Turkmen | nplurals=2; plural=(n != 1) |
| tr | Turkish | nplurals=1; plural=0 |
| uk | Ukrainian | nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2) |
| ur | Urdu | nplurals=2; plural=(n != 1) |
| uz | Uzbek | nplurals=1; plural=0; |
| vi | Vietnamese | nplurals=1; plural=0 |
| wa | Walloon | nplurals=2; plural=(n > 1) |
| zh | Chinese | nplurals=1; plural=0 |
zh means all districts and all variants of Chinese, such as zh_CN, zh_HK, zh_TW and so on.
Note: In rare cases where plural form introduces difference in personal pronoun (such as her vs. they, we vs. I), the plural form is different:
| zh | Chinese | nplurals=2; plural=(n > 1) |