我有一个网络应用程序,可以将照片分类。这些类别目前是瑞典语,但我想添加选项以添加类别名称的英文翻译。
如果类别是静态的,我可以将翻译添加到语言环境文件中,但现在用户应该能够添加类别(和翻译),我不知道该怎么做。
我该怎么做呢?显而易见的第一个想法是将每种语言的列添加到数据库表中,例如title_en
,title_sv
例如等,但我想这很快就会变得不切实际,因为在项目的后期,客户可能会喜欢添加更多语言。
以前有人做过类似的事情吗?非常感谢!
我有一个网络应用程序,可以将照片分类。这些类别目前是瑞典语,但我想添加选项以添加类别名称的英文翻译。
如果类别是静态的,我可以将翻译添加到语言环境文件中,但现在用户应该能够添加类别(和翻译),我不知道该怎么做。
我该怎么做呢?显而易见的第一个想法是将每种语言的列添加到数据库表中,例如title_en
,title_sv
例如等,但我想这很快就会变得不切实际,因为在项目的后期,客户可能会喜欢添加更多语言。
以前有人做过类似的事情吗?非常感谢!
Rails i18n 系统允许不同的后端。如果您在 Google 上搜索“rails i18n 后端”,您会发现几个实现和示例。
您可以为此使用数据库。这是一个 RailsCast 演示通过 Web 界面管理翻译。
有一些可能的解决方案。我的第一选择应该是添加一个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
它添加一个字段。因此,您可以将翻译存储在序列化的哈希中。该解决方案的缺点可能是无法轻松搜索序列化字段。