Es muy fácil hacer la vista gorda a otros idiomas al desarrollar su tema de WordPress, pero este es un mal hábito e inmediatamente rechaza a todo el mercado de usuarios de WordPress y potencialmente miles de dólares en ingresos perdidos. De los 10 principales países que buscan "temas de WordPress" en Google, solo uno habla inglés nativo (EE. UU.) Y es el noveno. Al momento de escribir esto, solo hay 269 temas en la base de datos de temas de WordPress que están etiquetados como listos para la traducción de más de 1,500 temas. Eso es solo el 18% de los temas. Te voy a mostrar cómo hacer de los tuyos uno de ellos..
Cuando normalmente creas un tema, simplemente codificarás cualquier texto del tema, como el mensaje de error 404 en la 404.php archivo, o etiquetas como "comentarios:" o "autor:". Si el WordPress del usuario es alemán, por ejemplo, estos fragmentos de texto aún se mostrarán en inglés. La solución a esto es devolver o repetir estas declaraciones usando una de las cuatro funciones de WordPress que están diseñadas para hacer referencia al archivo de idioma para el texto correcto. Una vez que haya envuelto el texto en estas funciones, puede crear un archivo que contenga todas las traducciones a las que se hace referencia cada vez que se carga el tema. Hay tres archivos de traducción que utilizamos:
Cada una de las cuatro funciones requiere al menos un argumento, que es el texto que se debe traducir. Las funciones son:
__ ()
- (dos guiones bajos) La función básica que utilizarás la mayor parte del tiempo. Devuelve el texto en el idioma correcto.._mi()
- Lo mismo que __ ()
excepto que se hace eco del texto en lugar de devolverlo._norte()
- Se usa cuando el texto tiene el potencial de ser plural, por lo que, por ejemplo, si tuviera que mostrar cuántos comentarios se han hecho, es posible que desee emitir "X comentarios" o "X comentarios" dependiendo de cuántos comentarios tenga.._X()
- Útil para cuando la traducción de la palabra depende del contexto. "Publicar" podría significar "una publicación (sustantivo)"o" para publicar (verbo)"dependiendo del contexto. Es importante que el traductor sepa a qué se refiere usted cuando traduce para ser preciso. _X()
se usa principalmente donde se usan palabras sueltas. Estas son las funciones de traducción más simples que WordPress tiene para ofrecer. Echemos un vistazo a un ejemplo de cada uno:
Ambas funciones están haciendo exactamente lo mismo aquí. La declaración "esto es una publicación" se está verificando en el archivo .mo si hay uno, y se devuelve el resultado. __ ()
y _mi()
solo se requiere que se les pase un argumento, que es el texto que queremos traducir. Un segundo argumento opcional está disponible y lo veremos más adelante. La única diferencia entre los dos es que __ ()
necesita el eco
declaración aquí. Veamos un ejemplo donde __ ()
funciona mejor que _mi()
:
En lugar de pasar una cadena a la el contenido()
función, hemos utilizado __ ()
Para que el texto pueda ser traducido. Si hubiéramos usado _mi()
aquí, en cambio, tendría la traducción de "Haga clic aquí para leer más" en el documento, en lugar de pasarla a el contenido()
lo que causaría todo tipo de problemas inútiles.
¿Qué sucede si tiene una situación en la que el texto que imprima podría ser un plural o un singular como el ejemplo "X comentarios" anterior? En lugar de dar dos cadenas de texto diferentes para el traductor, puede decir que tiene una sola pieza de texto que necesita una traducción singular y plural. Los dos ejemplos siguientes muestran el mismo resultado para el usuario:
_norte()
requiere tres argumentos La primera es la versión singular del texto, la segunda es el plural y la tercera es el número al que hace referencia. En este caso, get_comments_number ()
es encontrar cuántos comentarios hay en una publicación y luego _norte()
es elegir el texto apropiado para usar.
Digamos que estás traduciendo un archivo .pot, y te encuentras con una entrada "scroll". ¿Vas a interpretarlo como "un pedazo de papel enrollado" o "panear arriba o abajo del sitio web"? Realmente podría hacer con un poco de contexto para describir lo que necesita traducirlo. Estas funciones le dan esa habilidad, al tener un segundo atributo requerido que solicita una breve descripción para describir la frase o palabra. Revisa el siguiente ejemplo:
El ejemplo te muestra la diferencia entre _X()
y _ex()
. Es lo mismo mi
, Al igual que con _mi
, para hacer que la función haga eco de la salida en lugar de devolverla. Para ambos, nuestro primer parámetro es nuestro texto que necesita traducción, y el segundo es un comentario o nota sobre el texto de traducción para aclarar lo que significa.
Digamos que tiene una situación en la que el texto que desea generar se compone de una cadena de texto con el resultado de una función o el valor de una variable colocada en algún lugar dentro de ella. Usted podría estar tentado a corregir algo como esto:
Cuando se trata de hacer tu archivo .pot, POEdit ignorará esto porque no quiere usar una variable en medio de una oración. La razón es que va a enviar la cadena Has elegido el tema $ color
al archivo .pot, pero cuando se trata de buscar la traducción cuando se ejecuta el script, buscará la cadena Has elegido el tema azul.
que no va a encontrar. Entonces, ¿qué pasa si hacemos esto en su lugar:
El guión ahora podrá recuperar las traducciones, pero ahora es demasiado difícil de traducir porque la oración se ha roto. Es posible que esta oración ni siquiera sea traducible en algunos idiomas que tienen una sintaxis muy diferente, como en el alemán, donde su palabra "elegido" aparecerá al final de la oración. Tendría que pasar por la molestia de explicar que estas dos cadenas de texto son parte de una, y que "tema" podría no traducirse en "tema" en absoluto..
La solución es usar una sola cadena de texto que tenga una sintaxis sencilla para comillas. Aquí es donde el printf ()
o sprintf ()
Las funciones se vuelven útiles. Echemos un vistazo a cómo debe verse nuestro código:
Esto no solo resuelve todos los problemas que teníamos antes, sino que es mucho más ordenado y solo usa una línea de código. los printf ()
o sprintf ()
los primeros argumentos de las funciones son la cadena de salida que contiene al menos un marcador de posición, en este caso % s
(que significa "cadena"), y cualquier otro argumento son variables que se colocarán dentro de la cadena inicial. Hay muchos marcadores de posición diferentes que puedes usar dentro de tu cadena y puedes encontrar una lista completa en sprintf
En el manual de PHP. Tenga en cuenta que la diferencia entre printf ()
y sprintf ()
es parecido a _mi()
y __ ()
respectivamente.
Ahora que ha etiquetado correctamente todos los resultados de texto en su tema, ahora necesita recopilar esta información en un archivo .pot. POEdit es un programa fantástico que te brinda la posibilidad de crear tu archivo .pot y también proporciona una GUI fácil de usar que puede usarse para crear tus archivos .po y, lo que es más importante, también tus archivos .mo.
Primero, deberá descargar POEdit, que puede encontrar aquí para Windows, Mac y Linux:
http://www.poedit.net/download.php
Una vez instalado POEdit, puede crear su archivo .pot. Para hacer esto, vaya a Archivo> Nuevo Catálogo. Aparecerá un cuadro de diálogo en el que debe ingresar información básica. Los elementos esenciales en la pestaña "Información del proyecto" son el nombre del proyecto y su idioma / país. También debe ingresar lo siguiente en el cuadro "Formas plurales":
Formas plurales: nplurals = 2; plural = n! = 1;
En la pestaña "rutas", ingrese la ruta donde se pueden encontrar los archivos en relación con el destino de guardado de este archivo .pot. Por ejemplo, si está colocando el archivo .pot en la carpeta raíz del tema, ingrese .
(período). Si desea colocar el archivo .pot en una carpeta de "idioma" dentro de la raíz del tema, ingrese ...
(dos periodos).
A continuación, debe indicar a POEdit qué palabras clave debe buscar al escanear nuestros archivos. Introduzca la siguiente:
los : 1,2
la extensión le dice a POEdit que estas palabras clave tienen dos partes. Por defecto, el segundo argumento es el plural, a menos que incluya el do
lo que significa que el segundo argumento es un comentario.
¡Eres bueno para ir! Haga clic en "Aceptar" y elija un lugar para guardar su archivo .pot. Recuerde que tiene que relacionarse con la ruta que definió anteriormente. POEdit ahora escaneará sus archivos y encontrará todas las apariciones de sus funciones de traducción y las guardará sin traducirlas en su archivo .pot. Si solo desea proporcionar el soporte mínimo para la traducción internacional, puede enviar su archivo .pot con su tema y detenerse aquí. Sin embargo, si puede traducir su tema a otro idioma, puede enviar el tema con una traducción prefabricada. como se describe en el paso 3.
Una vez que haya traducido todas las cadenas en el archivo .pot, puede guardar esto como su archivo .po. Cualquier cadena para la que no hayas proporcionado una traducción se mostrará en el idioma original cuando alguien vea tu tema..
El nombre de archivo de tu .po es crucial. Gettext utiliza el estándar ISO 639 para las abreviaturas de idiomas e ISO 3166 para los entornos locales. Si su traducción está escrita en inglés americano, por ejemplo, su nombre de archivo se verá como en-US.po
. La capitalización también es importante aquí. Para obtener una lista completa de idiomas y códigos de país, consulte estos dos enlaces:
Una vez que guarde, POEdit creará automáticamente un archivo .mo junto con su archivo .po. Se recomienda que incluya los tres archivos de traducción con su tema para que las personas puedan crear sus propias traducciones y editar sus traducciones existentes fácilmente..
Vamos a resumir lo que has hecho hasta ahora. Le ha dicho a WordPress todo el texto que desea traducir, y luego usó POEdit para recopilar cada cadena y colocarlas en un archivo .pot que se puede traducir en un archivo .po y .mo. Estos archivos se incluyen en los archivos de tema. El último paso es comprimir el tema, instalarlo y dejarle saber a WordPress qué idioma .mo archivo quieres que use. Este es un procedimiento muy sencillo en el que accede a su wp-config.php
archivo encontrado en la carpeta raíz de su WordPress.
/ ** * Idioma localizado de WordPress, predeterminado para inglés. * * Cambia esto para localizar WordPress. Se debe instalar un archivo MO correspondiente para el idioma * elegido en wp-content / languages. Por ejemplo, instale * de_DE.mo en wp-content / languages y configure WPLANG en 'de_DE' para habilitar la compatibilidad con el idioma alemán *. * / define ('WPLANG', ");
Su archivo ya debe contener define ('WPLANG', ");
pero si no lo hace, puede agregarlo. Simplemente necesita agregar su idioma y código de configuración regional en el definir
. Si fueras a traducir tu tema al alemán, tendrías esto:
define ('WPLANG', 'de_DE');
¡Tu internacionalización está completa! Recuerde incluir su archivo .pot con su tema, y si pudo traducir su tema a otro idioma, incluya también los archivos .po y .mo.