Как заменить текст в зависимости от языка сайта?

Ссылка скопирована
1 ответ

В общем стоит сайьт на wp + acf + multilang
некоторые элементы нифига не переводятся с админки
хочу в шаблоне сменить, там не мнгого, но не получается

<?php 										  if (ICL_LANGUAGE_CODE == 'en') { 											 echo 'Read more'; 											} elseif (ICL_LANGUAGE_CODE == 'ru') { 											  echo 'Подробнее'; 										  } 										  ?>

<?php if (ICL_LANGUAGE_CODE == 'en') { echo 'Read more'; } elseif (ICL_LANGUAGE_CODE == 'ru') { echo 'Подробнее'; } ?>

при попытке сохранить, редактор шаблонов в админке кидает ошибки

Uncaught Error: Undefined constant "ICL_LANGUAGE_CODE" in wp-content/themes/pelletswp/template-parts/page-main.php:36 Stack trace: #0 wp-includes/template-loader.php(106): include() #1 wp-blog-header.php(19): require_once('/home/khorosh/w...') #2 index.php(17): require('/home/khorosh/w...') #3 {main}   thrown

Uncaught Error: Undefined constant "ICL_LANGUAGE_CODE" in wp-content/themes/pelletswp/template-parts/page-main.php:36 Stack trace: #0 wp-includes/template-loader.php(106): include() #1 wp-blog-header.php(19): require_once('/home/khorosh/w...') #2 index.php(17): require('/home/khorosh/w...') #3 {main} thrown

Дополнительно:

Для локализации посмотрите в сторону https://developer.wordpress.org/reference/functions/_e/

и тут почитайте https://wp-kama.ru/handbook/codex/translations

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

Ошибка возникает потому, что ICL_LANGUAGE_CODE у вас не определена. Эта константа есть у WPML, но если WPML не активен, используется другой мультиязычный плагин или код выполняется слишком рано, PHP воспринимает ICL_LANGUAGE_CODE как несуществующую константу.

Минимально безопасно проверять существование константы:

$lang = defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : get_locale();
 
if ($lang === 'en' || $lang === 'en_US') {
    echo esc_html__('Read more', 'theme-textdomain');
} else {
    echo esc_html__('Подробнее', 'theme-textdomain');
}

$lang = defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : get_locale(); if ($lang === 'en' || $lang === 'en_US') { echo esc_html__('Read more', 'theme-textdomain'); } else { echo esc_html__('Подробнее', 'theme-textdomain'); }

Если это Polylang, используйте его функцию:

$lang = function_exists('pll_current_language') ? pll_current_language() : substr(get_locale(), 0, 2);
 
echo $lang === 'en'
    ? esc_html__('Read more', 'theme-textdomain')
    : esc_html__('Подробнее', 'theme-textdomain');

$lang = function_exists('pll_current_language') ? pll_current_language() : substr(get_locale(), 0, 2); echo $lang === 'en' ? esc_html__('Read more', 'theme-textdomain') : esc_html__('Подробнее', 'theme-textdomain');

Но правильнее для таких коротких фраз не писать условия по языку, а подключить переводы темы и вывести строку через __(), _e(), esc_html__(). Тогда перевод будет храниться в po/mo-файлах или интерфейсе плагина переводов, а шаблон останется один:

echo esc_html__('Read more', 'theme-textdomain');

echo esc_html__('Read more', 'theme-textdomain');

Редактор шаблонов в админке лучше не использовать для таких правок: одна PHP-ошибка может положить фронт. Правьте файл через FTP/Git в дочерней теме и сначала проверяйте синтаксис.

Перед внедрением на рабочем сайте проверьте решение на копии или хотя бы сделайте резервную копию изменяемого файла. После правки включите отображение ошибок, откройте проблемную страницу в обычном и приватном окне, проверьте консоль браузера и логи PHP. Если задача связана с WordPress, WooCommerce или ACF, дополнительно проверьте поведение после очистки кэша и после выхода из админки: часть ошибок видна только для незалогиненного пользователя.

Если код работает только в одном шаблоне, лучше не оставлять его разрозненно в нескольких файлах. Вынесите повторяемую логику в функцию, небольшой плагин или template part, а в шаблоне оставьте только вызов. Так проще поддерживать решение после обновления темы, плагинов и PHP.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно