Class: Brut::FrontEnd::RouteHooks::LocaleDetection
- Inherits:
-
Brut::FrontEnd::RouteHook
- Object
- Brut::FrontEnd::RouteHook
- Brut::FrontEnd::RouteHooks::LocaleDetection
- Defined in:
- lib/brut/front_end/route_hooks/locale_detection.rb
Overview
Detects the user’s locale from the ‘Accept-Language` header and, if one of the locales has been set up in this app, configured Ruby’s ‘I18n` to use it. This will also store the value in the session via Session#http_accept_language=.
Instance Method Summary collapse
Methods inherited from Brut::FrontEnd::RouteHook
Methods included from Brut::Framework::Errors
Methods included from HandlingResults
Instance Method Details
#before(session:, env:) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/brut/front_end/route_hooks/locale_detection.rb', line 6 def before(session:,env:) http_accept_language = Brut::I18n::HTTPAcceptLanguage.from_header(env["HTTP_ACCEPT_LANGUAGE"]) if !session.http_accept_language.known? session.http_accept_language = http_accept_language end best_locale = nil session.http_accept_language.weighted_locales.each do |weighted_locale| if ::I18n.available_locales.include?(weighted_locale.locale.to_sym) best_locale = weighted_locale.locale.to_sym break elsif ::I18n.available_locales.include?(weighted_locale.primary_only.locale.to_sym) best_locale = weighted_locale.primary_only.locale.to_sym break end end if best_locale Brut.container.instrumentation.add_attributes(prefix: "brut.locale-detection", best_locale:) ::I18n.locale = best_locale else Brut.container.instrumentation.add_attributes(prefix: "brut.locale-detection", best_locale: false) end continue end |