Быстрый перевод вордпресс тем с gettext
Для классического метода перевода шаблона вордпресс требуется отредактировать содержимое специальных файлов 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 может сэкономить вам много нервов и времени. Он актуален, если нужно локализовать несколько элементов на сайте, и у вас либо нет времени, либо не можете найти нужные файлы локализации. «Злоупотреблять» данным хаком для перевода вордпресс темы полностью я бы не советовал.
комментариев 11 к статье “Быстрый перевод вордпресс тем с gettext”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Оптимизируем WordPress header и удаляем лишний код (5,19 из 7, голосов - 43)
- Как создать пункт меню без ссылки в wordpress (6,39 из 7, голосов - 23)
- Добавление кнопки Вконтакте, Facebook и Twitter в wordpress блог (6,14 из 7, голосов - 21)
- Хаки для вариаций товаров в WooCommerce (4,88 из 7, голосов - 24)
- Выполнение jQuery скриптов при выборе вариаций товаров в WooCommerce (3,96 из 7, голосов - 26)
- Размеры изображений в WordPress — как изменить, добавить свои и удалить лишние (3,48 из 7, голосов - 27)
- Вывод текста в блоге только на главной (6,85 из 7, голосов - 13)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Найбільш очікувані новинки MMORPG ігор в 2025 році
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
ИМХО, это плохой путь для перевода. Во-первых, получается куча мест с переводом — замахаешься потом искать, если понадобиться. А во-вторых, отжирает память и добавляет лишние запросы.
Насчет Woocommerce — полагаю, ты поставил плагин Saphali Woocommerce Russian для руссификации? :) Так вот «Подытог», насколько помню, был до версии 2.3 именно там и сам файл перевода лежал в папке плагина. Да, бредово и перевод там просто ужасный.
Сейчас все стало проще — теперь файл руссификации один, и лежит он в wp-content/languages/plugins:
woocommerce-ru_RU — фронт, woocommerce-admin-ru_RU — бэк.
Yaroslav.CH, плагин Saphali Woocommerce Russian ставил, потом убрал. Там с переводами был какой-то непонятный глюк, я менял их, а через сутки все опять слетало. То ли какое-то автообновление темы было, то ли еще что-то, реально создавал новый перевод раз 10. Потом забил и внес правку тупо в php файл. А тут подвернулся более гибкий вариант с gettext.
Переводить так всю тему я бы тоже не стал — запросы лишние, да и не совсем правильный метод. Но для пары тройки слов, если лень разбираться с кодом или никак не получается найти файл локализации, вполне можно себе позволить «минутную слабость»))
Tod, ну ты ж сам понимаешь — стоит разок «дать слабину» и — понеслась! :)
А насчет переводов — слава богу, с версии 2.3 они наконец-то этот многофайловый ужас убрали. Теперь все лежит более-менее структурировано. Хотя качеством перевод, конечно, не блещет — переводили явно тупо по словам, вне зависимости от контекста. И вся ж лажа в том, что при обновлении движка, обновлять сам файл перевода нельзя — слетают все твои изменения. Все жду, когда в Woocommerce появятся новые переменные, перевода которых не будет в старом файле. От будет радости :)
Кроме того, в Woocommerce периодически всплывают неприятные моменты использования одной и той же текстовой переменной для абсолютно разных мест. Помню был момент, когда в форме заказа и в табах использовалась одна переменная «Характеристики». Причем для формы заказа этот перевод, естественно, абсолютно не подходил — там имелись ввиду примечания к заказу. Может уже и исправили, но тогда пришлось решать иначе.
Yaroslav.CH, согласен, я обычно так не перевожу, в этот раз пришлось из-за глюков и убитых пары часов на их поиски. Я переводил через Poedit, Loco Translate. Там реально было 3 места с текстами — каталог wp-content/languages, еще один в теме и в самом модуле. Но в итоге все же нашел нужно место, а потом, как уже говорил, переводы начали сами по себе слетать. Глюк был не только с переводами, но и настройками шаблона, вероятно проблема как раз в теме была. В общем, метод получше правки php файлов напрямую. И при обновлении ничего не слетает)
Tod, я только Poedit использую — из всех вариантов, этот для меня оказался самым оптимальным. А насчет автообновления — когда-то имел дело с темой, у которой в настройках была птичка freez-а. То есть раз в сутки она откатывалась до исходной версии. Сама настройка, как я понимаю, пришла из демо-версии этой темы — может разработчик забыл убрать, а может решил, что кому-то еще пригодится.
Yaroslav.CH, я вроде все настройки просмотрел, но реально файлы переводов и стилей откатывались до версий по-умолчанию. С Poedit там были «свои нюансы» — программа выдавала сообщение с ошибкой в исходном файле и, следовательно, сгенерировать МО файл не получилось. Короче говоря, мутный был проект, хорошо, что все с ним уже порешал.
Спасибо большое)) очень долго искала, как убрать подытог) только это мне помогло!!!
Tod, прошло два года, а твоя статья сегодня очень пригодилась :) После того как языковые файлы админки и фронта в WP и WC объединили, твой вариант работы с текстом получился единственно удобным.
Yaroslav.CH, рад что пригодилось:) аналогично фишка до сих пор в некоторых случаях очень выручает.
У меня почему-то вообще не работает фильтр gettext ни в каком виде(( Что делать?
Кирилл, сложно сказать почему так — возможно, ошибка при добавлении в файл функций, может конфликт с шаблоном/другими модулями, я бы попробовал на чистом сайте затестить функцию, а потом постепенно попытался бы выявить проблему.