Архитектура глобализации
-
09-06-2019 - |
Вопрос
Мне нужно хранить продукты для решения электронной коммерции в базе данных.Каждый продукт должен содержать описательную информацию, такую как название, описание и т.д.
Мне нужно, чтобы любой продукт был локализован на 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.Да, индексированные просмотры повысят вашу производительность.