Forum: Rails I18n Timing of language setting

8471d26e8d9c2c6b09286028b276d627?d=identicon&s=25 Soichi Ishida (soichi)
on 2012-10-17 11:25
Rails 3.1.3

Hi. My application's i18n seems to work, but the timing of the language
setting is wrong.

I have an User model, which has a column, 'language', so that users can
choose their default language.  When each user logged in, the
applications should always apply itself the language of his/her choice.

Say, an user wishes to change the default language from Japanese to
French.  The user inputs the new language of his/her choice in the
setting page and hits 'save'.  The app jumps to to the top page having a
flash message appeared, 'Your setting is updated' but in JAPANESE.
Since the user has just changed the language, the flash is also to be
shown in French.

Translation yml files are properly set. The application_controller.rb is
the following.

Could anyone give me an advice how to set the language setting according
to user login session?



  require 'geoip'
  private
  def set_locale
    if user_signed_in?
      extracted_locale = current_user.language
    else
      extracted_locale = params[:locale] ||
                         extract_locale_from_subdomain ||
                         extract_locale_from_tld ||
                         extract_locale_from_accept_language ||
                         extract_locale_from_ip

    end
    print current_user
    I18n.locale = (I18n::available_locales.include?
extracted_locale.to_sym) ?
                extracted_locale : I18n.default_locale
  end

  def extract_locale_from_subdomain
    request.subdomains.first
  end

  def extract_locale_from_tld
    request.domain.split('.').last
  end

  def extract_locale_from_accept_language
    request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
  end

  def extract_locale_from_ip
    geoip ||= GeoIP.new(Rails.root.join(“lib/GeoIP.dat”))
    country_location = @geoip.country(request.remote_ip)
    country_location.country_code2.downcase
  end


soichi
0b1b1c3a746a2e346d8cae668b109b6e?d=identicon&s=25 Christopher McGrath (Guest)
on 2012-10-17 11:58
(Received via mailing list)
On 17 Oct 2012, at 10:25, Soichi Ishida wrote:

> French.  The user inputs the new language of his/her choice in the
> setting page and hits 'save'.  The app jumps to to the top page having a
> flash message appeared, 'Your setting is updated' but in JAPANESE.
> Since the user has just changed the language, the flash is also to be
> shown in French.

I'm pretty sure this is because the flash message is looked up *before*
you change the domain and stored in the session. You can get the correct
locale by doing something like:

I18n.t('my.flash.message', :locale => user.language)

In the controller before you redirect.

HTH,

Chris

---
Chris McGrath
http://www.localeapp.com
This topic is locked and can not be replied to.