Подтвердить что ты не робот

Как обрабатывать перевод текстов внутри .js темы WP

У меня есть приложение wordpress, и обычно я использую функцию PHP <?php _e('foo', 'bar') ?>, когда мне нужно эхом перевести что-то, что нужно перевести. Но сейчас я реализую новую функцию, и в моем файле .js у меня есть что-то вроде

var confirmation = confirm("Are you sure you want to quit"); 
if(confirmation){
 ... 
}

Проблема с приведенным выше кодом заключается в том, что я не могу использовать функцию PHP _e() для ее перевода, поскольку это JS script.

Есть ли способ включить перевод текстов, эхом в JS?

После BOUNTY

Я помещаю щедрость, поскольку заданные вопросы являются обобщенными, тогда как я ищу решение, которое может решить мою проблему.

Я работаю над проектом WP, который ранее был создан кем-то. Я должен только добавить перевод кодов, которые существуют в js файле, называемом functions.js path: C:\Users\meskerem\foo.com\wp-content\themes\foo\assets\scripts\functions.js, чтобы предположить, что внутри функции существует следующий код.

var confirmation = confirm("Are you sure you want to quit"); 
if(confirmation){
 ... 
}

Теперь цель состоит в том, чтобы перевод английского слова был переводимым. Вышеупомянутый код js выполняется при нажатии кнопки внутри этого файла. C:\Users\meskerem\foo.com\wp-content\plugins\wp-jobhunt\templates\dashboards\candidate\templates_ajax_functions.php

Код html, который запускает перевод, прост, как:

<h1> <?= _e('good morning', 'jobhunt') ?> </h1>
<div> <i class='icon-trash' onclick="askConfirmation()"> x </i> </div>

Итак, script прост, но перевод - это то, где у меня есть некоторые проблемы.

4b9b3361

Ответ 1

В текстовом прессе вам нужно передать массив трансляции в соответствующий java script.

например,

если вы находитесь в очереди script, как показано ниже, из файла function.php,

wp_enqueue_script( $handle, $src, $deps,$ver,$in_footer );

вам нужно добавить перевод из функционального файла в perticular js, используя его дескриптор внутри 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);

В вашем случае

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);

Затем вы можете получить доступ к переводу в js, например,

var confirmboxmessage = langvars.messagekey;
var confirmation = confirm(langvars.messagekey);

Ответ 2

Вы должны использовать функцию wp_localize_script, которая была добавлена ​​в WordPress именно по этой причине.

Попробуйте что-то вроде этого:

wp_localize_script( $handle, $name, $data );

Пример

<?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' );

Вы можете получить доступ к переменным в JavaScript следующим образом:

<script>
// alerts 'Some string to translate'
alert( object_name.some_string);
</script> 

Примечание. Данные в результате вызова JavaScript будут переданы как текст. Если вы пытаетесь передать целые числа, вам нужно вызвать функцию parseInt() JavaScript.

<script>
// Call a function that needs an int.
FinalZoom = map.getBoundsZoomLevel( bounds ) - parseInt( object_name.a_value, 10 ); 
</script>

Ответ 3

Если я правильно понял проблему, у вас есть script, который находится в очереди стороннего плагина или темы, и вы хотите локализовать поле window.confirm без изменения исходных сценариев.

/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);

Создайте новую папку jobhunt-client-translations в каталоге /wp-content/plugins/, поместите внутри этих двух файлов и активируйте плагин. Он просто переопределит диалог по умолчанию window.confirm без изменения каких-либо исходных файлов сторонних разработчиков и без изменения поведения по умолчанию в диалоговом окне, за исключением того, что сообщение будет переведено.

Код был протестирован и работает правильно.

Ответ 4

возможно, это могло бы помочь

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' );

Ответ 5

Сделайте простой PHP script ваш JS может вызывать через AJAX, который делает не что иное, как переводить строку (или несколько строк), отправленную через HTTP GET, и вызывать ее как тело ответа (возможно, с помощью json_encode()).

Затем вы можете создать JS-функцию для создания этого вызова AJAX, поэтому вызов его может быть таким же простым, как вызов функции JS

var confirmTxt = jstranslate('Are you sure you want to quit?');

И используя JQuery, например:

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
    });
}

И в PHP

// require_once() your _e() function.
$text = _e($_GET['string'], 'jobhunt');
header('Content-Type: application/json');
echo json_encode(array('text' => $text));
exit;