结合ActionCable和I18n

时间:2018-04-03 21:59:10

标签: ruby-on-rails ruby internationalization actioncable

我已经开始使用Rails ActionCable向用户发送消息,而无需重新加载页面。我的网站全部翻译成多种语言,我无法找到解决以下问题的方法:

ActionCable.server.broadcast 'user_last_seen_at_refresh', {
  user_partial: Admin::UsersController.render(partial:"user", locals: { u:u }),
  user_id:u.id
}

当我向某些用户广播消息时,他们需要查看已翻译的部分内容。这不是。部分被翻译为英语,这是默认语言环境。一个解决方案'我能想到的是:

I18n.available_locales.each do |l|
  I18n.with_locale(l) do
    ActionCable.server.broadcast "user_last_seen_at_refresh_#{l}", {
      user_partial: Admin::UsersController.render(partial:"user", locals: { u:u }),
      user_id:u.id
    }
  end
end

并根据他们的语言订阅我的用户,但这并不像Rails的方式。

有人比这更好吗? THX!

1 个答案:

答案 0 :(得分:0)

执行此操作时:

I18n.available_locales.each do |l|
  I18n.with_locale(l) do
    ActionCable.server.broadcast "user_last_seen_at_refresh_#{l}", {
      user_partial: Admin::UsersController.render(partial:"user", locals: { u:u }),
      user_id:u.id
    }
  end
end

您实际上是在所有可用的区域设置中为用户进行相同的广播呼叫。

我认为您想要的是将广播发送给用户喜爱的语言环境。对?为此,(假设您有一些字段/方法来访问用户的区域设置),请按如下所示进行更改:

I18n.with_locale(u.locale) do
  ActionCable.server.broadcast "user_last_seen_at_refresh", {
    user_partial: Admin::UsersController.render(partial:"user", locals: { u:u }),
    user_id:u.id
  }
end