我有一个网络应用程序,我将照片分类。这些类别目前使用瑞典语,但我想添加选项以添加类别名称的英文翻译。
如果类别是静态的,我可以只添加翻译到语言环境文件,但现在用户应该能够添加类别(和翻译),我不知道如何去做。
我该怎么做呢?显而易见的第一个想法是将每种语言的列添加到数据库表中,如title_en
,title_sv
等,但我想这很快就会变得不切实际,因为在项目的后期,客户可能会喜欢添加更多语言。
之前有人做过类似的事吗?非常感谢!
答案 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
。因此,您可以将翻译存储在序列化的哈希中。该解决方案的缺点是序列化的字段不能轻易搜索。