Як зберегти переклади плагінів після оновлень?


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 ​​/ folder, як було запропоновано в 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'?
Ünsal Korkmaz

Шлях до вашого мовного каталогу ( WP_LANG_DIR) плюс мо-файл.
fuxia

1
Хороша відповідь. Примітка для розробників плагінів: load_plugin_textdomain()здійснюйте дзвінки під час дії "init", інакше ми не можемо підключитися до фільтра "load_textdomain_mofile". Це вже буде пізно.
Geert

2

Що вам потрібно зробити, це створити простий плагін, який буде керувати text_domain встановлених плагінів. Якщо ви не хочете мати глобальне рішення, можете додати код у свою функцію.php у вашій темі.

Ідея полягає в тому, щоб доручити wordpress про те, де знайти переклади. Внутрішньо у всіх плагінах це робиться за допомогою чогось подібного

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

це та функція, яку ви будете використовувати. Як ви бачите тут , останній аргумент використовується для встановлення відносного шляху до плагіна, де знаходяться файли перекладу.

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

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

це доручить wordpress завантажувати ваші власні файли перекладу з папки поруч із pluginsпапкою, у якій папка з ім’ям, у bbpressякій є файли перекладу, використовуючи точне іменування, яке використовує кожен плагін.

Ваш метод, який інструктує текстові домени для всіх плагінів, повинен працювати у initфазі наступним чином

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

(Не забудьте позначити це як відповідь, якщо ви вважаєте це корисним)


0

Для цього вам потрібно мати файли перекладу WordPress у WP_LANG_DIR та встановити глобальну локальну мову на цій мові. Якщо ви включаєте лише переклади для bbPress, не змінюючи локаль або не маючи основних файлів перекладу WordPress, нічого не буде перекладено, незважаючи на завантаження.

Якщо ви хочете змінити локаль лише для bbPress, вам потрібно додати фільтр до 'bbpress_locale', який дозволяє перезаписати mob файл 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)

Таким чином переклад повинен бути збережений навіть після оновлення плагіну.

Я не впевнений, чи буде ця стратегія працювати для всіх плагінів, але це, безумовно, варто спробувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.