Ir al contenido

Este post hace más de dos años que no se ha revisado, es posible que la información publicada sea obsoleta o las referéncias no existan.

De como ahorrarse plantillas cuando creas una web multiidioma con Wordpress usando Multisite, y la internacionalización de Themes.

Me toca lidiar con idiomas montando webs en WordPress en el 90% de los casos, es lo que tiene el bilinguismo y vivir en una zona turística. Definitivamente los PlugIns dedicados a dar este servicio en WordPress no me convencen y después de la mala experiencia con QTranslate al final me he decidido a utilizar los recursos propios de WordPress para crear páginas en idiomas, a saber: Multisite y ChildThemes.

Multisite, multilenguaje

Si hacemos una instalación “multisite” para montar un WordPress para cada idioma deberemos bajarnos los archivos asociados a cada idioma e incorporarlos en la carpeta de languages que se encuentra en la carpeta wp-conten.

Pero ¿que pasa si al crear nuestra plantilla necesitamos incorporar contenido personalizado en las plantillas que debemos mantener traducido en todos los idiomas?

La solución a las bravas, es crear un Childtheme y añadir a cada idioma el texto traducido en su plantilla correspondiente. Lo elegante es utilizar .mo y .po y reducir el número de plantillas generadas en cada idioma.

Archivos .po

Es el archivo con el que trabajamos, aquí deberemos escribir la frase (o palabra) de referencia y su traducción. Pongamos por caso un site en Español e Inglés.

Primero generamos el archivo .po con cualquier editor de código o editor .txt, e incluimos la cabecera del archivo y la frase a traducir, la cabecera por defecto en WordPress es así, esta cabecera incluye información de la gente que ha participado y precisa de más información que si lo creais y editais vosotros mismos, esta es la cabecera que empleo yo ahora mismo para las traducciones en español.

# Traducciones para Mi Theme
msgid ""
msgstr ""
"PO-Revision-Date: 2012-10-18 11:48+0100\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"X-Generator: Poedit 1.5.4\n"

Algunos datos de la cabecera, como la fecha, se generan automáticamente al guardar el archivo cuando convertimos el archivo a .mo.
Después de la cabecera basta ir añadiendo el código con la traducción propiamente dicha.

#: header.php:87
msgid "Best site ever"
msgstr "El mejor site del mundo"
  • La primera linea (comentario) indica en que archivo donde aparece la frase traducida, incluyendo la línea de código, esta linea es opcional, pero muy útil.

  • La segunda msgid es la palabra de referencia que incluiremos en la plantilla y que sirve de referencia para aplicar la traducción que corresponda.

  • La tercera msgstr es la traducción en el idioma que deseamos.

Suelo incluir como referencia el texto en inglés, porque el core de WordPress está en ese idioma y por ahorrarme un archivo.

Archivo .mo

Una vez creado todo el archivo de texto podemos generar el archivo .mo

Que para que nos entendamos, es una versión comprimida del .po

En internet encontrareis varias webs y aplicaciones para ello, yo empleo Poedit.

El archivo generado lo guardaremos con un nombre específico, en el caso del castellano sería es_ES.mo, si tenéis dudas siempre podéis acudir a pa carpeta wp-content/languages y ver como se renombra en cada idioma. Para más información aquí tenéis la página con los idiomas y su nomenclatura

Una vez generado lo colocamos en la carpeta del Theme:

wp-content / themes / el-nombre-de-mi-theme / languages

Incluir la función en functions.php

Si creáis el “Theme” desde 0 debéis incluir la función en functions.php, si estáis trabajando con un theme ya hecho es posible que ya la lleve incluida.

load_theme_textdomain('my_theme', get_template_directory() . '/languages');

Donde my_theme es el identificador único para la recuperación de las cadenas de texto traducidas.

Referenciar la traducción en la plantilla.

Código necesario para referenciar los archivos .mo

Solo nos falta referenciar la frase a traducir en la plantilla:

<?php _e( 'Best site ever', 'textdomain' ); ?>

La segunda opción (‘my_theme’) hace referencia al nombre de la carpeta donde se aloja el Theme. Si trabajáis con ChildThemes podéis colocar todas las traducciones en la carpeta “languores” del theme principal.

Links de referencia

Todo esto tiene bastante miga, os dejo el link de referencia para que podáis bucear entre las opciones referidas a los tipos de mensajes que existen, especialmente interesante es el formateo de fechas dependiendo del idioma.

Translating WordPress