2012-08-25 21 views
12

ver este ejemplo de _n(); función (http://codex.wordpress.org/Function_Reference/_n):múltiples formas plurales en gettext()

sprintf(_n('%d comment.', '%d comments.', $number, 'text-domain'), $number);

en Inglés:

1 Comment 
2 Comments 

en idiomas como el polaco existe un patrón diferente y múltiples formas plurales:

1 Komentarz 
2 Komentarze 
3 Komentarze 
4 Komentarze 
5 Komentarzy 
6 Komentarzy 
... 
21 Komentarzy 
22 Komentarze 
23 Komentarze 
24 Komentarze 
25 Komentarzy 
... 
31 Komentarzy 
32 Komentarze 
... 
91 Komentarzy 
92 Komentarze 
... 
111 Komentarzy 
112 Komentarzy (!) 
... 
121 Komentarzy 
122 Komentarze 

Estoy buscando una forma de permitir a los traductores establecer su propio patrón si su lenguaje admite múltiples formas en plural. ¿Puedes pensar en algún enfoque creativo de PHP para hacer esto?

Algunos solución que puedo pensar (pero aún traductores no voy a ser capaz de establecer cualquier patrón):

if($number == 1){ 
    $message = __(‘1 Komentarz’ , ‘text-domain’); 
}else if($number == 2){ 
    $message = __(‘2 Komentarze’ , ‘text-domain’); 
}else if($number == 3){ 
    $message = __(‘3 Komentarze’ , ‘text-domain’); 
} 

EDIT: He encontrado esto en el archivo PO para polaco: "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" pero todavía no lo entiendo cómo preparar la función _n(); para admitir eso.

Respuesta

13

Primero, su archivo de configuración regional debe tener la definición de plural. Como se ha añadido sobre la cuestión, en el caso de Polonia es posible que vea

"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 

o similares definición (nombre_de_dominio) -pl.po archivo.

Luego, debe preparar la traducción de "% d Comment"/"% d Comments" en el archivo .po. Por ejemplo,

msgid "%d Comment" 
msgid_plural "%d Comments" 
msgstr[0] "%d Komentarz" 
msgstr[1] "%d Komentarze" 
msgstr[2] "%d Komentarzy" 

Componga el archivo .po en el archivo .mo y colóquelo en una carpeta adecuada. (Por ejemplo, idiomas/(nombre_de_dominio) -pl.mo

En su Wordpress (plug-in/tema que supongo) código, se puede llamar así,

for ($i=1;$i<15;$i++) { 
    printf(_n("%d Comment", "%d Comments", $i, "(domain_name)"), $i);echo "<br />"; 
} 
printf(_n("%d Comment", "%d Comments", 112, (domain_name)"), 112);echo "<br />"; 

a continuación, establecer, por supuesto, la configuración regional del WordPress para polaco , en wp-config.php,

define ('WPLANG', 'pl'); 

debería ver los resultados con formas plurales correctos

+0

Su respuesta es en gran parte correcta (excepto que no es necesario para() -. va a trabajar con solo '_n();' incluso si teóricamente solo admite dos formas plurales). Lo descubrí ayer :) ¡Gracias! – Atadj

+1

El bucle for es solo para mostrar los textos generados con más números. – akky

0

Creo que encontré la manera de hacer lo que quiero. La aplicación POEdit le permite crear múltiples formas en plural usando el patrón que puede especificar en la configuración.

El traductor tiene que codificar el patrón por sí mismo (vea el patrón para el polaco en mi pregunta). Todavía estoy investigando ese tema, pero si alguien tiene una pregunta similar, entonces es un buen lugar para comenzar: http://www.poedit.net/trac/wiki/Doc/PluralForms

Cuestiones relacionadas