Class: Embargoed::Internationalization

Inherits:
Object
  • Object
show all
Defined in:
lib/embargoed/i18n/internationalization.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.envObject

Returns the value of attribute env.



9
10
11
# File 'lib/embargoed/i18n/internationalization.rb', line 9

def env
  @env
end

Class Method Details

.array_wrap(object) ⇒ Object



99
100
101
102
103
104
105
106
107
# File 'lib/embargoed/i18n/internationalization.rb', line 99

def array_wrap(object)
  if object.nil?
    []
  elsif object.respond_to?(:to_ary)
    object.to_ary || [object]
  else
    [object]
  end
end

.embargoed_pageObject



22
23
24
# File 'lib/embargoed/i18n/internationalization.rb', line 22

def embargoed_page
  @embargoed_page ||= Embargoed.config.default_maintenance_page
end

.existent(path) ⇒ Object

Returns all expanded paths but only if they exist in the filesystem.



52
53
54
# File 'lib/embargoed/i18n/internationalization.rb', line 52

def existent(path)
  expanded(path).select { |f| File.exist?(f) }
end

.expanded(path) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/embargoed/i18n/internationalization.rb', line 40

def expanded(path)
  result = []
  if File.directory?(path)
    result.concat(Dir.glob(File.join(path, '**', '**')).map { |file| file }.sort)
  else
    result << path
  end
  result.uniq!
  result
end

.http_accept_languageObject



26
27
28
29
# File 'lib/embargoed/i18n/internationalization.rb', line 26

def http_accept_language
  language = (env.nil? || env.empty?) ? nil : env["HTTP_ACCEPT_LANGUAGE"]
  @http_accept_language ||= Embargoed::AcceptLanguageParser.new(language)
end

.i18n_configObject



17
18
19
20
# File 'lib/embargoed/i18n/internationalization.rb', line 17

def i18n_config
  @i18n_config = Embargoed.config.i18n
  @i18n_config =  @i18n_config.is_a?(Embargoed::OrderedOptions) ? @i18n_config : Embargoed::InheritableOptions.new(@i18n_config)
end

.include_fallbacks_moduleObject



109
110
111
# File 'lib/embargoed/i18n/internationalization.rb', line 109

def include_fallbacks_module
  I18n.backend.class.send(:include, I18n::Backend::Fallbacks)
end

.init_fallbacks(fallbacks) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/embargoed/i18n/internationalization.rb', line 113

def init_fallbacks(fallbacks)
  include_fallbacks_module

  args = case fallbacks
  when Embargoed::OrderedOptions
    [*(fallbacks[:defaults] || []) << fallbacks[:map]].compact
  when Hash, Array
    array_wrap(fallbacks)
  else # TrueClass
    []
  end

  I18n.fallbacks = I18n::Locale::Fallbacks.new(*args)
end

.initialize_i18n(env) ⇒ Object



12
13
14
15
# File 'lib/embargoed/i18n/internationalization.rb', line 12

def initialize_i18n(env)
  @env = env
  setup_i18n_config
end

.setup_additional_helpersObject



31
32
33
34
35
36
37
38
# File 'lib/embargoed/i18n/internationalization.rb', line 31

def setup_additional_helpers
  i18n_additional_helpers = i18n_config.delete(:additional_helpers)
  i18n_additional_helpers = i18n_additional_helpers.is_a?(Array) ? i18n_additional_helpers : []

  i18n_additional_helpers.each do |helper|
    embargoed_page.send(:include, helper) if helper.is_a?(Module)
  end
end

.setup_i18n_configObject

Setup i18n configuration.



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/embargoed/i18n/internationalization.rb', line 57

def setup_i18n_config
  return unless i18n_config.enabled
  setup_additional_helpers
  fallbacks = i18n_config.delete(:fallbacks)


  # Avoid issues with setting the default_locale by disabling available locales
  # check while configuring.
  enforce_available_locales = i18n_config.delete(:enforce_available_locales)
  enforce_available_locales = I18n.enforce_available_locales if enforce_available_locales.nil?
  I18n.enforce_available_locales = false

  i18n_config.except(:enabled, :use_language_header).each do |setting, value|
    case setting
    when :railties_load_path
      I18n.load_path.unshift(*value.map { |file| existent(file) }.flatten)
    when :load_path
      I18n.load_path += value
    else
      I18n.send("#{setting}=", value)
    end
  end


  init_fallbacks(fallbacks) if fallbacks && validate_fallbacks(fallbacks)
  I18n.backend.load_translations

  # Restore available locales check so it will take place from now on.
  I18n.enforce_available_locales = enforce_available_locales

  begin
    if i18n_config.use_language_header
      I18n.locale = http_accept_language.compatible_language_from(I18n.available_locales) || I18n.default_locale
    else
      I18n.locale = I18n.default_locale
    end
  rescue
    #nothing
  end

end

.validate_fallbacks(fallbacks) ⇒ Object



128
129
130
131
132
133
134
135
136
137
# File 'lib/embargoed/i18n/internationalization.rb', line 128

def validate_fallbacks(fallbacks)
  case fallbacks
  when Embargoed::OrderedOptions
    !fallbacks.empty?
  when TrueClass, Array, Hash
    true
  else
    raise "Unexpected fallback type #{fallbacks.inspect}"
  end
end