25ago
16

wordpress traducible

Cada vez es más grande la comunidad de desarrolladores de themes, incluso de habla hispana, y una funcionalidad que debería ser básica es ofrecer la internacionalización de los themes, algo vital para la difusión de los themes WordPress.

Pues bien, en este tutorial, que he traducido de una guía de Cats who code, tienes el proceso completo, para hacer un theme traducible, desde el principio.

1 – Añade las funciones necesarias

Para empezar con lo básico copia las líneas siguientes en el archivo functions.php de tu theme.

load_theme_textdomain( 'Nombre de mi theme', TEMPLATEPATH.'/languages' );

$locale = get_locale();
$locale_file = TEMPLATEPATH."/languages/$locale.php";
if ( is_readable($locale_file) )
	require_once($locale_file);

En la línea 1 verás la función load_theme_textdomain(). Esta función te permite cargar un Text Domain. Elige cualquier nombre, pero recuerda que tiene que ser único. Lo ideal sería usar el nombre de tu theme
.

2 – Internacionaliza tu theme

Para traducir nuestro theme WordPress usaremos las funciones PHP gettext.
GetText tiene dos funciones: _e__ (ambas con guión bajo).
La función “_e” se usa para imprimir texto “simple”, y la función __ se usa cuando el texto a mostrar ya está envuelto en tags PHP.

EJEMPLOS:

<?php _e("La página que buscas no existe", "Nombre de mi theme"); ?>
<?php the_content(__('Sigue leyendo...', "Nombre de mi theme")); ?>

Date cuenta de nuevo que el nombre del text domain (Nombre de mi theme). Recuerda que debe ser el mismo que en el fichero functions.php.

La parte aburrida es en la que tienes que reemplazar cada cadena simple por la función necesaria. Dependiendo e cuantas cadenas (strings) tenga tu theme esto puede ser una tarea realmente tediosa (de ahí que se internacionalicen tan pocos themes). Parece que hay algunas herramientas GNU que facilitan la tarea de extraer cadenas de los archivos de manera sencilla. Si quieres puedes buscar en Google por xgettext.

3 – Crea tu archivo .po

A partir de este momento tu theme WordPress ya puede traducirse fácilmente a cualquier idioma. Pero para mostrar los textos en un idioma distinto al tuyo tienes que añadir un archivo .po.

Los archivos .po significan Objeto Portátil (Portable Object). Básicamente, estos archivos contienen una cadena, y su traducción en otro idioma. Por ejemplo, si traduces la versión española de WordPress, tendrás un fichero es_ES.po dentro de la carpeta /wp-content/languages/. Este archivo contiene todas las traducciones para que tu theme “hable” Español, para que tu theme diga Bienvenido en vez de Welcome.

Pero hay buenas noticias, no tienes que buscar en los archivos de tu theme cada línea a traducir. Hay una herramienta online llamada icanlocalize.com que puede escanear archivos PHP y crear ficheros .po por ti. ICanLocalize extraerá todas las cadenas envueltas en llamadas __(“txt”, “domain”)_e(“txt”, “domain”). Las cadenas pueden cerrarse con comillas dobles(“) o comillas simples(‘) y con cualesquiera caracteres de codificación.

icanlocalize

Luego, los archivos Po pueden editarse con PoEdit, un software gratuito especialmente diseñado para esta tarea:

poedit

Como ya habrás imaginado, tienes que traducir cada cadena. Una vez hayas traducido todo guarda el archivo .po. PoEdit también creará un archivo .mo, que es una versión compilada del fichero .po.

4 – Puesta en marcha

Ahora que ya has hecho la parte más “difícil” del trabajo lo único que queda es definir tu “locale” en WordPress.

Para conseguirlo, lo primero es hacerte con tu código de idioma y país. Por ejemplo, si tu idioma es el Español y vives en Argentina, tu código será es_AR. El manual de GNU gettext tiene páginas para ayudarte a encontrar los códigos de tu paísidioma.

Una vez tengas tus códigos, abre el archivo wp-config.php y busca la constante WPLANG. Si existe, simplemente reemplaza el código existente por el tuyo. Si no existe, pues pega la siguiente línea (con tu propio código de país e idioma, por supesto)

define ('WPLANG', 'es_AR');

Fuentes

En los siguientes artículos encontrarás la documentación empleada para la elaboración de este post.

Para saber más:

  • Pingback: Bitacoras.com

  • http://elotroyo.co.cc ejner69

    No entiendo esta cadena:
    languages/$locale.php

    ¿Seguro que no es ‘.mo’ en lugar de ‘.php’? ¿O ese es otra cosa que nosotros no debemos meter mano?

  • http://ftblg.com Laullon

    __(‘…’): devuelve una cadena traducida.
    _e(‘…’): imprime (echo) la cadena traducida.

    ¡¡¡ PHP no tiene Tags !!!, solo funciones.
    el “tag” (yo dirá macro) <?php … ? > es para indicar que lo que hay dentro es código PHP…

    Esto:
    <?php __(“…”) ? >
    no haría nada.

    Un saludo.

  • http://ftblg.com Laullon

    perdón, no me di cuenta que se podían modificar los mensaje… borra este.

  • http://www.mundo-descargas.com/descargas/ct/programadores/ programas programadores

    Todos los themes se deberían hacer así, su traducción es muy sencilla y ayuda a expandir el producto.
    saludos

  • http://wisinyandelvideos.blogspot.com/ Wisin y Yandel Videos

    Gracias ! muy buen aporte, me ha sido de gran utilidad

  • Pingback: Twitter Trackbacks for Como hacer un theme WordPress traducible | Ayuda WordPress [ayudawordpress.com] on Topsy.com

  • Pingback: Recopilación de cursos y tutoriales interesantes 25. | Como Hacer - Tutoriales, Cursos y Videos para hacer inventos.

  • Pingback: Como hacer un theme WordPress traducible | Ayuda WordPress

  • Pingback: Como criar um arquivo de tradução para seu tema « Temas e Dicas para Wordpress

  • http://www.webserveis.com gerard

    pues no me funciona a mi, donde saco el Es_es.php?

    tegno
    $locale_file = TEMPLATEPATH.”/languages/$locale.php”;
    if ( is_readable($locale_file) )
    require_once($locale_file);

    wp-content/themes/CorporateSandbox/languages/es_ES.php -> no existe

    donde consigo ese archivo?

  • Pingback: Hasta siempre, querido Bloglines | Chiquiworld

  • Panukoshow

    lo realizas en php es se puede hacer median xml con cadenas traducidas de tus lineas

  • http://www.pcnovatos.com Jordi

    Como siempre, genial! pero… tengo una duda y es que IcanLocalize no encuentra las lineas de los comentarios para traducir:
    Cómo se ‘programa’ esta linea para pode ser traducida?

  • Enrique Castro

    Una cosa importante:

    Ojo con las etiquetas html en la traducción .PO tienen que estar las sintáxis perfectas, de lo contrario el Theme lo pilla mal.

    • http://tellado.es Fernando

      Cierto, buen apunte, una etiqueta mal cerrada y se puede destrozar el admin, el theme, de todo.