Это не так уж и далеко от того, как я это сделаю ... Я склонен придерживаться формата, как, например, добавление всей таблицы с суффиксом _lang
. Таким образом, у меня было бы 3 таблицы (используя InnoDB с внешними ключами для ссылочной целостности).
product
----------------------------------------------------------------
id | ... fields ...
language
----------------------------------------------------------------
id | ... fields ...
product_lang
----------------------------------------------------------------
language_id | product_id | name | description | ... etc ...
Я бы, вероятно, использовал строку ISO для идентификатора языка, например en-GB
и автоинкрементный INT для идентификатора продукта. Первичный ключ в таблице product_lang
будет составным ключом, созданным из полей language_id
и product_id
- таким образом вы избежите ненужного поля и любых ограничений INT, которые будут иметь.
В противном случае, да, вы в значительной степени там.
---- РЕДАКТИРОВАТЬ, ЧТОБЫ ОТКАЗАТЬ ОБНОВЛЕННЫЙ ВОПРОС ----
ОК - модель ...
Ваша модель должна отражать то, как вы будете использовать ее в деловом смысле, а не в смысле базы данных ... У меня была бы модель продукта, которая упаковывает данные, так как вы будете использовать ее, что-то вроде:
class MyProduct {
private $_id;
private $_sku;
private $_name;
private $_description;
...
public function setId($iId) {
$this->_id = (int) $iId;
}
public function getId() {
return $this->_id;
}
... and so on ...
}
Я бы установил язык в коннекторе базы данных, возможно, статически, если вы не часто меняете его, и пусть он вытягивает соответствующие данные из таблиц для распространения вашего объекта ... Я не большой сторонник активные записи - создавайте объектные модели, которые отображают бизнес-объекты, и базу данных, в которой данные хранятся в реляционной нормализованной форме. Используйте слой абстракции базы данных для преобразования одного в другой.
Помимо загрузки в настройках i18n
Как правило, я бы сохранял определенные переменные на уровне сайта в объекте приложения Singleton, который загружается на каждой странице, - именно там я бы сохранял идентификатор языка и все элементы загрузки приложения, поэтому он подключался к базе данных, начать сеанс, создать экземпляр объекта пользователя, назначить ему корзину и т. д. и т. д. - все, что используется глобально.
Так как язык будет установлен в этом объекте MyApp
, и этот объект также будет содержать соединитель вашей базы данных - вы можете просто сделать так, чтобы этот объект автоматически устанавливал статический параметр MyDBConnector::setLang($sLang)
при создании экземпляра.
Таким образом, чтобы запустить все приложение на любой странице, вам нужно просто сделать что-то вроде
require_once '/path/to/app.ini.php';
$oApp = MyApp::getInstance();