Module: Bp3::ActionDispatch::RequestLocale
- Defined in:
- lib/bp3/action_dispatch/request_locale.rb
Instance Attribute Summary collapse
-
#locale_from ⇒ Object
readonly
Returns the value of attribute locale_from.
Instance Method Summary collapse
- #default_locale ⇒ Object private
- #extract_locale ⇒ Object private
- #extract_locale_from_header ⇒ Object private
- #extract_locale_from_host ⇒ Object private
- #extract_locale_from_params ⇒ Object private
- #extract_locale_from_path ⇒ Object private
- #extract_locale_from_setting ⇒ Object private
- #locale_if_exists(locale) ⇒ Object private
- #locale_to_sym(locale) ⇒ Object private
-
#parse_header(header) ⇒ Object
private
example format: 'en;q=0.1,nl'.
- #request_locale ⇒ Object
Instance Attribute Details
#locale_from ⇒ Object (readonly)
Returns the value of attribute locale_from.
6 7 8 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 6 def locale_from @locale_from end |
Instance Method Details
#default_locale ⇒ Object (private)
67 68 69 70 71 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 67 def default_locale locale = I18n.default_locale @locale_from = 'default' if locale locale end |
#extract_locale ⇒ Object (private)
14 15 16 17 18 19 20 21 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 14 def extract_locale extract_locale_from_path || extract_locale_from_params || extract_locale_from_host || extract_locale_from_header || extract_locale_from_setting || default_locale end |
#extract_locale_from_header ⇒ Object (private)
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 45 def extract_locale_from_header header = env['HTTP_ACCEPT_LANGUAGE'] return if header.nil? || header == '' languages = parse_header(header) sorted = languages.sort_by { |_l, q| q }.reverse locales = sorted.map(&:first) symbolized = locales.map { |l| locale_to_sym(l) } available = symbolized.select { |l| I18n.available_locales.include?(l) } locale = available.first @locale_from = 'header' if locale locale end |
#extract_locale_from_host ⇒ Object (private)
39 40 41 42 43 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 39 def extract_locale_from_host locale = locale_if_exists(host.split('.').last) @locale_from = 'host' if locale locale end |
#extract_locale_from_params ⇒ Object (private)
30 31 32 33 34 35 36 37 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 30 def extract_locale_from_params return nil if params[:locale].nil? || params[:locale] == '' locale = params[:locale] locale = locale_if_exists(locale) @locale_from = 'params' if locale locale end |
#extract_locale_from_path ⇒ Object (private)
23 24 25 26 27 28 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 23 def extract_locale_from_path locale = original_fullpath.split('/').reject { |e| e.nil? || e == '' }.first locale = locale_if_exists(locale) @locale_from = 'path' if locale locale end |
#extract_locale_from_setting ⇒ Object (private)
59 60 61 62 63 64 65 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 59 def extract_locale_from_setting return if request_site&.config.nil? locale = locale_if_exists(request_site.configs.locale.presence) @locale_from = 'setting' if locale locale end |
#locale_if_exists(locale) ⇒ Object (private)
83 84 85 86 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 83 def locale_if_exists(locale) locale = locale_to_sym(locale) I18n.available_locales.include?(locale) ? locale : nil end |
#locale_to_sym(locale) ⇒ Object (private)
88 89 90 91 92 93 94 95 96 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 88 def locale_to_sym(locale) return nil if locale.nil? return locale.to_sym if locale.length == 2 locale, region = locale.split('-') return locale.to_sym if region.nil? :"#{locale}-#{region.upcase}" end |
#parse_header(header) ⇒ Object (private)
example format: 'en;q=0.1,nl'
74 75 76 77 78 79 80 81 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 74 def parse_header(header) languages = header.split(',').map(&:strip) languages.map do |language| locale, quality = language.split(/\s*;\s*q\s*=\s*/i) quality = quality.nil? || quality == '' ? 1.0 : quality.to_f [locale, quality] end end |
#request_locale ⇒ Object
8 9 10 |
# File 'lib/bp3/action_dispatch/request_locale.rb', line 8 def request_locale @request_locale ||= extract_locale end |