【问题标题】:Need To Add Locale To link_to Statement in a Mailer View需要在 Mailer 视图中将语言环境添加到 link_to 语句
【发布时间】:2013-10-16 14:49:01
【问题描述】:

我已从我的 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}" %>

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 locale host link-to


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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

      更新:

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

        def mail(**)
          I18n.with_locale(@locale || I18n.default_locale) { super }
        end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多