我在從我的數據庫中獲取數據時遇到問題,我創建的數據完全是多語言的,我希望這裏有人能幫助我。如何在多語言數據庫模型中使用Yii?
我把所有的表格分成兩部分, 「通用」表(不包含任何需要翻譯的文本)以及包含需要翻譯的所有字段的表。
示例表:
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'
我的問題是如何當我搜索base_material對象時,我可以自動將這些翻譯(在此查詢中使用後退語言)附加到Yii中的模型中? (這只是一個示例表,但幾乎所有我的表(20+)都是以這種方式構建的,所以如果可能的話,我會需要靈活的東西)
使用我需要的現有系統的示例是Propel :http://propel.posterous.com/propel-gets-i18n-behavior-and-why-it-matters
任何想法如何去做呢?我已經檢查了關於多語言站點的現有Yii擴展(如Multilingual Active Record),但它們都使用不同的數據庫設計(主表中的一般信息+回退語言,國際化表中的翻譯),我不確定如何更改這些擴展以使用我的數據庫模型。
如果有人知道改變現有擴展的方法,以便它可以使用我的數據庫方案,那麼這將是絕對的輝煌,也許是最好的方式來做到這一點。
編輯:我添加了一個賞金,因爲我仍然無法找到關於如何讓Propel與Yii協同工作的任何內容(它確實存在對Doctrine的擴展,但Doctrine不支持這種帶有翻譯的DB模型也沒有關於如何使用現有的Yii擴展或範圍來處理這個問題的更多信息。
編輯:98次瀏覽,但只有3上傳和1評論。我不禁感到自己在這裏做錯了什麼,無論是在我的問題還是應用程序/數據庫設計中;無論是我的問題還是我的問題都非常獨特(這會讓我感到驚訝,因爲我不認爲我的多語言數據庫設計是荒謬的;-)。因此,如果有人知道Yii和/或Propel的多語言站點更好的全面解決方案(除了由於文本字段的重複,我真的不喜歡的當前擴展)或類似的東西,請告訴我以及。
在此先感謝!
如果有任何更多的問題關於爲什麼或什麼,或者如果有什麼不完全清楚,只要問:-) – Xuntar
對不起,你有這樣一個很難找到答案。如果可以,我會盡力幫忙。所以基本上你只想要一個查詢選擇翻譯和英語的任何值,其中該項目的翻譯語言不存在的權利?我想確定我首先理解你的問題;) – Chiramisu
Hi Chiramusi,感謝您的幫助。我在我的問題中發佈的查詢在我的數據庫中運行時發揮作用,但我想知道如何更「自動地」執行此操作。我已經鏈接到的擴展以自動方式將模型翻譯添加到模型中,我想爲我的數據庫(擴展使用不同的數據庫模式)提供類似的東西,或者想知道如何更改該擴展以使用我的表格和設計。否則,如果你知道用Yii來使用Propel的方法,那麼它也會很棒(因爲Propel有這種內置的數據庫轉換)。 – Xuntar