Deutsch

Задачка

12.08.10 16:06
Re: Задачка
 
  femidav местный житель
в ответ voxel3d 11.08.10 20:19, Последний раз изменено 12.08.10 17:28 (femidav)
Если мы имеем структуру директорий вроде следующей:

/
.htaccess
/de
.htaccess
index.html
/en
.htaccess
index.html


/de/index.html (/en/index.html аналогично):


<!doctype html>
<html lang='de'>
<head>
<meta http-equiv='content-type' content='text/html; charset=utf-8' />
<title>Willkommen</title>
</head>
<body>
<div style='text-align:right;border-bottom:1px solid grey;'>
< !-- Кнопки переключения локали -- >
<a href='?lang=de'>Deutsch</a> | <a href='?lang=en'>English</a>
</div>
<h1>Willkommen</h1>
</body>
</html>


/.htaccess


RewriteEngine On
RewriteBase /
# это переключатель локали. устанавливаем куки, обнуляем lang параметр во избежание зацикливания
RewriteCond %{QUERY_STRING} lang=(de|es|fr|it|ja|ru|en)
RewriteRule .* $0? [co=lang:%1:%{HTTP_HOST},R,L]
# если куки установлен идём в локальную субдиректорию
RewriteCond %{HTTP_COOKIE} lang=(de|es|fr|it|ja|ru|en)
RewriteRule .* %1/$0 [L]
# если нет - смотрим язык пользователя
RewriteCond %{HTTP:Accept-Language} ^(de|es|fr|it|ja|ru|en).*$
RewriteRule .* %1/$0 [L]
# наконец если ничего не сработало - устанавливаем дефолтную локаль
RewriteRule .* de/$0 [L]
# иначе при редиректе новая локаль сразу не видна
<ifmodule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 0 seconds"
</ifmodule>


/(de|en)/.htaccess


# вся эта шарманка нужна только на топовом уровне
RewriteEngine Off


Вот и все собственно. Если мы работаем с PHP, то тогда множественные директории отпадают, как отпадают и RewriteRule кроме первого. Далее просто транслируем мессиджи (например как здесь) устанавливая локаль из куки.

 

Перейти на