全球化架构
问题描述:
我需要将电子商务解决方案的产品存储在数据库中。每个产品应具有描述性信息,如名称,说明等。全球化架构
我需要将任何产品本地化为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"];
有没有人有一个更好的解决方案?
答
,可以储存当前语言的地方(在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;
}
}
答
Rob Conery的MVC店面网络直播系列有a video on this issue(他在5:30左右到达数据库)。他存储文化列表,然后有非本地化数据的产品表和本地化文本的ProductCultureDetail表。
答
这基本上是我们采用了Microsoft Commerce Server 2002的方法。索引视图有助于您的表现。
好主意在表名中留下“文化”,以便将表格内容区分为本地化数据而不是其他内容。 – y0mbo 2009-05-21 16:21:17