-
09-06-2019 - |
题
我需要在数据库中存储电子商务解决方案的产品。每个产品都应该有描述性信息,例如名称、描述等。
我需要将任何产品本地化为多种语言。
到目前为止我所做的就是制作任何应该本地化的列 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"];
有人有更好的解决方案吗?
解决方案
您应该将当前语言存储在某处(在 单例, ,例如)并在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;
}
}
其他提示
Rob Conery 的 MVC Storefront 网络广播系列 关于这个问题的视频 (他在 5:30 左右到达数据库)。他存储文化列表,然后有一个用于非本地化数据的 Product 表和一个用于本地化文本的 ProductCultureDetail 表。
资源文件
这基本上就是我们在 Microsoft Commerce Server 2002 中采用的方法。是的,索引视图将有助于您的表现。
不隶属于 StackOverflow