2008-08-26 56 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的方法。索引视图有助于您的表现。