当我们的应用发送短信时,我们希望为用户提供指定其首选语言的选项。
以西班牙语为例,我看到如何将新的语言环境yml文件添加到config / locales。
我看到如何在我的应用程序中使用:stop_opt_out替换任何硬编码字符串,例如“text STOP to opt-out”。
我看不到的是如何选择逐个用户使用的语言。
具体来说,如果我的代码目前是:
msg_out = "Thank you!"
在国际化之后,我在多个语言环境yml文件中定义了:thank_you
如果在我的用户记录中我有user.locale =“en”或“sp”(或者我应该枚举语言环境0,1,2?)
我将如何进行用户特定的
msg_out = t :thank_you
是否适用于在当前会话中为该用户创建的每条消息?
答案 0 :(得分:3)
如果用户使用您的站点时生成了所有消息(即所有消息都作为对用户操作的响应发送),您只需在Application Controller上的before_filter中读取User模型中的首选语言环境({ {3}}):
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
如果您要发送通用群发电子邮件(即没有按用户自定义),您可以通过加载按区域设置分组的用户列表,然后向所有用户发送单个邮件来大幅加快上述代码的速度。他们马上就到了。
希望这有帮助!