Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > интернационализация БД


Автор: dementiev 18.2.2010, 01:20
Как обычно делают i18n на уровне БД? 
Т.е. если надо интернационализировать не только UI, но и некоторые таблицы.

Автор: ivanovpv 18.2.2010, 09:38
Подводные камни здесь такие:

а) Надо в БД/таблицах установить charset unicode и использовать поля типа nvarchar, nchar и ntext (для SQL Server) 
б) Надо как-то определиться как хранить в базе мультиязычные дела. Некоторые все поля дублируют, некоторые дублируют таблицы - есть и такие кто сразу дублируют БД. Есть подход, когда каждая запись в таблице имеет поле принадлежности к тому или иному языку.
в) Четко надо понимать что делать с коллейшном. Допустим делаем запрос к БД с арабским профилем - допустим каким-то образом определились как будет сформирован (из каких бд/таблиц/вью) запрос. Теперь нужно выдать его с правильным коллейшном. Лучшее решение которое я видел - это отдельная таблица где хранятся правила коллейшнов.

Мой личный преференц (с учетом того что работать надо будет из Java):
1) Естественно все строчные/символьные поля в БД на unicode (лучше сразу на UTF-16)
2) В каждой таблице присутствие обязательного индексируемого поля LANGUAGE (если не ломает можно добавить и CULTURE) - по которому делаем фильтр по языку, понимая, что если поле NULL - это язык по умолчанию
3) Отдельная табличка для COLLATION где для каждой пары LANGUAGE/CULTURE сопоставлено правило для ORDER BY
4) Все это хозяйство запихиваем в Hibernate, где перед каждым запросом должны знать значение LANGUAGE/CULTURE - пишем на Java/HQL/SQL несложную надстройку для модификации запроса с тем, чтобы из БД возвращались всегда i18n-specific ответы.

Ну типа:
Код

select worker, salary from workers where language='ARABIC' and culture='IRAQ' order by worker collate Arabic_CI_AS


Где значение ARABIC/IRAQ должен давать клиент, а значение Arabic_CI_AS это результат подчиненного запроса к таблице коллейшнов

Автор: LSD 18.2.2010, 16:17
Цитата(dementiev @  18.2.2010,  01:20 Найти цитируемый пост)
Т.е. если надо интернационализировать не только UI, но и некоторые таблицы.

Что такое интернационализация таблиц? У тебя что пользователь будет лазить в базу SQL клиентом?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)