Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Traducir Javascript en Wordpress (i18n)

Estas en el tema de Traducir Javascript en Wordpress (i18n) en el foro de Javascript en Foros del Web. Buenas tardes, Estoy traduciendo una plantilla de Wordpress de propia creación y estoy teniendo problemas en un código Javascript. En la mayoría de sitios (incluso ...
  #1 (permalink)  
Antiguo 25/07/2013, 09:26
Avatar de seozeta  
Fecha de Ingreso: junio-2013
Mensajes: 98
Antigüedad: 10 años, 10 meses
Puntos: 66
Traducir Javascript en Wordpress (i18n)

Buenas tardes,

Estoy traduciendo una plantilla de Wordpress de propia creación y estoy teniendo problemas en un código Javascript. En la mayoría de sitios (incluso wordpress.org) dan el ejemplo de este tipo:
Código Javascript:
Ver original
  1. alert('El texto a traducir aquí');

Y luego en PHP:
Código PHP:
Ver original
  1. 'alert' => __( 'El texto a traducir aquí', 'my-text-domain' ),

El problema es que yo no tengo el texto dentro de un 'alert' ni nada parecido, sino un $(this).parent().append... Este es mi Javascript:

Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.     $('form#contactForm').submit(function() {
  3.         $('form#contactForm .error').remove();
  4.         var hasError = false;
  5.         $('.requiredField').each(function() {
  6.             if(jQuery.trim($(this).val()) == '') {
  7.                 var labelText = $(this).prev('label').text().toLowerCase();
  8.                 $(this).parent().append('<span class="error">You forgot to enter your '+labelText+'.</span>');
  9.                 hasError = true;
  10.             } else if($(this).hasClass('email')) {
  11.                 var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
  12.                 if(!emailReg.test(jQuery.trim($(this).val()))) {
  13.                     var labelText = $(this).prev('label').text();
  14.                     $(this).parent().append('<span class="error">You entered an invalid email.</span>');
  15.                     hasError = true;
  16.                 }
  17.             }
  18.         });
  19.         if(!hasError) {
  20.             var formInput = $(this).serialize();
  21.             $.post($(this).attr('action'),formInput, function(data){
  22.                 $('form#contactForm').slideUp("fast", function() {                 
  23.                     $(this).before('<p class="thanks"><strong>Thanks!</strong> Your message was successfully sent.</p>');
  24.                 });
  25.             });
  26.         }
  27.        
  28.         return false;
  29.        
  30.     });
  31. });

Así que en functions.php de mi plantilla de wordpress pongo lo siguiente:

Código PHP:
Ver original
  1. function szt_load_scripts(){
  2.     if(is_page_template('tpl-contact.php')) {
  3.     wp_enqueue_script('contact-form', get_stylesheet_directory_uri() . '/jquery/contact-form/scripts/contact-form.js');
  4.         wp_localize_script('contact-form', 'form#contactForm', array(
  5.                         'texto' => __('<span class="error">You forgot to enter your ', 'seozeta'),
  6.                         'email' => __('<span class="error">You entered an invalid email.</span>', 'seozeta'),
  7.                         'form#contactForm' => __('<p class="thanks"><strong>Thanks!</strong> Your message was successfully sent.</p>', 'seozeta')
  8.         )
  9.     );
  10.         }
  11. }
  12. add_action('wp_enqueue_scripts', 'szt_load_scripts');

En los campos 'email' => no sé qué debo poner. Mirando mi Javascript (que no lo hice yo, no entiendo nada de Javascript) no se me ocurre cómo vincular cada una de las tres frases del js con el php.

Notas:
1. La dirección del js está bien, lo cargo con esa función y funciona.
2. La variable del js labelText me la traduce bien, supongo que es porque la traduzco en tpl-contact.php, entonces en el js la toma ya traducida.
3. Tampoco sé si tengo bien este campo: wp_localize_script('contact-form', 'form#contactForm',...

Llevo dos días buscando información y haciendo múltiples intentos pero no consigo dar con la solución.

Saludos y gracias de antemano.

PD: Me olvidé de aportar un dato. En la cabecera del código aparece esto, que contiene la traducción del archivo .po:
Código Javascript:
Ver original
  1. <script type='text/javascript'>
  2. /* <![CDATA[ */
  3. var form#contactForm = {"OtherText":"<span class=\"error\">Te has olvidado de introducir tu ","email":"<span class=\"error\">Has introducido un correo electr\u00f3nico no v\u00e1lido.<\/span>","form#contactForm":"<p class=\"thanks\"><strong>\u00a1Gracias!<\/strong> Tu mensaje ha sido enviado con \u00e9xito.<\/p>"};
  4. /* ]]> */
  5. </script>

Deduzco que el PHP funciona, por eso lo pregunto en Javascript. Necesito entenderlo para poner bien las variables del js en el PHP.

Última edición por seozeta; 25/07/2013 a las 09:32
  #2 (permalink)  
Antiguo 25/07/2013, 18:21
Avatar de seozeta  
Fecha de Ingreso: junio-2013
Mensajes: 98
Antigüedad: 10 años, 10 meses
Puntos: 66
Respuesta: Traducir Javascript en Wordpress (i18n)

Bueno, ya lo tengo solucionado. Tengo la costumbre de buscar algo durante dos días, preguntarlo y terminar auto-respondiéndome. Así que ya de paso dejaré la respuesta aquí escrita por si es de utilidad para otras personas o para mi mismo en un futuro —las cosas se olvidan—.

En la función del PHP le damos un nombre de objeto, puede ser cualquiera y no tiene nada que ver con el JS; y un nombre cualquiera que defina cada frase, así:

Código PHP:
Ver original
  1. wp_localize_script('contact-form', 'contactForm', array(
  2.                         'youForgot' => __('<span class="error">You forgot to enter your ', 'seozeta'),
  3.                         'invalidEmail' => __('<span class="error">You entered an invalid email.</span>', 'seozeta'),
  4.                         'messageSent' => __('<p class="thanks"><strong>Thanks!</strong> Your message was successfully sent.</p>', 'seozeta')
  5.         )
  6.     );

Yo le puse contactForm, y luego youForgot, invalidEmail, etc.

Luego hay que editar el Javascript, eliminar el texto que hay en su lugar y poner el nombre del objeto seguido del de la traducción. Por ejemplo contactForm.invalidEmail. Quedando así:
Código Javascript:
Ver original
  1. $(this).parent().append(contactForm.youForgot +labelText+'.</span>');

Así:
Código Javascript:
Ver original
  1. $(this).parent().append(contactForm.invalidEmail);

Y así:
Código Javascript:
Ver original
  1. $(this).before(contactForm.messageSent);

Es obvio que me habría venido bien algo de ayuda, la esperaba, son las 2:25 de la mañana y lo solucioné por mi cuenta. Pero gracias de todas de formas por los que me leyeron. Un saludo y buenas noches! ;)

Etiquetas: funcion, input, jquery, js, php, traducir, variable, wordpress
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:23.