switch_to_locale()
Дозволяє програмно переключити мову сайту.
Одна з кількох функцій, введених у WP 4.7 для керування перекладом сайту для окремого користувача.
Функція буде працювати тільки якщо користувач встановив будь-яку мову перекладу в налаштуваннях профілю (будь-яка навіть «мова сайту»). Або якщо користувач реєструвався у WP версії 4.7 або вище. Але якщо ви оновили версію сайту, а користувач ще не вибирав мову перекладу, локаль перемикатися не буде. Можливо в майбутньому це виправлять…
Щоб перевірити переключена локаль у поточний момент, використовуйте функцію is_locale_switched() .
Хуки при перемиканні локалі:
При перемиканні локалі спрацьовують кілька подій:
change_locale – спрацьовує, коли локаль вже змінена. Ядро використовує його, щоб перетворити типи записів і таксономій.
switch_locale – спрацьовує коли локаль перемикається.
- restore_previous_locale – спрацьовує, коли локаль повернуто до попередньої.
WP_Locale_Switcher::switch_to_locale()
Хуків немає.
Повертає
true|false
. True on success, false on failure.
Використання
switch_to_locale($locale);
-
$locale
(рядок) (обов’язковий) Назва локалі, на яку потрібно перейти. Наприклад:
ru_RU
абоen_US
.Повний список локалів дивіться тут
Приклади
#1 Переключимо мову сайту на льоту
Допустимо наш сайт працює російською, але в адмінці нам потрібна англійська мова. Тоді вставляємо такий код у functions.php теми:
if( is_admin() ) switch_to_locale('en_US');
Можна через хук:
add_action('init', function(){ switch_to_locale('en_US'); });
#2 Встановимо мову адмінки за умовою
Припустимо, ми визначаємо локаль користувача IP і записуємо ці дані в куку user_locale
. Так ми знаємо з якої країни прийшов користувач і можемо виставити йому мову сайту на льоту:
add_action('init', function(){ if( isset($_COOKIE['user_locale']) ) switch_to_locale( $_COOKIE['user_locale'] ); }
нотатки
- Global. WP_Locale_Switcher. $wp_locale_switcher WordPress locale switcher об’єкт.
список змін
З версії 4.7.0 | Введено. |
Код switch_to_locale() switch to locale WP 6.0.2
function switch_to_locale( $locale ) { /* @var WP_Locale_Switcher $wp_locale_switcher */ Global $wp_locale_switcher; return $wp_locale_switcher->switch_to_locale( $locale ); }