Структура и использование локализуемых ресурсов
Glossary Item Box
Общие сведения
Начиная с версии 7.8.3, изменилось место хранения локализуемых ресурсов пакетов. В предыдущих версиях ресурсы хранились в таблице SysSchemaResource в виде BLOB-данных. Теперь локализуемые ресурсы хранятся в текстовом виде в таблице SysLocalizableValues.
Для каждого набора ресурсов схемы в связке пакет — схема — культура в таблице SysPackageResourceChecksum хранится контрольная сумма, что позволяет при обновлении пакета довольно быстро определить наличие изменений в ресурсах пакета. Благодаря добавлению контрольной суммы ресурсы были отделены от схем, что позволяет создавать пакеты переводов.
ВАЖНО В bpm'online версии 7.11.1 и выше изменился подход к работе с языковыми культурами. Теперь при работе в приложении используются только те культуры, для которых установлен признак [Активен]. Это повышает скорость выполнения многих задач, например, вход в систему, открытие страницы записи и т. д. Но при настройке системы в мастерах разделов и деталей, дизайнерах процессов и кейсов, а также в разделе [Переводы] используются все культуры, которые установлены в системе. |
Хранение ресурсов
Структура хранения ресурсов
Для того чтобы появилась возможность создавать пакеты переводов, ресурсы были перемещены из схем в пакет (рис. 1). Для хранения ресурсов схем с одинаковыми именами, но с разными менеджерами, например Entity и ClientUnitSchema, в имена ресурсов пакета были добавлены имена менеджеров схем с отсечением префикса "SchemaManager".
Рис. 1. — Хранение ресурсов в пакете
Пакет может содержать ресурсы для схемы, которая определена в другом пакете. Кроме того, пакет может содержать только ресурсы и не содержать схем (так называемый "пакет перевода").
Таблица SysLocalizableValue
Ресурсы хранятся в таблице SysLocalizableValue для каждой локализованной строки или изображения. Каждая запись привязана к пакету и базовому идентификатору схемы. Основные поля таблицы SysLocalizableValue приведены в таблице 1.
Табл. 1. — Основные поля таблицы SysLocalizableValue
Название колонки | Описание |
---|---|
Id | Идентификатор записи. |
ImageData | Значение графического ресурса. |
IsChanged | Признак, свидетельствующий о том, что ресурс был изменен пользователем. |
Key | Ключ ресурса. |
ResourceManager | Название менеджера ресурсов. Заполняется только для ресурсов ядра. |
ResourceType | Тип ресурса. |
SysCultureId | Идентификатор культуры. |
SysPackageId | Идентификатор пакета. |
SysSchemaId | Идентификатор базовой схемы. Заполняется только для ресурсов конфигурации. |
Value | Значение строкового ресурса. |
Импорт и экспорт схем
В связи с изменением механизма хранения ресурсов также изменился формат хранения ресурсов в экспортированных схемах. Теперь ресурсы в экспортированных схемах хранятся в формате XML.
Работа с локализуемыми ресурсами
Обновление пакета из хранилища
Благодаря использованию нового механизма хранения ресурсов во время обновления пакета отображаются все изменения локализуемых ресурсов (рис. 2).
Рис. 2. — Отображение ресурсов при обновлении пакета
Возможные состояния ресурсов:
- [Изменено] — ресурс был изменен.
- [Добавлено] — добавлен новый ресурс.
- [Удалено] — ресурс удален.
- [Конфликт] — ресурс был изменен и залит в SVN в то время, когда с ним работал другой разработчик.
Фиксация пакета в хранилище
В процессе фиксации пакета в хранилище также отображаются все изменения локализуемых ресурсов (рис. 3).
Рис. 3. — Отображение ресурсов при фиксации пакета
Конфликты при обновлении и фиксации пакетов
При работе с ресурсами нет возможности их блокировать из приложения. В случае если разработчик меняет ресурсы схемы, а при попытке фиксации выясняется, что пакет уже изменен и в нем были изменены эти же ресурсы, то при обновлении отобразится список ресурсов с состоянием [Конфликт] (рис. 4). Это означает что версия и содержимое ресурсов, измененных разработчиком, не совпадают с той версией и содержимым, которые зафиксированы в SVN. И при следующей фиксации изменения, внесенные разработчиком, перекроют те изменения, которые были зафиксированы в SVN. Такие конфликтные ситуации необходимо решать вручную, используя SVN-клиенты, например, Tortoise.
Рис. 4. — Отображение конфликтов при обновлении пакета
Редактирование ресурсов из файловой системы.
Начиная с версии 7.8.3 появилась возможность редактирования ресурсов напрямую. Для этого необходимо выгрузить их в файловую систему, используя, например, Tortoise, а затем внести изменения и зафиксировать в SVN.
ВАЖНО Для каждого значения ресурса в таблице SysLocalizableValue существует только одна запись с соответствующими ссылками на SysPackageId, SysSchemaId, SysCultureId и конкретным значением Key. Поэтому при фиксации ресурса с состоянием [Конфликт] в таблице будет записано последнее значение. |
Обновление ресурсов прямым SQL-запросом в базу данных
При изменении значения в таблице SysLocalizableValue SQL-запросом необходимо также изменить значение колонки IsChanged в таблице SysPackageResourceChecksum для соответствующей схемы. В противном случае при обновлении пакета в приложении не будет обнаружена конфликтная ситуация.
Добавлять данные в таблицу SysLocalizableValue прямым SQL-запросом нельзя, т. к. в метаданных соответствующей схемы не будет информации о добавленных ресурсах.