Module: WorldFlags::Helper::Locale

Defined in:
lib/world_flags/helper/locale.rb

Instance Method Summary collapse

Instance Method Details

#browser_ipObject



50
51
52
# File 'lib/world_flags/helper/locale.rb', line 50

def browser_ip
  request.remote_ip
end

#extract_locale_from_tldObject

Get locale from top-level domain or return nil if such locale is not available You have to put something like:

127.0.0.1 application.com
127.0.0.1 application.it
127.0.0.1 application.pl

in your /etc/hosts file to try this out locally



64
65
66
# File 'lib/world_flags/helper/locale.rb', line 64

def extract_locale_from_tld
  I18n.available_locales.include?(parsed_locale.to_sym) ? parsed_locale  : nil
end

#get_country_by_ipObject



44
45
46
47
48
# File 'lib/world_flags/helper/locale.rb', line 44

def get_country_by_ip
  country_code_from_ip browser_ip
rescue WorldFlags::GeoIPError
  I18n.default_locale
end

#locale_priority(name) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/world_flags/helper/locale.rb', line 29

def locale_priority name
  case name.to_sym
  when :param
    params[:locale]
  when :domain
    extract_locale_from_tld # http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
  when :browser
    browser_locale # http://www.metamodpro.com/browser-language-codes
  when :ip
    get_country_by_ip          
  when :default
    I18n.default_locale
  end
end

#locale_source_priorityObject



54
55
56
# File 'lib/world_flags/helper/locale.rb', line 54

def locale_source_priority
  WorldFlags.locale_source_priority
end

#locale_sourcesObject



22
23
24
25
26
27
# File 'lib/world_flags/helper/locale.rb', line 22

def locale_sources
  locale_source_priority.inject([]) do |res, name|
    res << locale_priority(name)
    res
  end
end

#localesObject

ensure all country/language/domain types are mapped to their equivalent locale code



18
19
20
# File 'lib/world_flags/helper/locale.rb', line 18

def locales
  locale_sources.compact.downcase.map {|loc| WorldFlags.locale(loc) unless loc.blank? }
end

#parsed_domainObject



72
73
74
# File 'lib/world_flags/helper/locale.rb', line 72

def parsed_domain
  request.host.split('.').last
end

#parsed_localeObject



68
69
70
# File 'lib/world_flags/helper/locale.rb', line 68

def parsed_locale
  WorldFlags.domain_to_locale(parsed_domain)
end

#set_localeObject



4
5
6
# File 'lib/world_flags/helper/locale.rb', line 4

def set_locale    
  I18n.locale = locales.select_first_in(valid_locales.downcase)
end

#valid_localesObject



8
9
10
11
12
13
14
15
# File 'lib/world_flags/helper/locale.rb', line 8

def valid_locales
  return WorldFlags.available_locales if WorldFlags.available_locales.present?
  if I18n.respond_to?(:available_locales) && I18n.available_locales.present?
    I18n.available_locales
  else
    raise "You must define a list of available locales for use with WorldFlags either in WorldFlags.available_locales or I18n.available_locales"
  end
end