Инструменты, которые позволяют выполнять операции с локализуемыми ресурсами:
- Creatio IDE.
- База данных.
- Система контроля версий SVN.
- Файловая система.
Использовать Creatio IDE для выполнения операций с локализуемыми ресурсами
Использование Creatio IDE позволяет выполнять следующие операции с локализуемыми ресурсами:
- Добавить локализуемую колонку.
- Добавить локализуемую строку.
Добавить локализуемую колонку
Назначение локализуемой колонки — возможность отображения в интерфейсе приложения данных объекта на нескольких языках (т. н. мультиязычие). Значение локализуемой колонки зависит от выбранного в профиле пользователя языка. Локализуемая колонка настраивается в дизайнере объекта, а ее значение хранится в базе данных.
Чтобы добавить локализуемую колонку:
-
Добавьте колонку, которую необходимо локализовать.
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить (Add) и выберите вид схемы (Объект (Object) или Замещающий объект (Replacing object)).
- В дизайнере объектов заполните свойства схемы.
- При необходимости добавьте колонки, которые требуется локализовать, или выберите существующую колонку объекта.
-
В блоке свойств Общие (General) соответствующей колонки установите признак Локализуемый текст (Localizable text).
- На панели инструментов дизайнера объектов нажмите Сохранить (Save), а затем Опубликовать (Publish).
- Выполните перевод значения локализуемой колонки. Для этого воспользуйтесь инструкцией статьи Перевести элементы интерфейса в разделе Переводы.
В результате колонка будет содержать значения на разных языках. В интерфейсе приложения будет использоваться значение, которое зависит от выбранного в профиле пользователя языка.
Добавить локализуемую строку
Назначение локализуемой строки — возможность отображения в интерфейсе приложения данных модуля на нескольких языках (т. н. мультиязычие). Значение локализуемой строки зависит от выбранного в профиле пользователя языка. Локализуемая строка настраивается в дизайнере модуля и в дизайнере исходного кода, а ее значение хранится в базе данных.
Чтобы добавить локализуемую строку:
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить (Add) и выберите вид схемы.
-
Если необходимо локализовать строку клиентского модуля, то выберите один из вариантов:
- Модуль (Module).
- Модель представления страницы (Page view model).
- Модель представления раздела (Section view model).
- Модель представления детали с реестром (Detail (list) view model).
- Модель представления детали с полями (Detail (fields) view model).
- Замещающая модель представления (Replacing view model).
-
Если необходимо локализовать строку исходного кода, то выберите Исходный код (Source code).
-
- В дизайнере заполните свойства схемы.
-
Добавьте строку, которую требуется локализовать.
- В контекстном меню узла Локализуемые строки (Localizable strings) нажмите кнопку .
-
Заполните свойства локализуемой строки:
- Код (Code) — название локализуемой строки (обязательное свойство). Должно содержать префикс (по умолчанию Usr), указанный в системной настройке Префикс названия объекта (код SchemaNamePrefix).
- Значение (Value) — значение локализуемой строки. По умолчанию введенное значение сохраняется для выбранного в профиле пользователя языка. Чтобы задать значения локализуемой строки на других языках, нажмите кнопку .
- Для добавления локализуемой строки нажмите Добавить (Add).
- На панели инструментов дизайнера нажмите Сохранить (Save), а затем Опубликовать (Publish).
В результате строка будет содержать значения на разных языках. В интерфейсе приложения будет использоваться значение, которое зависит от выбранного в профиле пользователя языка.
Использовать базу данных для выполнения операций с локализуемыми ресурсами
Использование базы данных позволяет выполнять следующие операции с локализуемыми ресурсами:
- Получить локализуемые ресурсы из базы данных.
- Обновить локализуемые ресурсы в базе данных.
- Сохранить локализуемые ресурсы в базе данных.
- Отключить локализуемые ресурсы в базе данных.
Получить локализуемые ресурсы из базы данных
Классы, которые реализуют логику получения локализуемых ресурсов из базы данных:
- Terrasoft.Core.Entities.EntitySchemaQuery — получение данных из базы данных через ORM-модель. Класс по умолчанию поддерживает работу с мультиязычными данными.
- Terrasoft.Core.Entities.Entity — работа с сущностью базы данных.
Подробнее о получении данных из базы данных с помощью классов Terrasoft.Core.Entities.EntitySchemaQuery и Terrasoft.Core.Entities.Entity читайте в статье Доступ к данным через ORM.
Правила формирования выборки мультиязычных данных:
- Если в профиле пользователя выбран основной язык, то выборка данных формируется из основной таблицы базы данных.
- Если в профиле пользователя выбран дополнительный язык и в таблице [SysLocalizableValue] присутствует значение локализуемого ресурса, то выборка данных формируется из таблицы [SysLocalizableValue] базы данных.
- Если в профиле пользователя выбран дополнительный язык и в таблице [SysLocalizableValue] отсутствует значение локализуемого ресурса, то выборка данных формируется из основной таблицы базы данных.
Для выборки данных можно использовать представления (View), которые позволяют получить данные из локализуемых колонок. Для формирования выборки локализуемых данных через представление необходимо настроить локализуемые представления.
Чтобы настроить локализуемые представления:
-
Создайте схему объекта для представления. Шаблон названия схемы: UsrVwИмяСхемыОбъекта.
Обязательные составляющие названия схемы:
- Префикс (по умолчанию Usr), указанный в системной настройке Префикс названия объекта (код SchemaNamePrefix).
- Префикс Vw (сокращение от View) который указывает, что схема является представлением в базе данных.
- Настройте локализуемую колонку. Настройка локализуемых колонок описана в пункте Добавить локализуемую колонку.
- Добавьте новое представление локализации в базе данных.
Обновить локализуемые ресурсы в базе данных
При изменении значения локализуемого ресурса в таблице [SysLocalizableValue] необходимо выполнить обновление локализуемых ресурсов в базе данных.
Чтобы для соответствующей схемы обновить локализуемые ресурсы в базе данных, необходимо с помощью SQL-запроса изменить значение колонки [IsChanged] таблицы [SysPackageResourceChecksum]. В другом случае при обновлении пакета в приложении возникнет конфликт локализуемых ресурсов. Он не будет обнаружен, что приведен к потере значения локализуемого ресурса.
Сохранить локализуемые ресурсы в базе данных
Чтобы сохранить локализуемые ресурсы, необходимо использовать метод Entity.SetColumnValue(), который может принимать параметры типа string и параметры типа LocalizableString.
Сохранить локализуемые ресурсы с использованием параметров типа string
Особенности сохранения локализуемых ресурсов при использовании параметров типа string:
- Если запись добавляется пользователем с дополнительным языком, то данные сохраняются и в основную таблицу объекта Entity, и в таблицу локализации объекта Entity.
- Если запись изменяется пользователем с дополнительным языком, то данные сохраняются в таблицу локализации объекта Entity.
- Если запись добавляется или изменяется пользователем с основным языком, то данные сохраняются в основную таблицу объекта Entity.
Шаблон формирования имени таблицы локализации: [SysИмяОсновнойТаблицыLcz].
Ниже приведен пример сохранения локализуемых ресурсов с использованием параметра типа string для пользователя с основным языком (русский).
При выполнении этого кода пользователем с основным языком (русский) будет выполнен SQL-запрос к основной таблице [AccountType] базы данных. В параметре @P2 указано значение "Новый клиент".
Ниже приведен пример сохранения локализуемых ресурсов с использованием параметра типа string для пользователя с дополнительным языком (например, английским).
При выполнении этого кода пользователем с дополнительным языком (например, английским) будут выполнены:
-
SQL-запрос к основной таблице [AccountType] базы данных. SQL-запрос такой же, как и для основной локализации, но в параметре @P2 указано значение "New Customer".
-
SQL-запрос в таблицу локализации [SysAccountTypeLcz]. В параметре @P5 указано значение "New Customer".
Таким образом, в основную таблицу [AccountType] будет помещено значение, которое не соответствует основной локализации. Чтобы этого избежать, необходимо выполнять сохранение локализуемых ресурсов с использованием параметров типа LocalizableString.
Сохранить локализуемые ресурсы с использованием параметров типа LocalizableString
Ниже приведен пример сохранения данных с использованием параметра типа LocalizableString.
При выполнении этого кода, независимо от выбранного в профиле пользователя языка, будут выполнены:
-
SQL-запрос в основную таблицу [AccountType]. В параметре @P2 указано значение "Новый клиент ru-RU".
-
SQL-запрос в таблицу локализации [SysAccountTypeLcz]. В параметре @P5 указано значение "New Customer en-US".
При выполнении этого кода пользователем с дополнительным языком и отсутствии значения локализуемой строки на основном языке, в основную таблицу [AccountType] будет добавлена запись со значением для дополнительного языка.
Отключить локализуемые ресурсы в базе данных
Чтобы отключить локализуемые ресурсы, необходимо для свойства UseLocalization экземпляра класса EntitySchemaQuery установить значение false. Отключение локализуемых ресурсов не приводит к удалению локализуемых ресурсов из таблиц базы данных и не зависит от выбранного в профиле пользователя языка.
При выполнении этого кода, независимо от выбранного в профиле пользователя языка, будет выполнен SQL-запрос к основной таблице [City] базы данных.
Использовать систему контроля версий SVN для выполнения операций с локализуемыми ресурсами
Использование системы контроля версий SVN позволяет выполнять следующие операции с локализуемыми ресурсами:
- Обновить локализуемые ресурсы из хранилища SVN.
- Фиксировать локализуемые ресурсы в хранилище SVN.
Описание работы с SVN содержится в статье Контроль версий в Subversion.
Обновить локализуемые ресурсы из хранилища SVN
Чтобы обновить локализуемые ресурсы из хранилища SVN, необходимо выполнить обновление пакета из хранилища SVN. Обновление пакета подробно описано в статье Контроль версий в Creatio IDE.
Возможные состояния локализуемых ресурсов:
- Изменено (Modified) — локализуемый ресурс изменен.
- Добавлено (Added) — локализуемый ресурс добавлен.
- Удалено (Deleted) — локализуемый ресурс удален.
- Конфликт (Conflicted) — работа с локализуемым ресурсом выполнялась одновременно двумя разработчиками, один с которых зафиксировал изменения локализуемого ресурса в хранилище SVN.
Фиксировать локализуемые ресурсы в хранилище SVN
Чтобы фиксировать локализуемые ресурсы в хранилище SVN, необходимо выполнить фиксацию пакета в хранилище SVN. Фиксация пакета подробно описана в статье Контроль версий в Creatio IDE.
Используя Creatio IDE, можно заблокировать пакет в хранилище SVN. Блокирование пакета позволяет избежать возникновения состояния Конфликт (Conflicted) локализуемого ресурса, поскольку отключена опция одновременной работы с пакетом. Например, один разработчик вносит изменения в локализуемые ресурсы пакета без его предварительной блокировки. При фиксации пакета в хранилище SVN может возникнуть ситуация, когда в текущем пакете другим разработчиком были изменены и зафиксированы в хранилище SVN эти же локализуемые ресурсы. В этом случае при обновлении пакета в Creatio IDE будет отображен перечень локализуемых ресурсов в состоянии Конфликт (Conflicted). Это означает, что версия и содержимое измененных локализуемых ресурсов не совпадают с версией и содержимым локализуемых ресурсов, зафиксированных в хранилище SVN. При выполнении фиксации изменений локализуемых ресурсов будут утеряны изменения, зафиксированные в хранилище SVN. Такие конфликтные ситуации необходимо решать вручную, используя SVN-клиенты, например, TortoiseSVN.
Использовать файловую систему для выполнения операций с локализуемыми ресурсами
Использование файловой системы позволяет редактировать локализуемые ресурсы.
Чтобы редактировать локализуемые ресурсы из файловой системы:
- Настройте Creatio для работы в файловой системе. Подробнее читайте в статье Внешние IDE.
- Используя SVN-клиент, экспортируйте локализуемые ресурсы в файловую систему.
- Измените локализуемые ресурсы.
- Зафиксируйте изменения в хранилище SVN.
Пример 1
Класс Terrasoft.Core.Entities.EntitySchemaQuery позволяет выполнить выборку данных для произвольной языковой культуры (языковой культуры, которая отличается от дополнительной языковой культуры пользователя и основной языковой культуры приложения).
Чтобы получить локализуемые ресурсы для произвольной языковой культуры:
- Перед получением данных в экземпляре класса Terrasoft.Core.Entities.EntitySchemaQuery вызовите метод SetLocalizationCultureId(Guid cultureId).
- В метод SetLocalizationCultureId(Guid cultureId) передайте идентификатор языковой культуры, данные которой необходимо получить.
При выполнении этого кода будет выполнен SQL-запрос. Параметр @P1 принимает значение идентификатора записи ([Id]), которое хранится в переменной italianCultureId.
Пример 2
Методы FetchFromDB() класса Terrasoft.Core.Entities.Entity позволяют получить мультиязычные данные. Ниже приведен пример использования одной из перегрузок методов FetchFromDB() для пользователя с основной (русской) и дополнительной (например, английской) языковыми культурами. Эти методы можно использовать, например, в методах пользовательского веб-сервиса.
При выполнении этого кода пользователем с основной языковой культурой (русской) будет выполнен SQL-запрос к основной таблице [AccountType] базы данных. В параметре @P1 указано значение "Клиент", которое определяет соответствующую запись основной таблицы [AccountType] базы данных.
При выполнении этого кода пользователем с дополнительной языковой культурой (например, английской) будет выполнен SQL-запрос к таблице локализации [SysAccountTypeLcz] базы данных. В параметре @P1 указано значение "Клиент", которое определяет соответствующую запись основной таблицы [AccountType] базы данных. В параметре @P2 указано значение идентификатора ([SysCultureId]) дополнительной языковой культуры из таблицы [SysCulture], которое определяет соответствующую запись таблицы локализации [SysAcountTypeLcz] базы данных.
В результате значению переменной Name для пользователя с русской языковой культурой соответствует значение "Клиент", а для пользователя с английской языковой культурой — "Customer".
1. Создать объект
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить —> Объект (Add —> Object).
-
В дизайнере объекта заполните свойства схемы:
- Код (Code) — "UsrLocalizableObject".
- Заголовок (Title) — "LocalizableObject".
- Родительский объект (Parent object) — выберите "BaseEntity".
2. Добавить локализуемую колонку
- В контекстном меню узла Колонки (Columns) структуры объекта нажмите .
-
В выпадающем меню нажмите Строка —> Строка (50 символов) (Text —> Text (50 characters)).
-
В дизайнере объекта заполните свойства добавляемой колонки:
- Код (Code) — "UsrName".
- Заголовок (Title) — "Name".
- Установите признак Локализуемый текст (Localizable text).
- На панели инструментов дизайнера объектов нажмите Сохранить (Save), а затем Опубликовать (Publish).
Результат выполнения примера
В результате выполнения примера в базе данных создана таблица локализации [SysUsrLocalizableObjectLcz], в которой будут храниться локализованные данные для всех локализуемых колонок.
В Creatio реализована схема объекта Адрес контакта (ContactAddress). Колонка схемы ссылается на справочник Тип адреса (AddressType), который содержит локализуемую колонку Название (Name). Структура и связи таблиц представлены на рисунке ниже.
- [ContactAddress] — таблица базы данных, которая содержит перечень значений адресов контактов. Связана с таблицей [AddressType] по колонке [AddressTypeId].
- [AddressType] — таблица базы данных, которая содержит перечень типов адресов контактов. Колонка [Name] таблицы содержит перечень значений типов адресов на основном языке. Значения на дополнительных языках содержатся в таблице [SysAddressTypeLcz].
- [SysAddressTypeLcz] — автоматически генерируемая системная таблица базы данных, которая содержит перечень локализованных значений типов адресов контактов. Связана с таблицей [AddressType] по колонке [RecordId] и с таблицей [SysCulture] по колонке [SysCultureId]. Колонка [Name] таблицы содержит перечень локализованных значений типов адресов контактов для языковой культуры, которая указана в колонке [SysCultureId] текущей таблицы.
- [SysCulture] — системная таблица базы данных, которая содержит перечень языковых культур.
1. Создать схему объекта для представления
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить —> Объект (Add —> Object).
-
В дизайнере объекта заполните свойства схемы:
- Код (Code) — "UsrVwContactAddress".
- Заголовок (Title) — "ContactAddressView".
- Родительский объект (Parent object) — выберите "BaseEntity".
-
В блоке свойств Поведение (Behavior) установите признак Представление в базе данных (Represent Structure of Database View).
2. Добавить колонки
-
Добавьте колонку, которая будет содержать перечень значений адресов контактов на основном языке.
- В контекстном меню узла Колонки (Columns) структуры объекта нажмите .
-
В выпадающем меню нажмите Строка —> Строка (50 символов) (Text —> Text (50 characters)).
-
В дизайнере объекта заполните свойства добавляемой колонки:
- Код (Code) — "UsrAddress".
- Заголовок (Title) — "Address".
-
Добавьте колонку, которая будет содержать перечень типов адресов контактов на дополнительном языке.
- В контекстном меню узла Колонки (Columns) структуры объекта нажмите .
-
В выпадающем меню нажмите Строка —> Строка (50 символов) (Text —> Text (50 characters)).
-
В дизайнере объекта заполните свойства добавляемой колонки:
- Код (Code) — "UsrAddressType".
- Заголовок (Title) — "AddressType".
- Установите признак Локализуемый текст (Localizable text).
- На панели инструментов дизайнера объектов нажмите Сохранить (Save), а затем Опубликовать (Publish).
3. Создать представления в базе данных
-
Создайте представление [UsrVwContactAddress] в базе данных. Для этого выполните SQL-запрос.
-
Создайте локализуемое представление [SysUsrVwContactAddressLcz] в базе данных. Для этого выполните SQL-запрос.
В результате при чтении данных с помощью EntitySchemaQuery из колонки [UsrAddressType] представления [UsrVwContactAddress] будут отображены корректные значения для разных языков.
Результат выполнения примера
Для проверки результата выполнения примера создайте пользовательский веб-сервис с аутентификацией на основе cookies.
1. Создать схему Исходный код
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrViewLocalizationService".
- Заголовок (Title) — "UsrViewLocalizationService".
Для применения заданных свойств нажмите Применить (Apply).
2. Создать класс сервиса
- В дизайнере схем добавьте пространство имен Terrasoft.Configuration.
- C помощью директивы using добавьте пространства имен, типы данных которых будут задействованы в классе.
- Добавьте название класса, которое соответствует названию схемы (свойство Код (Code)).
- В качестве родительского класса укажите System.Web.SessionState.IReadOnlySessionState.
- Для класса добавьте атрибуты [ServiceContract] и [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)].
3. Реализовать методы класса
-
Реализуйте метод, который вернет перечень типов адресов контактов и значений адресов контактов из созданного нелокализуемого представления [UsrVwContactAddress]. В дизайнере схем добавьте в класс метод public string GetNonLocalizableView(), который реализует конечную точку пользовательского веб-сервиса. С помощью EntitySchemaQuery метод отправит запрос к базе данных.
-
Реализуйте метод, который вернет перечень типов адресов контактов и значений адресов контактов из созданного локализуемого представления [UsrVwContactAddress]. В дизайнере схем добавьте в класс метод public string GetLocalizableView(), который реализует конечную точку пользовательского веб-сервиса. С помощью EntitySchemaQuery метод отправит запрос к базе данных.
Исходный код пользовательского веб-сервиса UsrViewLocalizationService представлен ниже.
На панели инструментов дизайнера нажмите Сохранить (Save), а затем Опубликовать (Publish).
Результат работы пользовательского веб-сервиса
В результате выполнения примера в Creatio появится пользовательский веб-сервис UsrViewLocalizationService с конечными точками GetLocalizableView и GetNonLocalizableView.
Авторизуйтесь в приложении и из браузера обратитесь к конечной точке GetLocalizableView веб-сервиса.
В результате будет получена выборка, которая состоит из локализуемых значений типов адресов контактов и значений адресов контактов.
Из браузера обратитесь к конечной точке GetNonLocalizableView веб-сервиса.
В результате будет получена выборка, которая состоит из нелокализуемых значений типов адресов контактов и значений адресов контактов.
Пространство имен Terrasoft.Common.
Класс Terrasoft.Common.LocalizableValue<T> является базовым классом для классов Terrasoft.Common.LocalizableString (отвечает за отображение локализуемых строк) и Terrasoft.Common.LocalizableImage (отвечает за отображение локализуемых изображений), которые используются для работы с локализуемыми ресурсами.
Класс Terrasoft.Common.LocalizableValue<T> является шаблоном для локализуемых значений различных типов и предоставляет методы для работы с ними.
Свойства
Возвращает и устанавливает локализуемое значение с учетом текущей языковой культуры.
Возвращает признак, который определяет наличие локализуемого значения данного типа для текущей языковой культуры.
Возвращает справочник локализуемых значений текущего экземпляра для поддерживаемых языковых культур.
Методы
Удаляет локализуемое значение для поддерживаемых языковых культур.
culture | Языковая культура. |
Получает локализуемое значение указанного типа для поддерживаемых языковых культур. В зависимости от значения параметра throwIfNoManager, метод может сгенерировать исключение типа ItemNotFoundException, если для этого локализуемого значения не задан диспетчер ресурсов.
culture | Языковая культура. |
throwIfNoManager | Флаг, который указывает необходимость вызова исключения ItemNotFoundException. |
Получает локализуемое значение указанного типа для поддерживаемых языковых культур. Если значение локализуемого ресурса для указанной языковой культуры не найдено, то возвращается значение на основной языковой культуре. В зависимости от значения параметра throwIfNoManager, метод может сгенерировать исключение типа ItemNotFoundException, если для этого локализуемого значения не задан диспетчер ресурсов.
culture | Языковая культура. |
throwIfNoManager | Флаг, который указывает необходимость вызова исключения ItemNotFoundException. |
Определяет, существует ли локализуемое значение для заданной языковой культуры.
culture | Языковая культура. |
Загружает перечень локализуемых значений данного типа для всех языковых культур, которые определены в глобальном хранилище ресурсов.
Устанавливает заданное локализуемое значение для заданной языковой культуры.
culture | Языковая культура. |
value | Локализуемое значение. |