![Гравюра М. Эшера "Относительность"][1]
[_Гравюра М. Эшера «Относительность», 1953_][2]
В [предыдущей статье][3] на примере доменной сущности товара мы рассмотрели собственные типы данных для многоязычных приложений. Мы научились описывать и использовать атрибуты сущностей, имеющие значения на различных языках. Но вопросы хранения и обработки в реляционной СУБД, а также проблемы эффективной работы в коде приложения до сих пор актуальны.
IT-сообщество использует различные способы хранения многоязычных данных. Способы эти кардинально различаются эффективностью запросов, устойчивостью к добавлению новых локализаций, объемом данных, удобством для приложения-потребителя.
Однако в индустрии все еще нет решения _Database Internationalization for Dummies_. Вместе с вами мы попробуем немного заполнить этот пробел: опишем возможные способы, оценим их преимущества и недостатки, выберем эффективные. Мы не собираемся изобретать серебряную пулю, но сценарий, который будем рассматривать, довольно типичен для корпоративных приложений. Надеемся, многим он окажется полезен.
Приведенные в статье фрагменты кода — на языке C#. На GitHub можно найти [примеры реализации][4] механизмов интернационализации с использованием двух различных связок ORM и СУБД: [NHibernate][5] + [Oracle Database][6] и [Entity Framework Core][7] + [SQL Server][8]. Разработчикам, использующим упомянутые ORM, будет интересно узнать конкретные приемы и трудности работы с многоязычными данными, а также блокирующие дефекты фреймворков и перспективы их устранения. Изложенные ниже принципы и примеры работы с многоязычными данными легко перенести и на другие языки и технологии.
[Читать дальше →][9]
[1]:
https://habrastorage.org/webt/59/cb/d4/59cbd400d6b90552886277.jpeg
[2]:
https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(%D0%BB%D0%B8%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F)
[3]:
https://habrahabr.ru/company/custis/blog/313284/
[4]:
https://github.com/CUSTIS-public/CUSTIS.i18n.DAL
[5]:
http://nhibernate.info/
[6]:
http://www.oracle.com/technetwork/database/enterprise-edition/overview/index.html
[7]:
https://docs.microsoft.com/en-us/ef/#pivot=efcore
[8]:
https://www.microsoft.com/en-us/sql-server/developer-get-started/
[9]:
https://habrahabr.ru/post/313690/?utm_source=habrahabr&utm_medium=rss&utm_campaign=313690#habracut