我已经从我的Rails 3.2.13应用程序中删除了gem routing-filter,准备将其升级到Rails 4.作者有一个Rails 4的测试版,但我永远无法让它工作。我已经实现了用于本地化/国际化的正常Rails过程。我需要解决的最后一个问题是link_to语句,它在邮件程序视图中显示一个线程。
当我使用路由过滤器时,我有如下所示的link_to语句,我根据环境在邮件程序中设置了@host。
<%= link_to "#{t :view_thread}", micropost_url(@item), host: "#{@host}" %>
当我卸载路由过滤器时,由于在尝试发送电子邮件时缺少语言环境,我开始收到错误。它崩溃并将应用程序发送回登录页面。宝石负责这件事。
我一直在寻找大约一个小时试图找到正确的语法,但我找不到包含主机和语言环境参数的任何示例。我已经尝试了几次猜测,但是我遇到了语法错误。
任何帮助将不胜感激。我会一直在寻找和尝试。
答案 0 :(得分:5)
这是我提出的解决方案。我不确定locale子句应该与host子句相关联。我决定尝试以下声明并且它有效。
<%= link_to "#{t :view_thread}", micropost_url(@item, locale: I18n.locale.to_s), host: "#{@host}" %>
答案 1 :(得分:0)
Rails 6(可能还有5)的更新解决方案。
首先,请确保您已按照Rails指南进行本地化,因此一切都已设置
然后,将其添加到您的ApplicationMailer
:
def default_url_options(options = {})
ActionMailer::Base.default_url_options
.merge(locale: I18n.locale)
.merge(options)
end
这将使用您选择的语言环境来生成链接,因此您不必每次都通过locale: @locale
。
然后,使用以下代码块在邮件程序中设置当前区域设置。
I18n.with_locale(@locale) do
mail(to: @email,
subject: I18n.t("mailers.my_mailer.subject"))
end
最后一条建议-不要忘记使用您的@locale
变量,因此请遵循以下原则:@locale = @user.locale || I18n.default_locale
更新:
或者您可以简单地使用mail
方法进行猴子补丁,但是请确保您知道自己在做什么。
def mail(**)
I18n.with_locale(@locale || I18n.default_locale) { super }
end