Нужно генерировать записи справочника, и к ним локализируемые данные.
Сейчас делаю с помощью классов Insert в основную таблицу и отдельно таблицу локализации.
Но нужно через Entity, чтобы работала событийная модель.
Система вставляет одинаковые строки в основную таблицу, и одну запись в таблицу локализации (для культуры текущего пользователя).
Можно ли как-то явно задавать языки?
Например
- Англ.язый - значение А,
- Рус.язык - значение Б,
- Укр.язык - значение В
Нравится
Зверев Александр,
Да спасибо. Это оно. Но я уже позже нашел еще более удобный способ.
Можно сразу при создании entity в метод
SetColumnValue передавать значением LocalizableString.
LocalizableString value = new LocalizableString();
var uk = CultureInfo.CreateSpecificCulture("uk-UA");
var ru = CultureInfo.CreateSpecificCulture("ru-RU");
var en = CultureInfo.CreateSpecificCulture("en-US");
value.SetCultureValue(uk, "Період тест");
value.SetCultureValue(ru, "Период тест");
value.SetCultureValue(en, "Period test");
var entity = _userConnection.EntitySchemaManager.GetInstanceByName("Period").CreateEntity(_userConnection);
entity.SetDefColumnValues();
entity.SetColumnValue("StartDate", new DateTime(2020, 11, 08));
entity.SetColumnValue("DueDate", new DateTime(2020, 11, 10));
entity.SetColumnValue("PeriodTypeId", new Guid("83140788-D3F8-4DCC-9497-1D6ECE36F2DB"));
entity.SetColumnValue("Name", value);
entity.Save();
Добрый день.
Можно. Справочник культур (языков) называется SysCulture.
Алла Савельева,
Либо я не понял ответ. Либо вы не поняли вопрос.
Например:
Нужно создать запись в справочник Месяцы.
3 значения установить в БД к одной записи November, Ноябрь, Листопад.
Перефразирую:
Можно ли как-то явно задавать строки в разных локализациях при сохранении Entity?
Владислав, для изменения значений текстового поля в разных локализациях в CommonUtilities есть функция:
public static void SaveLocalizableValue(Entity entity, LocalizableString localizableValue, string columnName) {
if (UseMultilanguageData) {
return;
}
var userConnection = entity.UserConnection;
var entitySchemaManager = userConnection.EntitySchemaManager;
var query = new EntitySchemaQuery(entitySchemaManager, "SysCulture");
var idColumnName = query.AddColumn("Id").Name;
var nameColumnName = query.AddColumn("Name").Name;
var sysCultures = query.GetEntityCollection(userConnection);
string lczSchemaName = entity.Schema.GetLocalizableStringsSchemaName();
var lczSchema = entitySchemaManager.GetInstanceByName(lczSchemaName);
foreach (var sysCulture in sysCultures) {
string cultureName = sysCulture.GetTypedColumnValue<string>(nameColumnName);
var culture = CultureInfo.GetCultureInfo(cultureName);
string lczValue = string.Empty;
if (!localizableValue.HasCultureValue(culture)) {
lczValue = localizableValue.GetCultureValue(GeneralResourceStorage.CurrentCulture);
} else {
lczValue = localizableValue.GetCultureValue(culture);
}
Guid cultureId = sysCulture.GetTypedColumnValue<Guid>(idColumnName);
Guid columnUId = entity.Schema.Columns.FindByName(columnName).UId;
Entity newLczValueEntity = lczSchema.CreateEntity(userConnection);
newLczValueEntity.SetDefColumnValues();
newLczValueEntity.FetchFromDB(new Dictionary<string, object> {
{"SysCulture", cultureId},
{"Record", entity.PrimaryColumnValue},
{"ColumnUId", columnUId},
});
newLczValueEntity.SetColumnValue("SysCultureId", cultureId);
newLczValueEntity.SetColumnValue("ColumnUId", columnUId);
newLczValueEntity.SetColumnValue("Value", lczValue);
newLczValueEntity.SetColumnValue("RecordId", entity.PrimaryColumnValue);
newLczValueEntity.Save();
}
}В неё передаются Entity, название поля и объект типа LocalizableString, где хранятся строки на всех нужных языках. Они задаются его методом:
public override void SetCultureValue(CultureInfo culture, string value)Тут CultureInfo — стандартный класс от Microsoft.
Зверев Александр,
Да спасибо. Это оно. Но я уже позже нашел еще более удобный способ.
Можно сразу при создании entity в метод
SetColumnValue передавать значением LocalizableString.
LocalizableString value = new LocalizableString();
var uk = CultureInfo.CreateSpecificCulture("uk-UA");
var ru = CultureInfo.CreateSpecificCulture("ru-RU");
var en = CultureInfo.CreateSpecificCulture("en-US");
value.SetCultureValue(uk, "Період тест");
value.SetCultureValue(ru, "Период тест");
value.SetCultureValue(en, "Period test");
var entity = _userConnection.EntitySchemaManager.GetInstanceByName("Period").CreateEntity(_userConnection);
entity.SetDefColumnValues();
entity.SetColumnValue("StartDate", new DateTime(2020, 11, 08));
entity.SetColumnValue("DueDate", new DateTime(2020, 11, 10));
entity.SetColumnValue("PeriodTypeId", new Guid("83140788-D3F8-4DCC-9497-1D6ECE36F2DB"));
entity.SetColumnValue("Name", value);
entity.Save();