Oferta SiteGround Black Friday

Como hacer un theme WordPress traducible

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.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 4.4 / 5. Total de votos: 8

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado. ¡Ah! ¿te funciona? pues entonces no he dicho nada :)

Sobre el autor

16 comentarios en “Como hacer un theme WordPress traducible”

  1. No entiendo esta cadena:

    <code>languages/$locale.php</code>

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

  2. __('…'): 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.

  3. programas programado

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

    saludos

  4. 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?

  5. 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?

  6. 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.

  7. Jesús Miguel Moreno Plasencia

    y si deseo realizar un tema el cual use un plugin como Polylang, el uso de _e(» «) seria de utilidad a la hora de realizar la traducción. gracias!

  8. Hola Fernando!!!,

    Quería preguntarte una duda respecto a las traducciones. Estoy traduciendo un tema, lo tengo ya todo menos unas frases que no aparecen en el .po. Debe ser porque no tienen el formato adecuado para que se pueda leer. Entonces me gustaría saber si existe alguna manera de traducir esto sin tocar los archivos .php, es decir, que esas cadenas aparezcan para ser leídas y traducibles en los archivos .po.

    El códgo donde está la frase a traducir es el siguiente:

    $related = new WP_Query($args);
    if($related->have_posts() && $related->found_posts >= 1):
    $out.=»;
    $out.=».__(‘Related Portfolios ‘, ‘corporative’).»;
    $out.=»;
    $count=1;
    while($related->have_posts()): $related->the_post();
    $gallery = $videoURL = $format = »;
    if(get_field( ‘portfolio_gallery’ )){$gallery = get_field( ‘portfolio_gallery’ );}
    if(get_field( ‘portfolio_video’ )){$videoURL = get_field( ‘portfolio_video’ );}

    if(get_field(‘portfolio_format’)==’video’): $format = ‘Video’;
    elseif(get_field(‘portfolio_format’)==’gallery’): $format = ‘Gallery’;
    else: $format = ‘Standard’;
    endif;
    $out .= »;
    $out .= mediaholder_caption(»,$format,515,369,’portfolio’, $videoURL, », $gallery );
    $out .= ‘‘.get_the_title().’‘;
    $out .= »;
    if($count%4==0){$out .=»;}
    $count++;
    endwhile;
    $out.=»;
    $out.=»;

    Muchas Gracias. Saludos

  9. Hola Fernando!!!,

    Quería comentarte una duda que me ha surgido al ir a hacer la traducción de un sitio web. Está en castellano e inglés. Se ha utilizado WPML para ello. Se han traducido también los plugins. Para la plantilla he utilizado el archivo .mo, pero aún han quedado ciertas frases sin traducir. No quiero tocar los .php porque cambia pero no traduce para ambos idiomas. Por eso quewría saber si existe algún metodo para poder hacer que el archivo .mo pueda leer esas frases, se les puede dar formato cambiando el código de alguna forma?.
    Muchas gracias, Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Scroll al inicio