2013-11-08 5 views
1

Мы заняты проектом CakePHP, который должен поддерживать несколько языков. Но есть одна проблема ... Есть страницы, которые NOT поддерживается для других языков. Таким образом, есть испанские страницы, которые нужно скрывать для итальянской версии веб-сайта. Какое лучшее решение для этого в CakePHP?CakePHP multi languages ​​= несколько баз данных?

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

Так кто-нибудь знает лучшее решение?

+2

Я бы поместил все в одну базу данных, если можно; наличие отдельных баз данных для разных стран просто даст вам больше работы. Итак, да - добавьте языковой столбец в таблицы, которые можно перевести. – halfer

+1

Вы также можете использовать поведение перевода. Это особенно хорошо, если у вас много языков. http://book.cakephp.org/2.0/en/core-libraries/behaviors/translate.html Вы могли бы сделать что-то, что лишает доступ, если перевод не существует для просматриваемого языка. – Kai

+0

Определенно избегайте наличия нескольких баз данных ... Копирование и синхронизация пользователей только потому, что они меняют свой язык, создает для вас кошмар. Вместо этого укажите, что вы можете. – swiecki

ответ

1

Определенно НЕ нескольких баз данных ИМО. Вместо этого попробуйте просто сохранить свою запись отдельно от ее содержимого.

Пример:

articles таблица содержит не зависящие от языка данных, таких как идентификатор статьи, дата создания, дата изменения ... и т.д.

article_contents содержит специфический для языка данных, таких как заголовок, подзаголовок, содержание, авторы ... и т. д., а также поле article_id и поле language.

Затем, если вы находитесь на итальянском сайте, вы можете использовать INNER JOIN для содержимого, которое соответствует желаемому языку.

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

+0

Полный, полезный ответ. Спасибо. –

Смежные вопросы