Soporte » WordPress Avanzado » Función sprintf para l18n en javascript

  • Resuelto Carlos Longarela

    (@carloslongarela)


    Hola a tod@s, mi duda es acerca de la internacionalización en javascript. La realizo sin problema declarando las cadenas a traducir, pasándole el array a wp_localize_script y después añadiéndolo a la cola con wp_enqueue_script tal como se indica en https://codex.wordpress.org/I18n_for_WordPress_Developers#Handling_JavaScript_files

    Mi duda es a la hora de declarar cadenas con placeholders, cuando por ejemplo declaro:
    'txt_intentos' => __( '%s intento', 'cl-mi-plugin' ),

    no sé si existe en WordPress una función de javascript para pasarle la cadena con los valores como se hace en PHP con sprintf.

    Para la fin me he creado una función que emula dicho comportamiento:

    
    	function sprintf( string ) {
    		var args = arguments,
    			flag = true,
    			i = 1;
    
    		string = string.replace( /%s/g, function() {
    			var arg = args[i++];
    
    			if ( typeof arg === 'undefined' ) {
    				flag = false;
    				return '';
    			}
    
    			return arg;
    		} );
    
    		return flag ? string : '';
    	}
    

    Y la utilizo funcionando perfectamente como txt = sprintf( mi_cadena_l18n.txt_intentos, n_intentos )
    pero me gustaría saber si existe algo similar ya en WordPress y no tener “que reinventar la rueda”.

    Gracias.

Viendo 2 respuestas - 1 de 2 (de 2 total)
  • Nilo Velez

    (@nilovelez)

    Hasta donde yo sé no hay nada. De hecho últimamente veo muchos más usos de wp_localize_script para pasar variables a JavaScript que para l10n propiamente dicha.

    Cuando quieres usar placeholder en una cadena que vas a pasar a JavasScript, tienes dos opciones:

    • Hacer lo que has hecho tú y reemplazar un marcador que hayas puesto en la cadena (yo suelo usar %%%)
    • Pasar la cadena en varios trozos, cortando por donde quieres meter una variable, aunque a veces es un problema a la hora de traducir.
    Carlos Longarela

    (@carloslongarela)

    Gracias Nilo, seguiré utilizando la opción actual, trocear la cadena puede no ser útil en algunas traducciones y es algo que no recomiendan en las traducciones de WP.

    Deberían implementar algo nativo para js con los placeholders tipo sprintf.

Viendo 2 respuestas - 1 de 2 (de 2 total)
  • Debes estar registrado para responder a este tema.