En ocasiones -y para mejorar la personalización de nuestro proyecto web- hemos tenido la necesidad de cambiar algunas líneas de traducción del entorno administrativo. La mayoría de los desarrolladores trabajan esa parte de forma estática (o modificando constantemente el archivo *.po principal, o agregando uno alterno). Lo que algunos ignoramos es que existe un método dinámico para cumplir esta tarea.
Caso 1: Traducir una línea
Pega este código en tu functions.php, guárdalo y mira el resultado en tu panel de edición (campo del título del post):
Código PHP:
Ver originaladd_filter( 'gettext', 'cambiar_traducciones', 10, 4 );
function cambiar_traducciones( $trad , $texto , $dom ) {
$traduccion = &get_translations_for_domain( $dom );
if ( $texto == 'Enter title here' )
return $traduccion->translate( 'Nombre del producto' );
return $trad;
}
Ta güeno vedá!!... Sin embargo lo más probable es que deseemos cambiar varias líneas en lugar de una sola.
Caso 2: traducir varias líneas de una vez
Simplemente ordenaremos
'original' => 'personalizado' mediante un array y permitimos que un loop lo procese de esta manera:
Código PHP:
Ver originalfunction cambiar_traducciones( $trad , $texto , $dom ) {
$traduccion = &get_translations_for_domain( $dom );
'Enter title here' => 'Nombre del producto',
'Featured Image' => 'Foto del producto'
);
foreach($txt as $k => $v)
if ( $texto == $k )
return $traduccion->translate( $v );
return $trad;
}
Hemos modificado tanto el campo del título como el módulo de imagen destacada. En el array $txt puedes agregar tantas líneas necesites. Es importante mencionar que las líneas originales deben corresponder a las que están escritas en los archivos, es decir, del idioma inglés. Igualmente deben escribirse tal cual se encuentran, incluyendo mayúsculas/minúsculas. Ahora vamos con un ejemplo un poquitín más exigente pero igualmente necesario en algunos casos.
Caso 3. Sólo traducir en determinado tipo de post
Supongamos que tenemos un postype identificado como
'productos' y queremos alterar la traducción sólo en éste, dejando post, pages y otros en paz. Usaremos la misma función anterior y agregaremos la condicional pertinente:
Código PHP:
Ver originalfunction cambiar_traducciones( $trad , $texto , $dom ) {
global $typenow;
$traduccion = &get_translations_for_domain( $dom );
if ( $typenow == 'productos' ) {
'Enter title here' => 'Nombre del producto',
'Set featured image' => 'Agregar foto del producto',
'Featured Image' => 'Foto del producto'
);
foreach($txt as $k => $v)
if ( $texto == $k )
return $traduccion->translate( $v );
} else
return $traduccion->translate( $texto );
return $trad;
}
Otro punto importante es que la función sólo actúa sobre las traducciones originales del núcleo de WordPress.
Hasta aquí el mini-tuto (por eso lo de mini). Espero te sirva en más de una ocasión.