首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在config/locales中自动重新加载rails yml文件

在config/locales中自动重新加载rails yml文件
EN

Stack Overflow用户
提问于 2013-12-12 22:57:56
回答 3查看 8.3K关注 0票数 14

在rails中,config/locales中的yml文件允许您提供特定于地区的文本和格式指令。例如,您可以指定日期格式如下:

代码语言:javascript
复制
# config/locales/en.yml
  date: 
    formats:
      month: "%B, %Y"

然后在视图中可以使用助手,如下所示:

代码语言:javascript
复制
<%= l(Date.today, format: :month) %> => "December, 2013"

令人烦恼的是,rails只在启动服务器时加载区域设置文件,因此如果要进行更改,就必须重新启动开发服务器。是否可以在文件更改时自动重新加载此文件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-13 00:55:08

我认为Rails错过了新的翻译文件,但是将翻译添加到现有的文件中应该有效。

尝试用I18n.backend.reload!强制重新加载它

我希望这会有所帮助;)

票数 18
EN

Stack Overflow用户

发布于 2013-12-13 15:56:53

rails 3.2中尝试支持这一点:

railtie.rb

但是,它附带了以下免责声明:

代码语言:javascript
复制
# 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.

rails 4中有一些更好看的代码,所以这个问题可能已经解决了(我还没有使用rails 4)。

我添加了以下初始化程序,它检查已更改的文件是config/locales并重新加载I18n:

代码语言:javascript
复制
# 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
票数 9
EN

Stack Overflow用户

发布于 2021-02-26 21:01:50

I18n检测到对其加载路径中的现有文件所做的更改,但如果要检测locales下的新文件并在运行时将它们添加到加载路径,请尝试以下操作。

代码语言:javascript
复制
# config/initializers/i18n_load_path.rb
if Rails.env.development? || Rails.env.test?
  locales_path = Rails.root.join("config/locales").to_s
  i18n_reloader = ActiveSupport::FileUpdateChecker.new([], locales_path => "yml") do
    Dir["#{locales_path}/*.yml"].each do |locale_path|
      I18n.load_path << locale_path unless I18n.load_path.include? path
    end
  end

  ActiveSupport::Reloader.to_prepare do
    i18n_reloader.execute_if_updated
  end
end

它将监视区域设置目录(或任何其他要存储区域设置的目录),并在添加区域设置时将缺失的目录添加到加载路径中。I18n获取这些添加的文件,因此不需要调用reload!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20555995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档