Задать вопрос
@alexiusgrey

Как сделать двуязычными строки, которые я добавил в файле js?

По дизайну чекаут очень нефрендли к дефолтному в вукоммерсе. Нужно было именно перед некоторыми инпетами внутри формы добавить несколько статичных блоков. То есть хуки, которые бы добавили их перед или после формы чекаута, не решили бы задачу, нужно прямо внутрь формы.
Я захардкодил их в своем main.js методами before-after именно туда, где они по дизайну.
jQuery('p#billing_first_name_field').before('<div class="form-row form-row-first personal_details_toggle"><div class="woocommerce-input-wrapper"><div class="input-text form-control" id="personal_details_toggle">Personal details of recepient<span class="fa-arrow-down"></span></div></div></div>');
jQuery('p#billing_country_field').before('<div class="form-row form-row-first delivery_address"><div class="woocommerce-input-wrapper"><div class="input-text form-control" id="delivery_address">Delivery address<span class="fa-arrow-down"></span></div></div></div>');

Это бы вполне подошло, если бы сайт был на одном языке. Но оказалось, что их должно быть два.
Delivery address, Personal details of recepient и еще пара аналогов должны в разных версиях языков сайта быть на разных языках. И это не официальные строки из плагинов, до которых доберется локо-транслейт, это просто мой код из файла.
Внутрь js нельзя добавить <?php echo get_theme_mod('delivery-address_text');?> .
Это как в acf the_field(), но я его не ставил, таких строк у меня мало, обойдусь кастомайзером.

Нашел, что можно сделать методом localize script перевод строк из js в php, формула такая.
// Register the script
wp_register_script( 'some_handle', 'path/to/myscript.js' ); 
// 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' );

У меня этот код в main.js, делаю вот так
// Register the script
wp_register_script( 'some_handle',  get_template_directory_uri() . '/assets/js/main.js' );
 
// Localize the script with new data
$translation_array = array(
    'Delivery address' => get_theme_mod('delivery_address_text'),    
);
wp_localize_script( 'some_handle', 'main_js', $translation_array );
 
// Enqueued script with localized data.
wp_enqueue_script( 'some_handle' );

Но не действует. Я с этим методом сталкиваюсь впервые. Что делаю неправильно и как надо? Вынести эти куски кода, где требуется перевод, в новый файл, сделать тот самый some_handle, или что такое в данном случае object?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы