Многоязычный контент в Rails - PullRequest
1 голос
/ 10 декабря 2011

Я собираюсь начать новый проект и мне нужен совет.

Например, если у меня есть Модель с именем «Страница», в которой есть «Сообщения» - как я могу хранить более одного языка, когда я создаю новое сообщение и отображать только сообщения на языке, когда я нажимаю - скажем, - флаг-значок вверху.

Я много читал о l18n, но, как я понял - это тот способ, если я хочу переводить статические сообщения, такие как ошибки и т. Д.?

Надеюсь, что кто-нибудь сможет объяснить ей данную стратегию в чистом виде.

Спасибо!

1 Ответ

1 голос
/ 10 декабря 2011

Как вы сказали, локализация и интернационализация (сокращенно 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"]
}
...