simplemente me di cuenta de que la forma rieles recomienda ajustar la configuración regional en su controlador¿Por qué la configuración regional en Rails actúa como global (cuando se usa Thin)?
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
establece la configuración regional a nivel mundial. El código anterior funciona, pero me pregunto si default_locale
es realmente predeterminado si tiene que escribirlo explícitamente.
lo que cabe esperar es tener un local por la petición (como el que tenemos sesión por petición) y hacer algo como:
def set_locale
locale = params[:locale] if params[:locale]
end
Y habiendo I18n.default_locale
utiliza por defecto de otra manera. Esto coincidiría con la configuración regional idealmente opcional en la ruta:
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
end
Por ahora, si por alguna razón me salto configuración local en algún tipo de acción que utiliza la configuración regional establecida en la solicitud anterior, que podría ser de otro usuario!
¿Y no existe una posible condición de carrera ya que una solicitud puede cambiar global I18n.locale
mientras que otra solicitud (habiendo establecido otra configuración regional antes) está en el medio de la representación?
UPDATE: Algunos detalles que he encontrado por ahora, desde el documentstion I18n:
Establece la localización actual pseudo-a nivel mundial, es decir, en el hash Thread.current def locale = (locale)
Ahora quiero entender si cada solicitud es un hilo separado.
ACTUALIZACIÓN 2: Véase mi respuesta para la explicación.
Estoy teniendo exactamente el mismo problema, ¡pero estoy usando Unicornio! Alguna idea de como resolver esto? gracias –
Creo que cuando dices "I18n.set_locale", en realidad quieres decir "I18n.locale =" ¿no? http://www.rubydoc.info/github/svenfuchs/i18n/I18n/Config:locale= – lulalala
Tiene razón, gracias por la corrección. – khustochka