У меня проблема с получением данных из моей базы данных, которую я создал, чтобы быть полностью многоязычной, и я надеюсь, что кто-то здесь может мне помочь.
Я разделил все свои таблицы на 2 части; «универсальная» таблица (не содержит текста, который нужно переводить) и таблица, содержащая все поля, которые необходимо перевести, с их переводами.
Примеры таблиц:
base_material
id
picture
base_material_i18n
base_material_id
localization_id
name
description
review_status
review_notes
localization
id
language_name
Запрос на получение переводов (с использованием английского (en) в качестве альтернативного языка, если перевод недоступен):
SELECT o.id
, o.type
, o.code
, o.position
, ifnull(t.name,d.name) name
, ifnull(t.description,d.description) description
FROM base_material o
INNER JOIN base_material_i18n d
ON ( o.id=d.base_material_id)
LEFT OUTER JOIN base_material_i18n t
ON ( d.base_material_id=t.base_material_id AND t.localization_id='nl' )
WHERE d.localization_id='en'
Мой вопрос заключается в том, как я могу автоматически получить эти переводы (с помощью резервный язык, как в этом запросе), прикрепленный к моей модели в Yii, когда я ищу объекты base_material? (Это только 1 примерная таблица, но почти все мои таблицы (20+) построены таким образом, поэтому, если возможно, мне понадобится что-то гибкое)
Пример существующей системы, использующей то, что мне нужно, - это Propel: http: //propel.posterous.com / propel-gets-i18n-behavior-and-why-it-sizes
Есть идеи, как это сделать? Я проверил существующие расширения Yii, касающиеся многоязычных сайтов (например, Multilingual Active Record ), но все они используют другой дизайн базы данных (общая информация + резервный язык в основной таблице, переводы в таблице i18n ), и я не уверен, как изменить эти расширения, чтобы использовать мою модель БД.
Если кто-то знает способ изменить это существующее расширение, чтобы оно могло использовать мою схему БД, то это было бы абсолютно блестящим и, вероятно, лучшим способом сделать это.
Edit: Я добавил награду, потому что я до сих пор не могу найти ничего о том, как позволить Propel работать с Yii (существует расширение для Doctrine, но Doctrine также не поддерживает такую модель БД с переводами) ), ни какой-либо дополнительной информации о том, как справиться с этим, используя существующее расширение Yii или области.
Редактировать : просмотрено 98 раз, но только 3 голоса и 1 комментарий. Я не могу избавиться от ощущения, что я здесь что-то делаю не так, будь то мой вопрос или дизайн приложения / базы данных; либо это, либо моя проблема просто очень уникальна (что меня удивило бы, поскольку я не думаю, что мой многоязычный дизайн базы данных такой абсурдный ;-). Итак, если кто-то знает лучшее универсальное решение для многоязычных сайтов с Yii и / или Propel (кроме текущих расширений, которые мне действительно не нравятся из-за дублирования текстовых полей) или чего-то подобного, дайте мне знать также.
Заранее спасибо!