utilice la función ngettext
para cosas como esta. Es le permite tratar correctamente con plurales en inglés y otros idiomas , de una vez por todas. Se utiliza de esta manera:
printf(ngettext("%d Comment", "%d Comments", $numComments), $numComments);
La función ngettext
volverá la primera cadena de formato ("%d Comment"
) si sólo hay un solo comentario y la segunda cadena de formato ("%d Comments"
) si hay más. La función printf
será y luego colocará el número en la cadena.
Esto puede parecer mucho trabajo, pero es muy potente: funciona con idiomas que tienen más de una forma plural - que en realidad existen (!). El manual de PHP da un ejemplo de la palabra "ventana" que se convierte en "1 okno", "2 okna" y "5 oken" en algún lenguaje exótico que no reconozco ...
Si usted es consecuente sobre el uso de ngettext
, a continuación, sus futuros usuarios de países lejanos será muy agradecido :-)
Editar: Como se sugiere en los comentarios, hay una sola función a hacer lo anterior:
function pluralize($num, $singleWord, $pluralWord) {
return printf(ngettext($singleWord, $pluralWord, $num), $num);
}
Por defecto, xgettext
suele reconocer esta nueva función, pero se puede añadir con la bandera --keyword
. Dado un archivo test.php
con
echo ngettext("foo", "foos", 1);
echo pluralize(2, "bar", "bars");
se puede extraer de las cuerdas con
xgettext --keyword=pluralize:2,3 test.php
El messages.po
archivo resultante tiene entradas como estas:
#: test.php:7
msgid "foo"
msgid_plural "foos"
msgstr[0] ""
msgstr[1] ""
#: test.php:8
msgid "bar"
msgid_plural "bars"
msgstr[0] ""
msgstr[1] ""
El traductor va a llenar en cada forma plural y con una línea formada correctamente "Plural-Forms" en el encabezado del catálogo de mensajes, usted será capaz para admitir todos los idiomas.
+1 Para su nombre de usuario, porque me lo dijo. Eso es inteligente y me interesaría saber cuántos votos a favor tienes solo por eso. :) – Dusty
Estoy medio tentado de menospreciar solo para contrarrestar los efectos de las personas que votaron a favor –