rails 3,用户特定的本地化:以用户首选语言发送SMS消息

时间:2011-04-12 18:38:52

标签: ruby-on-rails localization

当我们的应用发送短信时,我们希望为用户提供指定其首选语言的选项。

以西班牙语为例,我看到如何将新的语言环境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

是否适用于在当前会话中为该用户创建的每条消息?

1 个答案:

答案 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

如果您要发送通用群发电子邮件(即没有按用户自定义),您可以通过加载按区域设置分组的用户列表,然后向所有用户发送单个邮件来大幅加快上述代码的速度。他们马上就到了。

希望这有帮助!