我正在使用I18n gem进行翻译。我将所有翻译都放在一个文件中(en.yml,es.yml ..)。 但对于电子邮件,我没有翻译电子邮件正文中的每个句子,而是为每个区域设置单独的电子邮件视图。所以我的电子邮件视图文件结构如下:
- views
- user_mailer
- notify_activation.en.html.erb
- notify_activation.de.html.erb
- notify_activation.es.html.erb
我的用户邮件就像:
class UserMailer < ApplicationMailer
def notify_activation user
@user = user
mail(to: @user.email, subject: t('mailer.user.activation.subject'))
end
end
现在我想将邮件主题翻译放在语言环境的自定义目录中。因此,语言环境结构将如下所示:
- config
- locales
- en
- user_mailer.yml
- *other mailers*.yml
- de
- user_mailer.yml
- *other mailers*.yml
- es
- user_mailer.yml
- *other mailers*.yml
- devise.en.yml
- en.yml
- es.yml
- de.yml
我搜索了一个解决方案,但一切都是徒劳的。我遇到过建议我更改application.rb中的i18n.load_path的解决方案,但这会改变所有翻译的路径,我只想更改邮件主题的加载路径。我希望有类似的东西:
def load_path
"#{I18n.locale}/#{self.class_name}"
end
应用程序mailer.rb中的。任何解决方案或建议都将受到高度赞赏。
P.S我对铁轨很陌生,所以不要介意彻底。答案 0 :(得分:0)
Rails自动执行(至少Rails 4+)。默认 config / locales / en.yml 具有以下注释:
config / locales目录中的文件用于国际化
并由Rails自动加载。如果你想使用locales其他
比英语,在这个目录中添加必要的文件。
因此,您可以根据需要在 config 目录中构建文件。
答案 1 :(得分:0)
如Rails的I18n文档中所述:
您可以更改load_path
config/initializers/application.rb
I18n.load_path += Dir[Rails.root.join('config', 'locales', 'en', '*.yml')]
I18n.load_path += Dir[Rails.root.join('config', 'locales', 'es', '*.yml')]
I18n.load_path += Dir[Rails.root.join('config', 'locales', 'de', '*.yml')]