Как сохранить плагин переводит после обновления?

9

http://wordpress.org/extend/plugins/bbpress/ bbpress 'языковая папка (wp-content / plugins / bbpress / bbp-languages) имеет это предупреждение:

/**
 * Do not put custom translations here. They will be deleted on bbPress updates.
 *
 * Keep custom bbPress translations in /wp-content/languages/
 */

На самом деле это не новая проблема, и да, они правы. Это большая проблема, если вы используете плагины WordPress с неанглийским языком.

В основном я перевел bbpress и создал .po и .mo файлы. Файлы работают, если я помещаю их в их обычную папку wp-content / plugins / bbpress / bbp-languages. Но, как указано выше, предупреждение говорит, что удалит при обновлении. Но проблема в том, что перевод не работает, если я помещаю их в папку wp-content / languages ​​/, как это предлагается в bbpress.

Я думаю, что должен быть крюк или что-то, что я могу активировать, но каково лучшее решение для этого? Просто я хочу сохранить языковые файлы плагина в wp-content / languages ​​/

Юнсал Коркмаз
источник
хорошо .. после того, как я проверил коды bbpress .. кажется, мне нужно поместить файлы в / wp-content / languages ​​/ bbpress / не напрямую / wp-content / languages ​​/ Теперь это работает для bbpress, но вопрос по-прежнему необходимо получить ответ для других плагинов imo
Ünsal Korkmaz

Ответы:

3

Вы должны заменить вызов языкового файла BBpress.

Хорошее место для этого - файл для конкретного языка в вашем общем каталоге языков. Для турецкого это, вероятно, будет файл с именем tr_TR.php. Он будет загружен автоматически и только в том случае, если он соответствует языку вашего блога. Это не будет перезаписано.

BBPress не использует функцию load_plugin_textdomain, он использует load_textdomainвместо этого. Здесь вы можете найти фильтр:

$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

Так что в вашем языке php файл просто добавьте фильтр, чтобы изменить путь:

function load_bbpress_tr_mofile( $mofile, $domain )
{
    if ( 'bbpress' == $domain )
    {
        // replace this. :)
        return 'FULL_PATH_TO_YOUR_FILE';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'load_bbpress_tr_mofile', 10, 2 );
Фуксия
источник
кажется, что есть ошибка .. bbpress.trac.wordpress.org/ticket/1647 изучает ее ... я буду использовать языковую папку по умолчанию wp-content / languages ​​/, так что вы предлагаете для'FULL_PATH_TO_YOUR_FILE '?
Юнсал Коркмаз,
Путь к вашей языковой директории ( WP_LANG_DIR) плюс ваш mo-файл.
fuxia
1
Хороший ответ. Примечание для разработчиков плагинов: делайте ваши load_plugin_textdomain()звонки во время действия «init», иначе мы не сможем подключиться к фильтру «load_textdomain_mofile». Уже будет слишком поздно.
Герт
2

Что вам нужно сделать, это создать простой плагин, который будет управлять text_domain установленных плагинов. Если вы не хотите иметь глобальное решение, вы можете добавить код в файл functions.php в своей теме.

Идея состоит в том, чтобы проинструктировать WordPress о том, где найти переводы. Внутренне во всех плагинах это делается с помощью чего-то похожего на

load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' );

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

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

load_plugin_textdomain('bbpress', false, '../../languages/bbpress');

Это заставит WordPress загружать ваши пользовательские файлы переводов из папки рядом с pluginsпапкой, в которой есть папка с именами bbpressфайлов перевода, с ТОЧНЫМ именованием, которое использует каждый плагин.

Ваш метод, который инструктирует textdomains для всех плагинов, должен работать в initфазе следующим образом

function set_myplugins_languages() {
     .... your code here.....
}
add_action('init', 'set_myplugins_languages');

(Не забудьте пометить это как ответ, если вы нашли это полезным)

Odys
источник
0

Чтобы это работало, вам нужно уже иметь файлы перевода WordPress в WP_LANG_DIR и установить глобальный языковой стандарт на этот язык. Если вы включаете переводы только для bbPress без изменения языкового стандарта или наличия основных файлов перевода WordPress, ничего не будет переведено, несмотря на то, что вы их загружаете.

Если вы хотите переопределить локаль только для bbPress, вам нужно добавить фильтр в 'bbpress_locale', который позволит вам переопределить mo-файл bbPress.

Хотя верно, что bbPress 2.0 использует функцию load_textdomain (), load_plugin_textdomain () в любом случае является просто оболочкой для load_textdomain (). Метод bbPress 2.0 более надежен и допускает глобальное размещение файлов перевода, поэтому вы не потеряете их при обновлении плагина.

Джон Джеймс Джейкоби
источник
-1

В моем случае создание постоянного пользовательского перевода для плагина требует следующих шагов (примеры перевода плагина ACF):

  1. создать wp-content/languages/plugins/каталог
  2. скопировать выбранный файл перевода .poиз lang/папки плагина (или любого другого с переводами) в созданный wp-content/languages/plugins/(например, из lang/acf-pl_PL.poв wp-content/languages/plugins/acf-pl_PL.po)
  3. настроить перевод с помощью, например, Poedit или любой другой программы для редактирования .poфайлов, а затем создать .moи сохранить в wp-content/languages/plugins/(например wp-content/languages/plugins/acf-pl_PL.mo)

Таким образом, перевод должен быть сохранен даже после обновления плагина.

Я не уверен, что эта стратегия будет работать для всех плагинов, но это, безусловно, стоит попробовать.

jmarceli
источник