Class: PreferredLocale

Inherits:
Object
  • Object
show all
Defined in:
lib/preferred_locale.rb,
lib/preferred_locale/version.rb,
lib/preferred_locale/auto_locale.rb,
lib/preferred_locale/header_parser.rb

Defined Under Namespace

Modules: AutoLocale Classes: HeaderParser

Constant Summary collapse

VERSION =
'1.1.0'

Instance Method Summary collapse

Constructor Details

#initialize(available: []) ⇒ PreferredLocale

Returns a new instance of PreferredLocale.



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/preferred_locale.rb', line 8

def initialize(available: [])
  # We need this to avoid overwriting explicit options with implicit ones
  available_lower = available.map { |locale| locale.to_s.downcase }

  # Create a map of "implicit" available locales to their "canonical" form
  @available = available.each_with_object({}) do |locale, obj|
    locale_str = locale.to_s
    obj[locale_str.downcase] = locale
    # Add the language without a country if it's not already in the list
    language = locale_str.downcase.split('-')[0]
    obj[language] = locale unless available_lower.include?(language) || obj.key?(language)
  end
end

Instance Method Details

#acceptable_for(locales: []) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/preferred_locale.rb', line 22

def acceptable_for(locales: [])
  locales_lower = locales.map { |locale| locale.to_s.downcase }
  # Build a candidate list including our implicit candidate locales
  candidates = locales_lower.flat_map do |locale|
    language = locale.split('-')[0]
    [
      locale,
      # Add the language without a country if it's not already in the list
      (language unless locales_lower.include?(language))
    ].compact
  end

  # Figure out which candidates are available
  available = candidates.filter do |locale|
    @available.key?(locale.downcase)
  end

  # Convert to the canonical form and then remove duplicates
  available.map { |locale| @available[locale.downcase] }.uniq
end

#preferred_for(locales: []) ⇒ Object



43
44
45
# File 'lib/preferred_locale.rb', line 43

def preferred_for(locales: [])
  acceptable_for(locales: locales)[0]
end