2016-01-26 2 views
3

Я ве некоторые проблемы, управлять моим 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 на французском языке будет таким же, как на английском, если нет содержания)

+0

Просто интересно, почему вы хотите хранить статические данные i18n в своей базе данных? Потому что общие данные i18n должны меняться при изменении источника. – efkan

ответ

0

Я использовал этот пакет npm sequelize-i18n. Это работало довольно хорошо для меня, используя sequelize 3.23.2, к сожалению, похоже, что у него еще нет поддержки для продолжения 4.x.