Языковой таргетинг при входе в IPB в зависимости от страны с помощью mod_GeoIP ../images/2thTitles/TFreeCat.jpg 583

Языковой таргетинг при входе в IPB в зависимости от страны с помощью mod_GeoIP

    Часто необходимо чтобы пользователи, заходящие из разных стран, в режиме Гостя(Guest) могли читать форум на родном(или хотя бы понятном) языке.
    Это возможно если на форуме установлены скины для соответствующих языков. Осталось только определить - из какой страны пришёл посетитель.
    К счастью это достаточно несложно сделать. Будем использовать для этого модуль Apache mod_geoip. Установлен он или нет можно посмотреть, например, с помощью самого форума IPB. Для этого заходим в админку, выбираем Системные настройки -> Данные сервера. Ищем раздел apache(или близкий по названию) а ниже подраздел Loaded Modules:

Установленные модули Apache
    Если в списке модулей есть mod_geoip - отлично. Если нет - то просим провайдера установить и активировать его. Если Вы сами провайдер - то делаем это сами, благо описаний этого в интернете немало.
    Чтобы проверить - работает ли он или нет, пишем небольшой файл:
        <?php
        $country_code = apache_note("GEOIP_COUNTRY_CODE");
        echo "Код страны: " . $country_code . "\n";
        ?>
    Затем сохраняем его на сервер, под именем, скажем 1.php - и вызываем в строке браузера.
    Если код страны показывается правильно(для России, например, это будет RU), то всё отлично. Если нет - то просим провайдера настроить Apache(или настраиваем сами - если провайдерсвуете самостоятельно).

    Теперь переходим к реализации таргетинга. Сначала смотрим какие языковые шаблоны у вас есть на IPB и какие у них имена. Для этого заходим с каталог lang и смотрим какие там имеются подкаталоги. В форуме, на котором будет осуществляться таргетинг, допустим, имеются 2 каталога: en для английского языка и ru для русского.
    Теперь открываем файл index.php . Ищем там такую конструкцию:
if ($ibforums->vars['default_language'] == "")
    и удаляем его и 3 последующих строки, например в данном форуме это были такие:
if ($ibforums->vars['default_language'] == "")
  {
  $ibforums->vars['default_language'] = 'ru';
  }
    Вместо них мы поместим код, выбирающий язык в зависимости от страны. Допустим для стран, входящих в бывший СССР это будет русский, а для остальных - английский. Тогда код будет такой:
$RUS_countries = array('AM','AZ','BY','EE','GE','KG','KZ','LT','LV','MD','RU','TJ','TM','UA','UZ');
$country_code = apache_note("GEOIP_COUNTRY_CODE");

if (in_array($country_code, $RUS_countries)) {
  $ibforums->vars['default_language'] = 'ru';
  }
else {
  $ibforums->vars['default_language'] = 'en';
  }
    Данный метод был использован на IPB 1.3.1, но можно применить и на IPB 2.x.x - поскольку в различных подверсиях IPB 2 конструкция кода для выбора языка либо такая же - либо очень похожа.