2011-05-22 25 views
4

我正在爲需要3種語言(英語和其他2種語言)本地化的網絡應用程序客戶端工作。我瞭解如何使用ASP.NET應用程序中的資源來顯示靜態數據的本地化版本。但是,我不確定如何處理本地化用戶輸入數據的問題。例如,管理員可能想要在應用程序中添加一些新的元數據(例如新產品類別)。這最終需要翻譯成所有3種語言,但最初將以管理員知道的任何語言輸入。由於這種數據不是靜態的,我們將其存儲在數據庫中。我們是否應該爲主鍵添加文化代碼以區分同一數據的不同本地化版本?有沒有一種「最佳實踐」或模式,我不知道這種問題?如何在數據庫中存儲用戶輸入數據的本地化版本?

回答

2

使用MainItemID和LanguageCode(EN,DE,FR等)的組合PK讓子表成爲您的實體。此子表存儲您的語言特定文本。

如果你總是有英語,或者它是一個後備,那麼你可以有DE,FR等子表和英語主表。 LEFT JOIN和ISNULL會照顧到這一點。

無論哪種方式是確定的,這取決於您確切的需求,我懷疑是第一個。當然,你需要確保你至少有一個子行的數據輸入,例如,一個新的產品類別

+0

感謝您的建議! – 2011-05-23 06:41:45

0

我的解決方案是創建一個字符串列,它保存所有支持語言的編碼數據。需要特殊的應用程序邏輯來插入和提取數據。 支持多語言數據的專業文本編輯器也有很多幫助。

+0

這隻假設一個代碼客戶端,不能在數據庫級搜索,不是? – gbn 2011-05-22 17:34:09

+0

實際上我使用了一個名爲DefaultTitle的列來進行搜索和適當的顯示。 – Marko 2011-05-22 17:38:22

1

我建議你製作一張表來跟蹤Language,然後在另一個表中使用languageID作爲外鍵而不是語言代碼。

Language(LanguageID, Name) 

然後在其他表中使用該LanguageID作爲外鍵。

例如您正在本地存儲本地化文字

LocalizedTextTable(ID,text,LanguageID) 
+0

如果語言代碼已經是唯一的,是否有理由將這個額外連接添加到'Language'表中? – dnc253 2012-07-30 15:22:56