【问题标题】:rails 3, user-specific localization: sending SMS messages in a user's preferred languagerails 3,用户特定的本地化:以用户的首选语言发送 SMS 消息
【发布时间】:2011-04-12 18:38:51
【问题描述】:

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

以西班牙语为例,我看看如何将新的 locale yml 文件添加到 config/locales。

我看到了如何在我的应用程序中用 :stop_opt_out 替换任何硬编码的字符串,例如“文本停止选择退出”。

我没有看到如何逐个用户选择使用的语言。

如果我的代码当前是:

msg_out = "Thank you!"

在国际化之后,我在多个语言环境 yml 文件中定义了 :thank_you

如果在我的用户记录中我有 user.locale = "en" 或 "sp"(或者我应该枚举语言环境 0、1、2?)

我将如何做一个用户特定的

msg_out = t :thank_you

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

【问题讨论】:

    标签: ruby-on-rails localization


    【解决方案1】:

    如果您的所有消息都是在用户使用您的站点时生成的(即所有消息都是作为对用户操作的响应而发送的),您可以在应用程序控制器上的 before_filter 中从用户模型中读取首选语言环境(@ 987654321@):

    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
    

    如果您要发送通用的群发电子邮件(即没有针对每个用户进行自定义),您可以通过加载按区域设置分组的用户列表,然后向所有用户发送一条消息,从而大大加快上述代码的速度。一次。

    希望这会有所帮助!

    【讨论】:

    • 我刚刚偶然发现this,如果您只是翻译一行,这可能会更方便。您可以像这样设置一次性语言环境:I18n.t('my.i18n.key', :locale =&gt; :de)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多