Какой вариант реализации мультиязычности более лучше?

alpha

Новичок
Какой вариант реализации мультиязычности более лучше?

Собственно в проекте неограниченное количество языков, а сущностей, с которыми ведется работа всего четыре: страна, регион, объект, свойства объекта.
Структура для всех языков одинакова.

Как лучше организовать структуру таблиц, с учетом того, что сущностей всего четыре?

Для каждой таблицы table делать таблицу table_lang или все данные кидать в одну таблицу translations?

Чувствую что описал не очень понятно, поэтому пример.

Таблица языков:
lang_id
lang_name
(1, 'RU'), (2, 'EN');


Первый способ:
таблица countries:
id
name_def
url


таблица countries_lang
id
lang_id
country_id
value

Соответсвенно:
[SQL]
INSERT INTO `countries` VALUES (1, 'Russia', 'russia');
INSERT INTO `countries_lang` VALUES (1, 1, 1, 'Россия'), (2, 2, 1, 'Russia');
[/SQL]

Второй способ
Таблица countries та же.
Таблицы countries_lang нету.
Таблица translations
id
type - тип сущности. 1 - страна, 2 - регион ....
ref_id - id сущности
field_name - название поля для перевода
value - значение перевода.

Соостественно
[SQL]
INSERT INTO `translations` VALUES (1, 1, 1, 'name', 'Россия'), (2, 1, 1, 'name', 'Russia');
[/SQL]


Что меня смущает в первом варианте: Для каждой сущности мы создаем отдельную таблицу для языков.
Во втором: как-то неудобно работать с таблицей translations.
ps. при создании нового языка, вся структура будет копироваться из дефолтного языка. Тоесть вариант 1 мне кажется лучше.
 

crocodile2u

http://vbolshov.org.ru
Еще вариант:
использовать отдельные базы данных (или схемы, если ты, скажем, на постгресе) - для каждого языка. Тогда языконезависимые данные будут в своей БД (схеме), а языкозависимые - в своих. Но этот вариант хорошо только тогда, когда у тебя данные для каждого языка разные, т. е. не являются точными переводами (иными словами, в английской версии сайта может содержаться набор стран, полностью отличный от русской версии).

Если выбирать из твоих вариантов (а вероятнее всего, что в твоем случае мой вариант неприменим) - я бы однозначно предпочел первый, он гораздо более логичен, он позволяет делать человеческие запросы. А со вторым ты намучаешься, оставь его.
 
Сверху