Si vous traduisez votre site en plusieurs langues, l’utilisateur doit être capable de choisir la sienne. L’idée est de modifier intelligemment la variable I18n.locale
qui contient la langue actuellement utilisée par le site. Exemple pour mettre le site en français :
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :set_locale
private
def set_locale
I18n.locale = "fr"
end
end
Problème : que mettre à la place de "fr" pour s’adapter à l’utilisateur ?
Vous pourriez :
stocker la langue de l’utilisateur en base de données et l’utiliser quand vous détectez la présence de
@current_user
(exemple sur Github) ;ou encore stocker la langue dans une variable de session ou un cookie si l’utilisateur n’est pas connecté (exemple sur Github).
Un cookie ?
Les cookies
sont une forme particulière de session : ils ne disparaissent pas à la fermeture du navigateur de l'utilisateur. C'est un hash particulier, au même titre que session
,flash
etparams
. Je recommande de ne pas de l'utiliser pour des données sensibles (comme le maintient de la connexion de l'utilisateur) et de les garder pour stocker des informations comme la langue de l'utilisateur.
Via le navigateur
Une autre façon de faire est d’utiliser la langue du navigateur. Ce n’est pas simple à coder, par chance la gem http_accept_language le fait pour vous.
Après l’avoir ajouté à votre Gemfile et fait votre bundle install, vous n’avez besoin d’ajouter qu’une ligne dans votre application_controller.rb (cette information est dans la documentation de la gem, cf. le lien ci-dessus) :
class ApplicationController < ActionController::Base
include HttpAcceptLanguage::AutoLocale
protect_from_forgery with: :exception
end
C’est aussi simple que cela : testez !