Página principal » Documentación » Soporte » Traducción de textos generados por otros plugins y Temas

Traducción de textos generados por otros plugins y Temas

WPML contribuye a la traducción de textos que son generados por otros plugins y por el Tema. Comencemos con un ejemplo.

El plugin popular Contact Form 7 genera formularios de contacto que pueden ser agregados a su sitio web. Puede utilizar sus campos por defecto (como nombre y correo electrónico) y agregar los suyos propios. Cuando el visitante ve el sitio desde diferentes idiomas, el formulario de contacto debe amoldarse a cada idioma en particular.

Si todos los textos están escritos directamente dentro del plugin, pueden ser personalizados para cada idioma por medio de la función gettext (el archivo .mo del plugin). Sin embargo: ¿cómo administrar aquellos textos que son ingresados por el usuario? Si el usuario ingresa un campo nuevo al formulario de contacto, como por ejemplo "Profession", éste no puede ser traducido por medio del archivo .mo del Tema. El usuario debe poder ofrecer la traducción correspondiente para ese texto.

Traducción de cadenas en WPML

WPML incluye un mecanismo para traducir este tipo de textos. Por defecto, ayuda a los usuarios a traducir el título del blog, la línea de texto, los textos de widgets y otros textos generados por WordPress. Tanto otros plugins como el Tema pueden utilizar este mecanismo para proporcionar la traducción de estos textos que deben ser desplegados en pantalla.

1. Registrar las cadenas que deben ser traducidas

Cada vez que el usuario genera cadenas nuevas o actualiza las existentes, éstas necesitan ser registradas en la tabla de cadenas de WPML. Para realizar esto debe utilizarse la llamada:

icl_register_string($context, $name, $value)
  • $context – el nombre del plugin, en un formato interpretable por el ser humano.
  • $name – el nombre de la cadena que ayuda al usuario (o traductor) a entender qué está traduciendo.
  • $value – la cadena que debe ser traducida.

En el ejemplo de nuestro formulario de contacto, cuando agregamos un campo nuevo (llamado ‘Profession’), deberíamos realizar la llamada:

icl_register_string('Contact Form 7', 'Input field label', 'Profession')

Esto le indicará a WPML que la cadena ‘Profession’ necesita ser traducida. Cuando el usuario procede a traducirla, puede ver que la misma es parte del plugin ‘Contact Form 7′ y que es un objeto del tipo ‘Input field label’.

Si el plugin ya no tiene necesidad de traducir un determinado texto (por ejemplo, si el usuario elimina ese campo del formulario de contacto), la cadena puede ser removida de la tabla de traducción por medio de la función:

icl_unregister_string($context, $name)

2. Utilizar la traducción al mostrar el texto

Cada vez que se muestra el formulario de contacto del plugin, éste necesita recuperar la traducción y utilizarla. Para lograr esto, aprovecha la función icl_t:

icl_t($context, $name, $value)

WPML busca una cadena que concuerde con $context y $name. Si la encuentra, busca una traducción en el idioma actual (el idioma en el cual está siendo desplegado el sitio). Si la traducción existe, devolverá su contenido. De otra forma, devolverá la cadena original.

El argumento $value es pasado a la llamada icl_t() de modo tal que si WPML no hubiere estado activo cuando la cadena fue creada y dicha cadena no estuviere registrada, aún pueda obtener el valor normal de la cadena.

La forma en que WPML maneja internamente la traducción de cadenas

WPML incluye una interfaz de traducción que muestra las cadenas y permite la administración de su traducción.

Interfaz de traducción de WPML

Interfaz de traducción de WPML

Cuando el usuario presiona traducción de cadenas, un panel multilingüe de traducción aparece y permite editar la traducción por idiomas. Cada traducción tiene un marcador que indica si está completa. Si la traducción a todos los idiomas está completa, la cadena misma está marcada también como completa.

Cuando la cadena es modificada, todas sus traducciones son marcadas como incompletas para que el usuario sea advertido de revisar todas las traducciones.

Toda la edición de cadenas es realizada desde la misma interfaz de administración de WordPress y no necesita de ninguna llamada adicional a servicios externos.

Cómo integrar la traducción de cadenas de WPML con plugins y Temas

Al integrar la traducción de cadenas al plugin, o al Tema, es importante asegurarse que la llamada existe.

La llamada a la función de traducción de cadenas de WPML debe estar integrada en el argumento de if_function_exists(). De esta manera, si WPML está activo, se podrá acceder a ella. En caso contrario, se mantendrá la operativa normal.

Adicionalmente, los desarrolladores del plugin deberán considerar la posibilidad que WPML sea activado mucho después que el usuario comience a utilizar su plugin, en cuyo caso la llamada icl_register_string no se efectuó cuando se crearon las cadenas nuevas, por lo que nunca serán traducidas. Para solucionar este problema, es una buena medida registrar todas las cadenas del usuario cada vez que la pantalla de administración del plugin sea cargada.

Esto adicionará una tardanza de ejecución insignificante pero garantizará que todas las cadenas sean enviadas siempre a traducción para mantenerlas actualizadas. El código puede verificar una vez la existencia de icl_register_string y, de esa manera, llamar a dicha función para registrar todas las cadenas que ingrese el usuario.

Si la función es llamada con valores en blanco o NULL, WPML la ignorará. Si la cadena ya existe pero está marcada como sin modificación, la llamada también es ignorada. Solo surtirá efecto si la cadena está registrada como nueva o modificada.

La tabla de traducción completa se mantiene en la memoria caché, por lo que las llamadas repetidas no hacen perder capacidad al procesador.

Qué necesita ser enviado a traducción

Comencemos por lo que no necesita ser registrado por medio de icl_register().

WPML utiliza diferentes entradas, páginas, etiquetas y categorías para distintos idiomas. Ello implica que si el sitio contiene estas dos páginas "example.com/about/" y "example.com/es/sobre/", deberían ser páginas diferentes de WordPress.

Cada texto que sea agregado por página debería aparecer en múltiples idiomas; el usuario solo debería ingresar el texto correcto para el idioma en que está escrita la página.

Lo que debe ser traducido utilizando la función de traducción de cadenas de WPML son textos que no están relacionados a ninguna entrada, página, etiqueta o categoría Por ejemplo, los plugins SEO permiten el ingreso de textos para el título de la página principal, palabras clave y descripción. Estos textos necesitan ser traducidos utilizando la función de traducción de textos de WPML. De esta manera, los textos se mostrarán traducidos para páginas principales diferentes.

3 respuestas para “Traducción de textos generados por otros plugins y Temas”

  1. MABM dice:

    Estoy realizando unas pruebas en WP con el plugin de ustedes y funciona bien, solo que tengo una pregunta, En mi sitio esta la pagina Home, pero al seleccionar el idioma Español, me muestra Home (Titulo) con el contenido de español pero los titulos se mantienen en Ingles y las demas paginas en Español.

    Que necesito hacer para que dependiendo del idioma seleccionado me muestre el home traducido? o a caso el plugin solo se puede utilizar en Paginas y Entradas?

    De antemano muchas gracias por su apoyo.

    Saludos,

  2. Laudino dice:

    como puedo hacer para que el plugin me traduzca las Theme Options??

    gracias

Deje una respuesta

Por favor, registre aquí comentarios sobre esta página solamente.
Por ayuda técnica o sugerencias, visite nuestro foro. ¡Lo esperamos ahí!

Puede utilizar estas etiquetas:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>