ruby-on-rails – 如何动态地向I18n添加值?
我的rails应用程序中有很多ymls,我想将其中一些用于其他服务,以便我可以从多个地方调用它.
这个调用的响应将是一个哈希. {"en" : {"test" : {"text1" : "hi english"},{"text2" : "mambo number %{num}"} },"es" : {"test" : {"text1" : "hi espaniol"},{"text2" : "mamboes numeros %{num}"} } } 有没有办法可以将该哈希加载到I18n翻译中 I18n.add_translations(some_hash) 所以我可以访问它们 I18n.t("test.text1") I18n.t("test.text2",:num => 5) 我怎么能实现它? 解决方法
肮脏的方式
您可以通过自定义模块或gem覆盖I18n :: Backend :: Base中的load_translation方法或者 – 咳嗽 – 猴子修补 – 咳嗽 – 从不同来源获取翻译,对我来说感觉很脏,但我想你可以尝试进一步尝试. https://github.com/svenfuchs/i18n/blob/master/lib/i18n/backend/base.rb#L13 改变I18n后端 您可以创建一个不同的I18n后端来实现预期的行为,并通过初始化器将其连接到I18n.我假设这是像localeapp和phraseapp这样的工具.在I18n :: Config中有一种方法 https://github.com/svenfuchs/i18n/blob/master/lib/i18n/config.rb#L23 所以你可以在初始化器中执行此操作 I18n.backend = MyAwesomeI18nBackend.new 好处是你可以将多个后端链接在一起 I18n.backend = I18n::Backend::Chain.new(MyAwesomeI18nBackend.new) 它确保您仍然可以访问默认的翻译后端或其他自定义后端. 参考 Ryan在解释如何改变后端的日子里做了很棒的转播.它有点过时,但它让你很清楚需要做什么. I18n Backends 如果您的翻译与保存在数据库中的某些数据相关,您还可以使用globalize来处理这些数据. https://github.com/globalize/globalize 编辑:Dima更简单的方式 如果您有哈希,则可以使用默认后端的store_translation方法从该哈希加载转换. I18n.backend.store_translations(:en,{test: "YOOOOOHHHHHOOOO"}) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |