1

我們正在研究一個旅遊門戶網站和一個旅遊門戶網站,其內容和細節都是heart.we計劃在多語言環境中使用它,這意味着我們需要處理動態數據每個地區。多語言應用的數據庫設計問題

目前,我們有以下表

Destination 
Transport 
Places of Interests 
user comments etc. 

每個表都包含很多領域一樣

Name 
ShortDescription 
LongDescription 

等諸多領域,其可以包含大量的數據,我們需要處理的現場數據具體的方式。

我不知道如何設計一個應用程序來處理這種情況,我想到的一件事就像在每個表中爲每個區域設置額外的列,但這意味着對於新的區域設置,需要從數據庫到代碼級別,這是不好的。

由於每個表中含有大量可以包含符合國際數據列的,所以我的問題是什麼可能是處理這種情況

EDIT1 的最好辦法做一些分析和一些goggling一個方法之後即來到我的心是如下..

我計劃建立一個翻譯表中的每個表 像目的地我有以下設計

table languages 
    -- uuid (varchar) 
    -- language_id(varchar) 
    -- name (varchar) 

    table Destination 
    --uuid (varchar) 
    other fields which are not part of internationalization. 

table Destination_translation 
-- id (int) 
-- destination_id (int) 
-- language_id (int) 
-- name (text) 
-- description(text) 

任何有價值的建議,爲上面提到的方法是最歡迎...

回答

1

當先前的國際化應用,我們有基於地區的值的表。所以,我們做了這樣的事情:

創建一個名爲local_strings的表,由一個string_code,locale_code,value組成。這包含各種值的翻譯。所以,如果你已經翻譯成三種語言,每個string_code將會有三個不同locale_codes的條目。

然後,在你的case destination,transport等每個主表中都有一個對string_code的引用在local_strings表中。

最後,在查詢數據庫外的值時,請確保始終加入local_strings表並始終使用用戶的當前語言環境。或者,您可以將這些值緩存在內存中,以便您不總是與此表聯接。然而,根據我的經驗,桌子從來沒有那麼大,所以加入它沒有太多的開銷。

0

有幾種選擇來解決這個問題:

  1. 由區域列擴展表和包括每個查詢的語言環境。您甚至可以修改索引以包含區域設置列。
  2. 爲lokalized串

,因爲它使表看起來仍然是真實的東西,他們仍然可以通過查看數據直接讀取,我肯定會贊成選項1創建一個單獨的表。它還可以防止你必須進行子選擇或連接,這有助於提高性能。 選項2的優點是隻有管理界面的程序員更容易(如果有的話)。