Как использовать несколько textdomain

У меня есть куча плагинов. И у них у всех есть свои собственные уникальные текстовые домены textdomain для перевода (i18n).

У меня также есть куча файлов, которые я включаю во все мои плагины — я собираю их в директории под названием common. Они содержат общий функционал, типа мониторинга и обновлений.

Мне нужна возможность просто поместить общую папку в каждый из моих плагинов без необходимости редактирования файлов. Но проблема в том, что текстовые строки, которые внутри не подхватывают изменения.

В общем, могу ли я вызвать load_plugin_textdomain дважды, для двух разных доменов, в пределах одного плагина? Как лучше всего решить эту проблему с i18n?

Или мне придется вручную изменить textdomain для каждого отдельного плагина?

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 4
  1. Сергей

    Вы можете вызвать load_plugin_textdomain() сколько угодно раз, но я бы не стал этого делать.

    Поместите общие файлы в отдельный плагин, например luke-carbis-library. И в этом плагине создайте две функции для загрузки строк:

    Пример кода:

    add_action( 'plugins_loaded', 'lcl_init' );
    
    function lcl_init()
    {
        $dir = plugin_dir_path( __FILE__ );
        $url = plugins_url( __FILE__ );
    
        // maybe load necessary files and translation
    
        do_action( 'lcl_init', $dir, $url );
    }
    
    function lcl_load( $file )
    {
        require_once plugin_dir_path( __FILE__ ) . $file;
    }
    

    В зависимости от плагина можете цеплять нужный хук:

    add_action( 'lcl_init', 'depending_plugin_init', 10, 2 );
    

    Теперь вы можете изменить внутреннюю структуру базового плагина по своему усмотрению — другие плагины будут использовать $dir и $url из вашего хука.

    1. Женя

      Здесь больше работы, чем я расчитывал ) но я согласен, это похоже единственный нормальный способ. Спасибо!

    2. Женя

      Проблема до сих пор сохраняется. Если я предложу пользователям устанавливать плагин luke-carbis-library, если у них его нет. что за сообщение будет в итоге? мне до сих пор требуется добавить в каждый плагин и я не хочу менять textdomain каждый раз. Какие мысли?

    3. Сергей

      Это сообщение будет продублировано во всех плагинах, использующих textdomain. Я бы не переживал об этом.

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: