Bac*_*cko 10 ruby rubygems ruby-on-rails internationalization ruby-on-rails-3
我正在使用Ruby on Rails 3.1.1,我正在尝试翻译电子邮件正文.我创建/声明了所有必要的"东西"(YAML文件,键/值对,......)以使I18n gem工作:使用默认语言(:en)发送电子邮件消息没有问题.
然后我添加了一种新语言并完成了所有必须完成的工作,以使I18n gem能够与其他语言一起使用并始终locale=de在URL中获取参数.
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
Run Code Online (Sandbox Code Playgroud)
但是,当我发送电子邮件时,即使正确设置了区域设置(例如:) locale=de,发送的电子邮件也不会被翻译(那些仍然使用默认:en语言).
如何让I18n翻译电子邮件正文?
params方法......)?有更好的解决方案吗?Ant*_*cki 17
在你的railsproject制作一个邮件程序(阅读http://guides.rubyonrails.org/action_mailer_basics.html如何制作一个邮件).例如UserMailer.
rails g mailer UserMailer
Run Code Online (Sandbox Code Playgroud)
定义一个方法,例如mail_user.
def mail_user(user)
@user = user
mail(:to => "test example <testuser@testuser.com>", :subject => "hello")
end
Run Code Online (Sandbox Code Playgroud)
现在定义视图.例如:mail_user.de.html.erb和mail_user.en.html.erb.把你的翻译放在那里.如果要分别翻译变量,请使用:
<%= I18n.t("foo.bar") %>
Run Code Online (Sandbox Code Playgroud)
执行此操作时,请确保您具有en.yml和de.yml翻译!定义类似以下示例的翻译:
foo:
bar: hello
Run Code Online (Sandbox Code Playgroud)
你应该准备好了.
ActionMailer按以下方式工作.您可以创建从ActionMailer :: Base继承的邮件程序模型.与ActionController一样,模型在/ app/views /目录中具有关联的视图(模板).
现在这里是技术部分,为什么这一切都神奇地起作用.ActionController和ActionMailer默认包括直接或间接的AbstractController :: Rendering(ActionController :: Metal :: Rendering).AbstractController :: Rendering使用ActionView作为其模板渲染引擎的默认库,并包含AbstractController :: ViewPaths和I18n代理的实例以查找本地化视图.要了解更多信息,我想在github上参考ActionPack源代码.
为了达到目的.ActionView允许您在模板中使用本地化:请参阅Rails指南:操作视图概述,本地化视图章节.
| 归档时间: |
|
| 查看次数: |
8349 次 |
| 最近记录: |