我正在使用 Ruby on Rails 3.1.1,我正在尝试翻译电子邮件正文。我创建/声明了所有必要的“东西”(YAML 文件、键/值对……)以使 I18n gem 正常工作:使用默认语言 (:en
) 可以毫无问题地发送电子邮件).
然后我添加了一种新语言,并完成了使 I18n gem 与另一种语言一起工作并在 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
方法...)?有更好的解决方案吗?
最佳答案
解决方案
在您的 railsproject 中制作一个邮件程序(阅读 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
现在定义 View 。例如: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/目录中有关联的 View (模板)。
现在是技术部分,以及为什么这一切神奇地起作用。 ActionController和ActionMailer默认直接或间接包含AbstractController::Rendering(ActionController::Metal::Rendering)。 AbstractController::Rendering 使用 ActionView 作为其模板渲染引擎的默认库,并包括 AbstractController::ViewPaths 和一个 I18n 代理实例来查找本地化 View 。要了解更多信息,我想引用 ActionPack github上的源代码。
进入正题。 ActionView 允许您在模板中使用本地化:参见 Rails guide: Action View Overview , Chapter Localized views.
关于ruby-on-rails - 如何使用 I18n gem 翻译电子邮件正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8836859/