Erkennen, browser Sprache, in Schienen
Wie Sie erkennen die Benutzer Sprache (RoR), wie Sie in der browser? Ich habe eine select-box der Benutzer kann jederzeit, aber ich würde gerne auf Standard um, was auch immer Ihre browser-Sprache ist.
InformationsquelleAutor der Frage tybro0103 | 2011-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist die Lösung:
InformationsquelleAutor der Antwort inntran
Dies ist eine alte Frage, aber ich kam über Sie wie eine Seele auf der Suche nach Antworten und der einzige verfügbare Antwort war ein link ohne Kontext. Also hier ist ein bisschen mehr Tiefe, basierend auf meiner anschließenden Graben.
Zugriff auf die Accept-Language-header
Abfrage der
request
Objekt in den entsprechenden controller:Das ist der einfache Teil obwohl. Gute it-Einsatz in Schienen, die Sie brauchen, um zu analysieren, dass die string - (oder vielleicht ist es
nil
?).Sidebar: Eine Einführung in die Accept -* - Header
So, Blick auf das Beispiel-string vor, einige Sprachen haben "q-Werte" - die relative Faktor für die Qualität derzwischen 0 und 1. Höhere q-Werte bedeuten, dass die Sprache bevorzugt durch den client. Fehlen eines q-Wert ist wirklich der höchste q-Wert - eine implizite
1.0
(wie beien-AU
in der oben genannten Zeichenfolge). Eine leichte Komplikation, obwohl - die browser senden kann, Sie Sprachen mit q-Werte, die sind, sagen wir, 0 - und ich nehme an, das heißt, Sie sollten ablehnen diese Sprachen, wenn möglich.Parsen der header Accept-Language
Lager, das im Hinterkopf, hier sind ein paar verschiedene, aber ähnliche Ansätze habe ich mir angeschaut für die Analyse solcher string in eine Liste von Sprachen, geordnet nach Ihren f-Werten. Mit einfachen Ruby:
Oder wenn Sie tüchtig am regulären Ausdrücken können Sie erreichen die gleiche wie oben, und wahrscheinlich verbessern mein geschlachtetes regex zur gleichen Zeit:
Entweder Weg, Sie können Sie bei Bedarf mit etwas wie:
Ich begann meine Analyse durch die Betrachtung diese gistaber am Ende ändern Sie es ziemlich deutlich. Die regex-vor allem war das wegwerfen ganz gute sekundäre Schauplätze, z.B.
en-AU
wurdeen
zh-TW
wurdezh
. Ich habe versucht, dies zu korrigieren, mit meinen änderungen, dass regex.InformationsquelleAutor der Antwort Kimball
Hier ist eine gut getestet Ruby-gem, die genau das macht, was Sie wollen: https://github.com/ioquatix/http-accept
100% Testabdeckung auf einer breiten Palette von Eingängen. Es gibt die Sprachen in der angegebenen Reihenfolge durch die entsprechenden RFCs.
Darüber hinaus, wenn Sie versuchen, zu entsprechen, Benutzer Sprache, um Inhalte, die in einem bestimmten Satz von locales, die Sie tun können, die folgenden:
Den desired_localizations im obigen Beispiel ist eine Teilmenge von available_localizations, nach Vorliebe des Benutzers, der verfügbaren Lokalisierungen und RFC-Empfehlungen.
InformationsquelleAutor der Antwort ioquatix
Dies ist eine wirklich alte Frage, aber ich mag zu erwähnen, dass die Schienen-Leitfaden enthält eine Beschreibung der zu erkennen, wie Benutzer browser-Sprache.
Folgende code basiert auf der Lösung von Ruby on Rails-guide mit Verbesserungen:
code:
Mehr Informationen über die Erkennung von Gebietsschema finden Sie in Ruby on Rails-guide:
https://guides.rubyonrails.org/i18n.html#choosing-an-implied-locale
InformationsquelleAutor der Antwort Michał Zalewski