Создание JSON файлов для перевода языков из po файла без wp-cli i18n make-json

Вопрос или проблема

Мой плагин использует 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 и несколько иными способами содержать ваши переводы на сайт.

Оцените материал
Добавить комментарий

Капча загружается...