PHP & MySQL - лучший способ обрабатывать различное содержимое языка баз данных - PullRequest
6 голосов
/ 26 июля 2011

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

Ура!

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

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

стол product:

id: 15
name: product.foo_widget
attr: ...
... etc

стол translation:

lang: en
key: product.foo_widget
trans: Foo Widget
2 голосов
/ 26 июля 2011

Имейте язык текущего пользователя как свойство вашего пользовательского объекта (или любой другой шаблон, который вы используете для отслеживания пользователя). Когда вы запрашиваете в БД строки, добавьте условное выражение для извлечения языка текущего пользователя, если оно доступно.

В этом примере я поместил language_id в $_SESSION; Обычно я не отслеживаю пользователей таким образом, но я думаю, что концепция проиллюстрирована. В вашей базе данных каждый продукт будет иметь несколько записей для каждого языка, при этом 0 будет сайтом по умолчанию (предположительно, английский). Запрос захватит позицию, зависящую от языка, или вернется к сайту по умолчанию, если недоступен элемент для конкретного языка.

// the id of the item you're after
$item_id = 1;
$sql = 'SELECT id, name FROM product_names WHERE item_id = '.$item_id.' AND (language_id = '.$_SESSION['user']['language'].' OR language_id = 0) ORDER BY language_id DESC LIMIT 1';

Я использую эту же концепцию для общих строк вокруг сайта - у меня есть таблица базы данных с именем "content_strings" с полями id, text и language_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...