Class: Otto::Locale::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/otto/locale/middleware.rb

Overview

Locale detection and resolution middleware

Sets env based on:

  1. URL parameter (?locale=es)

  2. Session preference (session)

  3. HTTP Accept-Language header

  4. Default locale

Configuration:

use Otto::Locale::Middleware,
  available_locales: { 'en' => 'English', 'es' => 'Spanish' },
  default_locale: 'en',
  debug: false

Examples:

Basic usage

use Otto::Locale::Middleware,
  available_locales: { 'en' => 'English', 'es' => 'Español', 'fr' => 'Français' },
  default_locale: 'en'

With session persistence

use Rack::Session::Cookie, secret: 'secret'
use Otto::Locale::Middleware,
  available_locales: { 'en' => 'English', 'es' => 'Español' },
  default_locale: 'en'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, available_locales:, default_locale:, fallback_locale: nil, debug: false) ⇒ Middleware

Initialize locale middleware

Parameters:

  • app (#call)

    Rack application

  • available_locales (Hash<String, String>)

    Hash of locale codes to language names

  • default_locale (String)

    Default locale code

  • fallback_locale (Hash, nil) (defaults to: nil)

    Hash of locale codes to fallback chains

  • debug (Boolean) (defaults to: false)

    Enable debug logging



42
43
44
45
46
47
48
49
50
# File 'lib/otto/locale/middleware.rb', line 42

def initialize(app, available_locales:, default_locale:, fallback_locale: nil, debug: false)
  @app = app
  @available_locales = available_locales
  @default_locale = default_locale
  @fallback_locale = fallback_locale
  @debug = debug

  validate_config!
end

Instance Attribute Details

#available_localesObject (readonly)

Returns the value of attribute available_locales.



33
34
35
# File 'lib/otto/locale/middleware.rb', line 33

def available_locales
  @available_locales
end

#default_localeObject (readonly)

Returns the value of attribute default_locale.



33
34
35
# File 'lib/otto/locale/middleware.rb', line 33

def default_locale
  @default_locale
end

Instance Method Details

#call(env) ⇒ Array

Process request and set locale

Parameters:

  • env (Hash)

    Rack environment

Returns:

  • (Array)

    Rack response tuple [status, headers, body]



56
57
58
59
60
61
62
63
# File 'lib/otto/locale/middleware.rb', line 56

def call(env)
  locale = detect_locale(env)
  env['otto.locale'] = locale

  debug_log(env, locale) if @debug

  @app.call(env)
end