Teplitsa / Leyka

Плагин для WordPress, упрощающий сбор, управление и отчетность по онлайн-пожертвованиям, Leyka - Crowdfunding Fundraising and Donations Management System
https://leyka.org
GNU General Public License v2.0
82 stars 51 forks source link

Использование измененного словаря в дочерней теме #119

Closed Mikhail84 closed 8 years ago

Mikhail84 commented 8 years ago

Возможно ли использовать измененные под конкретные нужды сайта файлы /wp-content/plugins/leyka/lang/leyka-ru_RU.mo /wp-content/plugins/leyka/lang/leyka-ru_RU.po

в дочерней теме, например, /wp-content/themes/twentysixteen-child

и где именно их разместить, чтобы плагин их увидел?

Ahaenor commented 8 years ago

Добрый день!

Ок, вопрос понятен. Сейчас в плагине нет возможности программно изменять файлы локализации, которые использует Лейка. Ранее мы никогда не сталкивались с такой потребностью.

В будущей версии мы добавим программный фильтр для имён/адресов файлов _.mo/_po.

Сейчас могу рекомендовать попробовать следующее:

  1. положить изменённые файлы локализации в подпапку вашей темы,
  2. вызвать функцию load_plugin_textdomain('leyka', FALSE, get_template_directory().'/your-lang-subfolder/'); после того, как она отрабатывает в плагине. Например, повесить это на action-хук "init".

Но результат, боюсь, не гарантирован. Пжлст, расскажите, что у вас получится.

Mikhail84 commented 8 years ago

Этот вариант не увенчался успехом. Следующий код добавил в functions.php дочерней темы

function leyka_link_custom_libraries() {
    load_plugin_textdomain('leyka', false, get_stylesheet_directory_uri().'/languages/plugins/');
} 
add_action('init', 'leyka_link_custom_libraries');

Вышли пока из положения модернизацией одного из виджетов Лейки.

Ahaenor commented 8 years ago

Ок, спасибо за эксперимент. Мы добавили 2 фильтра для кастомизации папки с файлами локализации и mо-файла с переводом:

Они появятся в следующей версии плагина. Как вариант, вы можете уже сейчас взять текущий код из ветки dev.

Mikhail84 commented 8 years ago

Добрый день! Видел изменения, а не могли бы вы привести пример как правильно назначить путь с использованием введенных фильтров, пробовал в functions.php добавлять add_filter с возвратом нужного пути, но не увидел изменений из своего словаря, наверно что-то не так делаю.

Ahaenor commented 8 years ago

Добрый день!

Мы провели новые тесты.

  1. Фильтры для путей к файлам локализации не срабатывают, т.к. навешивание функций на них в клиентском коде происходит уже после выполнения локализации.
  2. Но способ заменить локализацию на кастомную всё же есть. Для этого в коде вашей темы добавьте следующее:
add_action('init', function(){

    unload_textdomain('leyka'); // Выгрузка локализации "по умолчанию"

    // Загрузка вашей кастомной локализации (нужно указать абс. адрес к mo-файлу):
    load_textdomain('leyka', get_template_directory()."/lang/leyka-ru_RU.mo");

});

У нас на тестах это работает. Пожалуйста, сообщите о ваших результатах.

versusbassz commented 8 years ago

Как вариант, можно попробовать пункт №9 в этой статье: https://www.toptal.com/wordpress/top-wordpress-development-mistakes

Ahaenor commented 8 years ago

Да, спасибо. Это тоже хороший вариант. Особенно для кейсов, когда нужно поменять небольшое кол-во формулировок.

Mikhail84 commented 8 years ago

Решение Ahaenor работает! Спасибо за помощь!

Ahaenor commented 8 years ago

Ура) Мы рады помочь, обращайтесь.

Mikhail84 commented 8 years ago

Еще обозначился более явно нюанс, при переключении локалей не происходит автоматического переключении словарей плагина (или скорее "отключение" так как в комплекте словарь только русский), как вариант сделал так

add_action("init", function() { 
    add_filter("locale", function($language) { 
        if ($language == "ru_RU") {
            load_textdomain("leyka");
        } else {
            unload_textdomain("leyka");
        }
    });
 });
Ahaenor commented 8 years ago

Ок. Как именно вы переключаете локали?

Лейка совместима с Polylang, в нём язык должен переключаться корректно.

Но мы не тестировали при физической смене локали сайта. Вы говорите об этой ситуации?

Mikhail84 commented 8 years ago

На сайте стоит плагин qTranslate X, переключение с помощье его виджета. Проверял после переключения функцией get_locale(), результат выдавала в соответствии с выбранным языком то есть "ru-RU" для русского и "en-US" для английского.