Un artículo del archivo

Esta es una especie de continuación a un post de Andrés Nieto (aNieto2K) sobre la traducción de themes en WordPress sobre el que puedo aportar algo: cómo marcar las cadenas para localización y cómo generar automáticamente el catálogo de cadenas de localización.

Este artículo debería llamarse “Sistema de traducción de themes para WordPress - Parte 2″, ya que en verdad es una especie de continuación de un artículo de aNieto2K en el que explica cómo funciona el sistema de… bueno, lo que dice en el título.

Creo que hubieron algunas cosas que faltó cubrir en ese post (seguramente porque este tipo siempre anda con un millón de proyectos), y sobre los cuales puedo aportar algo: cómo marcar las cadenas para localización y cómo generar automáticamente el catálogo de cadenas de localización.

Dado que en el último tiempo he estado trabajando (jugando, en verdad) en cuestiones relacionadas con esto, acá va mi grano de arena para Castellanizar la blogósfera

Marcando las cadenas

Como bien explica Nieto en su post, existen dos posibilidades para marcar las cadenas a localizar: _e('texto' , 'nombre_del_tema'); y __('texto' , 'nombre_del_tema');. Sin embargo, el propósito de cada una de estas alternativas es ligeramente distinto.

Para traducir un texto “simple”, es decir, que es parte del código XHTML del tema, _e() es ideal. Tomaré un ejemplo de Satori:

<li><h2>Artículos relacionados</h2></li>

Se transforma en:

<li><h2><?php _e('Artículos relacionados','satori')?></h2></li>

Pero ahora viene lo “entretenido”: ¿qué pasa si es necesario traducir un texto que debe pasar como argumento en una función? Para eso está __()

<h2><?php comments_number('Aún no hay comentarios','Un Comentario','% Comentarios');?></h2>

Se transforma en:

<h2><?php comments_number(__('Aún no hay comentarios','satori_domain'),__('Un Comentario','satori_domain'),__('% Comentarios','satori_domain')); ?></h2>

O más simple:

<?php función('argumento'); ?>

Se transforma en:

<?php función(__('argumento','tema')); ?>

Ahora, a armar el catálogo.

Confeccionar un catálogo de traducciones con Gettext

Una vez que hemos marcado todas las cadenas a traducir es necesario generar un archivo “PO” (Portable Object) que actúa como un “catálogo” de todas ellas. Es posible generarlo manualmente, pero por lejos lo ideal es aprender a utilizar Gettext, un programa que realizará automáticamente una tarea que de otro modo sería muy, muy tediosa.

Es posible que Gettext esté instalado en tu web host, por lo que puedes ejecutarlo remotamente si tienes acceso a la línea de comandos (por ejemplo, yo lo he utilizado en DreamHost vía SSH) o bien puedes bajarlo a tu PC para ejecutarlo localmente. No necesita grandes recursos, y está disponible para Windows (vía gnuwin32) y, por supuesto, también para Linux. La versión para Windows trae un instalador tipo wizard (asistente), por lo que es muy fácil de utilizar. Gettext, por su parte, sólo se ejecuta desde la línea de comandos, por lo que no es tan “amistoso”.

Ocupando Gettext

Gettext es en realidad un conjunto de programas con distintas funciones. Nuestro principal aliado será xgettext, el que examina los archivos en busca de las cadenas para traducir y confecciona el catálogo. Para utilizarlo, puedes seguir estos pasos:

  1. Primero, confecciona un archivo de texto que contenga una lista de los archivos que contienen cadenas que deben ser traducidas —típicamente serán los archivos PHP del tema— de forma relativa al directorio en que guardarás este archivo. Este es el archivo que utilizo en Satori (lo he llamado file-list.txt):

    archive.php
    category.php
    comments.php
    footer.php
    functions.php
    header.php
    index.php
    search.php
    single.php
    code/commonfooter.php
    code/dondeestoy.php
    code/navlinks.php
    code/post-format.php
    code/singlefooter.php
    code/social-bookmarks.php
    code/no-posts.php

  2. Ingresa a la línea de comandos. Una vez allí, ingresa lo siguiente: PATH c:\archivos de programa\gnuwin32\bin (suponiendo que esa es la ubicación donde está instalado Gettext). De esta manera, podrás ejecutar los programas que están en ese directorio desde cualquier directorio en el que te encuentres.
  3. Ingresa al directorio donde estás trabajando con el tema
  4. Ejecuta la siguiente orden: xgettext ––keyword=__ ––keyword=_e ––language=PHP ––files-from=file-list.txt ––from-code=UTF-8 -d es —asumiendo que tu lista de archivos se llama file-list.txt y las cadenas a traducir están codificadas como UTF-8. Tu archivo resultante se llamará es.po

De esta manera, tu catálogo de traducciones ya se habrá generado, y ahora es hora de editarlo. Recomiendo encarecidamente que utilices poedit, un programa disponible para Windows y Linux que te proveerá una interfaz gráfica muy fácil de usar.

poedit.png

Ya terminada la traducción, debes recordar cambiar los valores predeterminados de la cabecera, lo que en poedit puedes hacer dirigiéndote a Catálogo > Opciones: podrás ingresar el nombre y versión del proyecto, el equipo que trabajó en la traducción, idioma, juego de carácteres. El cuadro de formas plurales puede dejarse en blanco. Al guardar el catálogo poedit generará automáticamente el archivo es.mo que es el que finalmente se utilizará para la traducción del tema.

Hasta aquí, tenemos casi todo cubierto, sólo falta una cosa: ¿qué pasa si haces modificaciones al tema y debes agregar nuevas cadenas de localización? ¿Debes generar nuevamente el catálogo y perder todas las traducciones que ya has hecho? No, puedes agregar nuevas cadenas a tu catálogo ya traducido utilizando el siguiente comando:

xgettext ––keyword=__ ––keyword=_e ––language=PHP ––files-from=file-list.txt -j ––from-code=UTF-8 -d es

Nótese el -j, una opción que le indica a xgettext que deberá unir (join) las nuevas cadenas al catálogo es.po

Ahora sí, todo está dispuesto para que te lances a traducir temas.

Si estás trabajando en la traducción/localización de un tema, asegúrate de inscribirlo en la lista de themes en traducción (mientras estés trabajando en él) y luego en la lista de themes ya traducidos.

Explicación de los comandos gettext

Me he guardado para el final la explicación de aquella maravillosa línea de comandos que hemos utilizado para generar el catálogo de traducciones:

xgettext ––keyword=__ ––keyword=_e ––language=PHP ––files-from=file-list.txt -j ––from-code=UTF-8 -d es

xgettext
invoca al programa xgettext
––keword=__ ––keyword=_e
indica que las cadenas a traducir son aquellas marcadas como __() y _e()
––language=PHP
indica que el lenguaje de programación de los archivos a procesar es PHP
––files-from=file-list.txt
indica que debe procesar la lista de archivos guardada en file-list.txt
-j
indica que debe unir las nuevas cadenas al catálogo existente. Sólo debe utilizarse si no ya hay un catálogo existente
––from-code=UTF-8
indica que la codificación de los archivos a procesar es UTF-8
-d es
indica que el archivo de salida (el catálogo) deberá llamarse es.po

Una buena idea es crearse un archivo BAT con estas órdenes:

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

Así lo puedes invocar fácilmente o copiar y pegar al directorio del theme en el que estés trabajando

Tags: , , , , , , ,

Reacciones

Enlace para Trackbacks | Ir a escribir un comentario

11 Trackbacks/Pingbacks

  1. Pingback: aNieto2K » Blog Archive » Sistema de traducción de themes para Wordpress(II) el Junio 9, 2006
  2. Pingback: TheIndex.Agregador » Blog Archive » Localización con WordPress el Junio 9, 2006
  3. Pingback: aNieto2K » Blog Archive » Sistema de traducción de themes para Wordpress el Junio 9, 2006
  4. Pingback: TheIndex.Agregador » Blog Archive » Sistema de traducción de themes para Wordpress(II) el Junio 9, 2006
  5. Pingback: Actual World» Blog Archive » Traducción al español de Unnamed One el Septiembre 2, 2006
  6. Pingback: Minyx » Storelicious » Premium Themes para WordPress, phpBB y otros el Agosto 19, 2007
  7. Pingback: Update : Minyx 1.2 » Storelicious » Premium Themes para WordPress, phpBB y otros el Agosto 19, 2007
  8. Pingback: Minyx | Infected-FX| tutoriales, recursos y referencias para desarroladores y diseñadores web el Agosto 19, 2007
  9. Pingback: Worpress Theme translation | blog.lebrijo.com el Noviembre 17, 2007
  10. Pingback: Traducir un tema de Wordpress | blog.lebrijo.com el Noviembre 17, 2007
  11. Pingback: Minyx v1.0| Just another WordPress weblog| WPFolio el Diciembre 31, 2007

17 Comentarios

  1. Autor del Comentario:
    Ícono Gravatar xelaxel
    Enviado el:
    Junio 9, 2006
    1

    opps parece que el traducir un tema es muy difícil, casi veo estas instrucciones como instrucciones especiales para construir un cohete de la tierra a la luna.

  2. Autor del Comentario:
    Ícono Gravatar LA100RRA
    Enviado el:
    Junio 9, 2006
    2

    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.

  3. Autor del Comentario:
    Ícono Gravatar Felipe Lavín Z.
    Enviado el:
    Junio 9, 2006
    3

    La verdad es que no es tan complicado, y tampoco es necesario saber programar —de hecho, yo no sé más que lo que he aprendido armando themes. Quizás ha sido un error mío sobre-explicar las cosas, pero en verdad una vez que lo has comprendido ya se hace mucho más fácil.

    La idea de LA100RRA me parece bien buena, aunque creo que haría falta un lugar central para coordinar todo, con un software tipo TRAC u otro para controlar versiones y errores (¿alguien se anima?)

  4. Autor del Comentario:
    Ícono Gravatar aNieto2k
    Enviado el:
    Junio 9, 2006
    4

    La verdad es que está muy bien el articulo y es muy util, aunque le veo un problema.

    Yo en mi host no tengo acceso SSH al servidor, entonces ya no puedo hacer nada de esto ¿no?

    Eso es un impedimento para mucha gente, aunque otro impedimento puede ser el uso de Linux o Gettext.

    La idea de LA100RRA me gusta, aunque es complicado hacer que la gente colabore.

    De todas formas he creado la lista de themes en proceso para intentar corregir esto de algun forma, si teneis alguna sugerencias ya sabeis. ;)

    Un saludo.

  5. Autor del Comentario:
    Ícono Gravatar Felipe Lavín Z.
    Enviado el:
    Junio 9, 2006
    5

    Andrés, lo del acceso SSH o linux no es necesario, ya que como dice por ahí el Gettext está disponible para Windows y es tan fácil de instalar como cualquier otra aplicación. Lo que sí tiene como desventaja es que no existe una GUI para utilizarlo, sino que hay que hacerlo todo desde la línea de comandos, pero con los comandos expuestos en el artículo puedes lograr las tareas más urgentes… siempre se puede crear el catálogo de forma manual, pero creo que ejecutar una instrucción y armarlo automáticamente es mucho más fácil

  6. Autor del Comentario:
    Ícono Gravatar LA100RRA
    Enviado el:
    Junio 11, 2006
    6

    Felipe, creo que mientras se van anotando más bloggers a éste proyecto tu podrías ir generando algunos .po y Andrés los podría ir poniéndo disponibles para descarga en la wiki de su página, tal como está ahora y cuando alguien lo descargue pués ya nadie más se pondrá a traducir ése tema, no sé que tan factible les parezca la idea pero creo que podríamos ir avanzando bastante de ésa manera ¿no créen?

  7. Autor del Comentario:
    Ícono Gravatar Jose Enrique
    Enviado el:
    Junio 12, 2006
    7

    Yo acepto a partir del 5 de Julio que es mi último examen y al igual que nieto ando con muchos proyectos de aquí y de allá, pero para no perder mis ganas en participar id informando de si el proyecto sigue adelante.

  8. Autor del Comentario:
    Ícono Gravatar Jose Enrique
    Enviado el:
    Junio 12, 2006
    8

    Yo sería la tarea fácil de no programar ni jaleos por lo menos en principio, luego si me animo que deseo animarme, me gustará estar en todos los lugares de la producción de temas en masa al castellano.

  9. Autor del Comentario:
    Ícono Gravatar Erolando
    Enviado el:
    Junio 12, 2006
    9

    Quisiera poder editar tu theme…

    Este comentario es para pedir permiso…

    Y ademas como puedo poner un sidebar a este theme…

    Tienes mi correo …
    gracias de antemano

  10. Autor del Comentario:
    Ícono Gravatar Felipe Lavín Z.
    Enviado el:
    Junio 13, 2006
    10

    Erolando: tienes toda la autorización, está implícita en la licencia del tema (GNU GPL). Para poner un sidebar a este theme tendría que editar los archivos que están en el directorio raíz del tema.

  11. Autor del Comentario:
    Ícono Gravatar guido_cc
    Enviado el:
    Agosto 24, 2007
    11

    Definitivamente hay conceptos acá que me superan, y me dejan con la moral baja para intentar traducir un theme desde cero.

    ¿No hay alguna explicacion aun mas simple?

    Eso de marcar las cadenas…uf, colapso con eso. De que hablan?

    Saludos.

  12. Autor del Comentario:
    Ícono Gravatar Felipe Lavín Z.
    Enviado el:
    Agosto 27, 2007
    12

    guido_cc: la otra forma de hacerlo es simplemente revisar el código del theme y traducir todo el texto que te encuentres.

    El método que presento acá es ciertamente un poco más complejo (la primera vez cuesta, de ahí en adelante es bastante fácil) y tiene la ventaja de que además podrías traducirlo a otros idiomas, pero ciertamente no es el único. En lo personal, creo que es mejor (o más adecuado, si se quiere) si piensas publicar la traducción, eres el creador de un theme o esperas que el creador del theme pueda incorporar tus modificaciones en futuras versiones.

  13. Autor del Comentario:
    Ícono Gravatar guido_cc
    Enviado el:
    Agosto 27, 2007
    13

    Gracias por responder Felipe ;-)

    Mira, no quiero parecer pesado, ya que el objetivo que persigo es justamente el otro.

    Me interesa ayudar y/o traducir algo. Tengo tiempo y ganas, ademas que quiero implementar algo en un par de proyectos que tengo por ahi con amigos. Y por lo mismo es que me interesa entender, comprender, no se, captar que es lo que estan hablando. Es por eso que comentaba que me veia superado por conceptos que creo que entendiendolos la primera vez, luego será todo mas fácil.

    Es por eso que honestamente me gustaría que me ayudaran, y supongo que a mas de uno le servira, algo aun mas basico, no en el sistema en si, si no en comprender y conceptualizar el como hacerlo.

    Ejemplo. cadenas, argumento, función… son temas que en lo personal quedo colgado, pero me imagino que se podria hacer un esfuerzo en explicarlo a los que no somos informaticos de corazon. Un poco mas de paciencia con los n00bs como yo.

    Luego, ocupar el poedit es fácil. Pero es justamente antes donde me quedo bloqueado.

    Disculpen lo extenso.

    Saludos.

  14. Autor del Comentario:
    Ícono Gravatar Felipe Lavín Z.
    Enviado el:
    Agosto 27, 2007
    14

    guido_cc: en primer lugar, no hay problema ;)

    Ahora, con respecto a lo que me dices, siento que un comentario es muy poco para poder responder a las inquietudes que tienes; los conceptos que mencionas son propios de programación, y en lo personal no se más de programación que lo que he aprendido haciendo cosas como ésta y creando themes para WordPress, por lo que no me considero una persona muy idónea para explicar con la suficiente claridad estos conceptos.

    Lo que sí te puedo recomendar es comenzar a experimentar en base a los ejemplos que puedas ver acá y especialmente en el Codex de WordPress y el Manual de PHP; también puedes instalar EasyPHP, un paquete de software para Windows para poder hacer pruebas locales (algo muy útil, instala Apache, MySQL e intérprete PHP).

    Por mi parte, trataré de publicar algo orientado a lo que indicas, ojalá en colaboración con alguien que se sienta como pez en el agua en PHP, y una nueva parte de este post con más ejemplos y menos palabrería ;)

    No me queda más que desearte suerte, y que ojalá no te desanimes, esto lleva tiempo, pero la blogósfera puede ser una buena fuente de información

  15. Autor del Comentario:
    Ícono Gravatar Demian
    Enviado el:
    Septiembre 5, 2007
    15

    Acabo de llegar a este post (que veo ya tiene un tiempo). Fabuloso! Me ha resuelto unas cuantas dudas.
    Da gusto cuando la gente se toma el tiempo de explicar las cosas bien. Un saludo y gracias.

  16. Autor del Comentario:
    Ícono Gravatar Forenaits
    Enviado el:
    Marzo 30, 2008
    16

    Genial, pero ¿podrías explicar mejor como usas gettext a través de SSH? Yo también estoy en dreamhost y sé que esta instalado pq lo he probado pero no consigo que funcione.

    Tienes mi email a tu disposición.

  17. Autor del Comentario:
    Ícono Gravatar Felipe Lavín Z.
    Enviado el:
    Marzo 31, 2008
    17

    @Forenaits: ¿qué error te da?

    Es igual que usarlo en local, con la excepción de que ya está todo instalado. Por ejemplo, puedes dirigirte al directorio donde están los archivos del theme/plugin con las cadenas ya marcadas y ejecutar lo siguiente: xgettext –keyword=__ –keyword=_e –language=PHP *.php

Deje un comentario

Escribe un Comentario