Accept-Language: en;q=0.9,ru;q=0.8
сейчас русский контент (потому что другого нет, несмотря на
предпочтение юзера), а через полчаса - английский, потому что клиент
добавил настройки для английского языка.
Это не помешает использовать map?
Задача map тут одна - свести 30+ разнообразных Accept-Language к
меньшему количеству ключей. Т.е. если у нас поддерживается 4 языка, то
сводим к четырем значениям. Так как в nginx нет встроенного средства
получить из Accept-Language список языков в указанном приоритете, то
приходится делать это руками. Второй вариант - парсить на встроенном
перле и ставить эту переменную.
Далее, самый простой вариант - что бы для каждого из 4-х языков лежала
нужная страница. Минусы - кеш увеличится в 4 раза,плюсы - не нужно
делать fallback если страница в мемкеше не найдена. Так как с fallback
до конца не ясно - а какой ключ запрашивать дальше.
Если падать всегда на дефолный язык, то проблем не будет, правда тогда
получится косяк - запрашивает человек fr;q=0.5, en - а у нас в кеше нет
en страницы, но есть fr... но после ошибки поиска en странцы мы падаем в
дефаултный язык, который ru.
А как падать не на дефолтный, а на "следующий ожидаемый".. мне в голову
пока не приходит.
ИМХО, тут самый красивый по быстродействию вариант будет перековырять
сам мемкеш, что бы он сам определял, какой же ключ отдать на основе
переданной строчки из Accept-Language.