我目前正在设计电子商务解决方案。其中一个主要要求是商店支持本地化项目详细信息。同一商店必须能够通过用户的语言选择和/或浏览器偏好支持多种语言。
我有两张桌子:
项目(id,sku,价格,......)
ItemDetails(item_id,language,title,...)
对于每个项目,将有多个与该项目对应的行,其中(item_id,language)对将是唯一的。
我想将其建模为:
class Item
{
public string sku;
public double price;
public ItemDetails Details;
}
根据用户的会话,我希望返回的项目使Details对象与用户选择的语言(来自他们的会话)相对应。
有什么方法可以代表这个?
答案 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个属性,我不必按这些属性排序。我加载了对象列表,每个对象都已经保存了字典中保存的所有语言的翻译。不错的想法是我的缓存每个键只有一个条目。
如果您需要按翻译的属性进行搜索,过滤和排序,那么认为会变得更加困难。 我会尝试在数据库中使用逻辑。