Haz que tu plugin sea traducible

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