2008-08-26 10 views
3

Мне нужно хранить продукты для решения электронной коммерции в базе данных. Каждый продукт должен иметь описательную информацию, такую ​​как имя, описание и т. Д.Архитектура глобализации

Мне нужен какой-либо продукт, который будет локализован на 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"]; 

Кто-нибудь есть лучшее решение?

ответ

2

Вы должны сохранить текущий язык где-то (в singleton, например) и в свойстве Продукт.Названия используются язык, чтобы получить правильную строку. Таким образом, вам нужно только написать код для конкретного языка один раз для каждого поля, а не думать о языках везде, где используется поле.

Например, предполагается, что ваш одноплодной определен в классе 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; 
    } 
    } 
1

Серия веб-трансляций MVC в сети Con Conery имеет a video on this issue (он добирается до базы данных около 5:30). Он хранит список культур, а затем имеет таблицу Product для нелокализованных данных и таблицу ProductCultureDetail для локализованного текста.

+0

Хорошая идея оставить «Культуру» в названии таблицы, чтобы отличить содержимое таблицы от локализованных данных, а не от чего-то другого. – y0mbo 2009-05-21 16:21:17

1

файлы ресурсы

+0

Лучшее решение, худший ответ :) – Ropstah 2010-01-05 23:52:52

0

Это в основном подход, который мы взяли с Microsoft Commerce Server 2002. Да, индексированные представления помогут вашей производительности.