Языки в кастомках
В папке \Template\Projects\1. Template\Forms\Language можно найти файлы строковых ресурсов:
ru.wxlf - для работы форм со строковыми ресурсами на русском языке;
object-ru.wxlf - для работы кастомок со строковыми ресурсами на русском языке;
en.wxlf - для работы форм со строковыми ресурсами на английском языке;
object-en.wxlf - для работы кастомок со строковыми ресурсами на английском языке.
Файлы object-ru.wxlf и object-en.wxlf используются для задания строковых ресурсов для кастомных элементов (команд, объектов и т.д.).
По договоренности внутри компании: файлы ru.wxlf и en.wxlf используем для задания строковых ресурсов для форм, а файлы object-ru.wxlf и object-en.wxlf - для кастомных элементов (команд, объектов и т.д.), которые рассмотрим в одном из следующих уроков. На самом деле платформа считывает из папки Forms\Language все файлы одной локали и записывает их в один словарь. И файлов по одной локали может быть сколько угодно - отбор происходит по имени файла, оно должно оканчиваться именем локали (ru/en).
<?xml version="1.0"?>
<Wxliff xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Context>
<Text Id="TextId">
<Source>Текст</Source>
<Target>Text</Target>
</Text>
</Context>
</Wxliff>
Чтобы получать значения из этих файлов, необходимо обращаться к методу GetLocalizedText(string) формы, который по ключу возвращает нужную строку из файла object-ru.wxlf или object-en.wxlf относительно текущей локали приложения.
Создадим вспомогательный класс, который будет хранить контекст формы для обращения к методу получения строковых ресурсов:
using WorkflowForms;
namespace Template
{
public class StringManager
{
private readonly IWorkflowForm _form;
public StringManager(IWorkflowForm form)
{
_form = form;
}
public string GetString(string id)
{
return _form.GetLocalizedText(id);
}
}
}
В методе InternalInit(XmlNode, IWorkflowForm) кастомных классов необходимо создавать экземпляр класса StringManager и сохранять в глобальную переменную:
_manager = new Template.StringManager(form);
Затем через метод GetString(string) по ключу получать нужную строку:
string str = _manager.GetString("TextId");
Last updated