【问题标题】:i18n rails lazy look-up from a helper?i18n 从助手那里懒惰查找?
【发布时间】:2016-03-19 16:48:51
【问题描述】:

我正在使用 I18n 惰性查找,例如t('.field') 与 Rails 4 以及从控制器和视图中,I18n 进行适当的查找。但这不是来自帮助者,我想知道是否有原因或解决方案?

似乎如果我创建一个辅助函数,比如“help()”,并从多个不同的视图调用它,我必须定义相同的 I18n 字符串两次(是的,我使用别名 ;-))。所以我需要同时定义

  • (视图),view1.help.field ...和...
  • (视图),view2.help.field

有什么好的方法可以避免这种情况?

【问题讨论】:

    标签: ruby-on-rails internationalization helper


    【解决方案1】:

    I18n.t 使用当前请求作为上下文。所以当你打电话时:

    <%= t('.hello') %>
    

    apps/views/users/show.html.erb 开始,它将使用密钥users.show.hello。但是在apps/views/pets/show.html.erb 上,正如您所注意到的那样,翻译丢失了。

    无论您是在视图中还是在助手中调用它都没有关系,因为两者都使用视图上下文。

    如果您想避免这种情况,您只需明确说明翻译键:

    <%= t('users.show.hello') %>
    

    如果您想使用动态查找并回退到固定键,您可以这样做:

    <%= t('.hello', default: t('users.show.hello')) %>
    

    【讨论】:

    • 谢谢。助手正在“继承”他们运行的视图的上下文这一事实解释了我所看到的。我已经使用了“完整的、固定的密钥”解决方案,这可能比为使用帮助器的每个视图复制相同的密钥略好。
    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多