Многоязыковая поддержка WordPress
Данный подход используется на этом сайте, он прост в реализации, но имеет некоторые недостатки и ограничения.
Это не идеальный код, это просто демонстрация способа, как можно включить многоязыковую поддержку для WordPress.
Приведенные тексты программ подразумевают поддержку двух языков: английского и русского, языков может быть больше.
Недостатки:
- Всегда должны быть русская и английская версия текста во всех местах.
- В административной панели заголовки выглядят нечитабельно.
- Нельзя использовать такую разметку для категорий и тегов, если планируется их прямой вывод через функции wp_list_[…] и им подобные.
- При использовании текста в дополнительном коде PHP всегда необходимо вызывать функцию-транслятор.
- Поисковики будут всегда получать текст для языка по умолчанию.
Данный подход является очень упрощенным и годится для несложных сайтов.
Использование в постах и страницах:
- [ru]Русский текст[/ru]
- [en]English text[/en]
Использование в коде PHP:
<?php //-- echo -- stringTranslate('[en]English text[/en][ru]Русский текст[/ru]'); //-- value -- $text = stringTranslate('[en]English text[/en][ru]Русский текст[/ru]', false); ?>
Реализация:
common.js (файл javascript с вашим кодом):
function changeLanguage(ob) { if (ob == "ru") { if (!confirm("Please, confirm changing language interface to English.")) { return; } document.cookie = "lang=en"; } else { if (!confirm("Подтвердите, пожалуйста, смену языка интерфейса на Русский.")) { return; } document.cookie = "lang=ru"; } location.reload(); }
На своем сайте я использую простую схему Wodpress, т.е. тут нет шаблонов, дополнительных файлов и т.д. Поэтому привожу пример только для основного файла схемы. Этот блок отображает две иконки для переключения языков, подобные тем, которые вы можете видеть на этом сайте. Пример использования функции отображения данных в коде приведен выше.
index.php:
//.... HTML markup before <img src="<?php bloginfo('template_url'); ?>/images/en.png" <?php echo (($lang == "en")?("title='English language is setting now.'"): ("style='opacity: 0.2; cursor: pointer;' onclick='changeLanguage(\"ru\");' title='Set English as interface language.'")); ?>/> <img src="<?php bloginfo('template_url'); ?>/images/ru.png" <?php echo (($lang == "ru")?("title='Русский язык интерфейса сейчас установлен.'"): ("style='opacity: 0.2; cursor: pointer;' onclick='changeLanguage(\"en\");' title='Установить русский язык интерфейса.'")); ?>/> // HTML markup after ...
functions.php:
add_filter( 'the_content', 'content_translate' ); function content_translate ($content) { return stringTranslate($content, false); } function stringTranslate($str, $isEcho = true) { $rez = $str; if ($_COOKIE['lang']) { $lang = $_COOKIE['lang']; } else { $lang = 'en'; } $rStr = 'ru'; if ($lang == 'ru') { $rStr = 'en'; } $am = 0; while (true) { $pos1 = strpos($rez,"[".$rStr."]"); if ($pos1 === false) { break; } $pos2 = strpos($rez,"[/".$rStr."]"); if ($pos2 === false) { $pos2 = strpos($rez,"[".$lang."]",$pos1); if (!$pos2) { $pos2 = strlen($rez); } } else { $pos2 += strlen("{/".$rStr."}"); } $rez = str_replace(substr($rez, $pos1, $pos2 - $pos1), "", $rez); //-- decline endless cycle -- $am++; if ($am > 100) { return "Cycle error!"; } } if ($isEcho) { echo str_replace('[/'.$lang.']', "", str_replace('['.$lang.']', "", $rez)); } else { return str_replace('[/'.$lang.']', "", str_replace('['.$lang.']', "", $rez)); } }
Вот собственно и все, желаю всем удачи.