0

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

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

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

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

4

2 回答 2

2

Rails i18n 系统允许不同的后端。如果您在 Google 上搜索“rails i18n 后端”,您会发现几个实现和示例。

您可以为此使用数据库。这是一个 RailsCast 演示通过 Web 界面管理翻译

于 2013-11-04T14:01:48.550 回答
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它添加一个字段。因此,您可以将翻译存储在序列化的哈希中。该解决方案的缺点可能是无法轻松搜索序列化字段。

于 2013-11-04T14:03:38.450 回答