Есть карточка контрагента и наименование контрагента.
С карточкой работают сотрудники разных стран.
Кому-то нужно название на русском, кому-то на англ.

Как с точки зрения работы с мультиязычностью сделать так, чтобы при поиске по полю наименование в России искало по русскому названию, а в иноязычных странах – по английскому? (скрин во вложении) Изображение удалено.
Или как сюда для англоязычных пользователей автоматически подставить поле название Eng
Изображение удалено.
Что тоже могло бы помочь в решении проблемы

В рамках базового функционала, нет возможности вывести отображаемое значения объекта в зависимости от локализации. Возможно ли настроить поиск таким образом и каким способом?

Нравится

1 комментарий

Добрый день, 

К сожалению, не отображаются скриншоты в сообщении. 

 

Если рассматривать проблему в рамках необходимости отображать одно поле для поиска в разделе, по умолчанию, для пользователя с одной локализацией и другое поле для поиска для пользователя с другой локализацией, то необходимо разработать новую логику поиска в разделе. 

 

Показать все комментарии

Добрый день! Поставили sales 7.17.3 1377 релиз. Проблема с кнопками видна на скрине,  в системе язык русский и у пользователя то же

Нравится

2 комментария

Проверьте доступы на папку Terrasoft.WebApp\ClientApp\assets\i18n

Полозюков Евгений Петрович,Да права полные разданы в т.ч. и пользователю iis

Показать все комментарии

Мне необходимо переименовать AccountProfile поле "добавить" на "создать", как это можно сделать?

 

Нравится

4 комментария
Лучший ответ

Кроме значения локализируемой строки, обратите внимание на функцию initAddRecordButtonCaption в BaseProfileSchema:

/**
 * Initializes add record button caption.
 * @protected
 */
initAddRecordButtonCaption: function() {
	var caption = this.get("Resources.Strings.AddRecordButtonCaption");
	var editPages = this.getEditPages();
	if (editPages && editPages.getCount() === 1) {
		var editPage = editPages.getByIndex(0);
		caption = editPage.get("Caption");
	}
	this.set("AddRecordButtonCaption", caption);
},

То есть значение не всегда берётся из строки.

Чтобы отключить эту логику получить нужное Вам поведение, можно в Custom создать переопределённую AccountProfileSchema с кодом:

/**
 * Account profile class.
 * @class Terrasoft.AccountProfileSchema
 */
define("AccountProfileSchema", ["CommunicationOptionsMixin"],
		function() {
			return {
				entitySchemaName: "Account",
			methods: {              
              				/**
				 * Initializes add record button caption.
				 * @protected
				 */
				initAddRecordButtonCaption: function() {
					var caption = this.get("Resources.Strings.AddRecordButtonCaption");
					this.set("AddRecordButtonCaption", caption);
				}
            }
			};
		}
);

И в этой же схеме поменять слева значение строки AddRecordButtonCaption на «Создать контрагента».

Это тянется из ActionKindCaption таблицы SysModuleEdit (SysModuleEditLcz). Не придумал способа изящней, как сделать прямое обновление в БД. 

Update SysModuleEditLcz set ActionKindCaption=N'Создать контрагента' where id = '77FAE75C-861E-4D76-8A47-A9CE8F843D4C' -- id записи на русском языке для раздела контрагент

Поменяется и здесь и в разделе контрагенты

Алексей Следь,

А можете подсказать, где можно посмотреть id записи? У меня получается найти нужный фрагмент в базе локализации, хотя вроде как все правильно вбил в поиск базы. При попытке найти необходимое предложение ничего не выходит.

Необходимо изменить значение локализуемой строки AddRecordButtonCaption в AccountProfileSchema. Это правильный вариант, но он может не сработать из-за бага в системе и тогда нужно обновлять через таблицу SysModuleEdit как указано выше.

Кроме значения локализируемой строки, обратите внимание на функцию initAddRecordButtonCaption в BaseProfileSchema:

/**
 * Initializes add record button caption.
 * @protected
 */
initAddRecordButtonCaption: function() {
	var caption = this.get("Resources.Strings.AddRecordButtonCaption");
	var editPages = this.getEditPages();
	if (editPages && editPages.getCount() === 1) {
		var editPage = editPages.getByIndex(0);
		caption = editPage.get("Caption");
	}
	this.set("AddRecordButtonCaption", caption);
},

То есть значение не всегда берётся из строки.

Чтобы отключить эту логику получить нужное Вам поведение, можно в Custom создать переопределённую AccountProfileSchema с кодом:

/**
 * Account profile class.
 * @class Terrasoft.AccountProfileSchema
 */
define("AccountProfileSchema", ["CommunicationOptionsMixin"],
		function() {
			return {
				entitySchemaName: "Account",
			methods: {              
              				/**
				 * Initializes add record button caption.
				 * @protected
				 */
				initAddRecordButtonCaption: function() {
					var caption = this.get("Resources.Strings.AddRecordButtonCaption");
					this.set("AddRecordButtonCaption", caption);
				}
            }
			};
		}
);

И в этой же схеме поменять слева значение строки AddRecordButtonCaption на «Создать контрагента».

Показать все комментарии

Всем доброго дня!

 

Сталкивался ли кто с виджетами, настраиваемыми внутри карточки, и их отображением на русской и англоязычной локализации одновременно?

 

Появилась острая необходимость отображать сотрудникам, в зависимости от их языка интерфейса, дашборды в карточке мероприятия. На русской локализации предварительно всё было настроено (7 виджетов): https://prnt.sc/xz5ssd
При переходе на английскую - есть только 3 показателя: https://prnt.sc/xz5ojk.

Как-то давно получала такой ответ по вопросу настройки локализаций: "разным пользователям будут отображаться разные данные в зависимости от локализации", т.е. и настраивать надо каждому своё.
Согласно этому, была сделана настройка - добавлены на англ. версию недостающие виджеты. После сохранения ситуация стала обратная: на анг. все 7 виджетов, на русской версии - только 3.

 

Так вот, помимо того, что система нам предоставляет возможность давать новые заголовки полям по нужной нам локализации, можем ли мы как-то выкрутить дашборды в карточке для их корректного отображения на разных интерфейсах?

Нравится

4 комментария

Дарья, как Вы добавляли виджеты в карточку, в мастере разделов?

Чем отличаются одни от других, отображённые от скрытых? Какие-то ошибки есть в консоли при открытии карточки?

Почему на двух скриншотах все показатели разные и нет трёх таких же?

Зверев Александр,

Добрый вечер, Александр! Да, это и мои первые вопросы)

 

Дашборды на двух локализациях по факту совершенно ничем не должны отличаться. 

С чего всё началось:

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

- далее были добавлены новые дашборды и изменены три верних (уже в другом пакете разработки);

- перелогиниваемся на инглиш версию, и в карточке виден и доступен для редактирования только верхний ряд из трёх (вновь старых) виджетов. Оставшиеся четыре никак не изменить. Их названия даже не те, которые давались при создании, а наподобие "Indicator[Id виджета]", и они не отображаются в карточке объекта.

 

Объяснить, надеюсь, удалось.

Спасибо, что подметили про консоль. Ошибку так не ловила. Завтра дополню по результатам проверки.

Дарья Сошина пишет:
Объяснить, надеюсь, удалось.

Честно, не совсем. А если после настройки Redis очистить, не станет правильно? 

Показать все комментарии

Нужно генерировать записи справочника, и к ним локализируемые данные.
Сейчас делаю с помощью классов Insert в основную таблицу и отдельно таблицу локализации.
Но нужно через Entity, чтобы работала событийная модель.

Система вставляет одинаковые строки в основную таблицу, и одну запись в таблицу локализации (для культуры текущего пользователя).

 

Можно ли как-то явно задавать языки?
Например
- Англ.язый - значение А,
- Рус.язык - значение Б,
- Укр.язык - значение В

Нравится

5 комментариев
Лучший ответ

Зверев Александр,

Да спасибо. Это оно. Но я уже позже нашел еще более удобный способ. 
Можно сразу при создании 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();

 

 

Показать все комментарии

Добрый день!

 

Подскажите, как лучше реализовать работу ответственных за продукты, чтобы они могли наполнить мультиязычные данные в карточке продукта, не переключаясь между языками интерфейса?

Может, кто-то выполнял похожую настройку (если для этого нужна разработка)?

 

Аналогичный вопрос про ответственного за наполнение мультиязычных справочников - как ему облегчить работу по управлению данными на разных языках?

 

Нравится

3 комментария
Лучший ответ

Владимир Соколов,

 

Можно выгрузить в Excel значения, которые нужно перевести, а потом после обработки загрузить их обратно.

 

Ещё можно попробовать правами доступа предоставить права только на нужные записи.

Здравствуйте.

 

Вносить локализированные данные, не переключаясь между языками, можно через раздел [Переводы].

 

Посмотрите статьи на академии по описанию работы с этим разделом по ссылке.

Алла Савельева пишет:
Вносить локализированные данные, не переключаясь между языками, можно через раздел [Переводы].

Пускать ответственных за Продукты в [Переводы] совсем не хочется. Потому и спрашиваю, не реализовывал ли кто-то это в пользовательском интерфейсе 

Владимир Соколов,

 

Можно выгрузить в Excel значения, которые нужно перевести, а потом после обработки загрузить их обратно.

 

Ещё можно попробовать правами доступа предоставить права только на нужные записи.

Показать все комментарии

Коллеги, прошу подсказать, есть ли базовый инструментарий для получения локализованных данных объектов на C#?
Речь о таблицах типа SysCountryLcz, объектов которых нет в конфигурации.
Или единственный вариант писать свою хранимку?

Нравится

2 комментария
Лучший ответ

Добрый день! Как читать мультиязычные данные описано в данной статье https://academy.terrasoft.ru/documents/technic-sdk/7-14/chtenie-multiyazychnyh-dannyh-s-pomoshchyu-entityschemaquery

Добрый день! Как читать мультиязычные данные описано в данной статье https://academy.terrasoft.ru/documents/technic-sdk/7-14/chtenie-multiyazychnyh-dannyh-s-pomoshchyu-entityschemaquery

Алексей, спасибо!
То, что и искал

Показать все комментарии

Коллеги, добрый день. 

Подскажите, пожалуйста, как в системе реализовано 2 задачи:

 

1) Шаблоны ответов представлены на английском(почему только на нём?), как сменить язык пакетно? Почему при добавлении русской локализации шаблон не переводится или не предоставляется аналог ? 

2) Если первая функция не реализована, почему нельзя выбрать весь пул ответов и сменить локализацию(пусть и пустую)? 

Нравится

1 комментарий

Стандартные шаблоны предоставлены на обоих языках. Нужно открыть шаблон на редактирование и сверху будет переключение в виде двух вкладок:

chapter_content_designer.png

Показать все комментарии