WordPress utiliza gettext para la internacionalización de temas y plugins.
Sin embargo con WordPress debemos usar la función propia __()
.
Funciones __()
Cadena simple:
__( 'texto', 'text-domain' );
Cadena simple + echo:
_e( 'texto', 'text-domain' );
Cadena simple + contexto:
_x( 'texto', 'contexto', 'text-domain' );
Cadena simple + echo + contexto:
_ex( 'texto', 'contexto', 'text-domain' );
Diferente cadena para plural y singular:
printf( _n( '%s person', '%s people', $count, 'text-domain' ), number_format_i18n( $count ) );
Uso con una variable:
printf(
/* translators: %s: Name of a city */
__( 'Your city is %s.', 'text-domain' ),
$city
);
Uso con dos o más variables:
printf(
/* translators: 1: Name of a city 2: ZIP code */
__( 'Your city is %1$s, and your zip code is %2$s.', 'text-domain' ),
$city,
$zipcode
);
Cuando usemos variables se debe comentar la línea superior con:
// translators: %s: a lo que se refiera %s.
Más funciones:
Básicas:
Traducir + escapar
Fecha y número
Text domain
El text domain es el identificador único de tu plugin o theme que WordPress usará para asignar las traducciones y debe coincidir con el slug de tu plugin o theme.
Para que funcione bien el text domain no puede ser una variable.
Añadir text domain de forma automática
Clonar el repo de WordPress con las herramientas de i18n. Para ello necesitarás tener instalado subversion.
svn co https://develop.svn.wordpress.org/trunk/
Desde la consola ir a la carpeta de tu plugin o theme y ejecutar:
php /path/to/add-textdomain.php -i text-domain directorio
El script añade el text domain a todos los archivos del directorio seleccionado pero no a los que están en subdirectorios así que hay que ir uno por uno a todos los directorios.
Archivo .pot
Es la plantilla a través de la cual se generarán los archivos .po para cada idioma.
Para generar el archivo .pot la mejor forma es a través de wp_cli
Instalar wp cli
descarga el archivo wp-cli.phar
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
comprueba que se ha instalado
php wp-cli.phar --info
haz que el archivo sea ejecutable y muevelo al Path para poder usar el comando wp
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
Comprueba que funciona
wp --info
Crear archivo .pot
Desde la carpeta donde se aloja tu plugin o theme
wp i18n make-pot . languages/text-domain.pot
Archivo .po
Es una copia del archivo .pot pero con las traducciones. Hay un archivo .po para cada idioma y la estructura del nombre debe ser la siguiente:
{text-domain}-{locale}.po
Locale se refiere al código del idioma que se representa con el código del idioma + el código de país. Por ejemplo es_ES
o en_US
.
Generar archivo .po desde consola:
msgmerge --update text-domain-es_ES.po text-domain.pot
La opción --update
por defecto creará una copia de seguridad del antiguo .po
Archivo .mo
Es una versión binaria del archivo .po y es la que WordPress realmente usa.
Compilar archivo .mo
Es necesario tener instalado gettext. Para instalarlo en Mac:
brew install gettext
brew link gettext --force
Una vez instalado gettext para crear los archivos .mo:
msgfmt -cv -o path/to/output.mo path/to/input.po