- Вопрос или проблема
- Что я сделал
- Вот команды, которые я использую для создания языковых файлов
- Ответ или решение
- Шаги по переводу имени и описания блока Gutenberg
- 1. Проверьте структуру файла block.json
- 2. Используйте правильный переводческий контекст
- 3. Проверьте процесс генерации и подключения переводческих файлов
- 4. Проверьте загрузку текстового домена и переводов
- Возможные причины проблем
- Заключение
Вопрос или проблема
Я занимаюсь локализацией пользовательского блока Gutenberg, предоставленного пользовательским плагином, который не будет опубликован на wordpress.org. Переведенные строки в области блока отображаются как ожидалось, единственные строки, которые не переведены, это название блока и его описание. Как я могу их перевести? Я знаю, что это возможно, потому что это работает для основных блоков.
Что я сделал
plugin.php
/**
* Зарегистрировать пользовательские блоки
*/
add_action('init', function () {
register_block_type(__DIR__ . '/build/my-custom-block'); // Новый способ, теперь без wp_register_script()
load_plugin_textdomain('my-block-plugin', false, basename(__DIR__) . '/languages'); // Это вообще необходимо?
$script_handle = generate_block_asset_handle('my-block-plugin/my-custom-block', 'editorScript'); // = "my-block-plugin-my-custom-block-editor-script"
wp_set_script_translations($script_handle, 'my-block-plugin', __DIR__ . '/languages');
});
languages/de_DE.po
…
#: build/my-custom-block/block.json
msgctxt "block title"
msgid "My Custom Block"
msgstr "Mein individueller Block"
#: build/my-custom-block/block.json
msgctxt "block description"
msgid "This is the block description."
msgstr "Das ist die Block-Beschreibung."
Однако эти две строки не появляются в languages/my-block-plugin-de_DE-asdasdasdasdasdasd.json
. Остальные строки там есть. Это правильно?
Вот команды, которые я использую для создания языковых файлов
- .pot:
$ wp i18n make-pot . languages/my-block-plugin.pot --exclude=node_modules,src
- .mo:
$ wp i18n make-mo languages/
- .json:
$ wp i18n make-json languages/ --no-purge
Любая помощь приветствуется!
Ответ или решение
Чтобы перевести имя и описание блока Gutenberg, важно следовать определенной процедуре локализации в WordPress. На основе вашей проблемы, давайте подробно рассмотрим процесс перевода и возможные ошибки.
Шаги по переводу имени и описания блока Gutenberg
1. Проверьте структуру файла block.json
В вашем блоке my-custom-block
файл block.json
должен содержать строки для имени и описания блока. Убедитесь, что эти строки заданы явно:
{
"name": "my-block-plugin/my-custom-block",
"title": "My Custom Block",
"description": "This is the block description.",
// другие параметры блока...
}
2. Используйте правильный переводческий контекст
Для перевода вам необходимо обеспечить правильный контекст перевода. Убедитесь, что в файле .po
задается правильный контекст msgctxt
, как вы показали:
#: build/my-custom-block/block.json
msgctxt "block title"
msgid "My Custom Block"
msgstr "Mein individueller Block"
#: build/my-custom-block/block.json
msgctxt "block description"
msgid "This is the block description."
msgstr "Das ist die Block-Beschreibung."
3. Проверьте процесс генерации и подключения переводческих файлов
Ваш процесс создания и подключения переводческих файлов должен быть выполнен корректно:
- Для генерации
.pot
файла используйте:$ wp i18n make-pot . languages/my-block-plugin.pot --exclude=node_modules,src
- Создайте
.mo
файлы с помощью:$ wp i18n make-mo languages/
- А также создайте
.json
перевод:$ wp i18n make-json languages/ --no-purge
Проблема заключается в том, что строки имени и описания блока должны находиться в .json
файлах. Убедитесь, что они корректно генерируются на этом этапе.
4. Проверьте загрузку текстового домена и переводов
Убедитесь, что функции load_plugin_textdomain
и wp_set_script_translations
настроены правильно в вашем plugin.php
:
add_action('init', function () {
register_block_type(__DIR__ . '/build/my-custom-block');
load_plugin_textdomain('my-block-plugin', false, basename(__DIR__) . '/languages');
$script_handle = generate_block_asset_handle('my-block-plugin/my-custom-block', 'editorScript');
wp_set_script_translations($script_handle, 'my-block-plugin', __DIR__ . '/languages');
});
Возможные причины проблем
-
Некорректная генерация
.json
файла: Отсутствие переведенных строк вlanguages/my-block-plugin-de_DE.json
может быть связано с неправильной генерацией файла. Проверьте командуwp i18n make-json
. -
Ошибки в
block.json
: Убедитесь, что имя и описание блока правильно прописаны и соответствуют переводимой строке.
Заключение
Перевод имен и описаний пользовательских блоков в Gutenberg требует четкого понимания и следования процессу локализации в WordPress. Обратите внимание на правильность генерации переводов и их подключение, что обеспечит корректное отображение локализованных строк в вашем блоке.