2008-08-26 61 views
3

我需要將電子商務解決方案的產品存儲在數據庫中。每個產品應具有描述性信息,如名稱,說明等。全球化架構

我需要將任何產品本地化爲x個語言。

什麼我迄今所做的,就是讓應該本地化和nvarchar(MAX)任何列,然後我存儲的XML字符串是這樣的:

<cultures> 
    <culture code="en-us">Super fast laptop</culture> 
    <culture code="da-dk">Super hurtig bærbar</culture> 
</cultures> 

當我從數據庫中加載它,進入我的業務邏輯對象,我解析XML字符串到Dictionary<string, string>,其中關鍵是文化/語言代碼。

所以,當我想顯示一個產品的名稱,我這樣做:

lblName.Text = product.Name["en-us"]; 

有沒有人有一個更好的解決方案?

回答

2

,可以儲存當前語言的地方(在singleton,例如),並在product.Name財產使用的語言設置,以獲得正確的字符串。這樣,您只需爲每個字段編寫一次特定於語言的代碼,而不用考慮使用該字段的任何語言。

例如,假設你單身在存儲對應於當前語言枚舉的本地化類定義:

public class Product 
{ 
    private idType id; 
    public string Name 
    { 
    get 
    { 
     return Localizer.Instance.GetLocalString(id, "Name"); 
    } 
    } 
} 

凡GetLocalString看起來像:

public string GetLocalString(idType objectId, string fieldName) 
    { 
    switch (_currentLanguage) 
    { 
     case Language.English: 
     // db access code to retrieve your string, may need to include the table 
     // the object is in (e.g. "Products" "Orders" etc.) 
     db.GetValue(objectId, fieldName, "en-us"); 
     break; 
    } 
    } 
1

Rob Conery的MVC店面網絡直播系列有a video on this issue(他在5:30左右到達數據庫)。他存儲文化列表,然後有非本地化數據的產品表和本地化文本的ProductCultureDetail表。

+0

好主意在表名中留下「文化」,以便將表格內容區分爲本地化數據而不是其他內容。 – y0mbo 2009-05-21 16:21:17

1

資源文件

+0

最佳解決方案,最差回答:) – Ropstah 2010-01-05 23:52:52

0

這基本上是我們採用了Microsoft Commerce Server 2002的方法。索引視圖有助於您的表現。