tikimti-mvrht
Tengo una aplicación de wordpress y generalmente uso la función PHP <?php _e('foo', 'bar') ?>
cuando necesito hacer eco de algo que necesita ser traducido. Pero, ahora mismo estoy implementando una nueva característica y en mi .js
archivo tengo algo como
var confirmation = confirm("Are you sure you want to quit");
if(confirmation){
...
}
El problema con el código anterior es que no puedo usar la función PHP _e()
para traducirlo ya que este es un script JS.
¿Hay alguna forma de habilitar la traducción de textos repetidos en JS?
Después de RECOMPENSA
Estoy poniendo una recompensa ya que las preguntas dadas son genéricas, mientras que estoy buscando una solución que pueda resolver mi problema.
Estoy trabajando en un proyecto WP que fue creado por alguien antes. Se supone que solo debo agregar una traducción a los códigos que existen en el archivo js llamado functions.js
sendero: C:\Users\meskerem\foo.com\wp-content\themes\foo\assets\scripts\functions.js
supongamos que el siguiente código existe dentro de la función.
var confirmation = confirm("Are you sure you want to quit");
if(confirmation){
...
}
Ahora el objetivo es hacer que esa oración en inglés sea traducible. El código js anterior se ejecuta cuando se hace clic en un botón dentro de este archivo.
C:\Users\meskerem\foo.com\wp-content\plugins\wp-jobhunt\templates\dashboards\candidate\templates_ajax_functions.php
El código html que desencadena la traducción es tan simple como:
<h1> <?= _e('good morning', 'jobhunt') ?> </h1>
<div> <i class="icon-trash" onclick="askConfirmation()"> x </i> </div>
Entonces, el guión es simple, pero la traducción es donde tengo algunos problemas.
fresno patel
En Word Press, debe pasar la matriz de traducción al script java respectivo.
por ejemplo,
si está en la secuencia de comandos de la cola como se muestra a continuación desde el archivo function.php,
wp_enqueue_script( $handle, $src, $deps,$ver,$in_footer );
debe agregar la traducción del archivo de función a js particular usando su identificador dentro de wp_localize_script ();
e.g. wp_enqueue_script( 'your-handle', $src, $deps,$ver,$in_footer );
$translation_array = array('messagekey' => __('Are you sure you want to quit', foo'); );
wp_localize_script('your-handle', 'langvars', $translation_array);
En tu caso
wp_enqueue_script( 'cs_functions_js', plugins_url('/assets/scripts/functions.js', __FILE__ ), '', '', true );
just add below code after above code.
$translation_array = array('messagekey' => __('Are you sure you want to quit', foo'); );
wp_localize_script('cs_functions_js', 'langvars', $translation_array);
Luego puede acceder a la traducción en js como,
var confirmboxmessage = langvars.messagekey;
var confirmation = confirm(langvars.messagekey);
-
Los comentarios no son para una discusión extensa; esta conversación se ha movido al chat.
– Bhargav Rao
5 de mayo de 2017 a las 7:05
phill healey
Deberías usar el wp_localize_script función, que se agregó a WordPress por esta misma razón.
Prueba con algo como esto:
wp_localize_script( $handle, $name, $data );
Ejemplo
<?php
// Register the script
wp_register_script( 'some_handle', '<ENTER YOUR SCRIPT PATH HERE>' );
// Localize the script with new data
$translation_array = array(
'some_string' => __( 'Some string to translate', 'plugin-domain' ),
'a_value' => '10'
);
wp_localize_script( 'some_handle', 'object_name', $translation_array );
// Enqueued script with localized data.
wp_enqueue_script( 'some_handle' );
Puede acceder a las variables en JavaScript de la siguiente manera:
<script>
// alerts 'Some string to translate'
alert( object_name.some_string);
</script>
Nota: Los datos de la llamada de JavaScript resultante se pasarán como texto. Si está tratando de pasar números enteros, deberá llamar a la función parseInt() de JavaScript.
<script>
// Call a function that needs an int.
FinalZoom = map.getBoundsZoomLevel( bounds ) - parseInt( object_name.a_value, 10 );
</script>
-
¿Necesito agregar
path/to/myscript.js
archivo en mi aplicación, o puedo usar el que ya tengo para ello?– tikimti-mvrht
24 de abril de 2017 a las 13:59
-
No, usas la ruta a tu archivo. El dado es solo un ejemplo para mostrar que necesita usar su propio camino. Acepte mi respuesta, ya que esta es la forma correcta de hacer lo que necesita. Vea el enlace que publiqué en el códice de WordPress para confirmarlo.
– Phil Healey
24 de abril de 2017 a las 14:48
-
¿Puedes actualizar tu respuesta para que pueda aceptar y votar? Actualmente no me funciona
– tikimti-mvrht
24 de abril de 2017 a las 14:57
-
por cierto: por la parte que dices
"// Register the script wp_register_script( 'some_handle', 'path/to/myscript.js' );"
estoy seguromyscript.js
ya esta registrado. Es parte de un complemento de búsqueda de trabajo, ya hay toneladas de scripts que funcionaban antes de que decidiera agregarle una pequeña función. Entonces, ¿todavía necesito agregar esto?– tikimti-mvrht
24 de abril de 2017 a las 15:01
-
PD Mi respuesta es la correcta, no es necesario que yo explique exactamente cómo debe hacer algo en su conjunto específico de circunstancias. Eso es para que lo descubras, sin embargo, estoy haciendo lo mejor que puedo y continuaré haciéndolo dentro de lo razonable.
– Phil Healey
24/04/2017 a las 18:31
Si entendí el problema correctamente, tiene un script que está en cola por un complemento o tema de terceros, y desea localizar el window.confirm
cuadro sin modificar los guiones originales.
/wp-content/plugins/jobhunt-client-translations/jobhunt-client-translations.php
<?php
/*
Plugin Name: Jobhunt Translations
Author: John Doe
*/
add_action( 'wp_enqueue_scripts', function() {
wp_enqueue_script( 'translations', plugins_url( '/translations.js', __FILE__ ) );
// change the translations domain from 'default' to match yours
// you can also add other translations here in format "message" => "translated message"
wp_localize_script( 'translations', 'DialogMessages', [ 'Are you sure you want to quit' => __( 'Are you sure you want to quit', 'default' ) ] );
});
/wp-content/plugins/jobhunt-client-translations/translations.js
(function( original ) {
window.confirm = function( message ) {
message = DialogMessages[message] || message;
return original.call( this, message );
};
})(window.confirm);
Crear nueva carpeta jobhunt-client-translations
en /wp-content/plugins/
directorio, coloque dentro de estos dos archivos y active el complemento. Simplemente anulará el valor predeterminado window.confirm
cuadro de diálogo sin cambiar ninguno de los archivos originales de terceros y sin modificar el comportamiento predeterminado del cuadro de diálogo, excepto que se traducirá el mensaje.
El código fue probado y funciona correctamente.
aprendiz
tal vez esto podría ayudar
function addScript() {
wp_enqueue_script( 'functions', get_template_directory_uri() . 'foo\assets\scripts\functions.js', array(), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'addScript' );
Cree un script PHP simple que su JS pueda llamar a través de AJAX, que no hace más que traducir una cadena (o varias cadenas) enviadas a través de HTTP GET y repetirla como el cuerpo de la respuesta (probablemente con json_encode()).
Luego puede crear una función JS para hacer esa llamada AJAX, por lo que llamarla podría ser tan simple como llamar a una función JS
var confirmTxt = jstranslate('Are you sure you want to quit?');
Y usando JQuery por ejemplo:
function jstranslate(string)
{
translations = $.get('/my-ajax-translate-url',{string: string}, function(e){
return e.text; // console.log e to double check what to return, this is from memory
});
}
y en php
// require_once() your _e() function.
$text = _e($_GET['string'], 'jobhunt');
header('Content-Type: application/json');
echo json_encode(array('text' => $text));
exit;
Su
confirm("text")
probablemente debería estar dentro de la declaración if (if(confirm("text")) { /*code*/ }
). No puedo ayudar con el resto, ya que tengo poco o ningún conocimiento de wordpress.– Piromonje
24 de abril de 2017 a las 13:40
@Pyromonk No, de lo contrario, la instrucción if nunca se activaría.
– Phil Healey
24 de abril de 2017 a las 13:41
@Pyromonk Ah, su mensaje se lee como “dentro de la declaración if”, lo que significa que si se cumple la condición “si”. Mientras que quisiste decir que sea parte de la cláusula misma. p.ej
if(confirm){var confirmation = confirm("Are you sure you want to quit"); }
– Phil Healey
24 de abril de 2017 a las 13:47
lo siento, quise decir
if(confirmation){}
– tikimti-mvrht
24 de abril de 2017 a las 13:49
no hay problema @Pyromonk, un violín siempre es bueno para aclarar las cosas.
– Phil Healey
24 de abril de 2017 a las 13:52