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