Zum Inhalt

accept-language: NGINX Accept-Language-Modul

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

  • RedHat Enterprise Linux 7, 8, 9 und 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-accept-language
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-accept-language

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_http_accept_language_module.so;

Dieses Dokument beschreibt nginx-module-accept-language v1.0.0 veröffentlicht am 30. Oktober 2018.


Dieses Modul analysiert den Accept-Language-Header und gibt die am besten geeignete Locale für den Benutzer aus einer Liste unterstützter Locales Ihrer Website zurück.

Syntax

set_from_accept_language $lang en ja pl;
  • $lang ist die Variable, in der die Locale gespeichert wird
  • en ja pl sind die von Ihrer Website unterstützten Locales

Wenn keine der Locales aus Accept-Language auf Ihrer Website verfügbar ist, wird die Variable auf die erste Locale der unterstützten Locales Ihrer Website gesetzt (in diesem Fall en).

Warnung

Es wird derzeit davon ausgegangen, dass der Accept-Language nach Qualitätswerten sortiert ist (aus meinen Tests ist das der Fall für Safari, Firefox, Opera und IE) und q verworfen wird (siehe http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). In der Situation, in der ich das Modul verwende, funktioniert diese Annahme... aber Käufer seien gewarnt :-)

Beispielkonfiguration

Wenn Sie unterschiedliche Subdomains für jede Sprache haben

server {
    listen 80;
    server_name your_domain.com;
    set_from_accept_language $lang en ja zh;
    rewrite ^/(.*) http://$lang.your_domain.com redirect;
}

Oder Sie könnten etwas wie dies tun, um Personen, die zu '/' kommen, nach /en (oder /pt) weiterzuleiten:

location / {
    set_from_accept_language $lang pt en;
     if ( $request_uri ~ ^/$ ) {
       rewrite ^/$ /$lang redirect;
       break;
     }
}

Warum habe ich es erstellt?

Ich verwende Page-Caching mit Merb auf einer mehrsprachigen Website und benötigte eine Möglichkeit, die richtige Sprachseite aus dem Cache bereitzustellen. Ich werde bald ein Beispiel auf http://gom-jabbar.org bereitstellen.

Anerkennung

Danke an Evan Miller für seinen Leitfaden zum Schreiben von NGINX-Modulen.

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-accept-language.