wp_set_script_translations()
Підключає файл JSON з перекладами рядків для зазначеного JS скрипта (файлу).
Також функція додає залежність основного скрипта від бібліотеки wp-i18n
.
Ця функція – це новий варіант локалізації рядків у файлах JS. Тепер можна використовувати функції локалізації wp-i18n , який копіює зазначені функції PHP для використання їх в JS.
Щоб зрозуміти, як це працює, дивіться приклад .
Скрипт, до якого підключається ця функція, обов’язково повинен бути доданий у чергу на виведення за допомогою wp_enqueue_script() .
Якщо потрібний переклад для кількох JS файлів, функцію потрібно викликати для кожного файлу окремо.
Обов’язково читайте пов’язану статтю: Переклади в файлах JS .
Ім’я файлу, що підключається json
Де, який і в якому порядку шукатиметься .json файл перекладів:
Коли НЕ вказано третій параметр $path (за дефолтом):
/wp-content/languages/themes/{domain}-{locale}-{md5}.json // plugin-ua_UA-db8f629adc6c4c33f29613cfb71a6038.json
- Коли вказано третій параметр $ path :
УКАЗАНИЙ_ШЛЯХ/{domain}-{locale}-{handle}.json // plugin-ua_UA-script.json УКАЗАНИЙ_ШЛЯХ/{domain}-{locale}-{md5}.json // plugin-ua_UA-db8f629adc6c4c33f29613cfb71a6038.json /.../wp-content/languages/themes/{domain}-{locale}-{md5}.json // plugin-ua_UA-db8f629adc6c4c33f29613cfb71a6038.json
MD5 хеш в імені json файлу
Під час читання json файлів який завжди можливо заздалегідь знати який ID (handle) використовується під час реєстрації JS файлу, тому потрібен універсальний механізм пошуку json файлу перекладу. Для цього WP використовує в імені файлу перекладу MD5 хеш із відносного шляху js файлу. Цей хеш додається до кінця імені файлу перекладу: {domain}-{locale}-{md5}.json
.
Створюється хеш із відносного шляху від папки теми/плагіну до js файлу.
Наприклад, ми підключаємо переклад файлу myscript.js , який лежить у темі/плагіні в папці:
wp-content/mytheme/js/myscript.js
wp-content/myplugin/js/myscript.js
В обох випадках MD5 хеш буде створено з рядка md5( 'js/myscript.js' )
.
Також важливо помітити, що мітка файлу .min
буде видалена з рядка. Наприклад для файлу
wp-content/myplugin/js/myscript.min.js` Хэш по прежнему будет создан из строки
md5(‘js/myscript.js’)“.
$relative (відносний) шлях перед генерацією хеша можна змінити через фільтр load_script_textdomain_relative_path :
$relative = apply_filters( 'load_script_textdomain_relative_path', $relative, $src);
wp_localize_script() — старий варіант перекладу рядків для файлів JS.
WP_Scripts::set_translations() ,
WP_Scripts::print_translations() ,
load_script_textdomain()
Хуків немає.
Повертає
true|false
. True коли вказаний домен перекладу успішно локалізовано, false інакше.
Використання
wp_set_script_translations ($ handle, $ domain, $ path);
-
$handle
(рядок) (обов’язковий) - ID скрипта, до якого потрібно застосувати рядки перекладу.
-
$domain
(рядок) -
Домен перекладу, який використовуватиметься в js у функціях перекладу
__()
,
_x()
, …
За замовчуванням: ‘default’ -
$path
(рядок) Повний шлях до директорії, в якій знаходиться файл перекладу.
Якщо цей параметр не вказано, WP шукатиме файл у загальному каталозі перекладів з такою назвою:
/wp-content/languages/themes/{domain}-{locale}-{md5}.json
Якщо вказати тут шлях, то WP шукатиме файл за вказаним шляхом у двох варіаціях назв, а також у базовому каталозі перекладів:
УКАЗАНИЙ_ШЛЯХ/{domain}-{locale}-{handle}.json Вказаний_ШЛЯХ/{domain}-{locale}-{md5}.json /wp-content/languages/themes/{domain}-{locale}-{md5}.json
Типово: null
Приклади
#1 Підключення файлу перекладу JS та його використання {#example1}
Підключаємо переклад для JS файлу scripts.js так:
add_action( 'wp_enqueue_scripts', function(){ $jsfile_url = get_stylesheet_directory_uri() ."/scripts.js"; wp_enqueue_script( 'my-script', $jsfile_url ); wp_set_script_translations( 'my-script', 'myl10n', THEME_PATH .'languages/js' ); } ); // Важливо: Вказати однаковий ID (handle) – 'my-script'.
Що саме зробити цей код:
- Підключить до HTML файл
/wp-includes/js/dist/i18n.min.js
. Виведе код перекладу зі знайденого файлу json .
Файл перекладу буде шукатися в наступному порядку (він зрозуміло повинен існувати), перший знайдений файл буде використаний, інші проігноровані:
ШЛЯХ_ДО_ТЕМИ/{domain}-{locale}-{handle}.json ШЛЯХ_ДО_ТЕМИ/{domain}-{locale}-{md5}.json /.../wp-content/languages/themes/{domain}-{locale}-{md5}.json
Як створювати JSON файл перекладу дивіться тут .
Підключить в HTML наш JS файл
ПУТЬ_ДО_ТЕМЫ/scripts.js
.У цьому файлі можна використовувати функції перекладу рядків, наприклад:
const { __, _x, _n, _nx } = wp.i18n; // створюємо аліаси об'єкта wp.i18n jQuery(document).ready(function($){ console.log( [ __( 'Hello', 'myl10n' ), _x( 'Hi', 'short word', 'myl10n' ), _n( '%s star', '%s stars', 5, 'myl10n' ), _nx( '%s star', '%s stars', 5, 'superstars', 'myl10n' ), sprintf( __( 'See Link: %s', 'myl10n' ), 'http://site.com' ) ] .join("n") ) })
#2 Як виглядають JSON дані
Приклад того в якому форматі зберігаються дані в json файлі, що підключається.
{ "translation-revision-date":"2020-04-16 08:11:26+0000", "generator":"GlotPress/3.0.0-alpha", "domain":"messages", "locale_data":{ "messages":{ "":{ "domain":"messages", "plural-forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n% 100> = 20) ? 1 : 2); "lang":"ru" }, "Hello": ["Привіт"], "%s star": [ "%s stars", "%s зірка", "%s зірки", "%s зірок" ], "short wordu0004Hi": [ "Прив" ], "superstarsu0004%s star": [ "%s stars", "%s суперзірка", "%s суперзірки", "%s суперзірок" ] } } }
нотатки
- Дивіться: WP_Scripts::set_translations()
- Global. WP_Scripts. $wp_scripts WP_Scripts object for printing scripts.
список змін
З версії 5.0.0 | Введено. |
З версії 5.1.0 | The $domain parameter був зроблений optional. |
Код wp_set_script_translations() wp set script translations WP 6.0.2
function wp_set_script_translations( $handle, $domain = 'default', $path = null ) { global $wp_scripts; if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); return false; } return $wp_scripts->set_translations( $handle, $domain, $path ); }