Архитектура глобализации - PullRequest
4 голосов
/ 26 августа 2008

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

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

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

Ответы [ 4 ]

2 голосов
/ 26 августа 2008

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

Например, если ваш синглтон определен в классе 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 голос
/ 26 августа 2008

файлов ресурсов

1 голос
/ 26 августа 2008

В серии веб-трансляций Роба Конери на MVC Storefront есть видео по этому вопросу (он попадает в базу данных около 5:30) Он хранит список культур, а затем имеет таблицу Product для нелокализованных данных и таблицу ProductCultureDetail для локализованного текста.

0 голосов
/ 17 сентября 2008

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

...