На главную
Обо мне
Меня зовут: Николай Воронков
Email: job@voronkov.org
Skype: nik-voronkov
Работаю: Freelancer
Мое портфолио (по категориям)
MS SQL / Oracle / mySQL
ASP.NET / Silverlight
C# / PHP
Adobe InDesign (client/server)
SSRS / SSAS
Wordpress

Многоязыковая поддержка 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));      
  }
}


Вот собственно и все, желаю всем удачи.

Оставьте комментарий: