如何解决rails 3,用户特定的本地化:以用户首选的语言发送SMS消息
| 当我们的应用发送短信时,我们希望为用户提供指定其首选语言的选项。 以西班牙语为例,我了解了如何向config / locales添加新的locale yml文件。 我看到了如何在我的应用程序中用:stop_opt_out替换任何硬编码的字符串,例如\“ text STOP to opt-out \”。 我看不到如何选择逐个用户使用的语言。 特别是如果我的代码当前是:msg_out = \"Thank you!\"
在国际化之后,我在多个语言环境yml文件中定义了“ 1”
并且如果在我的用户记录中,我有user.locale = \“ en \”或\“ sp \”(或者我应该枚举语言区域0,1,2?)
我要如何针对特定用户
msg_out = t :thank_you
那将应用于当前会话中为该用户创建的每条消息?
解决方法
如果所有消息都是在用户使用您的站点时生成的(即,所有消息都是作为对用户操作的响应发送的),则您可以在Application Controller上的before_filter中从User模型中读取首选语言环境(更多信息请参见此处)。 ):
class ApplicationController < ActionController::Base
before_filter :load_user
before_filter :load_locale
#...
def load_locale
I18n.locale = (@user && @user.locale)? @user.locale : I18n.default_locale
end
#...
end
如果您要异步发送邮件(例如,每晚进行群发邮件),则必须按用户加载:
User.find_each do |user|
I18n.locale = user.locale || I18n.default_locale
# Send your message...
end
而且,如果您要发送通用的群发电子邮件(即,没有按用户自定义),则可以通过加载按区域设置分组的用户列表,然后通过以下方式向所有这些用户发送一条消息,从而大大加快上述代码的速度一旦。
希望这可以帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。