wp_set_script_translations() WP 5.0.0

Підключає файл 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.

Хуків немає.

Повертає

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

Приклади

0

#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'.

Що саме зробити цей код:

  1. Підключить до HTML файл /wp-includes/js/dist/i18n.min.js.
  2. Виведе код перекладу зі знайденого файлу json .

    Файл перекладу буде шукатися в наступному порядку (він зрозуміло повинен існувати), перший знайдений файл буде використаний, інші проігноровані:

    ШЛЯХ_ДО_ТЕМИ/{domain}-{locale}-{handle}.json
    ШЛЯХ_ДО_ТЕМИ/{domain}-{locale}-{md5}.json
    /.../wp-content/languages/themes/{domain}-{locale}-{md5}.json

    Як створювати JSON файл перекладу дивіться тут .

  3. Підключить в 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")
    	)
    
    })
0

#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 суперзірок" ]
		}
	}
}

нотатки

список змін

З версії 5.0.0Введено.
З версії 5.1.0The $domain parameter був зроблений optional.

Код 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *