我写了一个小库来保存模型属性中的翻译内容。您所要做的就是将以下内容添加到模型中:
class Page < ActiveRecord::Base
i18n_attributes :title, :content
end
按照惯例,数据作为散列(或 Postgres 的 hstore 散列)写入真实属性 i18n_title 和 i18n_content。许多 getter 和 setter 让您可以访问“本地化的虚拟属性”:
page = Page.new
page.title_en = 'Hello'
page.title_es = 'Hola'
page.i18n_title # => { en: "Hello", es: "Hola" }
I18n.locale = :es
page.title # => "Hola"
page.title_en # => "Hello"
您也可以在表单中使用这些虚拟属性,但有一个缺点:表单构建器使用 I18n 来获取标签并转换属性验证错误。它当然会寻找键,例如activerecord.attributes.page.title_en
您title_en
在表单中使用的键。
locales/en.yml
为etc 文件中的每个 available_locale 复制相同的翻译会非常麻烦:
activerecord:
attributes:
page:
title_en: "Title"
title_es: "Title"
...
我想做的是在 Rails 在启动过程中加载所有语言环境之后执行一些代码,然后克隆这些键的翻译。有没有办法做到这一点?也许是在从 YAML 文件加载翻译后调用的钩子?(当我的库加载时,翻译尚未加载。)
或者您是否看到了解决此问题的另一种方法?(我尝试为 I18n.translate 起别名,但我担心这可能会在未来引起严重的头痛。)
感谢您的提示!