✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Динамічна зміна мови (локалі) вашого сайту WordPress

29

Є кілька фантастичних багатомовних плагінів для WordPress, однак для одного клієнтського проекту мені потрібно було щось набагато гнучкіше, оскільки цей конкретний клієнт мав обслуговувати кілька країн, кожна з яких розмовляла кількома мовами.

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

Створення багатомовного плагіна

Якщо достатньо людей завадить мені це зробити, я можу розглянути можливість випустити весь плагін як окремий плагін, однак серце багатомовного плагіна, який я створив, покладається на localeфільтр WordPress, а серце плагіна міститься в такому фрагменті коду:


function wholesomecode_example_redefine_locale( $locale) {

    $country = get_post_meta( get_the_id(), '_wholesomecode_example_global_country_override', true );
    $lang    = get_post_meta( get_the_id(), '_wholesomecode_example_global_language_override', true );

    if (( empty( $lang) ||! (is_page() || is_single() || is_singular()) )) {
        $country = get_theme_mod( 'wholesomecode_example_multilingual_country', 'gb' );
        $lang    = get_theme_mod( 'wholesomecode_example_multilingual_language', 'en' );
    }

    if ('default' !== $country) {
        $locale = $lang. '_'. strtoupper( $country );
    } else {
        $locale = $lang. '-'. $country;
    }

    return $locale;

}
add_filter( 'locale', 'wholesomecode_example_redefine_locale', 10 );

Тада! Вашу мову налаштовано, і ваш багатомовний сайт тепер має перемикати мови на основі мета вашої сторінки/сайту.

Почекай! Мої стандартні переклади WordPress Core не працюють!

Це проблема, з якою я зіткнувся, але не міг її зрозуміти. Моя тема була ідеально перекладена після того, як я додав відповідні файли .mo та .po, однак переклади ядра WordPress за замовчуванням (наприклад, повідомлення «Залишити відповідь» у шаблоні коментарів) не перекладалися.

Виявилося, що рішення було досить простим! Хоча я забезпечив власний переклад домену, я забув додати один простий фрагмент коду до своєї теми: load_default_textdomain().


load_default_textdomain();

Якщо я скоротив пару годин вашого налагодження за допомогою цієї «однієї дивної поради», ласкаво просимо!

Джерело запису: wholesomecode.ltd

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі