Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/05/2012, 15:21
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
[Mini-tutorial] Cómo traducir líneas dinámicamente en tu panel de administración

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 original
  1. add_filter( 'gettext', 'cambiar_traducciones', 10, 4 );
  2.  
  3. function cambiar_traducciones( $trad , $texto , $dom ) {
  4.  
  5. $traduccion = &get_translations_for_domain( $dom );
  6.  
  7. if ( $texto == 'Enter title here' )
  8.     return $traduccion->translate( 'Nombre del producto' );
  9.  
  10. return $trad;
  11. }
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 original
  1. function cambiar_traducciones( $trad , $texto , $dom ) {
  2.  
  3. $traduccion = &get_translations_for_domain( $dom );
  4.  
  5.     $txt = array(
  6.         'Enter title here' => 'Nombre del producto',
  7.         'Featured Image'   => 'Foto del producto'
  8.     );
  9.     foreach($txt as $k => $v)
  10.         if ( $texto == $k )
  11.             return $traduccion->translate( $v );
  12.  
  13. return $trad;
  14. }
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 original
  1. function cambiar_traducciones( $trad , $texto , $dom ) {
  2. global $typenow;
  3.  
  4. $traduccion = &get_translations_for_domain( $dom );
  5.  
  6. if ( $typenow == 'productos' ) {
  7.     $txt = array(
  8.         'Enter title here'   => 'Nombre del producto',
  9.         'Set featured image' => 'Agregar foto del producto',
  10.         'Featured Image'     => 'Foto del producto'
  11.     );
  12.     foreach($txt as $k => $v)
  13.         if ( $texto == $k )
  14.             return $traduccion->translate( $v );
  15. } else
  16.     return $traduccion->translate( $texto );
  17.  
  18. return $trad;
  19. }
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.