Rails中的多语言内容

时间:2011-12-10 04:14:29

标签: mongodb ruby-on-rails-3.1 mongoid multilingual

我即将开始一个新项目并需要一些建议。

例如,如果我有一个名为“Page”的模型有“帖子” - 当我创建一个新帖子时我怎么能存储多种语言,当我点击一个时只显示一种语言的帖子 - 让我们说 - 顶部的旗帜图标。

我已经阅读了很多关于l18n的内容,但据我所知 - 如果我想翻译错误等静态消息,这就是我的方法吗?

希望有人能够以干净的方式解释给定的策略。

谢谢!

1 个答案:

答案 0 :(得分:1)

正如您所说,本地化和国际化(分别缩写为l10n和i18n)通常指的是软件产品本身的本地化,而不是内容。

如何管理多种语言的内容有不同的策略,它确实很大程度上取决于您想要实现的目标。假设您运行多语言博客。但是,有些内容与国际观众无关,所以你不想提供英文版(假设你不是母语为英语的人,但我想这一点很清楚)。

现在似乎有意义的是,不要在博客的英文版中显示该博文。因此,我建议

Post {
  "_id" : ObjectId('...'),
  "PostGroupId: ObjectId('...'),
  "Title" : "A Blog Post Title",
  "Text" : "<h1>Lorem ipsum</h1> lots of text",
  "Language" : "en",
  "Published" : // and so on...
}

您现在可以轻松查询给定语言的所有或特定帖子:db.Posts.find({"language" : "en"}).sort({"Published" : -1});

根据您的需要,您可能希望为帖子添加分组对象,以使用非规范化数据明确地将帖子的翻译相互关联:

PostGroup
{
  "_id" : ObjectId('...'),
  // ...

  "Posts" : [{"lang" : "en", "id" : ObjectId('...')},
             {"lang" : "de", "id" : ObjectId('...')} ]
  // -- or simpler --
  "AvailableLanguages" : ["en", "it", "fr"]
}