Автоматичне визначення мови сайту по ip користувача

Більшість багатомовних сайтів використовують технологію автоматичного визначення мови користувача. Виглядає це так: користувач, заходячи на ресурс, бачить перед собою сторінки з контентом на рідному для нього мовою. Найпростіший метод визначення - по IP кожного відвідувача. Технологія проста і багато в чому зручна для відвідувачів. Але в ній є свої нюанси.

Використання IP або, точніше, GeoIP - найбільш доступний і простий спосіб. Але в той же час часто він буває неточним. Багато користувачів скаржаться: коли вони знаходяться за пределаміУкаіни, то спочатку всі сайти завантажуються на мові країни, в якій вони перебувають. Це дико незручно, і найцікавіше, що цим грішать і такі великі майданчики, як Facebook.

  • легке застосування, можливість реалізації на різних мовах
  • якщо не брати до уваги описані вище проблеми - висока точність визначення;
  • висока (миттєва) швидкість - для отримання результату досить одного запиту до бази.

До недоліків методу визначення мови по IP відносять:

  • необхідність постійно актуалізувати базу IP;
  • неможливо перевірити, наскільки достовірні дані;
  • дані IP поУкаіни не завжди точні.

Перший і найпростіший спосіб - використання безкоштовної бібліотеки. Наприклад, для сайтів на PHP можна застосовувати розширення GeoIP. За посиланням доступна докладна інструкція по установці і інші рекомендації.

У PHP є стандартні елементи супеглобального масиву $ _SERVER для визначення IP-адреси і перемикання на потрібну мовну версію. Ось конкретно використовуваний елемент

Він відповідає за передачу сервера даних про мову користувача, повертаючи значення ru, en або будь-яке інше. Ось так приблизно виглядають ці дані:

Перше значення - мова, друге - регіон, а коефіцієнт вказує на пріоритет (те, яку мову користувач віддає перевагу більше). Завдяки подібній логіці, наприклад, стартова сторінка Google для російськомовного користувача, який знаходиться в Україні, завантажиться російською, але з сервера Google.com.ua.

Щоб установити мову можна використовувати наступний код:

preg_match_all ( '/ ([az] (?: - [az])?) (?:; q = ([0-9.] +))? /', strtolower ($ _ SERVER [ "HTTP_ACCEPT_LANGUAGE"]), $ matches); // обчислюємо відповідності з масивом $ matches

$ Langs = array_combine ($ matches [1], $ matches [2]); // Створюємо масив з ключами $ matches [1] і значеннями $ matches [2]

foreach ($ langs as $ n => $ v)

$ Langs [$ n] = $ v. $ V. 1; // Якщо немає q, то ставимо значення 1

arsort ($ langs); // Сортуємо по спадаючій q

echo key ($ langs); // Виводимо мову за замовчуванням

>







Досить встановити код на сайт - і відвідувачі будуть отримувати завантажені сторінки на потрібному їм мовою, не здійснюючи жодних додаткових дій. Ось ще один подібний метод:

preg_match ( '/ ^ \ w /', $ _ SERVER [ 'HTTP_ACCEPT_LANGUAGE'], $ matches);

switch (strtolower ($ matches [0]))

case "ru": $ accept_lang = "ru"; break; // якщо український

case "de": $ accept_lang = "de"; break; // якщо німецький

case "en": case "uk": case "us": $ accept_lang = "en"; break; // якщо англійська

case "ua": $ accept_lang = "ua"; break; // якщо український

default: $ accept_lang = "en"; break; // якщо немає збігів, то за замовчуванням, наприклад, англійський

echo $ accept_lang;

>












$ Sites = array (

// отримуємо мову

$ Lang = substr ($ _ SERVER [ 'HTTP_ACCEPT_LANGUAGE'], 0, 2); // вирізаємо перші дві букви

// перевіряємо мову

if (! in_array ($ lang, array_keys ($ sites)))

$ Lang = 'ru';

// перенаправлення на субдомен

header ( 'Location:'. $ sites [$ lang]);
















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

Схожі статті