帮助程序中的文本无法翻译



所以问题来了:比方说,我有邮件。里面的文字已经完全翻译好了,一切都很好。也许它看起来是这样的(我们在这个项目中使用SLIM(:

= t('foo.bar')
= t('foo.bar')
= t('foo.bar')
= thank_you_signature

所以这个thank_you_signature是来自ApplicationMailerHelper的辅助方法。很简单:

def thank_you_signature
SIGNATURE_TEMPLATE.render(self)
end
SIGNATURE_TEMPLATE = Slim::Template.from_heredoc <<-SLIM
p.foo.bar #{I18n.t('helpers.mailers.foo')}
foo.bar #{I18n.t('helpers.mailers.bar')}
SLIM

这就是它的样子。问题是,它没有翻译这个= thank_you_signature。我有两个地方,RU和EN。两者都有,但在我的邮件中,即使所有的文本都是英文的(因为我选择我的地区作为用户(,这部分仍然是俄文的。

当然,我检查的第一件事是yml文件,但一切似乎都很好,ru.ymlen.yml文件之间没有区别。

我已经做了将近两天了,我真的不明白这里有什么诀窍。

当你说:

SIGNATURE_TEMPLATE = Slim::Template.from_heredoc <<-SLIM
p.foo.bar #{I18n.t('helpers.mailers.foo')}
foo.bar #{I18n.t('helpers.mailers.bar')}
SLIM

#{...}字符串插值是Ruby在评估heredoc时完成的,所以Slim::Template只看到这样的字符串:

p.foo.bar return-value-from-I18n.t...
foo.bar return-value-from-I18n.t...

并且CCD_ 8调用将使用默认语言环境(可能是美国英语(。

您希望Slim处理字符串插值,以便在渲染模板时(即,当区域设置为您希望的值时(进行I18n.t调用。要做到这一点,您需要将#{...}字符串插值转义为#{...}:,使其通过heredoc

SIGNATURE_TEMPLATE = Slim::Template.from_heredoc <<-SLIM
p.foo.bar #{I18n.t('helpers.mailers.foo')}
foo.bar #{I18n.t('helpers.mailers.bar')}
SLIM

我以前做这件事的方式是使用模板文件并加载它。

# app/templates/signature_template.slim
h1
= I18n.t 'some_key'
# app/helpers/signature_helper.rb
def signature_template
path = Rails.root.join('app/templates/signature_template.slim')

Slim::Template.new(path).render(Object.new)
end

相关内容

  • 没有找到相关文章

最新更新