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

标签 ruby-on-rails ruby ruby-on-rails-3 internationalization rubygems

我正在使用 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 翻译电子邮件正文?


最佳答案

解决方案

在您的 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/

相关文章:

ruby-on-rails-3 - 如何编写 cucumber 步骤来测试元素列表是否已排序?

ruby - 如何更新对象数组中的数组

python - Ruby on Rails 是否与 Google Code API 配合得很好?

ruby - 使用 RVM 使用 sinatra 应用程序加载 Active Record gem 时出错

facebook - 将 facebook canvas url 指向本地主机 :3000 时,没有路由匹配 [POST] "/"错误

ruby-on-rails - 如何在 Sinatra 中组织模型?

ruby-on-rails - rails : Ordering parents by grand children's attribute

ruby-on-rails - 如何在设置 Ruby on Rails 时安装 SQLite3?

ruby-on-rails - 如何在 Twilio 视频 session 中启用录音?

ruby-on-rails - 尝试安装 Rails (OSX) 时出现权限错误