2

我已经从我的 Rails 3.2.13 应用程序中删除了 gem routing-filter,准备将其升级到 Rails 4。作者有 Rails 4 的 beta 版本,但我永远无法让它工作。我已经为本地化/国际化实施了正常的 Rails 流程。我需要解决的最后一个问题是在邮件视图中显示线程的 link_to 语句。

当我使用路由过滤器时,我有如下的 link_to 语句,我根据环境在我的邮件程序中设置了@host。

<%= link_to "#{t :view_thread}", micropost_url(@item), host: "#{@host}" %>

当我卸载路由过滤器时,由于尝试发送电子邮件时缺少区域设置,我开始收到错误消息。它崩溃并将应用程序发送回登录页面。宝石解决了这个问题。

我已经搜索了大约一个小时试图找到正确的语法,但我没有找到任何包含主机和语言环境参数的示例。我已经尝试了几种猜测,但我得到了语法错误。

任何帮助,将不胜感激。我会继续寻找和尝试。

4

2 回答 2

5

这是我想出的解决方案。我不确定 locale 子句应该与 host 子句相关的位置。我决定尝试下面的陈述,它奏效了。

<%= link_to "#{t :view_thread}", micropost_url(@item, locale: I18n.locale.to_s), host: "#{@host}" %>
于 2013-10-16T14:56:03.320 回答
1

更新了 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

最后一条建议 - 不要忘记使用你的@localevar 进行后备,所以它是沿着这些线的:@locale = @user.locale || I18n.default_locale

更新:

或者您可以简单地使用monkeypatchmail方法,但请确保您知道自己在做什么。

  def mail(**)
    I18n.with_locale(@locale || I18n.default_locale) { super }
  end
于 2020-04-15T10:28:47.983 回答