在Web应用程序中翻译模型属性的简便方法?

时间:2013-11-04 13:52:02

标签: ruby-on-rails database-design web gem

我有一个网络应用程序,我将照片分类。这些类别目前使用瑞典语,但我想添加选项以添加类别名称的英文翻译。

如果类别是静态的,我可以只添加翻译到语言环境文件,但现在用户应该能够添加类别(和翻译),我不知道如何去做。

我该怎么做呢?显而易见的第一个想法是将每种语言的列添加到数据库表中,如title_entitle_sv等,但我想这很快就会变得不切实际,因为在项目的后期,客户可能会喜欢添加更多语言。

之前有人做过类似的事吗?非常感谢!

2 个答案:

答案 0 :(得分:2)

Rails i18n系统允许不同的后端。如果你谷歌“rails i18n后端”,你会发现几个实现和例子。

您可以使用数据库。这是一个展示managing the translations through a web interface的RailsCast。

答案 1 :(得分:1)

有一些可能的解决方案。我的第一选择是在类别表中添加lang:string字段和parent_id:integer。然后,您将自引用关联添加到Category(我假设其名为Categrory,...)模型。

belongs_to :translated, :class_name => 'Category', :foreign_key => 'parent_id'
has_many :translations, :class_name => 'Category', :foreign_key => 'parent_id'

然后向您的模型添加一个范围,该范围按lang字段进行过滤。

scope :language, lambda{|lang| where("lang = ?", lang)}

采用translate方法。

def translate(lang)
  self.translations.language(lang).first if self.translations.language(lang).any?
end

因此,您可以使用一种主要语言并添加任意数量的其他语言。

另一种可能性是将translations:text字段添加到模型中并serialize。因此,您可以将翻译存储在序列化的哈希中。该解决方案的缺点是序列化的字段不能轻易搜索。