Règles de pluriel par langue : le guide CLDR complet

Un tableau de référence des catégories de pluriel CLDR pour 163 langues, plus pourquoi one ne veut pas dire 1 et comment chaque framework i18n attend que vous écriviez les règles.

Chaque bibliothèque d’internationalisation finit par vous poser la même question : combien de versions de cette phrase la langue a-t-elle besoin ? Pour l’anglais, la réponse est deux, et il est tentant de généraliser à partir de là. C’est de cette généralisation que viennent les bugs de pluriel.

Ceci est un guide de référence. Le tableau ci-dessous liste les catégories de pluriel pour les 163 langues définies dans Unicode CLDR version 48 — les mêmes données que WebTranslateIt utilise pour décider combien de champs de traduction afficher pour un segment au pluriel. Avant le tableau, les deux idées dont vous avez besoin pour bien le lire.

Les catégories de pluriel sont des noms pour des ensembles de nombres

CLDR ne définit pas « le singulier » et « le pluriel ». Il définit jusqu’à six catégorieszero, one, two, few, many, other — et chaque langue décide quels nombres tombent dans quelle catégorie. Les noms sont des étiquettes, pas des quantités.

Concrètement :

Langue La catégorie one couvre La catégorie other couvre
Anglais 1 0, 2, 3, … et toutes les décimales
Français 0 et 1 2, 3, …
Russe 1, 21, 31, 41, 51 … (mais pas 11) les décimales, plus ce que few et many ne prennent pas

Donc if count == 1 est faux en français, parce que le français dit « 0 jour » et « 1 jour » partagent une forme. Et c’est encore plus faux en russe, où 21 prend la même forme que 1, et où 11 ne la prend pas.

La règle à retenir : ne faites jamais correspondre vous-même une catégorie à un nombre. Demandez aux règles CLDR la catégorie, puis cherchez la chaîne pour cette catégorie. Toute bibliothèque i18n mature fait cela pour vous, ce qui est exactement pourquoi vous devriez lui confier le nombre plutôt que de faire le branchement dans le code applicatif.

La seule exception à connaître, c’est que les catégories couvrent aussi les décimales, et souvent différemment. Le tchèque place 1.5 dans many et l’entier 5 dans other — le fait même d’être décimal change la forme.

other est toujours requis, tout le reste ne l’est pas

Chaque langue définit other. La plupart ne définissent rien d’autre. Un fichier de traduction pour une langue doit contenir exactement les catégories que CLDR liste pour elle : un fichier polonais avec seulement one/other manque deux formes, et un fichier japonais avec one/other a une forme de trop, ce qui est inoffensif mais révèle que le fichier a été généré à partir d’un modèle anglais sans consulter les règles.

C’est aussi pourquoi la même chaîne source produit un nombre différent de champs de saisie selon la langue. Deux champs anglais deviennent quatre champs polonais et six champs arabes. Ce n’est pas l’outil qui est maladroit ; c’est la langue.

Cardinal contre ordinal

Tout ce qui précède décrit les pluriels cardinaux — un fichier, deux fichiers, cinq fichiers. CLDR définit séparément des règles ordinales pour premier, deuxième, troisième, qui ont leurs propres catégories et leurs propres ensembles par langue. L’anglais en est l’illustration la plus claire : les cardinaux ont besoin de deux formes, les ordinaux de quatre (1st, 2nd, 3rd, 4th). Si vous formatez des positions, des rangs ou des dates en ordinal, vous avez besoin des règles ordinales, et de selectordinal dans ICU MessageFormat plutôt que de plural. Le tableau de ce guide couvre les cardinaux.

Comment les règles s’écrivent selon le framework

Les catégories sont universelles ; la notation ne l’est pas.

Framework Notation Exemple
GNU gettext (.po) un nombre nplurals plus une expression C sélectionnant un index `nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 \
Rails / Ruby I18n (YAML) clés imbriquées nommées d’après les catégories pl: { messages: { one: …, few: …, many: …, other: … } }
ICU MessageFormat {count, plural, one {…} other {…}} fonctionne dans ICU4J, ICU4C, FormatJS, messageformat.js
.stringsdict iOS plist XML avec NSStringPluralRuleType et une clé par catégorie <key>few</key><string>%d wiadomości</string>
strings.xml Android <plurals> avec <item quantity="few"> les quantités sont les noms de catégories CLDR
i18next suffixes de clé _one, _few, _many, _other (v4+) item_few, item_many
ResourceBundle Java aucune prise en charge native — utilisez MessageFormat d’ICU

Notez le piège dans gettext : son expression plural= renvoie un index, pas un nom de catégorie. L’index 0 est la forme vers laquelle l’expression le fait correspondre, ce qui est conventionnellement mais pas nécessairement la forme one. Quand vous convertissez un fichier .po vers un format basé sur des catégories, vous devez évaluer l’expression plutôt que supposer que la position 0 signifie one.

Règles de pluriel par langue

CLDR v48, catégories de pluriel cardinales, 163 langues. Les nombres indiqués sont les valeurs qui sélectionnent chaque catégorie — une lecture compacte des règles sous-jacentes plutôt que les règles elles-mêmes.

Langue Code Formes Catégories, et les nombres qui les sélectionnent
Acholi ach 1 other 0-999, 1.2…
Afrikaans af 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Akan ak 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Albanais sq 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Amharique am 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Arabe ar 6 zero 0 · one 1 · two 2 · few 3-10, 103-110, 203-210… · many 11-99, 111-199, 211-299… · other 100-102, 200-202, 300-302… 0.2, 1.07, 2.94, 3.81, 11.68, 100.55…
Aragonais an 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Arménien hy, hye 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Assamais as 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Asturien ast 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Azéri az 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Baloutchi bal 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Bambara bm 1 other 0-999, 1.2…
Basque eu 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Biélorusse be 4 one 1, 21, 31, 41, 51, 61… · few 2-4, 22-24, 32-34… · many 0, 5-20, 25-30, 35-40… · other 1.2, 2.07, 5.94…
Bemba bem 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Bengali bn 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Bihari bh 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Bosnien bs 4 one 1, 21, 31, 41, 51, 61… · few 2-4, 22-24, 32-34… · many 0, 5-20, 25-30, 35-40… · other 1.2, 2.07, 5.94…
Breton br 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Bulgare bg 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Birman my 1 other 0-999, 1.2…
Catalan ca 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Khmer central km 1 other 0-999, 1.2…
Cherokee chr 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Chinois zh 1 other 0-999, 1.2…
Tchouvache cv 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Cornique kw 6 zero 0 · one 1 · two 2, 22, 42, 62, 82, 102… · few 3, 23, 43, 63, 83… · many 4, 24, 44, 64, 84… · other 5-21, 25-41, 45-61…
Turc de Crimée crh 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Croate hr 4 one 1, 21, 31, 41, 51, 61… · few 2-4, 22-24, 32-34… · many 0, 5-20, 25-30, 35-40… · other 1.2, 2.07, 5.94…
Tchèque cs 4 one 1 · few 2-4 · many 0.0-1.5, 10.0, 100.0… (decimals) · other 0, 5-20, 25-30…
Danois da 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Néerlandais nl 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Dzongkha dz 1 other 0-999, 1.2…
Anglais en 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Espéranto eo 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Estonien et 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Féroïen fo 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Filipino fil 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Finnois fi 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Français fr 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Frioulan fur 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Peul ff 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Gaélique écossais gd 4 one 1, 11 · two 2, 12 · few 3-10, 13-19 · other 0, 20-99, 100, 1000…, 0.5, 1.7…
Galicien gl 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Géorgien ka 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Allemand de 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Grec el 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Gujarati gu 2 one 1 · other 0, 2-999…, 1.2, 2.07…
guw guw 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Hakha chin cnh 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Haoussa ha 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Hébreu he 3 one 1 · two 2 · other 0, 3-999…, 0.5, 1.0, 2.5…
Hindi hi 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Hongrois hu 2 one 1 · other 0, 2-999…, 1.2, 2.07…
hyw hyw 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Islandais is 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Ido io 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Igbo ig 1 other 0-999, 1.2…
Sami d’Inari smn 3 one 1 · two 2 · other 0, 3-999…, 1.2, 2.07, 3.94…
Indonésien id 1 other 0-999, 1.2…
Irlandais ga 3 one 1 · two 2 · other 0, 3-999…, 1.2, 2.07, 3.94…
Italien it 2 one 1 · other 0, 2-999…, 1.2, 2.07…
iw iw 3 one 1 · two 2 · other 0, 3-999…, 0.5, 1.0, 2.5…
Japonais ja 1 other 0-999, 1.2…
Javanais jv 1 other 0-999, 1.2…
Kabyle kab 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Kannada kn 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Kazakh kk 2 one 1 · other 0, 2-999…, 1.2, 2.07…
kde kde 1 other 0-999, 1.2…
kea kea 1 other 0-999, 1.2…
Kinyarwanda rw 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Kirghize ky 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Konkani kok 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Coréen ko 1 other 0-999, 1.2…
ksh ksh 3 zero 0 · one 1 · other 2-999…, 0.5, 1.2…
Kurde ku 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Letton lv 3 zero 0 · one 1, 21, 31, 41, 51, 61, … · other 2-20, 22-30, 32-40… 0.2, 1.07, 2.94…
lij lij 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Limbourgeois li 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Lingala ln 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Lituanien lt 3 one 1, 21, 31, 41, 51, 61 · few 2-9, 22-29, 32-39… · other 0, 10-20, 30, 40, 50…, 1.2, 2.07, 10.94…
lkt lkt 1 other 0-999, 1.2…
lld lld 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Bas allemand nds 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Sami de Lule smj 3 one 1 · two 2 · other 0, 3-999…, 1.2, 2.07, 3.94…
Luxembourgeois lb 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Macédonien mk 2 one 1, 21, 31, 41, 51, 61… · other 0, 2-20, 22-30, 32-40…, 1.2, 2.07…
Maithili mai 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Malgache mg 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Malais ms 1 other 0-999, 1.2…
Malayalam ml 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Maltais mt 4 one 1 · few 0, 2-10, 102-110, 202-210… · many 11-19, 111-119, 211-219… · other 20-101, 120-201, 220-301…, 1.2, 2.07, 11.94, 20.81…
Mannois gv 5 one 1, 11, 21, 31… · two 2, 12, 22, 32… · few 0, 20, 40, 60, 80, 100… · many 0.5, 1.2, 2.7… (decimals) · other 3-10, 13-19, 23-29…
Maori mi 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Marathi mr 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Mongol mn 2 one 1 · other 0, 2-999…, 1.2, 2.07…
N’ko nqo 1 other 0-999, 1.2…
Langues nahuatl nah 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Népalais ne 2 one 1 · other 0, 2-999…, 1.2, 2.07…
no no 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Sami du Nord se 3 one 1 · two 2 · other 0, 3-999…, 1.2, 2.07, 3.94…
Norvégien Bokmål nb 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Norvégien Nynorsk nn 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Occitan (après 1500) oc 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Oriya or 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Oromo om 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Pendjabi pa 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Papiamento pap 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Pedi nso 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Persan fa 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Polonais pl 4 one 1 · few 2-4, 22-24, 32-34… · many 0, 5-21, 25-31, 35-41 · other 1.2, 2.07, 5.94…
Portugais pt 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Pachto ps 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Roumain ro 3 one 1 · few 0, 2-19, 101-119, 201-219… · other 20-100, 120-200, 220-300…, 1.2, 2.07, 20.94…
Romanche rm 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Russe ru 4 one 1, 21, 31, 41, 51, 61… · few 2-4, 22-24, 32-34… · many 0, 5-20, 25-30, 35-40… · other 1.2, 2.07, 5.94…
Langues sames (autres) smi 3 one 1 · two 2 · other 0, 3-999…, 1.2, 2.07, 3.94…
Sango sg 1 other 0-999, 1.2…
Santali sat 3 one 1 · two 2 · other 0, 3-999…, 1.2, 2.07, 3.94…
Sarde sc 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Serbe sr 4 one 1, 21, 31, 41, 51, 61… · few 2-4, 22-24, 32-34… · many 0, 5-20, 25-30, 35-40… · other 1.2, 2.07, 5.94…
Serbo-croate sh 4 one 1, 21, 31, 41, 51, 61… · few 2-4, 22-24, 32-34… · many 0, 5-20, 25-30, 35-40… · other 1.2, 2.07, 5.94…
ses ses 1 other 0-999, 1.2…
shi shi 3 one 0, 1 · few 2-10 · other 11-999…, 0.5, 1.2…
Sicilien scn 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Cingalais si 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Sami skolt sms 3 one 1 · two 2 · other 0, 3-999…, 1.2, 2.07, 3.94…
Slovaque sk 4 one 1 · few 2-4 · many 0.0-1.5, 10.0, 100.0… (decimals) · other 0, 5-20, 25-30…
Slovène sl 4 one 1, 101, 201, 301, 401, 501… · two 2, 102, 202, 302, 402, 502… · few 3, 4, 103, 104, 203, 204… · other 0, 5-100, 105-200, 205-300…, 1.2, 2.07, 3.94, 5.81…
Somali so 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Sami du Sud sma 3 one 1 · two 2 · other 0, 3-999…, 1.2, 2.07, 3.94…
Espagnol es 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Soundanais su 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Swahili sw 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Suédois sv 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Suisse allemand gsw 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Syriaque syr 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Tagalog tl 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Tamoul ta 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Télougou te 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Thaï th 1 other 0-999, 1.2…
Tibétain bo 1 other 0-999, 1.2…
Tigrigna ti 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Tonguien (îles Tonga) to 1 other 0-999, 1.2…
Turc tr 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Turkmène tk 2 one 1 · other 0, 2-999…, 1.2, 2.07…
tzm tzm 2 one 0, 1, 11-99 · other 2-10, 100-999…
Ouïghour ug 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Ukrainien uk 4 one 1, 21, 31, 41, 51, 61… · few 2-4, 22-24, 32-34… · many 0, 5-20, 25-30, 35-40… · other 1.2, 2.07, 5.94…
Ourdou ur 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Ouzbek uz 2 one 1 · other 0, 2-999…, 1.2, 2.07…
vec vec 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Vietnamien vi 1 other 0-999, 1.2…
Wallon wa 2 one 0, 1 · other 2-999…, 1.2, 2.07, …
Gallois cy 6 zero 0 · one 1 · two 2 · few 3 · many 6 · other 4, 5, 7-999…, 0.2, 1.07…
Frison occidental fy 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Wolof wo 1 other 0-999, 1.2…
Xhosa xh 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Yakoute sah 1 other 0-999, 1.2…
Yiddish yi 2 one 1 · other 0, 2-999…, 1.2, 2.07…
Yoruba yo 1 other 0-999, 1.2…
Zoulou zu 2 one 1 · other 0, 2-999…, 1.2, 2.07…

La répartition, en un coup d’œil

Formes Langues Membres notables
1 25 Chinois, japonais, coréen, vietnamien, thaï, indonésien, malais, birman
2 106 Anglais, allemand, espagnol, italien, néerlandais, portugais, turc, grec, hébreu‡
3 15 Russe, tchèque, ukrainien, serbe, croate, lituanien, letton, polonais‡
4 13 Polonais, slovène, maltais, gaélique, breton
5 1 Mannois
6 3 Arabe, gallois, cornique

‡ CLDR révise ces chiffres au fil du temps ; lisez le tableau ci-dessus plutôt que ce résumé quand cela compte.

Deux enseignements pour la planification. D’abord, les langues à forme unique ne sont pas une erreur d’arrondi — un quart des plus grands marchés linguistiques du monde se trouve dans cette colonne, et pour eux, toute mécanique de pluriel que vous construisez est un coût pur. Ensuite, la longue traîne à quatre, cinq et six formes est là où vivent les bugs, parce que c’est la partie de la matrice que personne dans une équipe anglophone ne peut vérifier d’un simple coup d’œil.

Les règles changent, et les règles obsolètes sont silencieuses

CLDR est publié à peu près chaque année et les règles de pluriel sont bel et bien révisées. Une langue qui avait trois catégories dans une version peut en avoir quatre dans la suivante, ou les plages de nombres derrière une catégorie peuvent changer. Rien dans votre application ne l’annoncera. Le fichier continue de s’analyser normalement, la catégorie manquante ne s’affiche simplement jamais, et la langue retombe silencieusement en repli.

WebTranslateIt suit la version CLDR derrière les règles de chaque projet et affiche un badge « Règles de pluriel obsolètes ? » sur la page Langues et statistiques quand les règles stockées d’un projet divergent de la version courante, avec une option en un clic pour adopter les nouveaux réglages par défaut ou ignorer l’avertissement si la divergence est volontaire. Si vous maintenez les règles de pluriel à la main, mettez plutôt un rappel dans votre calendrier à chaque version de CLDR — le mode d’échec est trop silencieux pour être repéré autrement.

Une courte liste de contrôle

  • Passez le nombre à votre bibliothèque i18n. Ne branchez jamais sur == 1 dans le code applicatif.
  • Générez les fichiers de traduction à partir des catégories CLDR de chaque langue cible, pas de la forme de la langue source.
  • Validez que chaque segment au pluriel a bien toutes les catégories requises par la langue, avant la mise en production.
  • N’oubliez pas que les décimales sélectionnent aussi des catégories, et souvent différentes de celles des entiers voisins.
  • Revérifiez vos règles après chaque version de CLDR.

Frequently asked questions

Combien de formes de pluriel chaque langue a-t-elle ?
Cela va de une à six. Le chinois, le japonais, le coréen, le vietnamien, le thaï et une vingtaine d’autres langues ont une seule forme. L’anglais, l’allemand, l’espagnol et la majeure partie de l’Europe en ont deux. Le russe, le polonais, le tchèque et les langues slaves en général en ont trois ou quatre. L’arabe et le gallois en ont six. Le tableau complet de ce guide liste les 163 langues définies par CLDR.
La catégorie CLDR one signifie-t-elle toujours le nombre 1 ?
Non, et c’est l’erreur la plus fréquente dans la gestion des pluriels. En français, one couvre à la fois 0 et 1. En russe, one couvre 1, 21, 31, 41 et tout autre nombre se terminant par 1, sauf ceux se terminant par 11. Les catégories sont des noms pour des ensembles de nombres, et chaque langue définit ses propres ensembles.
Quelles sont les six catégories de pluriel CLDR ?
zero, one, two, few, many et other. Chaque langue utilise other comme catégorie fourre-tout ; les cinq autres ne sont utilisées que par les langues qui en ont besoin. Une langue n’utilise jamais une catégorie que ses règles ne définissent pas, donc un fichier de traduction doit contenir exactement les catégories que CLDR liste pour cette langue.
Que se passe-t-il si une traduction manque une forme de pluriel ?
À l’exécution, la recherche de cette catégorie échoue et vous obtenez soit une chaîne de repli dans la mauvaise langue, soit une clé visible, soit un plantage, selon le framework. C’est pourquoi il vaut mieux valider l’exhaustivité des pluriels avant que le fichier ne parte en production, plutôt que de la découvrir via un rapport de bug dans une langue que personne dans l’équipe ne lit.

Keep reading

Translate your app without the spreadsheet round-trip

WebTranslateIt reads the file formats and placeholder syntax described on this page, validates them as translators work, and syncs the results straight back into your repository.