edytor bloków – Używanie wp_set_script_translations bez ręcznej rejestracji skryptu
Podczas używania @wordpress/create-block
aby stworzyć wtyczkę dla bloku, wygenerowany pakiet jest automatycznie rejestrowany za pośrednictwem block.json
metadane:
{
...
"name": "my-block",
"textdomain": "my-block",
"editorScript": "file:./index.js",
...
}
Nie ma potrzeby dzwonić wp_register_script
ja. Jest to świetne rozwiązanie, ponieważ automatycznie obsługuje zależności za pośrednictwem pliku index.asset.php
plik wygenerowany w folderze kompilacji.
Postępując zgodnie z procedurą opisaną w dokumencie, następnie tworzę plik tłumaczenia JET. Oto procedura:
- Tworzenie pliku POT za pomocą
wp i18n make-pot . languages/my-block.pot
- Tworzenie pliku PO za pomocą
cp languages/test.pot languages/my-block-FR_BE.po
- Wypełnianie ciągów msgstr
my-block-FR_BE.po
- Dodawanie linii
"Language: fr_BE\n"
Domy-block-FR_BE.po
- Tworzenie pliku JSON za pomocą
wp i18n make-json languages/my-block-FR_BE.po --no-purge
Do wygenerowanego JSON dołączony jest skrót md5: mój-blok-fr_BE-cae574befd871d4f740fd8b719bac1db.json.
Teraz muszę zadzwonić wp_set_script_translations
w mojej metodzie inicjującej:
function my_block_init() {
register_block_type( __DIR__ . '/build' );
wp_set_script_translations( 'my-block-script', 'my-block', plugin_dir_path( __FILE__ ) . 'languages/' );
}
To nie działa.
Aby to zadziałało, muszę zarejestrować skrypt i umieścić go w kolejce, tracąc możliwość automatycznego wstrzykiwania zależności:
function my_block_init() {
wp_register_script(
'my-block-script',
plugins_url('/build/index.js', __FILE__),
array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n', 'wp-react-refresh-runtime')
);
wp_enqueue_script('my-block-script');
register_block_type( __DIR__ . '/build' );
wp_set_script_translations('my-block-script', 'my-block', plugin_dir_path( __FILE__ ) . 'languages/');
}
Muszę także zmienić nazwę mojego pliku JSON, aby zawierał uchwyt skryptu zamiast automatycznie wygenerowanego skrótu md5. Sekcja „Wczytaj plik tłumaczenia” w dokumencie sprawia wrażenie, że nie powinno to być konieczne w przypadku zachowywania wygenerowanej nazwy, chociaż nie jestem pewien, co mam tutaj zrobić:
WordPress sprawdzi, czy w tej ścieżce znajduje się plik w formacie ${domain}-${locale}-${handle}.json jako źródło tłumaczeń. Alternatywnie zamiast zarejestrowanego uchwytu możesz użyć skrótu md5 ścieżki względnej pliku, ${domain}-${locale} w postaci ${domain}-${locale}-${md5}.json .
Czy istnieje sposób zarejestrowania tłumaczeń JET dla skryptu, który jest automatycznie rejestrowany za pomocą metadanych bloku? I jak mogę użyć wygenerowanej nazwy pliku JSON podczas rejestracji mojego tłumaczenia?
Edytować
Oto struktura folderów:
app/plugins/my-block/
├── build
│ ├── block.json
│ └── index.asset.php
│ └── index.css
│ └── index.js
│ └── style-index.css
├── languages
│ ├── my-block.pot
│ └── my-block-fr_BE.po
│ └── my-block-fr_BE-my-block-script.json
├── src
│ ├── block.json
│ └── index.js
│ └── ...
└── my-block.php
A oto treść my-block.php
plik (katalog wtyczki):
<?php
/**
* Plugin Name: My Block
* Requires at least: 5.9
* Requires PHP: 7.0
* Version: 0.1.0
* Author: The WordPress Contributors
* License: GPL-2.0-or-later
* License URI:
* Text Domain: my-block
*/
function my_block_init() {
register_block_type( __DIR__ . '/build' );
wp_set_script_translations( 'my-block-script', 'my-block', plugin_dir_path( __FILE__ ) . 'languages/' );
}
add_action( 'init', 'my_block_init' );