加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何动态地向I18n添加值?

发布时间:2020-12-17 02:47:33 所属栏目:百科 来源:网络整理
导读:我的rails应用程序中有很多ymls,我想将其中一些用于其他服务,以便我可以从多个地方调用它. 这个调用的响应将是一个哈希. {"en" : {"test" : {"text1" : "hi english"},{"text2" : "mambo number %{num}"} },"es" : {"test" : {"text1" : "hi espaniol"},{"te
我的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"})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读