Вопрос или проблема
Мой плагин использует wp_set_script_translations()
для загрузки переводов для JS, как упомянуто здесь https://make.wordpress.org/core/2018/11/09/new-javascript-i18n-support-in-wordpress/.
Я понимаю, что когда переводы для локали добавляются на translate.wordpress.org, будут созданы JSON файлы.
Но у нас много владельцев сайтов, которые хотят перевести несколько слов и начать использовать плагин.
Они могут создать файлы .po и .mo, но как они могут создать JSON файлы без настройки wp-cli для использования (wp i18n make-json
).
Плагин Loco Translate не поддерживает генерацию JSON файлов.
Я не смог найти онлайн-сайты, поддерживающие конвертацию .po в .json (с указанным ниже форматом).
Выходной файл должен быть в формате ${domain}-${locale}-${handle}.json
или ${domain}-${locale}-${md5}.json
JED 1.x (.json) для каждого JS файла, который вызывается с помощью wp_set_script_translations()
.
Для этой операции рекомендуется использовать плагин Loco Translate, он также генерирует JSON файлы.
Ответ или решение
Чтобы создать JSON-файлы для перевода языка из .po файла без использования WP-CLI и команды wp i18n make-json
, вы можете воспользоваться альтернативным подходом, который включает в себя следующие шаги:
1. Установка необходимых библиотек
Для конвертации файлов .po в .json вы можете использовать PHP-библиотеку Gettext
, которая позволяет работать с файлами локализации. Если у вас нет доступа к WP-CLI, вы можете использовать свой собственный скрипт на PHP для выполнения этой задачи.
2. Создание PHP-скрипта для конвертации
Создайте новый PHP файл, например, po_to_json_converter.php
, и добавьте в него следующий код:
<?php
require 'vendor/autoload.php'; // Убедитесь, что у вас установлен Composer и Gettext
use Gettext\Translations;
function poToJson($poFilePath, $jsonFilePath) {
$translations = Translations::fromPoFile($poFilePath);
// Создаем массив для хранения переводов
$outputArray = [];
foreach ($translations as $translation) {
$outputArray[$translation->getOriginal()] = $translation->getTranslated();
}
// Сохраняем массив в формате JSON
file_put_contents($jsonFilePath, json_encode($outputArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
}
// Пример использования
$domain = 'your_domain'; // Укажите домен вашей локализации
$locale = 'ru_RU'; // Укажите нужный локаль
$handle = 'your_script_handle'; // Укажите хэндл вашего скрипта
$poFilePath = 'path/to/your/file.po'; // Путь к вашему .po файлу
$jsonFilePath = "{$domain}-{$locale}-{$handle}.json"; // Формат JSON файла
poToJson($poFilePath, $jsonFilePath);
echo "Файл JSON был создан: $jsonFilePath";
?>
3. Запуск скрипта
Убедитесь, что у вас установлен Composer и библиотека Gettext
. Вы можете установить библиотеку, выполнив команду:
composer require gettext/gettext
После этого просто запустите ваш PHP-скрипт:
php po_to_json_converter.php
4. Ограничения и рекомендации
- Убедитесь, что формат входного файла .po корректен, так как это может повлиять на результат конверсии.
- Вы можете модифицировать скрипт для обработки нескольких .po файлов и создания соответствующих JSON файлов с разными форматами (
${domain}-${locale}-${md5}.json
и др.) в зависимости от ваших нужд. - Если вам необходимо реализовать более сложную логику на основе ваших требований, вы можете адаптировать пример кода выше, добавив дополнительные функции.
Этот подход позволит вам создавать JSON-файлы локализации для вашего плагина, не полагаясь на WP-CLI и несколько иными способами содержать ваши переводы на сайт.