0

我正在開發一款Play應用程序,用於處理產品類別,產品... 我的應用程序必須處理幾種語言:fr,en,es,de。在Play 2.2應用程序中轉換內容

我對「界面」元素,如頁面標題等的翻譯沒有問題......這很容易通過conf/messages文件完成。

但是我沒有發現任何有關內容翻譯的資源。例如,一個類別的名稱在幾種語言中是不同的。

Expermimental解決方案:

,我想出了一個第一解決方案,但我很害怕當網站的增長會導致惡劣的表現。比方說,我有這些實體:

Lang : id, code, name 
Category : id, code 
I18nCategory : category_id, lang_id, name, description 
Product : id, code 
I18nProduct : product_id, lang_id, name, description, short_description 

正如你看到的,我必須有兩個實體,而不是一個有場翻譯的實體。如果我有產品1,我將在I18nProduct表中爲每個lang添加一行。

你認爲這是一個好的模式,或絕對不是一個好主意? 大項目如何管理這個(亞馬遜,eBay ...)?

感謝

回答

1

不知道亞馬遜,但解決方案,我從TYPO3 繼承使用單一機型一樣additionall領域:

Category: 
    Integer id 
    String  code 
    Lang  lang 
    Category i18n_parent 
    String  name 
    String  description 

在這種情況下獲取記錄在默認郎SQL會是:

SELECT * FROM category WHERE id = 123 AND i18_parent_id IS NULL 

不默認語言,你需要一次取2個記錄:

SELECT * FROM category WHERE id = 123 AND i18_parent_id IS NULL OR (lang_id = 2 AND i18_parent_id = 123) 

然後,如果即翻譯記錄,通過使用從原來的langage值加入兩行合併到一個對象是空

爲建設即。翻譯記錄列表,在第一個查詢中選擇默認語言(不帶i18n_parent)所有需要的記錄收集他們的uid並選擇所有記錄,其中lang_id=2i18n_parent_uid in (1,2,3,4)並執行每個集合的翻譯,如單個記錄

+0

感謝您的解決方案,它是一個好的。但困擾我的是,你必須在非零和獨特的領域做出讓步。例如,就我而言,產品代碼必須是唯一的,我必須更改約束條件以使(代碼,lang_id)具有唯一性......但每個對象只有一個類是更加可支配的,我會爲您更改。謝謝 ! – c4k