Как сделать чтобы при обновлении WordPress и его плагинов не ломался перевод?
Доброго времени суток. Больная тема, но однозначных ответов не нашёл. Как сделать чтобы при обновлении Wordpress и его плагинов не ломался перевод?
Отдельно для Woocommerce работает такой код в functions.php:
add_filter('gettext', 'translate_text'); add_filter('ngettext', 'translate_text'); function translate_text($translated) { $translated = str_ireplace('Подытог', 'Сумма', $translated); $translated = str_ireplace('Возможно Вас также заинтересует…', 'Вместе с этим товаром покупают', $translated); $translated = str_ireplace('Сортировка от последнего', 'Сначала новинки', $translated); $translated = str_ireplace('Нажмите, чтобы ввести код', 'Нажмите, чтобы ввести промокод', $translated); $translated = str_ireplace('Если у вас есть код купона, укажите его ниже.', 'Если у вас есть промокод, укажите его ниже.', $translated); $translated = str_ireplace('Применить купон', 'Применить код', $translated); $translated = str_ireplace('Есть купон?', 'Есть промокод?', $translated); $translated = str_ireplace('Код купона', 'Промокод...', $translated); $translated = str_ireplace('Оплата наличными при доставке заказа.', 'Оплата при получении товара.', $translated); return $translated; } |
add_filter('gettext', 'translate_text'); add_filter('ngettext', 'translate_text'); function translate_text($translated) { $translated = str_ireplace('Подытог', 'Сумма', $translated); $translated = str_ireplace('Возможно Вас также заинтересует…', 'Вместе с этим товаром покупают', $translated); $translated = str_ireplace('Сортировка от последнего', 'Сначала новинки', $translated); $translated = str_ireplace('Нажмите, чтобы ввести код', 'Нажмите, чтобы ввести промокод', $translated); $translated = str_ireplace('Если у вас есть код купона, укажите его ниже.', 'Если у вас есть промокод, укажите его ниже.', $translated); $translated = str_ireplace('Применить купон', 'Применить код', $translated); $translated = str_ireplace('Есть купон?', 'Есть промокод?', $translated); $translated = str_ireplace('Код купона', 'Промокод...', $translated); $translated = str_ireplace('Оплата наличными при доставке заказа.', 'Оплата при получении товара.', $translated); return $translated; }
А вот как реализовать его для всего сайта - не известно... Пробовал подставлять нужные слова для перевода - не помогает...
Дополнительные вопросы
Вова Дружаев @OtshelnikFm Куратор тега WordPress Обо мне расскажет yawncato.com Поставь плагин Say what? от Ademti Software и настрой в нем замену без кода Refguser @Refguser Делаю ИМ и другие решения Поставь loco-translate и используй в нём пользовательский каталог для лангпака. Ответы на вопрос 0
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Если перевод ломается после обновлений, значит вы правите не там, где WordPress ожидает пользовательские переводы. Фильтр
gettextработает, но это аварийный способ: он выполняется на каждом переводимом тексте, может тормозить сайт и легко ломается при изменении оригинальной строки.Правильные варианты:
wp-content/languages/, а не в папке плагина.gettext, но ограничить его text domain.Если всё-таки используете
gettext, не заменяйте строки глобально. Делайте проверку домена:add_filter('gettext', function ($translated, $text, $domain) { if ($domain !== 'woocommerce') { return $translated; } $replacements = [ 'Subtotal' => 'Сумма', 'You may also like…' => 'Вместе с этим товаром покупают', ]; return $replacements[$text] ?? $translated; }, 10, 3);
Для множественных форм нужен отдельный фильтр
ngettext, но там тоже важно проверять domain и исходные строки.Если перевод исчезает после обновления, проверьте, где лежит
.po/.mo. Файлы внутриwp-content/plugins/plugin-name/languagesмогут перезаписываться. Пользовательские переводы должны жить вwp-content/languages/plugins/или кастомной папке, которую не трогают обновления.Вывод: используйте нормальные файлы переводов для постоянных переводов, а
gettextоставьте только для редких точечных замен, где нет другого удобного hook.