Структура и использование локализируемых ресурсов
Glossary Item Box
Общие сведения
Начиная с версии 7.8.3, изменилось место хранения локализируемых ресурсов пакетов. В предыдущих версиях ресурсы хранились в таблице SysSchemaResource в виде BLOB-данных. Теперь локализируемые ресурсы хранятся в текстовом виде в таблице SysLocalizableValues.
Для каждого набора ресурсов схемы в связке пакет — схема — культура в таблице SysPackageResourceChecksum хранится контрольная сумма, что позволяет при обновлении пакета довольно быстро определить наличие изменений в ресурсах пакета. Благодаря добавлению контрольной суммы ресурсы были отделены от схем, что позволяет создавать пакеты переводов.
Хранение ресурсов
Структура хранения ресурсов
Для того чтобы появилась возможность создавать пакеты переводов, ресурсы были перемещены из схем в пакет (рис. 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-запросом нельзя, т. к. в метаданных соответствующей схемы не будет информации о добавленных ресурсах.