4.- Traducciones de temas. dariobf.com

4.- Traducciones de temas dariobf.com #1 Introducción ¿Por qué? Es fácil hacer la vista gorda de cara a otros idiomas. Ignorarlos es un mal hábi

11 downloads 158 Views 393KB Size

Recommend Stories


AS CLAVE- TEMAS CLAVE - TEMAS CLAVE -TEMAS CL S CLAVE- TEMAS CLAVE - TEMAS CLAVE -TEMAS CLAV
Cover en castellano 26/7/05 12:42 Page 1 EMAS CLAVE- TEMAS CLAVE - TEMAS CLAVE -TEMAS CLA AVE- TEMAS CLAVE - TEMAS CLAVE -TEMAS CLAVE - TEMA AS CL

Traducciones de Gabriel Jiménez Emán
1 2 3 Traducciones de Gabriel Jiménez Emán Arquitrave 4 Canciones © Bob Dylan © Arquitrave Editores www.arquitrave.com/suscriptores@arquitra

Story Transcript

4.- Traducciones de temas

dariobf.com

#1

Introducción

¿Por qué? Es fácil hacer la vista gorda de cara a otros idiomas. Ignorarlos es un mal hábito. Vivimos en un mundo global, nunca se sabe en qué idioma se utilizará nuestro tema.

dariobf.com

¿Cómo? Cuando desarrollas un tema, incluyes textos en el código que no son modificables (de manera sencilla) desde ningún lado. Sólo desde el código. • Autor. • Comentarios. • Mensaje de error de la página 404. • En definitiva, textos de diseño.

dariobf.com

Solución 1. Introducir estas cadenas dentro de las funciones que nos facilita WordPress. 2. Creamos un fichero que contenga todas las cadenas. 3. WordPress hace el resto, invoca este fichero con las traducciones en relación al idioma de instalación.

dariobf.com

#2

Las 4 funciones

Las 4 funciones Cada una de estas funciones recibe, al menos, un argumento, que es la cadena a traducir. • • •



__() – (dos underscores) La función más básica, la que vas a utilizar la mayoría del tiempo. Retorna el texto en el idioma correcto. _e() – Lo mismo que __() a diferencia que esta imprime el texto en vez de retornarlo. _n() – Utilizada cuando el texto tiene la opción potencial de ser plural, por ejemplo para cuantos comentarios se han hecho; no es lo mismo “X comentario” que “X comentarios”, dependiendo de cuántos comentarios tenga el artículo. _x() – Útil cuando la traducción de una palabra depende del contexto. "Post" puede significar "un post (nombre)" o “to post (verbo)" dependiendo del contexto.. Es importante para el traductor saber a cuál te refieres cuando traduce para ser efectivo. dariobf.com

__() y _e() Son las funciones de traducción más simples que ofrece WordPress.

dariobf.com

__() y _e() En el ejemplo, ambas funciones hacen exactamente lo mismo. La frase “this is a post” se revisa en el fichero .mo del idioma correspondiente y, si hay uno asignado, retorna el resultado. __() y _e() sólo requieren un argumento, que es el texto del que queremos la traducción. También aceptan un segundo argumento (opcional), pero lo veremos más adelante. La única diferencia entre las dos es que __() necesita el echo (o print de algún tipo).

dariobf.com

__() y _e() Veamos un ejemplo claro donde __() funciona mejor que _e():

En vez de pasarle un string a la función the_content(), hemos utilizado __(), de esta manera el texto puede ser traducido. Si hubiéramos utilizado _e (), obtendríamos la traducción de “Click here to read more" en lugar de ser pasado como argumento a the_content (), lo que puede causar todo tipo de problemas inesperados. dariobf.com

_n() ¿Qué pasa si tenemos una situación en la que el texto podría llegar a ser un plural o singular (como por ejemplo "X comentarios”)? En lugar de dar dos cadenas de texto diferentes al traductor, se puede decir es una sola pieza de texto que necesita una traducción singular y plural. Los siguientes dos ejemplos tienen el mismo resultado para el usuario:





dariobf.com

_n() _n() necesita tres argumentos: 1. La forma singular de la cadena de texto. 2. La forma plural de la cadena de texto. 3. El número al que hace referencia (en el ejemplo anterior obtenido con get_comments_number() De esta manera, _n() obtiene el número y en relación a ello muestra una cadena u otra.

dariobf.com

_x() y _ex() Digamos que estás traduciendo un archivo .pot, y te encuentras con una entrada “scroll”. ¿Vas a interpretar eso como "un pedazo de papel enrollado" o "desplazarse hacia arriba o abajo de la página web”? Puedes indicar un contexto para que el traductor sepa cómo ha de traducirse. Estas funciones te dan esa capacidad, por tener un segundo atributo necesario que pide una breve descripción para describir la frase o palabra.

dariobf.com

_x() y _ex() Al igual que con __() y _e() la diferencia entre _x() y _ex() es que la primera retorna la cadena traducida y la segunda la imprime directamente.

dariobf.com

Avanzado Supongamos que tenemos una situación en la que el texto que deseamos generar se compone de una cadena de texto con el resultado de una función o el valor de una variable en algún lugar dentro de él. ¿Sería correcto hacer algo así?



dariobf.com

Avanzado Cuando creamos el archivo .pot, Poedit ignorará esto porque no quiere utilizar una variable en el medio de una frase. La razón es que presentará la cadena “You have chosen the $color theme” al archivo .pot, pero cuando trata la búsqueda de la traducción, se buscará la cadena “You have chosen the blue theme”; una cadena que no va a encontrar. ¿Y si hacemos esto?

dariobf.com

Avanzado Ahora el traductor será capaz de recuperar las traducciones, pero ahora se ha vuelto demasiado difícil de traducir porque la sentencia se ha partido en dos. Esta frase ni siquiera podría ser traducible en algunos idiomas que tienen una sintaxis diferente como en alemán, donde la palabra “chosen” aparecería al final de la frase. Tendríamos que darle información sobre esta cadena, lo que puede dar problemas.

dariobf.com

Avanzado - Solución La solución es utilizar una única cadena de texto que tiene una sintaxis de una sola frase. Aquí es donde las funciones printf () o sprintf () se convierten en útiles. Echemos un vistazo a lo que nuestro nuevo código:

Esto no resuelve todos nuestros problemas anteriores, pero es mucho más ordenado y sólo utiliza una línea de código. Los argumentos para el printf () o sprintf () son: la cadena de salida que contiene al menos un marcador de posición, en este caso %s (que significa "cadena"), y la variable cuyo valor se va a colocar en el interior del marcador de posición. Consulta sprintf en el manual de PHP. La diferencia entre printf () y sprintf () es similar a _e () y __ (), respectivamente. dariobf.com

#3

POEdit

Introducción a POEdit Ahora que ya hemos marcado toda la salida de texto del tema, vamos a recoger la información en un fichero .pot. Poedit es un fantástico programa que te da la capacidad de crear el archivo .pot, y también proporciona una interfaz gráfica fácil que se puede utilizar para hacer el .po y, más importante, los archivos .mo también. En primer lugar, descargar POEdit aquí para Windows, Mac y Linux: http://www.poedit.net/download.php Una vez que tenemos Poedit instalado, creamos el archivo .pot. Para ello, vamos a Archivo > Nuevo Catálogo. Se le presentará un cuadro de diálogo donde deberá introducir algunos datos básicos. dariobf.com

Introducción a POEdit Lo esencial en la pestaña "Información del proyecto" son el nombre del proyecto y su idioma / país. También debe escribir lo siguiente en el cuadro de "las formas plurales":

dariobf.com

Introducción a POEdit En la pestaña "Paths", escribimos la ruta donde se pueden encontrar los archivos en relación con el destino de almacenamiento de este archivo .pot. Por ejemplo, si queremos que el archivo .pot esté en la carpeta raíz del tema, introducimos “.” (un punto). Si, por el contrario, queremos colocar el archivo .pot en una carpeta "idioma" dentro de la raíz el tema, escriba “..” (dos puntos).

dariobf.com

Introducción a POEdit

Ahora necesitamos decirle a POEdit qué funciones tiene que buscar en nuestros ficheros para encontrar las cadenas traducibles: • __ • _e • _n:1,2 • _x:1,2c • _ex:1,2c

La extensión “:1,2” le dice a POEdit que esas keywords tienen dos partes. Por defecto, el segundo argumento será el plural salvo que incluyamos la “c”, que significa que el segundo argumento es un comentario (contexto de la palabra, recuerda). dariobf.com

Introducción a POEdit

¡Ya estamos listos! Pulsa en “Aceptar” (OK) y elige un lugar para guardar el .pot. Recuerda que tiene que relacionarse con la ruta que hemos seleccionado en “Paths”.

POEdit buscará a través de los archivos y encontrará todas las ocurrencias de funciones de traducción (las que le hemos indicado) y las guardará sin traducciones en nuestro archivo .pot. Si sólo queremos proporcionar el soporte mínimo para la traducción internacional, podemos guardar este .pot en nuestro tema y dejarlo aquí. Sin embargo, si eres capaz de traducir el tema a otro idioma, puedes enviar el tema con la traducción ya hecha. dariobf.com

1. Una lista de las cadenas de texto a ser traducidas. 2. La cadena de texto actual para ser traducida. 3. Tu traducción a dicha cadena de texto.

dariobf.com

1. Singular y plural de la cadena actual. 2. Tabs para cambiar entre la forma singular y plural de tu traducción. 3. Tu traducción.

dariobf.com

Introducción a POEdit Una vez traducidas todas las cadenas en el fichero .pot, podemos guardarlo como .po. Cualquier cadena en la que no hayamos especificado una traducción mostrará la cadena en su lenguaje original cuando alguien visite nuestro sitio. El nombre del fichero .po es crucial. Gettex utiliza el standard ISO 639 para los “locales” (códigos de idioma). Si tu traducción es Inglés Americano, por ejemplo, tu fichero tiene que llamarse en-US.po. Las mayúsculas también son importantes. • Gettext - Códigos de lenguajes • Gettext Códigos de país Cuando guardas, POEdit crea automáticamente un .mo junto al fichero .po. Se recomienda incluir los tres ficheros (.pot, .po y .mo) con tu tema, así la gente puede crear sus propias instalaciones editando las tuyas. dariobf.com

Configurar WordPress /** * WordPress Localized Language, defaults to English. * * Change this to localize WordPress. A corresponding MO file for the chosen * language must be installed to wp-content/languages. For example, install * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German * language support. */ define('WPLANG', ‘');

define('WPLANG', ‘de_DE');

dariobf.com

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.