然后我添加了一种新的语言,并使所有这些都必须完成,使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,本地化视图.