module HttpAcceptLanguage

unashamedly robbed from github.com/iain/http_accept_language/blob/master/lib/http_accept_language.rb

Public Instance Methods

compatible_language_from(available_languages) click to toggle source

Returns the first of the user_preferred_languages that is compatible with the available locales. Ignores region.

Example:

request.compatible_language_from I18n.available_locales
# File lib/tarpaulin/camping/accept_language.rb, line 52
def compatible_language_from(available_languages)
  user_preferred_languages.map do |x| #en-US
    available_languages.find do |y| # en
      y = y.to_s
      x == y || x.split('-', 2).first == y.split('-', 2).first
    end
  end.compact.first
end
preferred_language_from(array) click to toggle source

Finds the locale specifically requested by the browser.

Example:

request.preferred_language_from I18n.available_locales
# => 'nl'
# File lib/tarpaulin/camping/accept_language.rb, line 41
def preferred_language_from(array)
  (user_preferred_languages & array.collect { |i| i.to_s }).first
end
user_preferred_languages() click to toggle source

Returns a sorted array based on user preference in HTTP_ACCEPT_LANGUAGE. Browsers send this HTTP header, so don't think this is holy.

Example:

request.user_preferred_languages
# => [ 'nl-NL', 'nl-BE', 'nl', 'en-US', 'en' ]
# File lib/tarpaulin/camping/accept_language.rb, line 14
def user_preferred_languages
  @user_preferred_languages ||= env['HTTP_ACCEPT_LANGUAGE'].split(/\s*,\s*/).collect do |l|
    l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
    l.split(';q=')
  end.sort do |x,y|
    raise "Not correctly formatted" unless x.first =~ /^[a-z\-]+$/i
    y.last.to_f <=> x.last.to_f
  end.collect do |l|
    l.first.downcase.gsub(/-[a-z]+$/i) { |x| x.upcase }
  end
rescue # Just rescue anything if the browser messed up badly.
  []
end
user_preferred_languages=(languages) click to toggle source

Sets the user languages preference, overiding the browser

# File lib/tarpaulin/camping/accept_language.rb, line 30
def user_preferred_languages=(languages)
  @user_preferred_languages = languages
end