module Alchemy::Admin::Locale

Private Instance Methods

available_locale() click to toggle source

Returns either the most preferred locale that is within the list of available locales or nil

The availability of the locales is checked in the exact order of either

* the passed parameter: +params[:admin_locale]+
* the user's locale
* the locale of the browser
# File lib/alchemy/admin/locale.rb, line 42
def available_locale
  locales = [params[:admin_locale], locale_from_user, locale_from_browser].compact.map(&:to_sym)
  locales.detect { |locale| Alchemy::I18n.available_locales.include?(locale) }
end
locale_change_needed?() click to toggle source

Checks if we need to change to locale or not.

# File lib/alchemy/admin/locale.rb, line 30
def locale_change_needed?
  params[:admin_locale].present? || session[:alchemy_locale].blank? || available_locale.nil?
end
locale_from_browser() click to toggle source

Try to get the locale from browser headers.

# File lib/alchemy/admin/locale.rb, line 66
def locale_from_browser
  request.env["HTTP_ACCEPT_LANGUAGE"].try(:scan, /\A[a-z]{2}/).try(:first)
end
locale_from_user() click to toggle source

Try to get the locale from user settings.

# File lib/alchemy/admin/locale.rb, line 48
def locale_from_user
  return if !current_alchemy_user

  if user_has_preferred_language?
    current_alchemy_user.language
  end
end
set_translation() click to toggle source

Sets Alchemy’s GUI translation.

Uses the most preferred locale or falls back to the default locale if none of the preferred is available.

It respects the default translation from your config/application.rb default_locale config option.

# File lib/alchemy/admin/locale.rb, line 20
def set_translation
  locale = if locale_change_needed?
    available_locale || ::I18n.default_locale
  else
    session[:alchemy_locale]
  end
  ::I18n.locale = session[:alchemy_locale] = locale
end
user_has_preferred_language?() click to toggle source

Checks if the current_alchemy_user has a preferred language set or not.

# File lib/alchemy/admin/locale.rb, line 57
def user_has_preferred_language?
  return if !current_alchemy_user

  current_alchemy_user.respond_to?(:language) &&
    current_alchemy_user.language.present? &&
    current_alchemy_user.language.respond_to?(:to_sym)
end