Нужно генерировать записи справочника, и к ним локализируемые данные.
Сейчас делаю с помощью классов 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();