Rails 3.1,来自habtm关系的价值内部化?

时间:2012-04-11 06:54:55

标签: ruby-on-rails-3 ruby-on-rails-3.1 internationalization i18n-gem

我有一个HABTM类别的事件模型。这种关系很好,我可以在没有问题的情况下从类别中插入/检索值。

我的问题是,有没有办法将这些类别的值进行国际化(I18n)。

类别模型

class Category < ActiveRecord::Base
 has_and_belongs_to_many :events
end

活动模型

class Event < ActiveRecord::Base
....
has_and_belongs_to_many :categories
....

_form.html.haml(适用于活动)

- Category.all.each do |category|
 .field
   = check_box_tag "category_ids[]", category.id, @event.category_ids.include?(category.id)
   = category.name

1 个答案:

答案 0 :(得分:0)

我假设类别几乎是固定的(否则你真的不能对它们做任何i18n)

一种解决方案是将数据库中的类别保存为键(带下划线),并为每个键将i18n添加到您的语言环境文件中:

en.yml

categories:
  some_category: "Some category text"
  some_other_category: "Some other category text"
  ......

如果您这样做Category.all.map(&:name),则会产生["some_category", "some_other_category", ....]

在你看来:

- Category.all.each do |category|
 .field
   = check_box_tag "category_ids[]", category.id, @event.category_ids.include (category.id)
   = I18n.t("categories.#{category.name}")

请注意,如果您尝试动态执行此操作,这不是一个好的解决方案(如果是这种情况,您将需要将翻译存储在数据库中,this可能有帮助)