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 мне кажется лучше.
Собственно в проекте неограниченное количество языков, а сущностей, с которыми ведется работа всего четыре: страна, регион, объект, свойства объекта.
Структура для всех языков одинакова.
Как лучше организовать структуру таблиц, с учетом того, что сущностей всего четыре?
Для каждой таблицы 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 мне кажется лучше.