Мне нужно переопределить мою локаль из заголовка, когда у пользователя уже есть сохраненный язык локали
def extract_locale_from_accept_language_header
if r = request.env['HTTP_ACCEPT_LANGUAGE']
r.scan(/^[a-z]{2}/).first
end
end
def set_locale
I18n.locale = session[:locale] || extract_locale_from_accept_language_header
session[:locale] = I18n.locale
if current_user
current_user.language = session[:locale]
current_user.save
end
end
Итак, что происходит сейчас, если пользователь не вошел в систему, он обнаруживает локаль заголовка, как я хочу, когда вы посещаете сайт. И когда я выбираю изменить язык, он меняет локаль, как я хочу. так что это все хорошо.
Моя проблема заключается в том, что когда я выхожу из системы, то при входе в нее снова должна быть локаль, которую я ранее выбрал на сайте, но она продолжает тянуть локаль заголовка. Я чувствую, что что-то не так с тем, как я сохраняю user.language, но я не могу понять это. Заранее спасибо!
1 ответ
Это происходит потому, что когда пользователь снова входит в систему, вы перезаписываете его языковые предпочтения из сеанса:
current_user.language = session[:locale]
Это кажется подходящей логикой для нового пользователя, который еще не выбрал свою собственную локаль по умолчанию, но не для кого-то, у кого уже есть один набор. Это гарантирует, что язык пользователя не будет перезаписан, если он уже установлен:
current_user.language ||= session[:locale]