如何为本地化项目建模

时间:2010-04-14 19:01:26

标签: asp.net-mvc entity-framework .net-3.5 linq-to-entities .net-4.0

我目前正在设计电子商务解决方案。其中一个主要要求是商店支持本地化项目详细信息。同一商店必须能够通过用户的语言选择和/或浏览器偏好支持多种语言。

我有两张桌子:
    项目(id,sku,价格,......)
    ItemDetails(item_id,language,title,...)

对于每个项目,将有多个与该项目对应的行,其中(item_id,language)对将是唯一的。

我想将其建模为:
class Item
{
public string sku;
public double price;
public ItemDetails Details;
}

根据用户的会话,我希望返回的项目使Details对象与用户选择的语言(来自他们的会话)相对应。

有什么方法可以代表这个?

2 个答案:

答案 0 :(得分:1)

我正在开展类似的全球化,数据库中存储了大量动态内容。我采用的允许多语言动态数据的方法是这样的:

create table Item
(
   ItemID
   ,Sku
   ,Price
   ,Title -- invariant, fallback culture
)


create table Item_Culture
(
   ItemID
   ,CultureCode -- ex: en-US, en-CA, fr-CA, en-UK, fr-FR, en, fr
   ,Title
)

select i.ItemID, i.Sku, i.Price, coalesce(ic.Title, i.Title) as Title
from Item i
left outer join Item_Culture ic
   on ic.ItemID = i.ItemID
   and ic.CultureCode = @CultureCode

其中@CultureCode是从您的应用程序传入的参数,Culture表包含您不同语言/文化的列表以供参考或指定后备语言依赖项。

如果需要,您可以针对多种后备语言展开它。与单一语言实现相比,它在数据库上有点受欢迎,但它将适应数据的动态特性,而这只是多语言动态站点的成本。如果您的数据变化不太快,无法帮助减少增加的数据库负载,缓存将成为您的朋友。

答案 1 :(得分:0)

考虑如何检索对象列表

  • 是否已缓存
  • 是他们过滤/排序/分页
  • 他们是否被搜查
  • 是否被其他应用程序(报告,合作伙伴)访问

答案决定了应用程序中有多少翻译逻辑以及数据库中可以有多少。

我现在使用的应用程序包含仅在应用程序中访问的对象列表。只翻译了2个属性,我不必按这些属性排序。我加载了对象列表,每个对象都已经保存了字典中保存的所有语言的翻译。不错的想法是我的缓存每个键只有一个条目。

如果您需要按翻译的属性进行搜索,过滤和排序,那么认为会变得更加困难。 我会尝试在数据库中使用逻辑。