У меня многоязычный статический сайт.
Сайт структурирован таким образом, что весь контент по умолчанию на английском языке, поэтому контент по умолчанию находится в разделе /. Например:
Путь: Содержание:
/ Дом
/contact.html Контактная страница
/services.html Службы
/about.html О нас
И затем есть подпапка для каждого поддерживаемого языка.
Например, «de» для немецкого языка, «da» для датского и т. д. Все локализованное содержимое будет изменено в размере во вложенной папке для соответствующего языка.
Таким образом, датский контент будет структурирован следующим образом:
Путь: Содержание:
/да/ Главная
/da/contact.html Контактная страница
/da/services.html Службы
/da/about.html О нас
И так же для других языков.
Поскольку это полностью статичный сайт, я не могу использовать какой-либо язык сценариев, такой как PHP, для определения языкового стандарта пользователя и перенаправления его на основе этого.
Поэтому я полагаю, что мне придется позволить apache сделать эту часть.
Я использую Апач 2.4.
Тогда мой вопрос заключается в том, как мне настроить виртуальный хост Apache таким образом, чтобы пользователи, запрашивающие /, были перенаправлены на /da/, если их предпочтительный язык — датский, на /de/, если их предпочтительный язык — немецкий, и просто получить / as по умолчанию, если английский или любой другой язык является предпочтительным языком?
Аналогичным образом, если пользователь запрашивает /foo.html, он будет перенаправлен на /$LANG/foo.html, где $LANG — его предпочтительный язык (если этот язык находится в списке поддерживаемых языков).
Языковые/локальные настройки пользователя будут определяться с помощью заголовка Accept-Language клиента.
Теперь этот заголовок будет поддерживать указание клиентом нескольких языков в приоритетном порядке. Поэтому мы просто будем использовать то, что предпочтительнее.
Кроме того, я думаю, нам нужно будет сохранить язык в каком-то файле cookie. Потому что, если пользователь указал немецкий язык в качестве предпочтительного, но затем явно запрашивает датскую или английскую версию, мы не должны продолжать перенаправлять их.
Итак, я попробовал это. Это не устанавливает файл cookie, но срабатывает только на главной странице (/).
Он просто проверяет, есть ли датский язык в Accept-Language. Но не независимо от того, предпочитается датский или нет.
Кроме того, он не очень хорошо поддерживает несколько языков.
Например, предположим, что у нас есть пользователь, который предпочитает немецкий язык, но использует датский как второй язык. Здесь они получат датский, а не немецкий.
RewriteEngine включен
RewriteCond %{HTTP:Accept-Language} (da) [NC]
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule ^(.*)$ https://%{ИМЯ_СЕРВЕРА}/da [R=303,NC,L]