Morton 20 de septiembre de 2013 a las 18.42
   Imprimir artículo
elWebmaster.com

Traduce tu WordPress: Guía para traducir tu tema a otros idiomas


wordpress-wide

Si se los implementa desde el comienzo de un proyecto, hacer tus temas de WordPress traducibles es sencillo. Si aún no lo has hecho, aquí te daremos una pequeña guía de cómo lograrlo.

A modo de resumen, todo lo que haremos será reemplazar los strings hardcodeados (es decir, los textos que están definidos desde el código) por funciones. De esta forma, “Hello World” se convierte en (‘Hello World’, ‘mytranslations’). La función se asegurará de que una traducción exista para el primer parámetro. Si existe, se usará la traducción, sino, el primer parámetro se mostrará como está. Eso es todo.

Para lograr esto, necesitaremos incluir un archivo de lenguaje, indicarle a WordPress que ese archivo existe, y listo.

Empecemos por la función básica:

  1. <h2><?php _e( 'Recent Posts', 'mytranslations' ) ?></h2>

La función (_e) registra un string traducible y lo muestra en el acto. El segundo parámetro es el dominio del texto. Cuando estás traduciendo un tema o un plugin, siempre debes añadir el dominio del texto para separarlo de otras traducciones.

Una regla importante de las traducciones que no contienen ninguna variable. Cuando marcas un string para traducirlo con cualquiera de las funciones, se busca ese string exacto. La función buscará por “posts recientes” si ese es el string que indicamos, y mostrará su traducción en alemán si eso es lo que le indicamos. ¿Cómo indicamos entonces que la variable debe ser también incluida? Utilizamos placeholders. Para eso, necesitaremos las funciones print_f() y sprint_f(). Las utilizaremos de esta manera:

  1. printf( __( 'Welcome back %s', 'mytranslations' ), $current_user->display_name );

Esto hará que se incluya correctamente la variable adyacente al string, en este caso, el nombre del usuario al que se le da la bienvenida.

Si tienes más de un placeholder en un string, deberías usar intercambio de argumentos, una gran técnica para aumentar la flexibilidad de tus traducciones.

  1. printf( __( 'Your email has been changed to %1$s and your city is now %2$s', 'mytranslations' ), $current_user->email, $current_user->city );

Ya que los placeholders fueron marcados, el traductor puede usarlos en el orden que desee. Al principio utilizarás mayormente a “%s” (strings )y a “%d” (integers) pero hay 15 in total.


Plurales

Los plurales son algo más dificil porque no sólo introducen una variable en el string, sino que parte del string es diferente. Es ahí donde entra en juego la función _n().

  1. printf( _n( 'You have %d unread message', 'You have %d unread messages', $count, 'mytranslations' ), $count );

Como puedes ver, la función _n() contiene cuatro parámetros: la forma singular, la forma plurar, el número basado en si la versión singular o plural se está mostrando, y el dominio del texto.


Indicando el contexto

En algunos casos, los strings a traducir pueden no ser claros. En el siguiente ejemplo, el traductor puede no interpretarlo correctamente:

  1. _e( 'Comment', 'mytranslations' );

El problema proviene de los múltiples significados de la palabra “comment”. Puede ser un sustantivo indicando un comentario, o puede ser un verbo refiriendo a la acción de comentar. Por suerte, existe la función _x(), que utilizaremos para indicar el contexto específico:

  1. $comment_text = _x( 'Comment', 'verb', 'mytranslations' );

Este método le indica al traductor el contexto (el segundo parámetro, podemos ver que es “verb”), asegurándose de que tengan toda la información necesaria para alcanzar la traducción correcta.

Con _ex() mostraremos el string de inmediato, y con _nx() combinaremos el contexto con los plurales, de esta manera:

  1. sprintf( _nx( '%d Like', '%d Likes ', $like_count, 'noun', 'mytranslations' ) );


Escapar caracteres

En varios casos, necesitarás escapar caracteres para asegurarte que puedas usar tus strings traducidos en HTML o en los atributos. WordPress posee 6 funciones que pueden ayudarte a seguir el esquma necesario.

esc_attr__( $text, $domain ) devuelve la traducción de $text, y la escapa para usarla en atributos.
esc_attr_e( $text, $domain ) devuelve y muestra la traducción de $text y la escapa para usarla en atributos.
esc_attr_x( $text, $context, $domain ) devuelve y muestra la traducción de $text de acuerdo al $context y la escapa para usarla en atributos.
esc_html__( $text, $domain ) devuelve la traducción de $text y la escapa para usarla en HTML.
esc_html_e( $text, $domain ) devuelve y muestra la traducción de $text y la escapa para usarla en HTML.
esc_html_x( $text, $context, $domain ) devuelve y muestra la traducción de $text de acuerdo al $context y la escapa para usarla en HTML.


Separación de plurales

Los plurales son el único tipo de traducción que requiere que algo sea calculado al momento de mostrarlos. Dada esta propiedad, no pueden ser fácilmente separados del contenido. Necesitan ser ubicados exactamente donde la traducción se sucede, no pueden ser referenciados. Por ejemplo:

  1. $count = get_message_count();
  2. $message_text = sprintf( _n( 'You have %d unread message', 'You have %d unread messages', $count, 'mytranslations' ), $count );

Es obvio en base al ejemplo que no podemos separar la traducción y ubicarla en un archivo aparte, ya que la traducción exacta depende del valor de $count. Las funciónes _n_noop() y translate_nooped_plural() son las que usaremos ahora. Así quedaría el ejemplo de arriba incluyendo estas funciones:

  1. $message_plural = _n_noop( 'You have %d unread message', 'You have %d unread messages', 'mytranslations' );
  2. $count = get_message_count();
  3. $message_text = sprintf( translate_nooped_plural( $message_plural, $count ) , $count );

Con este pequeño truco, haremos nuestra traducción independiente del valor de $count.

Otra función que queda por analizar es _nx_noop(), que como a esta altura habrás podido deducir, es lo mismo pero con el añadido del contexto.

  1. $message_plural = _nx_noop( '%d Like', '%d Likes', 'noun', 'mytranslations' );
  2. $count = get_message_count();
  3. $message_text = sprintf( translate_nooped_plural( $message_plural, $count ) , $count );


Creando los archivos de traducción

Para crear los archivos de traducción, requeriremos las herramientas de wordpress-i18n que deberemos obtener del repositorio. Para esto, hará falta la línea de comandos de svn o una aplicación que maneje repositorios SVN.

Lo primero que haremos será comprobar el repositorio. Para eso, daremos pull al siguiente repositorio en nuestra herramienta de SVN:

http://i18n.svn.wordpress.org/tools/trunk/

Una vez hecho esto, deberíamos ver un directorio de archivos php que podremos usar para obtener datos de traducción. Nuestro objetivo es crear un archivo “pot” (el indicado para las traducciones), por lo que deberemos correr el siguiente comando:

php makepot.php wp-theme path-to-your-theme

Unos segundos después veremos el nuevo archivo en nuestro directorio de herramientas de lenguaje. El nombre del archivo pot se corresponderá con el nombre del tema que utilizamos. Este archivo puede ser puesto en cualquier parte del directorio de tu tema, pero sugerimos colocarlo en un directorio dedicado a lenguajes.


Asociando la traducción al tema

Para asegurarnos que la traducción sea utilizada, debemos indicarle a WordPress dónde está situada. Esto es algo muy sencillo que puedes arrojar a tu archivo de funciones, en todos tus proyectos.

  1. load_theme_textdomain( 'mytranslations', get_template_directory() . '/languages' );
  2. $locale = get_locale();
  3. $locale_file = get_template_directory() . "/languages/$locale.php";
  4. if ( is_readable($locale_file) ) {
  5. require_once($locale_file);
  6. }

Con este código, el archivo de lenguaje correcto será cargado, si existe. Si no existe, será utilizado el lenguaje original.
Eso es todo ¡Esperamos que sea de utilidad!

Fuente original del artículo: Vandelay Design
Traducción realizada por
elWebmaster.com


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (3)

  1. Lucas Mario Arias dice:

    ME PARESIO MUY FAVORABLE ESTA NUEVA TECNICA DE TRADUCCIÒN DE TRADUCE TU WORDPRESS, YA QUÈ ES UNA NUEVA PRACTICA DE USALO.

  2. Francisco Montes O. dice:

    Me parece un buen aporte al proceso de traduccion.

  3. friv dice:

    Gracias por compartir información. es nuevo y útil para mí

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder