上一篇 我們介紹了靜態多語言的設計,這篇我們介紹動態多語言的設計。
1. 多語言存儲
假設下面一個場景:
系統有一個產品目錄需要維護,目錄名稱和描述需要支持多語言存儲。表結構設計如下:
PRODUCT_CATEGORY |
|
|
|
|
PK |
欄位 |
類型 |
允許NULL |
描述 |
PK |
ID |
VARCHAR(36) |
N |
類別Id |
|
LANG_ID |
VARCHAR(36) |
N |
多語言ID |
|
CREATED_ON |
DATETIME |
N |
創建時間 |
|
CREATED_BY |
NVARCHAR(50) |
N |
創建人 |
|
CHANGED_ON |
DATETIME |
Y |
變更時間 |
|
CHANGED_BY |
NVARCHAR(50) |
Y |
變更人 |
針對每個需要支持動態多語言的表,除了創建一張主表,還需創建一個與之匹配的附表,命名規範爲 {主表名}_M, M表示Multilingual的意思。
PRODUCT_CATEGORY_M |
|
|
|
|
PK |
欄位 |
類型 |
允許NULL |
描述 |
PK |
ID |
VARCAHR(36) |
N |
關聯主表的LANG_ID欄位 |
PK |
CULTURE_CODE |
VARCHAR(10) |
N |
區域代碼 |
|
NAME |
NVARCHAR(50) |
N |
類別名稱 |
|
DESCRIPTION |
VARCHAR2(500) |
Y |
類別描述 |
2. 多語言維護
用戶在維護需要支持多語言數據的欄位的時候,需要根據系統支持的多語言種類,一次錄入多筆資料。
爲了保證UI的一致性,可以開發js版本的多語言控件。如下圖:
3. 多語言訪問
由於設計的時候,嚴格遵循了一致的Schema設計和命名規範,我們可以通過代碼生成工具自動生成關聯查詢語句,使得M表對於開發者透明。
4. 其它
在網上有金蝶K3 Cloud中的設計:
http://open.kingdee.com/K3Cloud/PDM/BD.htm
還可以參考下面的資源:
http://www.codeproject.com/Articles/8084/Creating-multilingual-websites-Part-2