【发布时间】: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