ruby-on-rails – 如何使用I18n宝石翻译电子邮件正文?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何使用I18n宝石翻译电子邮件正文?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 Ruby on Rails 3.1.1,我正在尝试翻译电子邮件正文.我创建/陈述了所有必要的“东西”(YAML文件,键/值对…),以使I18n宝石工作:电子邮件消息使用默认语言(:en)发送无问题.

然后我添加了一种新的语言,并使所有这些都必须完成,使I18n宝石与另一种语言一起工作,并始终在URL中的locale = de参数.

class ApplicationController < ActionController::Base
  before_filter :set_locale

  def set_locale
    if params[:locale] && I18n.available_locales.include?(params[:locale].to_sym)
      I18n.locale = params[:locale]
    end
  end

  ...
end

但是,当我发送电子邮件时,即使语言环境正确设置(例如:locale = de),发送的电子邮件消息也不会被翻译(仍然使用默认语言:en语言).

如何使I18n翻译电子邮件正文?

我读了Localized ActionMailer Templates for Rails博客文章
但它是老的,我还没有测试…
我读了Rails I18n and emails的博文,我测试了.它的工作原理,但是如何处理我的情况下的翻译(我正在使用params方法…)?有更好的解决方案吗?

解决方法

在你的铁路项目中做一个邮件(读http://guides.rubyonrails.org/action_mailer_basics.html如何做一个).例如UserMailer.

rails g mailer UserMailer

定义一个方法,例如mail_user.

def mail_user(user)
    @user = user
    mail(:to => "test example <testuser@testuser.com>",:subject => "hello")
end

现在定义视图.例如:mail_user.de.html.erb和mail_user.en.html.erb.把你的翻译放在那里如果要转换变量单独使用:

<%= I18n.t("foo.bar") %>

当你这样做,确保你有一个en.yml和de.yml的翻译!定义一个如下例所示的翻译:

foo:
    bar: hello

你应该准备好了.

这是如何工作的

ActionMailer的工作方式如下.您可以创建继承自ActionMailer :: Base的邮件模型.像ActionController一样,模型具有/ app / views /目录中的关联视图(模板).

现在这里是技术部分,为什么这全都是魔术般的. ActionController和ActionMailer默认包括AbstractController ::直接或间接呈现(ActionController :: Metal :: Rendering). AbstractController :: Rendering使用ActionView作为其模板呈现引擎的默认库,并且包含AbstractController :: ViewPaths和I18n代理的实例以查找本地化视图.要了解更多,我想参考gitub上的ActionPack代码.

要达到目的ActionView允许您在模板中使用本地化:请参阅Rails guide: Action View Overview,本地化视图.

原文链接:https://www.f2er.com/ruby/266039.html

猜你在找的Ruby相关文章