【问题标题】:Why is Rails I18n returning "translation missing:" but still displaying the message?为什么 Rails I18n 返回“翻译缺失:”但仍显示该消息?
【发布时间】:2016-07-22 08:48:12
【问题描述】:

我在 Rails 4 应用程序中使用 Devise。登录后我正在显示一条消息。

#app/controllers/application_controller.rb
def after_sign_in_path_for(resource_or_scope)
  set_flash_message :alert, I18n.t( 'users.after_signin_msg')
end

我有一个翻译文件

#config/locales/users.en.yml
en:
  users: 
    after_signin_msg: "Hello and Welcome"

当用户登录时,显示的闪烁消息是

translation missing: en.devise.sessions.user.Hello and Welcome

为什么翻译中会显示设计控制器?如果 Rails 正在查看 Devise 翻译,为什么还会显示正确的消息?

如何删除translation missing 文本?

【问题讨论】:

  • 当你显示 flash 时,是否还有另一个对 t 的调用?
  • 是的,但是使用不同的 flash 键(即 flash[:notice] 而不是 [:alert])。我刚刚尝试使用注释掉的set_flash_message 登录应用程序,并且在 :alert flash 下没有显示任何内容,并且缺少的翻译消失了。另一个 :notice flash 在这两种情况下都能完美显示,所以我不相信 :notice flash 会影响这一点。
  • 仍然听起来像 flash[:alert] 的显示方式与问题相关。
  • 是的,你是对的。 flash[:alert] 由 Devise 的 session#create 操作设置。我只是看了一下源码。我没有意识到set_flash_message 是一种专门引用设计翻译的设计方法。将我的 after_sign_in 方法更改为 flash[:notice] = t( 'users.after_signin_msg') 解决了所有问题!感谢您让我找到正确的地方!
  • @AndyHarvey 你说得对,亲爱的,我所做的一点改变是I18n.t 而不仅仅是t

标签: ruby-on-rails devise rails-i18n


【解决方案1】:

遇到另一个devise 翻译错误,并认为我会添加对我有用的解决方案。

ActionView::Template::Error (translation missing: en.devise.registrations.edit.back)

通过更改 t() -> I18n.t() 来解决导致模板出现问题的单个实例。

有效,但不确定为什么需要。

@ImranNaqvi 在 cmets 中提出了这个建议:

@AndyHarvey 说得对,亲爱的,我所做的一点改变是 I18n.t 而不仅仅是 t – ImranNaqvi 2016 年 7 月 23 日 4:37

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 2012-06-03
    • 1970-01-01
    • 2015-03-25
    • 2018-06-10
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多