Гм, а там возможны не только ru и en?<br>Тогда, наверно, можно смотреть по первому, и если его нет, отдавать en.<br><br><div class="gmail_quote">4 декабря 2008 г. 18:40 пользователь Sergey Shepelev <span dir="ltr">&lt;<a href="mailto:temotor@gmail.com">temotor@gmail.com</a>&gt;</span> написал:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Да, я тоже думаю, что таких несравнимо мало.<br>
<br>
Но может быть accept-language de,en<br>
а владелец создаст контент для en и de.<br>
Мы увидим, что ru нету и попробуем взять en. А юзер предпочитает de.<br>
<br>
2008/12/4 Борис Долгов &lt;<a href="mailto:boris@dolgov.name">boris@dolgov.name</a>&gt;:<br>
<div><div></div><div class="Wj3C7c">&gt; А если просто проверять, начинается ли accept-encoding с ru? Если да -<br>
&gt; ставить русский, если нет - ставить английский. Думаю, таких, кто будет<br>
&gt; ходить с броузеров, где какой-нить mn;q=0.9;ru;q=0.8;en;q=0.7, несравненно<br>
&gt; мало, чтобы ими пренебречь.<br>
&gt;<br>
&gt; 4 декабря 2008 г. 1:28 пользователь Sergey Shepelev &lt;<a href="mailto:temotor@gmail.com">temotor@gmail.com</a>&gt;<br>
&gt; написал:<br>
&gt;&gt;<br>
&gt;&gt; Спасибо, здорово.<br>
&gt;&gt; set оказался мощнее чем я думал.<br>
&gt;&gt;<br>
&gt;&gt; Только если правильно понимаю, ваш код неправильно обработает случай<br>
&gt;&gt;<br>
&gt;&gt; Accept-Language: en;q=0.9,ru;q=0.8<br>
&gt;&gt;<br>
&gt;&gt; то есть выберет русский, хотя юзер предпочитает английский. Но<br>
&gt;&gt; проблема глубже - бекенд не знает своего решения, относительно какой<br>
&gt;&gt; именно язык будет использован (там есть бекенд второго уровня, который<br>
&gt;&gt; отдает контент взамен на домен и список языков), поэтому он может<br>
&gt;&gt; положить в кеш контент по ключу списка языков, например домен#en,ru<br>
&gt;&gt;<br>
&gt;&gt; Т.е. что-то вроде<br>
&gt;&gt;<br>
&gt;&gt; if ($http_accept_language ~*<br>
&gt;&gt;<br>
&gt;&gt; &quot;^(\w\w)-?\w?\w?(;q=\*|;q=\d\.\d),?(\w\w)-?\w?\w?(;q=\*|;q=\d\.\d),?(\w\w)-?\w?\w?(;q=\*|;q=\d\.\d),?&quot;)<br>
&gt;&gt; {<br>
&gt;&gt; &nbsp;set $hislang &quot;$1,$3,$5&quot;<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; но нужны все языки, а не первые 3. И что будет, если указаны только<br>
&gt;&gt; один/два? &quot;en,,&quot; &quot;en,ru,&quot; ?<br>
&gt;&gt;<br>
&gt;&gt; Я понимаю, что больше двух языков в настройках почти никогда не бывает.<br>
&gt;&gt; Также я вижу несколько прагматичных решений с разными ограничениями,<br>
&gt;&gt; типа всё-таки брать первые два языка, остальных юзеров обрабатывать<br>
&gt;&gt; медленными бекендами, благо всё равно запас производительности<br>
&gt;&gt; большой. Но как всегда хочется чтоб и красиво и быстро и дешево.<br>
&gt;&gt;<br>
&gt;&gt; 2008/12/3 Михаил Монашёв &lt;<a href="mailto:postmaster@softsearch.ru">postmaster@softsearch.ru</a>&gt;:<br>
&gt;&gt; &gt; Здравствуйте, Сергей.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Хост и язык можно регэкспами через set установить<br>
&gt;&gt; &gt; <a href="http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#set" target="_blank">http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#set</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; и из эти новых переменных потом формировать $memcached_key:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &nbsp; &nbsp;set &nbsp;$myhost &nbsp;$host;<br>
&gt;&gt; &gt; &nbsp; &nbsp;if ($host ~* &quot;^.*\.([^.]+\.[^.]{2-4})$&quot; ) {<br>
&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;set &nbsp;$myhost &nbsp;$1;<br>
&gt;&gt; &gt; &nbsp; &nbsp;}<br>
&gt;&gt; &gt; &nbsp; &nbsp;set &nbsp;$mylang &nbsp;&quot;en&quot;;<br>
&gt;&gt; &gt; &nbsp; &nbsp;if ($http_accept_language ~* &quot;ru&quot; ) {<br>
&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;set &nbsp;$mylang &nbsp;&quot;ru&quot;;<br>
&gt;&gt; &gt; &nbsp; &nbsp;}<br>
&gt;&gt; &gt; &nbsp; &nbsp;$memcached_key &quot;parked#$myhost#$mylang&quot;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; SS&gt; Парковка доменов. Имеется маленькая кучка fastcgi бекендов, которые<br>
&gt;&gt; &gt; SS&gt; генерят динамику в зависимости от запрошенного HTTP Host и<br>
&gt;&gt; &gt; SS&gt; Accept-Language.<br>
&gt;&gt; &gt; SS&gt; На морде стоит nginx шестой ветки и проксирует всё подряд на<br>
&gt;&gt; &gt; бекенды.<br>
&gt;&gt; &gt; SS&gt; Которые либо отдают страничку из кеша, либо генерят и кладут в кеш.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; SS&gt; Так как бекенды по сравнению с nginx сильно медленные в целом и<br>
&gt;&gt; &gt; SS&gt; неасинхронные, хочется не проксировать *каждый* запрос на них, а<br>
&gt;&gt; &gt; SS&gt; задействовать http_memcached_module.<br>
&gt;&gt; &gt; SS&gt; Не знаю как составить ключ $memcached_key<br>
&gt;&gt; &gt; &quot;parked#test-host.tld#ru,en&quot;<br>
&gt;&gt; &gt; SS&gt; из заголовков<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; SS&gt; Host: test-host.tld<br>
&gt;&gt; &gt; SS&gt; Accept-Language: ru-ru;q=1.0,en-us;q=0.9,*;q=0.8<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; SS&gt; хост понятно, это $host. И то, от него надо откусить www. если есть.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; SS&gt; Уверен, что многие сталкивались с такой задачкой. Есть ли готовые<br>
&gt;&gt; &gt; рецепты?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; SS&gt; Писать свой сишный модуль не подходит.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; SS&gt; Решаема ли задача в таких условиях?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; С уважением,<br>
&gt;&gt; &gt; Михаил Монашёв, SoftSearch.ru<br>
&gt;&gt; &gt; mailto:<a href="mailto:postmaster@softsearch.ru">postmaster@softsearch.ru</a><br>
&gt;&gt; &gt; ICQ# 166233339<br>
&gt;&gt; &gt; <a href="http://michael.mindmix.ru/" target="_blank">http://michael.mindmix.ru/</a><br>
&gt;&gt; &gt; Без бэкапа по жизни.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; С уважением, Борис Долгов.<br>
&gt; icq 77556665<br>
&gt; e-mail <a href="mailto:boris@dolgov.name">boris@dolgov.name</a><br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>С уважением, Борис Долгов.<br>icq 77556665<br>e-mail <a href="mailto:boris@dolgov.name">boris@dolgov.name</a><br>