Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Интернационализация (i18n) БД (http://forum.oszone.net/showthread.php?t=185890)

9dogs 19-09-2010 16:37 1499159

Интернационализация (i18n) БД
 
Доброго времени суток!
Рад, что сайт все еще на плаву, сто лет тут не был.
Поиск не выявил схожих тем, если это не так - прошу прощения.
Вопрос довольно общий, но использую MySQL, может там какая специфика есть


Есть база данных, довольно сложная. Около двух десятков таблиц с отношениями как 1:1, так и 1:M и M:M.
Вопрос в том, как правильно интернационализировать такие БД. Для начала достаточно одного дополнительного языка (en).
Какие есть способы?
Пока что приходят на ум решения с дополнительной БД или дополнительными полями (скажем, name_en). Наверняка есть более красивые варианты.

Delirium 20-09-2010 03:10 1499514

Цитата:

Цитата 9dogs
Рад, что сайт все еще на плаву, сто лет тут не был. »

Форум не только на плаву, но и превратился в огромный корабль :)
Цитата:

Цитата 9dogs
как правильно интернационализировать такие БД »

Не совсем понятен смысл. Вы хотите, чтобы данные в БД были на разных языках? А перевод как будет осуществляться?

Более красивых вариантов, чем предложенные вами, вряд ли присутствуют. Проще всего, конечно, сделать вторую БД и там все переименовать, а при выборе языка переключаться между базами. Но, в таком случае, надо будет делать зеркалирование баз, чтобы данные были актуальны в любой момент времени.

9dogs 20-09-2010 05:13 1499530

Цитата:

Цитата Delirium
Вы хотите, чтобы данные в БД были на разных языках? »

Именно. Чтобы, грубо говоря, пользователь мог ввести свою ФИО, дату рождения, биографию etc на русском, а потом, переключив язык, еще и на английском. То есть перевод будет осуществляться вручную.
Вариант с двумя базами смущает именно необходимостью синхронизации. Хотя это вроде не слишком сложно реализуется. Попробую сделать так, для начала.

Delirium 20-09-2010 05:53 1499541

Вариант с доп полями неудобен тем, что придется в каждую таблицу добавлять это поле и в программе проверять и выводить данные с учетом языка. Но зато нет проблем с синхронизацией :)

El Scorpio 20-09-2010 07:34 1499569

Цитата:

Цитата 9dogs
Пока что приходят на ум решения с дополнительной БД или дополнительными полями (скажем, name_en). Наверняка есть более красивые варианты. »

Добавляем таблицу "строковые значения" из трёх столбцов, где LANG_ID и TEXT_ID будут первичным ключом, а TEXT - значением
Соответсвенно во всех остальных подменяем текстовые поля на коды, которые будут соответствовать значениям TEXT_ID. Запросы правим так, чтобы в результатах в выводились строки, соответствующие значениям ключа (LANG_ID TEXT_ID)

В*результате БД будет поддерживать сколько угодно языков. Главное, чтобы кто-нибудь вводил информацию для всех языков

9dogs 20-09-2010 22:53 1500288

El Scorpio, хорошее решение.
Если еще добавить USER_ID, то появится возможность отдавать пользователю только его данные для перевода.


Время: 23:04.

Время: 23:04.
© OSzone.net 2001-