Détecter la langue du navigateur dans Rails
Comment détecter les utilisateurs de la langue (RoR), comme indiqué dans le navigateur? Je vais avoir une boîte de sélection, l'utilisateur peut utiliser à tout moment, mais j'aimerais par défaut, quelle que soit leur langue du navigateur est.
source d'informationauteur tybro0103
Vous devez vous connecter pour publier un commentaire.
Voici la solution:
C'est une vieille question, mais je suis tombé sur elle comme une âme en quête de réponses et la seule réponse a été un lien en dehors de tout contexte. Alors, voici un peu plus de profondeur, basé sur mon ultérieure à creuser.
Accès à l'-tête Accept-Language
Requête de la
request
objet dans le contrôleur:C'est la partie facile. Pour en faire bon usage dans les Rails, vous aurez besoin d'analyser cette chaîne (ou c'est peut-être
nil
?).Encadré: Un apprêt à Accepter -* - têtes
Donc, en regardant l'exemple de la chaîne ci-dessus, certaines langues ont "q-valeurs" - le par rapport facteur de qualitéentre 0 et 1. Hausse des q-valeurs de dire que la langue est souhaitée par le client. L'absence d'une valeur q est vraiment le plus élevé q-valeur implicite de l'
1.0
(comme avecen-AU
au-dessus de la chaîne). Une légère complication si le navigateur peut vous envoyer des langues avec des q-valeurs qui sont, disons, de 0 et de rassembler ce que je signifie que vous devriez rejeter ces langues si possible.L'analyse de l'-tête Accept-Language
Gardant cela à l'esprit, voici un couple de différentes et des approches similaires, que j'ai regardé pour l'analyse d'une chaîne dans une liste de langues, commandés par leur q-valeurs. Avec simple Ruby:
Ou si vous êtes compétent dans les expressions régulières, vous pouvez obtenir le même que ci-dessus, et probablement améliorer mon massacrés regex en même temps:
De toute façon, vous pouvez faire les suivis nécessaires avec quelque chose comme:
J'ai commencé mon analyse en regardant ce gistmais il a fini de le modifier de manière assez significative. Les regex en particulier, a été de jeter parfaitement bonnes secondaires locales, par exemple
en-AU
est devenuen
zh-TW
est devenuzh
. J'ai tenté de rectifier le tir avec mes modifications pour que la regex.Ici est un bien testé Ruby gem qui fait exactement ce que vous voulez: https://github.com/ioquatix/http-accept
Il a 100% de couverture de test sur une large gamme d'entrées. Il renvoie les langues dans l'ordre spécifié par la Rfc pertinentes.
En outre, si vous essayez de faire correspondre la langue de l'utilisateur vers le contenu qui est disponible à un ensemble particulier de paramètres régionaux, vous pouvez effectuer les opérations suivantes:
La desired_localizations dans l'exemple ci-dessus est un sous-ensemble de available_localizations, selon la préférence de l'utilisateur, disponible localisations, et RFC recommandations.
C'est vraiment une vieille question, mais je tiens à mentionner que des Rails de guide a description de la façon de détecter la langue du navigateur de l'utilisateur. Il peut trouvé à: http://guides.rubyonrails.org/i18n.html#choosing-an-implied-locale