Rails 将翻译添加到 运行 rails 环境
Rails adding translations to a running rails environment
有没有办法通过 Rails 控制台手动注入翻译?
假设我在开发环境中工作,我想在生产控制台中测试一些代码(例如测试一些关于真实数据的统计数据)。问题是,我想测试的代码依赖于新的翻译在生产环境中不存在(或被更改)。
所以我的代码returns很多translation_missing
我可以插入缺失的翻译吗?通过散列或 YML 文件 ?
I18n.load_translations(hash_or_file)
通常服务于 http 请求的应用程序实例(例如 Unicorn/Puma 下的 运行)无法通过 Rails 控制台获得。当有人登录生产服务器并输入 $RAILS_ENV=production rails c
时,它会启动另一个应用程序进程。翻译词典是一种内存缓存,通常不可能更改该缓存 for/from 另一个进程(通常)。您只能为 Rails 控制台启动的应用程序实例重新加载翻译,但不能为 运行 服务器重新加载翻译。
热重载翻译的唯一方法是在应用程序的源代码中添加一种挂钩以重新读取 YAML 文件,但重启应用程序服务器似乎更好。
更新: 出于测试目的,可以像这样修改 I18n 缓存:
I18n.backend.send(:translations)[:en][:date][:formats][:default] = "%Y-%Z"
有没有办法通过 Rails 控制台手动注入翻译?
假设我在开发环境中工作,我想在生产控制台中测试一些代码(例如测试一些关于真实数据的统计数据)。问题是,我想测试的代码依赖于新的翻译在生产环境中不存在(或被更改)。
所以我的代码returns很多translation_missing
我可以插入缺失的翻译吗?通过散列或 YML 文件 ?
I18n.load_translations(hash_or_file)
通常服务于 http 请求的应用程序实例(例如 Unicorn/Puma 下的 运行)无法通过 Rails 控制台获得。当有人登录生产服务器并输入 $RAILS_ENV=production rails c
时,它会启动另一个应用程序进程。翻译词典是一种内存缓存,通常不可能更改该缓存 for/from 另一个进程(通常)。您只能为 Rails 控制台启动的应用程序实例重新加载翻译,但不能为 运行 服务器重新加载翻译。
热重载翻译的唯一方法是在应用程序的源代码中添加一种挂钩以重新读取 YAML 文件,但重启应用程序服务器似乎更好。
更新: 出于测试目的,可以像这样修改 I18n 缓存:
I18n.backend.send(:translations)[:en][:date][:formats][:default] = "%Y-%Z"