Я ве некоторые проблемы, управлять моим i18n в моей базе данныхЛучший способ управления интернационализацией в базе данных
На данный момент я только два языка, доступные в моем приложении, но для того, чтобы быть масштабируемым, я хотел бы сделать это «лучший» способ.
Я мог бы дублировать все поля, такие как description_fr, description_en
, но я вообще не был в этом уверен. Что я сделал сейчас, это внешняя таблица, назовем его content
, и его архитектура, как это:
id_ref => entity referenced id (2)
type => table name (university)
field => field of the specific table (description)
lang => which lang (fr, en, es…)
content => and finally the appropriate content.
Я думаю, что это может быть важно точно, я использую sequelizeJS в ОРМ. Поэтому я могу использовать полезные крючки как afterFind, afterCreate и afterUpdate. Поэтому каждый раз, когда я хочу найти ресурс, например, после его поиска, мой крюк получает весь контент для этого ресурса и задает определенно мой объект с товарами. Это работает, но я не люблю этого.
Но у меня есть некоторые проблемы с этим:
увеличение Это значительно мое количество запросов к базе данных: Если я выбираю 50 строк, например, я должен сделать 50 запросов более .., и только для конкретной модели. Если у меня есть вложенные модели, это экспоненциально ...
Затем сложно получить данные по содержанию i18ned. Пример найти университет с определенным именем сложный.
И это очень много работы по обновлению и т.д. ...
Так интересно, если это было бы хорошая идея, чтобы сохранить как JSON, непосредственно в соответствующей таблице, данные , Что-то вроде
{
fr : { 'name':'Ma super université' },
en : { 'name':'My kick ass university' }
}
И продолжайте использовать Sequelize Hooks для создания и вставки надлежащих данных в мой объект.
Как вы думаете? Как вам это удается?
EDIT
Я использую базу данных MySQL
Это касается около 20 полей (кросс-модели)
Я должен установить значение по умолчанию с помощью мой default_lang, если нет набора контента (например, event.description на французском языке будет таким же, как на английском, если нет содержания)
Просто интересно, почему вы хотите хранить статические данные i18n в своей базе данных? Потому что общие данные i18n должны меняться при изменении источника. – efkan