Схема таблиц для многоязычного веб-сайта, управляемого MySQL - PullRequest
0 голосов
/ 24 декабря 2011

Я работаю на многоязычном веб-сайте.Попытка разработать оптимальную схему БД для этой цели.

enter image description here

Как видите, есть 2 таблицы: langs и menu. Моя идея заключается в следующем:

Например.Давайте взглянем на многоязычную навигацию из таблицы MySQL.В бэкэнде PHP при создании навигации из базы данных

  • Получить все данные из menu строки таблицы
  • Вторая таблица левого соединения - langs (по name полю menu таблица) и получить данные из столбца определенного языка (например, en, ru)

Как вы думаете, это оптимальный путь или есть более эффективное решение?Пожалуйста, дайте мне ответы, связанные с базой данных, а не файл.(например, gettext, ... и т. д.)

Ответы [ 2 ]

1 голос
/ 24 декабря 2011

Вы можете выполнить дальнейшую нормализацию следующим образом:

  • имя токена: id, токен (например, (1, программа), (2, меню))
  • локализация: id, tokenname_id, lang, text

Таблицы, которые ссылаются на строки, затем ссылаются на строку с помощью tokenname.id в качестве внешнего ключа.

Обратите внимание, что для текста вам понадобится некоторый язык мини-шаблоновлокализации.

1 голос
/ 24 декабря 2011

Было бы лучше, если бы таблица langs содержала столбец language с одной строкой для каждого перевода. Это позволяет вам добавить другой язык позже и применять изменения данных (а не переписывать запросы).

Как вы уже подразумевали, выполнение левого соединения и возврат к языку по умолчанию, который содержится непосредственно в таблице menus, также является хорошей идеей (в этом случае вам не нужно держать перевод, например, для en в таблице langs, так как английская версия будет всегда доступна).

Вы также можете рассмотреть вопрос о сохранении переводов для конкретной страны (если, скажем, существует несколько говорящих по-испански стран, в которых переводы могут быть разными), и следуйте альтернативной стратегии поиска: language-country, language, English переводов.

...