Contenido

Sistema de traducción de themes para WordPress

7 Jun

+ 35

Ayer promovía la idea de castellanizar todos los temas posibles, pero hoy voy más allá, vamos a hacer las cosas bien. Vamos a hacerlos completamente idiomátizables.

Para ellos simplemente hemos de seguir unos pasos muy básicos, no tenía ni idea de como hacerlo y Gelo, en 15 líneas ha conseguido explicarmelo :D(Gracías).

Una introducción 

Voy a intentar hacerlo lo más claro posible para que todos lo podamos entender, pero quizas me vaya por las ramas por que esto es algo lioso de entender si no has programado nunca.

A grandes rasgos, al igual que cuando traducimos nuestro WordPress al Castellano, simplemente subimos un fichero es_ES.mo a nuestro wp-includes/ para los themes se usa un sistema completamente igual. Basado un sistema llamado Gettext, que asi por encima es un sistema de ficheros donde le dices el texto y donde ha de ponerlo.

Luego desde nuestro fichero de configuración (wp-config.php) definimos una variable que  indicará el idioma de nuestro WordPress.

 
  define ('WPLANG', 'es_ES'); 
   

Con esta líneas tenemos todo lo que esté idiomátizado de nuestro WordPress en Castellano.

Esto es debido a 3 pasos que se realizan usando 3 ficheros.

POT (Portable Object Template)
    Primer paso, lo usa para buscar en el código de WordPress todas las llamadas que producen la traducción.
PO (Portable Object)
    Segundo paso, una el fichero pot como un template con la lista de mensajes a traducir.
MO (Machine Object)
Tercer paso, Fichero donde se encuentran las traducciones que casan con las posiciones recibidas en el PO (paso anterior)

¿Un poco espeso? Ya vereis como en la práctica no para tanto ;).

De esta forma lo que queremos hacer es generar los themes para que sean capaces de interpretar estos ficheros.

¿Como hacerlo?

Voy a intentar explicar de forma facil como podemos convertir un theme sin idiomátizar, osea con el texto a piñon entre el código, en un theme idiomatizable y con posibilidad de que otros se encarguen de adaptar el fichero .mo al su idioma de forma facil y rápida (lo explico más adelante).

Para empezar, despues de haber decidido que tema nos gusta y queremos idiomátizar, nos pondremos manos a la obra. Y para empezar vamos a añadir en la primera línea del fichero header.php el siguiente código.

 
<?php load_theme_textdomain('nombre_tema'); ?> 

De esta forma estamos avisando al core (núcle de la aplicación) de WordPress que vamos a usar el fichero de idioma. Lo del ‘nombre_tema’ es el dominio que declaramos para el tema.

Ahora solo nos queda recorrer todos los ficheros del theme y vamos cambiando el texto que vayamos viendo una de estas posibilidades.

 
_e("texto","nombre_tema); 
Busca la traducción y la envia al procedimiento echo de PHP. Sino la encuentra muestra el texto. Este va perfecto para mostrar por pantalla. 
__("texto", "nombre_tema"); 
Busca la traducción y la envia por return. Sinó lo encuentra retorna el texto. 

De esta forma ya podemos disfrutar de un tema completamente en castellano y no cerramos las puertas a otras lenguas que simplemente han de hacer lo que comentaré a continuación.

¿Como crear ficheros? 

Para que todo esto funcione tedremos que generar el fichero PO, con la política de cadenas a sustituir, esto es realmente facil basta con seguir con los siguientes pasos..

1 .Añadir la siguiente cabecera al fichero (por ejemplo default.po)

# LANGUAGE (LOCALE) translation for WordPress.
# Copyright (C) YEAR WordPress contributors.
# This file is distributed under the same license as the WordPress package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: WordPress VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-02-27 17:11-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

Reemplazando el texto en negrita por el adecuado en nuestro caso.

Luego iremos definiendo las líneas que se han de reemplazar con la siguiente estructura.

#: fichero.php:linea
msgid «Cadena original»
msgstr «Cadena traducida»

Cambiaremos fichero, por el nombre del fichero en el que se encuentra el texto a idiomátizar, línea por la línea en la que se encuentra. Cadena original, se refiere al texto que hay en la línea del fichero. Y cadena traducida es el texto traducido.

Por ejemplo.

#: wp-comments-post.php:13
msgid "Sorry, comments are closed for this item."
msgstr "Lo siento, los comentarios están cerrados para este post."

 De esta forma usando aplicaciones como poEdit, KBabel, The Rosetta Project, GNU Gettext,  que se encarga de leer este fichero y generarte los ficheros de Localización traducidos por ti, de forma cómoda y rápida.

Ale, a ponerse manos a la obra y a engrosar la lísta.

+Info 

Felipe de Yukei, nos aporta la más información para completar esta informacion.

  • Le veo una pega a la hora de crear el archivo de traducción. Hay que indicarle la línea, pero no sé lo que significa exactamente la «#», si es comentario o no, pero si cada vez que hagas un cambio en el fichero, ya no para publicar el theme, sino cuando hay un plugin que te gusta, por ejemplo, es un coñazo estar cambiándolo.

    ¿Me he explicado?

  • Si, opino que es un poco lioso, pero es cuestion de coger una disciplina y hacer las cosas bien ¿no?.

    De esta forma a la hora de mantener tu propio código será más facil y claro.

  • De momento al ikkaro va. 🙂

  • No, no, no… hay una manera mucho más fácil de generar el catálogo de traducciones… acabo de publicar un post sobre eso, se ahorrarán un montón de trabajo 😉

  • Se me olvidaba el link (aunque mandé un trackback, pero no confío mucho en esas cosas)

    Localización con WordPress — yukei.net

  • Hola, pués si que se vé complicado para los que no programamos, tal vez podríamos hacer 2 equipos, uno que genere los .po y otro que los traduzca.

    Si se animan, creo que seremos muchos más los que ayudemos en el proyecto y así podríamos traducir muchos más temas.

    Si les parece buena la idea y alguien se anima a ir generando los .po, yo me apunto con varios, ya que yo ya he utilizado el poedit y me parece muy fácil de usar.

  • Buenas, voy a intentar colaborar que me parece muy buena idea, estoy practicando con el tema refresh3col

    solo estoy probando con el sidebar, pero ya he encontrado el primer problema os cuento

    ya tengo el fichero es.po creado por el bat, si lo edito con el notepad , y cambio las traducciones todo bien, si lo abro con el poedit lo puedo cambiar tb, pero me dice un error , some header fields still have, the initial default value, pero parece que graba los cambios

    de todas formas ahora como se sigue? quiero decir tengo el .po pero no se hacer el .mo

    saludos

  • nada soy un culo inquieto, un poco de google y he dao con la solucion

    era usando el comando msgfmt nombre_fichero.po

    y buscando tambien encontre como funciona esto de los .mo, hay que meterlos en la carpeta raiz del tema, y llamarlos de la misma forma que tenemos colocados en wp-config.php en la constante
    define (‘WPLANG’, ‘es_ES’);

    en este caso el mio tendria que llamarse es_ES.mo

    por lo que he editado vuestro .bat y lo he dejado así

    ——

    PATH c:\archivos de programa\gnuwin32\bin
    xgettext –keyword=__ –keyword=_e –language=PHP –files-from=file-list.txt -j –from-code=UTF-8 -d es_ES

    msgfmt es_ES.po

    ——

    otra pregunta más jeje, me vais a colocar el sombrerito dentro ná,

    lo busque y no lo encontre, este bat, funciona si tenemos creado(aunque vacio) el fichero es_ES.po no existira algun comando en caso de que no exista lo cree, estuve probando con -o fichero, -output-file=file, con -C -c (estos por probar 🙂 ) y no lo consegui

    bueno sigo intentando aprender

    saludos

  • noth: con respecto a tu primera pregunta, eso salía porque habían algunos datos de la cabecera que no habías modificado… para hacerlo (con poedit) debes ir a Catálogo

  • Lo siento, el comentario anterior se cortó…

    Como decía, en poedit debes ir a Catálogo y luego Opciones; te saldrá un cuadro en el que debes ingresar la información requerida (nombre del paquete, autor, idioma, etc.)

    Sobre lo segundo, puedes ocupar el mismo comando pero sin «-j», en otras palabras…

    Para crear el catálogo:

    PATH c:\archivos de programa\gnuwin32\bin
    xgettext -–keyword=__ -–keyword=_e -–language=PHP -–files-from=file-list.txt -–from-code=UTF-8 -d es_ES

    Para actualizar el catálogo:

    PATH c:\archivos de programa\gnuwin32\bin
    xgettext -–keyword=__ -–keyword=_e -–language=PHP -–files-from=file-list.txt -–from-code=UTF-8 -d es_ES -j

    La difrencia es el «-j» al final 😉

    Suerte!

  • Hola a tod@s

    Soy nuevo en el tema de los blogs.
    Tengo una duda, si ya tenemos un fichero PO, el de la traducción de WP, ¿ donde ponemos el fichero po de la traduccion del tema o como lo llamamos

  • Man gracias por el tutorial pero quede barado en donde dice

    «Ahora solo nos queda recorrer todos los ficheros del theme y vamos cambiando el texto que vayamos viendo una de estas posibilidades.»

    que le hacemos las lo ficheros que le agregamos, podrias explicarlo un poco mejor para los que no tenes mucho conociemiento de css??

    gracias!

  • Excelente articulo pero me queda una duda he intentado modificando el archivo pot con el notepad, pero cuando lo quiero crear el archivo po con el Poedit me sale error… asi que he traducido un par de temas en su propio codigo
    http://luisitob.wordpress.com/2008/04/10/temas-en-espanol-para-wordpress-27/

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.