需要在邮件视图中将语言环境添加到link_to语句中

问题描述 投票:2回答:2

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

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

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

当我卸载路由过滤器时,由于尝试发送电子邮件而缺少语言环境,因此开始出现错误。它将崩溃,并将应用程序发送回登录页面。宝石照顾了这个。

我已经搜索了大约一个小时,试图为此找到正确的语法,但是我没有找到任何包含host和locale参数的示例。我已经尝试了几次猜测,但是语法错误。

任何帮助将不胜感激。我将继续搜索并尝试。

ruby-on-rails ruby-on-rails-3 locale host link-to
2个回答
5
投票

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

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

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 var进行后备,因此沿以下方向很模糊:@locale = @user.locale || I18n.default_locale

© www.soinside.com 2019 - 2024. All rights reserved.