Вопрос

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

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

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

Это было полезно?

Решение

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

Например, предполагая, что ваш синглтон определен в классе локализатора, который хранит перечисление, соответствующее текущему языку:

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;
    }
  }

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top