spi*_*ike 13 ruby-on-rails ruby-on-rails-3
在rails中,config/locales中的yml文件允许您提供特定于语言环境的文本和格式设置指令.例如,您可以指定日期格式,如下所示:
# config/locales/en.yml
date:
formats:
month: "%B, %Y"
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,您可以使用帮助器,如下所示:
<%= l(Date.today, format: :month) %> => "December, 2013"
Run Code Online (Sandbox Code Playgroud)
令人讨厌的是,rails只在您启动服务器时加载语言环境文件,因此如果要进行更改,则必须重新启动开发服务器.是否可以在文件更改时自动重新加载?
有人试图在rails 3.2中支持这个:
https://github.com/rails/rails/blob/v3.2.16/activesupport/lib/active_support/i18n_railtie.rb
但是,它附带此免责声明:
# Add <tt>I18n::Railtie.reloader</tt> to ActionDispatch callbacks. Since, at this
# point, no path was added to the reloader, I18n.reload! is not triggered
# on to_prepare callbacks. This will only happen on the config.after_initialize
# callback below.
Run Code Online (Sandbox Code Playgroud)
在rails 4中有一些更好看的代码,所以这个问题可能会在那里解决(我还没有使用rails 4).
我添加了以下初始化程序,它检查已更改的文件是config/locales并重新加载I18n:
# config/initializers/reload_locale.rb
if Rails.env == 'development'
locale_reloader = ActiveSupport::FileUpdateChecker.new(Dir["config/locales/*yml"]) do
I18n.backend.reload!
end
ActionDispatch::Callbacks.to_prepare do
locale_reloader.execute_if_updated
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6384 次 |
最近记录: |