Ноя
29
11

Быстрый перевод вордпресс тем с gettext

Перевод темы WordPressДля классического метода перевода шаблона вордпресс требуется отредактировать содержимое специальных файлов PO/MO, используя при этом программу Poedit или какой-нибудь подходящий плагин. Однако, что делать, если вам нужно быстро подправить всего несколько слов в теме, и нет особо времени/желания установливать сторонние решения?

На помощь приходят функции и фильтры вордпресс, что позволяют заменить любой текст, для которого доступна локализация в шаблоне. Имеется ввиду наличие специальных конструкций __( или _e( — без них данный метод не будет работать. Решение максимально простое, но не всеми разработчиками приветствуется.

Итак, допустим, вам нужно сделать частичный перевод темы вордпресс, заменив заголовок формы комментариев «Leave a Reply» на текст «Оставить комментарий». Для этого заходим в файл функций functions.php и размещаем следующий код:

add_filter('gettext', 'translate_text');
 add_filter('ngettext', 'translate_text');
 
function translate_text($translated) {
$translated = str_ireplace('Leave a Reply', 'Оставить комментарий', $translated);
return $translated;
}

При вызове данной функции фильтр заменит все вхождения «Leave a Reply» на указанный вами текст. Причем данный хак позволяет переводить и более одной фразы — просто добавляете новые строки $translated в функцию.

add_filter('gettext', 'translate_text');
add_filter('ngettext', 'translate_text');
 
function translate_text($translated) {
$translated = str_ireplace('Leave a Reply', 'Оставить комментарий', $translated);
$translated = str_ireplace('Подытог', 'Итого', $translated);
return $translated;
}

По второму примеру видите, что можно не только переводить в шаблоне вордпресс по 1-2 фразе, но и заменять определенные уже локализованные элементы.

Эта фишка оказалась очень полезной при работе с WooCommerce. Файлов локализации у этого модуля было несколько, пару часов пытался разобраться какой именно используется при отображении фразы «Подытог» — тщетно. Причем разные плагины и Poedit также не помогли с решением задачи, правка ядра напрямую, сами понимаете, не лучший вариант. А вот данный хак gettext для быстрого перевода темы вордпресс с заменой слов отлично сработал! Автору решения респект. Выручил.

Итого. Не смотря на то, что многие разработчики не любят и не рекомендуют этот метод, иногда перевод вордпресс шаблона с помощью gettext может сэкономить вам много нервов и времени. Он актуален, если нужно локализовать несколько элементов на сайте, и у вас либо нет времени, либо не можете найти нужные файлы локализации. «Злоупотреблять» данным хаком для перевода вордпресс темы полностью я бы не советовал.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 3, средний балл: 6,33 из 7)
Загрузка...

категория Категории: Хаки и секреты;
теги Теги: , .

комментариев 11 к статье “Быстрый перевод вордпресс тем с gettext”

  • Yaroslav.CH   30.11.2015

    ИМХО, это плохой путь для перевода. Во-первых, получается куча мест с переводом — замахаешься потом искать, если понадобиться. А во-вторых, отжирает память и добавляет лишние запросы.
    Насчет Woocommerce — полагаю, ты поставил плагин Saphali Woocommerce Russian для руссификации? :) Так вот «Подытог», насколько помню, был до версии 2.3 именно там и сам файл перевода лежал в папке плагина. Да, бредово и перевод там просто ужасный.
    Сейчас все стало проще — теперь файл руссификации один, и лежит он в wp-content/languages/plugins:
    woocommerce-ru_RU — фронт, woocommerce-admin-ru_RU — бэк.

  • Tod   30.11.2015

    Yaroslav.CH, плагин Saphali Woocommerce Russian ставил, потом убрал. Там с переводами был какой-то непонятный глюк, я менял их, а через сутки все опять слетало. То ли какое-то автообновление темы было, то ли еще что-то, реально создавал новый перевод раз 10. Потом забил и внес правку тупо в php файл. А тут подвернулся более гибкий вариант с gettext.
    Переводить так всю тему я бы тоже не стал — запросы лишние, да и не совсем правильный метод. Но для пары тройки слов, если лень разбираться с кодом или никак не получается найти файл локализации, вполне можно себе позволить «минутную слабость»))

  • Yaroslav.CH   30.11.2015

    Tod, ну ты ж сам понимаешь — стоит разок «дать слабину» и — понеслась! :)
    А насчет переводов — слава богу, с версии 2.3 они наконец-то этот многофайловый ужас убрали. Теперь все лежит более-менее структурировано. Хотя качеством перевод, конечно, не блещет — переводили явно тупо по словам, вне зависимости от контекста. И вся ж лажа в том, что при обновлении движка, обновлять сам файл перевода нельзя — слетают все твои изменения. Все жду, когда в Woocommerce появятся новые переменные, перевода которых не будет в старом файле. От будет радости :)
    Кроме того, в Woocommerce периодически всплывают неприятные моменты использования одной и той же текстовой переменной для абсолютно разных мест. Помню был момент, когда в форме заказа и в табах использовалась одна переменная «Характеристики». Причем для формы заказа этот перевод, естественно, абсолютно не подходил — там имелись ввиду примечания к заказу. Может уже и исправили, но тогда пришлось решать иначе.

  • Tod   30.11.2015

    Yaroslav.CH, согласен, я обычно так не перевожу, в этот раз пришлось из-за глюков и убитых пары часов на их поиски. Я переводил через Poedit, Loco Translate. Там реально было 3 места с текстами — каталог wp-content/languages, еще один в теме и в самом модуле. Но в итоге все же нашел нужно место, а потом, как уже говорил, переводы начали сами по себе слетать. Глюк был не только с переводами, но и настройками шаблона, вероятно проблема как раз в теме была. В общем, метод получше правки php файлов напрямую. И при обновлении ничего не слетает)

  • Yaroslav.CH   30.11.2015

    Tod, я только Poedit использую — из всех вариантов, этот для меня оказался самым оптимальным. А насчет автообновления — когда-то имел дело с темой, у которой в настройках была птичка freez-а. То есть раз в сутки она откатывалась до исходной версии. Сама настройка, как я понимаю, пришла из демо-версии этой темы — может разработчик забыл убрать, а может решил, что кому-то еще пригодится.

  • Tod   30.11.2015

    Yaroslav.CH, я вроде все настройки просмотрел, но реально файлы переводов и стилей откатывались до версий по-умолчанию. С Poedit там были «свои нюансы» — программа выдавала сообщение с ошибкой в исходном файле и, следовательно, сгенерировать МО файл не получилось. Короче говоря, мутный был проект, хорошо, что все с ним уже порешал.

  • Kristina   07.12.2015

    Спасибо большое)) очень долго искала, как убрать подытог) только это мне помогло!!!

  • Yaroslav.CH   15.06.2017

    Tod, прошло два года, а твоя статья сегодня очень пригодилась :) После того как языковые файлы админки и фронта в WP и WC объединили, твой вариант работы с текстом получился единственно удобным.

  • Tod   15.06.2017

    Yaroslav.CH, рад что пригодилось:) аналогично фишка до сих пор в некоторых случаях очень выручает.

  • Кирилл   07.06.2019

    У меня почему-то вообще не работает фильтр gettext ни в каком виде(( Что делать?

  • Tod   07.06.2019

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

Оставить комментарий

(предыдущая статья)
(следующая статья)

Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории

Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости