Фиг его знает, в какой раздел надо было.
Переключение языков без использования серверных скриптов, без наличия в урлах идентификатора языка.
Использовался mod_rewrite, структура каталогов:
/en/...
/de/...
/fr/...
/.htaccess:
RewriteEngine On
RewriteBase /
# это переключатель локали. устанавливаем куки, обнуляем lang параметр во избежание зацикливания
RewriteCond %{QUERY_STRING} lang=(en|fr|de)
RewriteRule .* $0? [CO=lang:%1:%{HTTP_HOST},R,L]
# если куки установлен идём в локальную субдиректорию
RewriteCond %{HTTP_COOKIE} lang=(de|fr|en)
RewriteRule .* %1/$0 [L]
# если нет - смотрим язык пользователя
RewriteCond %{HTTP:Accept-Language} ^(en|fr|de).*$
RewriteRule .* %1/$0 [L]
# наконец если ничего не сработало - устанавливаем дефолтную локаль
RewriteRule .* fr/$0 [L]
# иначе при редиректе новая локаль сразу не видна
ExpiresActive On
ExpiresDefault "access plus 0 seconds"
/en/.htaccess:
RewriteEngine Off
Урл переключения языка:
<a href="?lang=de">Deutsch</a>
Собственно, всё почти замечательно, но есть два но.
Первое - необходимость использования mod_expire, без «ExpiresActive On» браузеры не делают reload (первое правило) при переходе по ссылке переключения языка, несмотря на получаемый 302. Не понимаю, почему.
Второе - Chromium 5.0.375.99 (51029) Ubuntu 10.04 при первом заходе на сайт без установленного куки получает от сервера 500 - превышен лимит рекурсии. Оно пытается рекурсивно зайти в / -> /en/ -> /en/en/ -> ... Хром нормально работает. Косяк Хромиума? Надо ли чинить?