Мне нужно переопределить мою локаль из заголовка, когда у пользователя уже есть сохраненный язык локали

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]
Другие вопросы по тегам