4

我需要将电子商务解决方案的产品存储在数据库中。每个产品都应该有描述性信息,例如名称、描述等。

我需要将任何产品本地化为 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"];

有没有人有更好的解决方案?

4

4 回答 4

2

您应该将当前语言存储在某处(例如,在单例中)并在 product.Name 属性中使用语言设置来获取正确的字符串。这样,您只需为每个字段编写一次特定于语言的代码,而不是考虑使用该字段的所有语言。

例如,假设您的单例在 Localizer 类中定义,该类存储与当前语言对应的枚举:

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;
    }
  }
于 2008-08-26T19:08:53.837 回答
1

Rob Conery 的 MVC Storefront 网络广播系列有一个关于这个问题的视频(他在 5:30 左右进入数据库)。他存储了一个文化列表,然后有一个用于非本地化数据的 Product 表和一个用于本地化文本的 ProductCultureDetail 表。

于 2008-08-26T16:58:31.793 回答
1

资源文件

于 2008-08-26T16:59:21.620 回答
0

这基本上是我们在 Microsoft Commerce Server 2002 中采用的方法。是的,索引视图将有助于提高性能。

于 2008-09-16T20:33:02.023 回答