Показать полную графическую версию : Интернационализация (i18n) БД
Доброго времени суток!
Рад, что сайт все еще на плаву, сто лет тут не был.
Поиск не выявил схожих тем, если это не так - прошу прощения.
Вопрос довольно общий, но использую MySQL, может там какая специфика есть
Есть база данных, довольно сложная. Около двух десятков таблиц с отношениями как 1:1, так и 1:M и M:M.
Вопрос в том, как правильно интернационализировать такие БД. Для начала достаточно одного дополнительного языка (en).
Какие есть способы?
Пока что приходят на ум решения с дополнительной БД или дополнительными полями (скажем, name_en). Наверняка есть более красивые варианты.
Delirium
20-09-2010, 03:10
Рад, что сайт все еще на плаву, сто лет тут не был. »
Форум не только на плаву, но и превратился в огромный корабль :)
как правильно интернационализировать такие БД »
Не совсем понятен смысл. Вы хотите, чтобы данные в БД были на разных языках? А перевод как будет осуществляться?
Более красивых вариантов, чем предложенные вами, вряд ли присутствуют. Проще всего, конечно, сделать вторую БД и там все переименовать, а при выборе языка переключаться между базами. Но, в таком случае, надо будет делать зеркалирование баз, чтобы данные были актуальны в любой момент времени.
Вы хотите, чтобы данные в БД были на разных языках? »
Именно. Чтобы, грубо говоря, пользователь мог ввести свою ФИО, дату рождения, биографию etc на русском, а потом, переключив язык, еще и на английском. То есть перевод будет осуществляться вручную.
Вариант с двумя базами смущает именно необходимостью синхронизации. Хотя это вроде не слишком сложно реализуется. Попробую сделать так, для начала.
Delirium
20-09-2010, 05:53
Вариант с доп полями неудобен тем, что придется в каждую таблицу добавлять это поле и в программе проверять и выводить данные с учетом языка. Но зато нет проблем с синхронизацией :)
El Scorpio
20-09-2010, 07:34
Пока что приходят на ум решения с дополнительной БД или дополнительными полями (скажем, name_en). Наверняка есть более красивые варианты. »
Добавляем таблицу "строковые значения" из трёх столбцов, где LANG_ID и TEXT_ID будут первичным ключом, а TEXT - значением
Соответсвенно во всех остальных подменяем текстовые поля на коды, которые будут соответствовать значениям TEXT_ID. Запросы правим так, чтобы в результатах в выводились строки, соответствующие значениям ключа (LANG_ID TEXT_ID)
В*результате БД будет поддерживать сколько угодно языков. Главное, чтобы кто-нибудь вводил информацию для всех языков
El Scorpio, хорошее решение.
Если еще добавить USER_ID, то появится возможность отдавать пользователю только его данные для перевода.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.