[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Давайте поговорим о переводах
kaww
У кого какие мнения на счет мультиязычности и организации БД.
Сам обычно решаю эту проблему очень просто: для всех полей, которые нужно переводить, создаются поля с префиксом языка (пример: title, en_tilte, de_title). Ну и в модели, что-то типа такого
class Article
{
/** some code */
public function __get($var)
{
$lField = $this->getLocale() . '_' . $var);
if (isset($this->_row->__isset($lField)) {
return $this->_row->__get($lField);
}
return $this->_row->__get($var);
}
/** some code */
}
/* использование */
$article = new Article($articleId);
echo $article->title; //значение на текущем языке
echo $article->setLocale('en')->title; //на en

Очевидно, что такой подход имеет определенные недостатки.
Есть еще вариант завести отдельную таблицу, в которой хранить переводы:
Цитата
entiy_name  - имя сущности
entity_id - идентификатор
lang - язык
field - имя поля
value - значение поля

Но и у такого подхода есть минус - дополнительный запрос(или join) при загрузке локали отличной от локали по-умолчанию.

Ну и совсем круто, если кто-то поделится информацией, о том как решает этот вопрос с использованием doctrine orm. Есть модуль в составе DoctrineExtensions, он использует второй вариант.
SoMeOnE
Ну правльно делать отдельную таблицу. Как минимум: гибкость подкручивания этого в дальнейшем к чему то либо другому, трудности в добавлении еще одного языка минимализируются.
А так для простых корпаративных сайтов если движок писал, то тоже первый способ практиковал. Быстрый и не замарачиваешься)

Насчет минусов. Я когда с отдельной таблицей работал, не только один лишний join был. Бывало и до четырех доходило))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.