【问题标题】:How to model localized items如何为本地化项目建模
【发布时间】:2011-02-08 01:46:06
【问题描述】:

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

我有两张桌子:
商品(id、sku、价格...)
ItemDetails (item_id, language, title, ...)

对于每个Item,都会有多行对应该item,其中(item_id,language)对是唯一的。

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

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

有哪些方法可以表示这一点?

【问题讨论】:

    标签: asp.net-mvc entity-framework .net-3.5 linq-to-entities .net-4.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 表包含您的不同语言/文化的列表以供参考或指定备用语言依赖项。

    如果需要,您可以将其扩展为多种后备语言。与单一语言实现相比,这对数据库有点影响,但会适应数据的动态特性,而这只是多语言动态站点的成本。如果您的数据变化不会太快以帮助减少增加的数据库负载,那么缓存将成为您的朋友。

    【讨论】:

      【解决方案2】:

      想想你如何检索对象列表

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

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

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

      如果您需要按翻译的属性进行搜索、过滤和排序,您的思考会变得更加困难。 我会尝试在数据库中保存逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        • 2010-12-05
        • 2014-08-07
        • 2020-07-11
        • 2011-01-13
        相关资源
        最近更新 更多