Я покажу, как использовать Atahualpa от Bytes For All для создания многоязычных сайтов WordPress с помощью WPML.
Тема оформления для многоязычного сайта WordPress должна иметь все строки обёрнутыми в вызовы gettext, но этого недостаточно. Использование gettext в теме оформления позволяет отображать её на другом (одном) языке, отличном от того, на котором она была изначально создана.
Для работы в многоязычном режиме тема оформления должна позволять посетителям выбирать язык отображения и предоставлять соответствующий контент для каждого языка.
Многоязычная версия для Atahualpa
Начнём с конца. Вот демо-сайт, работающий на изменённой версии Atahualpa, а вот изменённая тема оформления, которую Вы можете скачать и использовать.
Что мы изменили, чтобы сделать Atahualpa многоязычной
1. Добавление wpml-integration.php в каталог темы оформления
Файл wpml-integration.php находится в каталоге WPML в папке docs/theme-integration. Он включает набор функций, которые помогают сделать темы оформления многоязычными.
Все эти функции предназначены для того, чтобы темы оформления использовали WPML, если он активен, или игнорировали его, если он отсутствует. Это означает, что тема оформления будет работать в многоязычном режиме, если доступен WPML, или в обычном (на одном языке) в противном случае.
Добавлено в functions.php:
include dirname(__FILE__) . '/wpml-integration.php';
Эта инструкция загружает wpml-integration.php и делает его доступным для всех файлов темы оформления.
2. Добавление переключателей языков
Переключатели языков позволяют посетителям выбирать язык, на котором отображается сайт. Часто бывает полезно добавить несколько типов переключателей языков. Посетители быстро просматривают сайт и ищут визуальные подсказки для контента на их языках. Разные люди смотрят в разные места, поэтому добавление различных типов переключателей языков в разные части страницы поможет посетителям найти свой язык.
Мы добавили выпадающий переключатель языков WPML в боковую панель, добавив его в header.php:
<?php wpml_languages_selector() ?>

Мы также добавили горизонтальный список языков в футер сайта. Многие пользователи сначала прокручивают страницу до самого низа, чтобы посмотреть, что там находится (и насколько длинные страницы), поэтому это хорошее место, чтобы сообщить о доступности страниц на других языках. Мы добавили следующий код в footer.php:
<?php wpml_languages_list() ?>

Наконец, мы добавили переключатель языков в конец каждой записи. Это добавляет предложение к каждой записи, сообщающее, на каких ещё языках она доступна. Мы добавили следующее в index.php (который включает пользовательскую версию цикла отображения WordPress):
<?php if(is_singular()) wpml_content_languages(); ?>

3. Настройка ссылки на главную страницу для перехода на главную страницу каждого языка
Когда посетители нажимают «Главная», они ожидают попасть на главную страницу без смены языка. Поскольку у каждого языка есть своя «главная страница» с другим URL-адресом, одно значение для всех не сработает.
Обычно темы оформления WordPress вычисляют адрес для «Главной» страницы на основе значения «URL-адрес блога», заданного в админ-панели. WPML создал функцию, которая вычисляет правильный адрес главной страницы в соответствии с языком отображения.
Мы заменили get_option('home’) на wpml_get_home_url(). Кроме того, функция get_option('home’) возвращает адрес сайта без закрывающего слеша (/), поэтому темы оформления добавляют его вручную. Функция WPML включает этот слеш (за этим стоит длинная история).
Для внесения этого изменения нам пришлось отредактировать два файла. Мы изменили functions/bfa_get_options.php и заменили:
$bfa_ata['get_option_home'] = get_option('home');на
$bfa_ata['get_option_home'] = wpml_get_home_url();
Также мы отредактировали functions/bfa_header_config.php и удалили закрывающий слеш из ссылки на главную страницу:
'<a href="' . $bfa_ata['get_option_home'] . '">' . $bfa_ata['bloginfo_name'] . '</a>'
4. Продвинутый уровень — перевод текстов, вводимых пользователями на экране админ-панели темы оформления
Atahualpa позволяет управлять некоторыми текстами через экран админ-панели. Это отличная возможность, которая позволяет управлять сайтом без редактирования PHP-файлов. WPML также может переводить эти строки, используя свой механизм «Перевод строк».
Для этого тема оформления должна сообщить WPML, какие строки нужно перевести, а затем отобразить перевод, если он существует.
Когда пользователи переходят на экран админ-панели темы оформления, обновляют тексты и нажимают «Сохранить», выполняется функция bfa_ata_add_admin из functions/bfa_ata_add_admin.php. Мы добавили в неё следующий раздел (начиная со строки 11):
global $wpml_translatable_strings;
foreach($wpml_translatable_strings as $wpml_str ){
if(isset($_REQUEST['bfa_ata_'.$wpml_str]) && trim($_REQUEST['bfa_ata_'.$wpml_str])){
wpml_register_string('atahualpa theme', $wpml_str, stripslashes($_REQUEST['bfa_ata_'.$wpml_str]));
}
}Это действие проходит по списку строк, определённых в глобальной переменной $wpml_translatable_strings. Оно регистрирует каждую строку в списке перевода строк WPML.
Первый аргумент — это контекст для строк. Подойдёт любое имя, но Вам следует выбрать такое, которое описывает эти строки. Второй аргумент — это имя строки (не переводится). Последний аргумент — это значение строки, которое переводится.
Чтобы отобразить переводы (если они существуют), мы добавили функцию wpml_t в functions/bfa_get_options.php (начиная со строки 204):
global $wpml_translatable_strings;
foreach($bfa_ata as $k=>$v){
if(in_array($k, $wpml_translatable_strings) || $__first){
$bfa_ata[$k] = wpml_t('atahualpa theme', $k, $v);
}
}Этот код выполняется при отображении сайта посетителям. Он проходит по списку строк, проверяет, была ли строка зарегистрирована для перевода (in_array), и если да, то получает перевод. Функция wpml_t вернёт переведённую строку на текущем языке, если перевод существует, или просто вернёт исходную строку, если перевода нет.
Превращение других тем оформления WordPress в многоязычные
Мы уже проделали аналогичную работу с iNove и Arras и планируем сделать многоязычными ещё больше тем оформления.
Наша цель — предоставить готовые к использованию многоязычные темы оформления и помочь Вам создавать собственные темы со статусом Multilingual Ready (готовые к многоязычности). Используя описанные здесь методы, Вы можете создавать темы оформления, которые будут работать в многоязычном режиме при наличии WPML или на одном языке без WPML.
Если Вы создаёте темы оформления и Вам нужна помощь в том, чтобы сделать их многоязычными, не стесняйтесь создавать новые темы на форуме.
Вы также можете зарабатывать деньги (по-настоящему пассивный доход), добавляя многоязычную поддержку в свои темы оформления. В следующей записи мы поговорим о включении партнёрских ID в темы оформления.


