LINUX.ORG.RU
ФорумAdmin

версия сайта (ru/en) в зависимости от языка браузера


0

0

Подскажите, как сделать: если пользователь из России (СНГ) то направлять его на версию русской страницы сайта, а если из любой другой страны, то на другую. Как я понял есть вариант по языку браузера, самый простой, но со своими недостатками. на данный момент мне бы подошел самый простой вариант. Интересует его реализация!


Пользователь должен сам выбирать язык сайта, независимо от того, в какой стране он находится и каким браузером пользуется.

iZEN ★★★★★
()

В случае с языковыми предпочтениями браузера:

Если статический контент - то средствами Apache (http://httpd.apache.org/docs/2.2/content-negotiation.html).

Если что-то динамичное - то на основе анализа HTTP-заголовков (Accept-Language).

Или варианты аналогичные описанным выше(по IP) с использованием mod_geoip.

ef37 ★★
()

Ммм...

Для корневой директории сайта:
RewriteEngine On

# Если русского языка в списке поддерживаемых нет
RewriteCond %{HTTP_ACCEPT_LANGUAGE} !ru  [NC]
# Идем в английский раздел
RewriteRule ^/$                 /en/ [L]
# Иначе в русский
RewriteRule ^/$                 /ru/

nnz ★★★★
()

Если пользователей будет много, то ожидай от них тёплые «лучи счастья» за такую фичу.

Deleted
()
Ответ на: комментарий от nnz

> Ммм...


обязательно нужно оставить возможность выбора языка. а с таким вариантом такое не прокатит.

isden ★★★★★
()
Ответ на: комментарий от isden

>обязательно нужно оставить возможность выбора языка. а с таким вариантом такое не прокатит

Прокатит: у пользоватеся всегда есть возможность изменить настройки своего бровзера.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

>Прокатит: у пользоватеся всегда есть возможность изменить настройки своего бровзера.

Счастливый ты! Твои пользователи умеют сам менять настройки браузера.

disney
()

Ну во-первых т.к. языковых версии все равно две, должен быть механизм переключения языков (ибо ни страна, ни браузер не дают гарантии того, что человек по ту сторону экрана говорит на языке этой страны или на языке браузера (мало ли, может, в инет кафешку зашел).

И второе - языком по умолчанию ставить en если geoip сказал что он знает эту страну и страна не россия, не украина и не беларусь, а иначе - инглиш. Как-то так. Странички статика или динамические?

azure ★★
()
Ответ на: комментарий от azure

Спасибо всем участникам. для меня это важный вопрос. У меня на сайте есть выбор языка в любом случае!

azure А как прикрутить geoip к сайту (php + smarty)? стр. ру. mysite.ru/index.php?lang=ru стр. ингл. mysite.ru/index.php?lang=en странички динамические.

stasbz
() автор топика
Ответ на: комментарий от nnz

не получилось. как открывалась страница по умолчанию на англ. так и открывается. хотя у меня русский бразуер

stasbz
() автор топика
Ответ на: комментарий от stasbz

Сорри, я слегка затупил.
Вот так должно работать:

# Если русского языка в списке поддерживаемых нет
RewriteCond %{HTTP:Accept-Language} !ru  [NC]
# Идем в английский раздел
RewriteRule ^/?$                    /en/ [R,L]
# Иначе в русский
RewriteRule ^/?$                    /ru/ [R]

nnz ★★★★
()
Ответ на: комментарий от stasbz

if (!$_GET['lang']) {

$country=geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);
switch ($country) {
case 'RU':
$lang='ru';
break;
case 'UA':
$lang='ru';
break;
case 'BY':
$lang='ru';
break;

$lang='en';
}
}

else $lang=$_GET['lang'];

Ну а там уж наверно знать должны, куда этот $lang подставить

azure ★★
()
Ответ на: комментарий от azure

кстати и себе сделал, а то все руки не доходили. только $lang='en' в конце свитча почему-то не сработал при заходе с какой-то американской прокси. переделал по-другому

if (!$_GET['lang']) {
// if no language specified, try to guess lang from country code:
$lang='en'; //the default
$country=geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);
switch ($country) {
case 'RU':
$lang='ru';
break;
case 'UA':
$lang='ru';
break;
case 'BY':
$lang='ru';
break;
}
//redirect to page with specified lang
header("Location: http://mysite/$lang/");
exit();
}

else $lang=$_GET['lang'];

azure ★★
()
Ответ на: комментарий от azure

>только $lang='en' в конце свитча почему-то не сработал

Так будет работать =)

switch ($country) {
    case 'RU':
        $lang='ru';
        break;
    case 'UA':
        $lang='ru';
        break;
    case 'BY':
        $lang='ru';
        break;
    default:
        $lang='en';
}

RR
()
Ответ на: комментарий от Nao

масштабируемый код:

$langs = Array('RU' => 'ru', 
               'UA' => 'ru', 
               'BY' => 'ru');

if (array_key_exists($country, $langs) 
    $lang = $langs[$country];
else
    $lang = 'en';

RR
()
Ответ на: комментарий от RR

у меня после всех вариантов по настройке приведенных в этой ветке, стал возникать сбой. Вернул все обратно. как было раньше. по умолчанию должна открываться стр. на русском языка. она и открывается. но при дальнейшем переходе на другие стр. начинает открываться англ. вариант. стр. и ничего сделать не могу. даже когда щелкаешь на переключение на русс. вариант. все равно потом переходит на англ. Видимо что с настройками сервера?!

stasbz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.