Система хранения переводов 1C:Language Tool позволяет хранить:
Система хранилищ расширяемая. И новые провайдеры, позволяющие хранить переводы, могут быть добавлены через точку расширения с помощью плагина.
См. подробней описание формата
Эти словари возможно применять для перевода пользовательских объектов (справочники, реквизиты, переменные и т.д.) если в бизнес-логике используются объекты аналогичные платформенным.
При этом следует учитывать, что корректно-типизированный код не будет использовать пользовательские словари для перевода платформенных объектов.
Так же для перевода кода эти словари используются всегда. Поэтому, если код не типизирован - вызовы пользовательских объектов (свойств, методов) могут быть переведены по словарю контекста платформы и отличаться от перевода самого объекта, если задан другой перевод.
Описание общих возможностей системы конфигураций хранилищ.
1C:Language Tool предоставляет простой набор настроек контекстных переводов и общих словарей по умолчанию для проектов 1С:Передприятия. Дополнительно можно настраивать расширенные возможности системы хранилищ.
Файл настроек translation_storages.yml
сохраняется в проекте ProjectName/.settings/translation_storages.yml
.
Верхнеуровневые настройки в файле
# Редактирование по умолчанию
edit:
# Чтение по умолчанию при переводе кода и валидации
read:
- provider:id
# Контекстные ресурсные хранилища
context:
# Настройки словарей (не контекстные)
dictionary:
# Дополнительные настройки для других провайдеров словарей
storages:
Настройка позволяет конфигурировать хранилище, куда будут сохраняться значения (выбор по умолчанию). Эта настройка используется для загрузки интерфейсов в редакторы 1C:EDT (редакторы метаданных, редактор кода модуля) и автоматического сохранения интерфейсов из редакторов.
Возможности: 1. Указание простого списка хранилищ 2. Настройка условного селектора хранилищ по дополнительным правилам
Пример простого списка хранилищ, в котором выбирается первое подходящее по настройкам хранилище. В списке указывается глобальный идентификатор хранилища в формате providerId:segmentId
, например: context:nstr
# Редактирование по умолчанию
edit:
presentation: "Авто-распределение по умолчанию" # отображение надписи при редактировании по умолчанию
storages: # последовательный выбор подходящего хранилища по настройкам фич из настроек хранилищ
- providerId:segmentId # сохранение напрямую в конкретное хранилище
- providerId2:segmentId2
Пример правил распределения по настройкам фич и настроек хранилищ, позволяющих автоматически раскладывать переводы по нужным хранилищам.
edit:
presentation: Авто-распределение по умолчанию
rules: # Селективный выбор по правилам по подходящим фичам хранилищ
mdo prefer context: # имя правила выбора
storages: # последовательный выбор подходящего хранилища по настройкам фич в настройках хранилища
- context:mdo-trans
when: # в дополнение к возможностям настроек хранимых фич в хранилище, указываем дополнительные условия
prefercontext: 'true'
resource_path_regex: .*\.mdo$
prefer context:
storages:
- context:trans
when:
prefercontext: 'true'
mdo-lstr:
storages:
- context:mdo-lstr
- dictionary:metadata_identifilers
when:
resource_path_regex: .*\.mdo$
module-nstr:
storages:
- context:nstr
when:
resource_path_regex: .*\.bsl$
other: # если ни одно правило выше не сработало - выбираем из списка прочих хранилищ
storages:
- dictionary:common
- context:trans
- context:other-lstr
Внимание! В настройках редактирования не следует указывать хранилища доступные только для чтения (read-only).
Основные возможности:
edit:storages
более приоритетный чем правила edit:rules
. Для каждого контекстного ключа перевода выбирается хранилище подходящее по настройкам фичи (feature_filter
см. ниже).edit:rules:rule_id:when
поддерживаются следующие возможности, где несколько правил работают по логическому "И":language_code
- значение кода языка переводимого интерфейса, для которого действует данное правило
resource_path_regex
- регулярное выражение на полное совпадение с относительным путем к файлу ресурса конфигурации.feature_key_regex
- регулярное выражение на полное совпадение с контекстным ключом перевода внутри файла ресурса конфигурации.value_regex
- регулярное выражение на полное совпадение с исходным значением, которое необходимо переводить.prefercontext
- учитывать ли настройку контекстного ключа "Prefer context store (предпочитать сохранять контекстно)". Если указано prefercontext: true
- все контекстные ключи для фич, настроенные которых настроено предпочтение сохранять контекстно, будут сохраняться по этому правилу. Если указано prefercontext: fasle
- все контекстные ключи ресурса, для которых не указано контекстное сохранение, будут выбраны по этому правилу.camelcase
- учитывать ли настройку контекстного ключа требующего в значении перевода слово в CamelCase т.е. не допускающее других символов кроме алфавита, цифр и символа "_". Если указано camelcase: true
- все контекстные ключи для фич, настроенные которых настроено требование CamelCase, будут сохраняться по этому правилу. Если указано camelcase: fasle
- все контекстные ключи ресурса, для которых не указано требование CamelCase в значении, будут выбраны по этому правилу.При миграции настроек с версии 1C:Language Tool ver. 0.9 генерируется настройка идентичная предыдущему поведению системы, в т.ч. если для редактирования по умолчанию использовалось комбинированное хранилище.
В механизмах перевода кода проекта, проверки наличия перевода в коде и метаданных используется общий список хранилищ с настраиваемым порядком чтения.
# Чтение по умолчанию при переводе и валидации
read:
- provider:id
- provider:id2
- provider:id3
При этом учитываются настройки контекстного ключа переводимой фичи и настройки хранилища (feature_filter
см. ниже).
В простейшем случае перевода кода проекта, можно указать чтение из настройки редактирования:
# Чтение при переводе кода идентично редактированию переводов по умолчанию
read:
- edit:default
Но на практике, может потребоваться подключение дополнительных словарей, поставляемых библиотеками или другими провайдерами (например провайдер слов контекста 1С:Предприяти или провайдер терминологии БД).
# Чтение приоритетно из терминов 1С:Предприятия
read:
- com.e1c.langtool.v8.dt.md.dbview:terms
- com.e1c.langtool.v8.dt.storage:platform
- edit:default
Чтобы учитывать в приоритет контекстные переводы, необходимо перечислить сначала все контекстные хранилища, потом все словари в порядке приоритета выбора по наличию в них переводов.
# Чтение приоритетно из контекстных, потом из словарей
read:
- context:trans
- context:mdo-lstr
- context:mdo-trans
- context:other-lstr
- context:nstr
- dictionary:01_redefifntion_platform
- dictionary:custom_priority
- dictionary:10_platform_ambiguity
- com.e1c.langtool.v8.dt.md.dbview:terms
- com.e1c.langtool.v8.dt.storage:platform
- dictionary:platform_context
- dictionary:regex-common
- dictionary:metadata_identifilers
- dictionary:yandex_metadata
...
Внимание! Необходимо учитывать, что некоторые алгоритмы перевода кода могут отдельно запрашивать сначала контекстные переводы, имеющие в логике трансформации кода более высокий приоритет над остальными хранилищами. В этом случае будет учтен приоритет среди всех контекстных хранилищ из секции
read:
.
Провайдер контекстных файловых хранилищ имеет свою зарезервированную секцию в файле настроек.
# Контекстные хранилища
context:
trans: # Идентификатор контекстного хранилища (глобальный идентификатор - context:trans)
presentation: "Контекстные переводы модели"
format: properties # текущий формат контекстных переводов
file_extension: trans # расширение файлов для контекстных
feature_filter: # режим фильтрации по настройкам контекстных фич
model: only
miltiline: none
prefercontext: any
read_only: true # редактирование запрещено
settings:
max_context_folder: 1 # сокращать количество контекстных каталогов, например складывать в корень /src/
replace_file_name: "mdo" # Заменять имя файла на другое, если указанное здесь
Основные возможности:
context:id:presentation
- представление хранилища в интерфейсеcontext:id:format
- формат хранения, значение по умолчанию properties
(См. подробней описание формата). В будущем планируется поддержка форматов: "cotext-regex", "po".context:id:file_extension
- расширение файла, по умолчанию properties
, возможно указание любого. В режиме совместимости с 1C:Language Tool версии 0.9
нужно использовать: lstr
, nstr
, trans
.context:id:feature_filter
- фильтрация контекстных ключей фич по их настройкам. Поддерживается значения: only
- только ключи с указанной настройкой, none
- только ключи, не содержащие настройку или any
- любое значение настройки в ключе. Поддерживаются ключи:
camelcase
- настройка контекстного ключа, требующая только CamelCase значений в переводе.model
- настройка указывает, что ключ относится к модели метаданных (не интерфейсное значение).id
- настройка обозначает что значение является идентификатором объекта в текущей области данных модели.unique
- настройка требует уникального значения перевода в текущей области данных модели.interface
- настройка указывает, что ключ относится к интерфейсу (не модель метаданных).multiline
- настройка указывает, что возможно многострочное значение перевода.prefercontext
- настройка предлагает сохранять переводы в контекстное хранилище вместо словаря.context:id:read_only
- позволяет запретить редактирование этого файла из интерфейса 1C:Language Tool. Например, для поставляемых файлов переводов из других систем или других проектов (например библиотек).
context:id:settings
- указывает список дополнительных произвольных настроек хранилища поддерживаемых провайдером. Доступны следующие настройки:
replace_file_name
- заменять имя файла ресурса на указанное. Например, значение replace_file_name: mdo
позволит сохранять для файла метаданных /src/Catalogs/Товары/Товары.mdo
переводы в файл /src/Catalogs/Товары/mdo_en.trans
(с суффиксом кода языка и расширением, указанным в настройках file_extension
).max_context_folders
- максимальное количество каталогов, которые необходимо оставить в пути к файлу перевода. Значение по умолчанию -1
- не ограничивать. Значение 0
- означает помещать файл переводов в корне проекта. Например, max_context_folders: 3
совместно с настройкой replace_file_name: common
хранить контекстные переводы в одном общем файле для всего метаданного верхнего уровня, включая модули, формы и т.д. /src/Catalogs/Товары/Forms/ФормаЭлемента/From.form
переводы будут сохранены в файле /src/Catalogs/Товары/common_en.trans
value_unique
- Уникальность значения. По умолчанию value_unique: 'true'
- значения в файле уникальные.key_case_sensitve
- Регистрозависимость ключей. По умолчанию key_case_sensitve: 'false'
- ключи в файле регистронезависимые.value_case_sensitive
- Регистрозависимость значений при проверке уникальности значения. По умолчанию value_case_sensitive: 'false'
- значения переводов в файле регистронезависимые.Провайдер не контекстны файловых хранилищ (словарей) имеет свою зарезервированную секцию в файле настроек.
dictionary:
segment_id: # идентификатор сегмента словаря
presentation: "Общий словарь проекта (модельный, CamelCase)"
format: dict # поддерживаемый формат словаря: dict, в будущем планируется "dict-regex" и "po"
file_extension: dict # можно изменить расширение на любое - для интерфейса в словаре - ldict
file_path: src/common_camelcase
feature_filter: # режим фильтрации по фичам системы
model: only # only, any, none
interface: none
camelcase: only
read_only: true # редактирование запрещено
settings: # Настройки словаря
key_case_sensitve: false
value_case_sensitive: false
value_unique: true # Проверка уникальности перевода в этом словаре
value_non_global_unique_prefix: "" # Префикс и постфикс добавляемый для неуникальных значений переводов словаря, провяемый глобально по всем словарям
value_non_global_unique_postfix: ""
Основные возможности:
dictionary:id:presentation
- представление словаря в интерфейсеdictionary:id:format
- формат хранения, значение по умолчанию dict
(См. подробней описание формата). Поддерживается формат словаря "Умных регулярных выражений" dict-regex
. В будущем планируется поддержка формата: "po".dictionary:id:file_extension
- расширение файла, по умолчанию dict
, возможно указание любого. В режиме совместимости с 1C:Language Tool версии 0.9
нужно использовать: dict
, lsdict
, для "умных регулярных выражений" - yml
.dictionary:id:file_path
- полный путь к файлу словаря, например src/common
(или равнозначное с расширением файла src/common.dict
) позволит сохранять в файле src/common_en.dict
в проекте переводов для английского языка.dictionary:id:feature_filter
- фильтрация не контекстных слов для перевода по их настройкам в месте применения. Поддерживается значения: only
- только ключи с указанной настройкой, none
- только ключи, не содержащие настройку или any
- любое значение настройки в ключе. Поддерживаются ключи:
camelcase
- настройка контекстного ключа, требующая только CamelCase значений в переводе.model
- настройка указывает, что ключ относится к модели метаданных (не интерфейсное значение).id
- настройка обозначает что значение является идентификатором объекта в текущей области данных модели.unique
- настройка требует уникального значения перевода в текущей области данных модели.interface
- настройка указывает, что ключ относится к интерфейсу (не модель метаданных).multiline
- настройка указывает, что возможно многострочное значение перевода.prefercontext
- настройка предлагает сохранять переводы в контекстное хранилище вместо словаря.dictionary:id:read_only
- позволяет запретить редактирование этого файла из интерфейса 1C:Language Tool, например для поставляемых файлов переводов из других систем или других проектов (например библиотек).
dictionary:id:settings
- указывает список дополнительных произвольных настроек хранилища поддерживаемых провайдером. Доступны следующие настройки:
value_unique
- Уникальность значения во всем файле. По умолчанию value_unique: 'true'
- значения в файле уникальные.key_case_sensitve
- Регистрозависимость ключей. По умолчанию key_case_sensitve: 'false'
- ключи в файле регистронезависимые.value_case_sensitive
- Регистрозависимость значений при проверке уникальности значения. По умолчанию value_case_sensitive: 'false'
- значения переводов в файле регистронезависимые.value_non_global_unique_prefix
- Добавлять префикс к значению в этом словаре при проверке глобальной уникальности значения среди всех словарей указанных в секции настроек read: ...
.value_non_global_unique_postfix
- Добавлять постфикса к значению в этом словаре при проверке глобальной уникальности значения среди всех словарей указанных в секции настроек read: ...
.Если установлена уникальность value_unique: true
и задан префикс/суффикс value_non_global_unique_postfix: _1
то Language Tool - для всех текущих значений словаря контролирует, что для всех словарей указанных в секции read: ...
все переводы совпадают для исходного слова или отсутствуют, иначе для таких переводов добавляется префикс/суффикс для значения перевода. Чтобы создать глобально уникальные переводы слов.
Например, сохраняемые переводы из сервисов Yandex/Google/Microsoft можно помечать префиксом (или постфиксом) для идентификаторов CamelCase, если такое значение уже было использовано для других исходных идентификаторов, которые задал разработчик/переводчик, чтобы данные из сервиса машинного переводы не приводили к конфликту терминов (свертывание идентификаторов в один) на переводимом языке.
В Language Tool поставляются дополнительные хранилища переводов, для которых можно задать некоторые настройки их использования для текущего проекта
# Дополнительные настройки для других провайдеров словарей
storages:
com.e1c.langtool.v8.dt.storage:platform: # Полный идентификатор сегмента вместе с провайдером
presentation: "Контекст платформы V8, поставляемый 1C:EDT" # возможность переопределить название в UI
read_only: true # редактирование запрещено из настроек, в дополнение к самой функциональности провайдера, который может не поддерживать редактирование
feature_filter: # режим фильтрации по фичам системы
model: only # only, any, none
interface: none
camelcase: only
settings: # Настройки словаря, если поддерживаются в конкретном провайдере
key_case_sensitve: false
Для нового проекта конфигурации создаются настройки, идентичные файлу:
edit:
presentation: Default editing storage
rules:
prefer-context:
storages:
- context:interface
- context:model
when:
prefercontext: 'true'
other:
storages:
- dictionary:common-camelcase
- dictionary:common
- dictionary:common-interface
read:
- context:interface
- context:model
- dictionary:common-camelcase
- dictionary:common
- dictionary:common-interface
context:
interface:
presentation: Interface context translations
format: properties
file_extension: lstr
read_only: false
feature_filter:
interface: ONLY
model:
presentation: Model context translations
format: properties
file_extension: trans
read_only: false
feature_filter:
model: ONLY
dictionary:
common-camelcase:
presentation: Model common CamelCase idenitfiers
format: dict
file_extension: dict
file_path: src/common-camelcase
read_only: false
feature_filter:
camelcase: ONLY
model: ONLY
common:
presentation: Model common non-CamelCase translations
format: dict
file_extension: dict
file_path: src/common
read_only: false
feature_filter:
camelcase: NONE
model: ONLY
common-interface:
presentation: Interface common translations
format: dict
file_extension: lsdict
file_path: src/common
read_only: false
feature_filter:
interface: ONLY
Данная настройка по умолчанию разделяет файлы перевода интерфейса и модели, дополнительно файлы словарей перевода модели делятся на содержащие только CamelCase (по настройкам фич в месте использования исходного слова) и все прочие не-CamelCese.
Если необходимо переводить только интерфейс в общем словаре, самые простые настройки будут:
edit:
presentation: Редактирование по умолчанию
storages:
- dictionary:common-interface
dictionary:
common-interface:
presentation: Общий словарь интерфейсов
format: dict
file_extension: lsdict
file_path: src/common
read_only: false
feature_filter:
interface: ONLY
Если необходимо переводить только интерфейс в контекстном хранилище, самые простые настройки будут:
edit:
presentation: Редактирование по умолчанию
storages:
- context:interface
context:
interface:
presentation: Контекстные переводы интерфейса
format: properties
file_extension: lstr
read_only: false
feature_filter:
interface: ONLY
Можно разделить хранение интерфейсов между словарями и контекстными переводами в зависимости от языка. Например, Английский язsк хранить в общем словаре, а Итальянский и все остальные языки переводить контекстно:
edit:
presentation: Редактирование по умолчанию
rules:
english-common:
storages:
- dictionary:common-interface
when:
language_code: 'en'
other:
storages:
- context:interface
context:
interface:
presentation: Контекстные переводы интерфейса
format: properties
file_extension: lstr
read_only: false
feature_filter:
interface: ONLY
dictionary:
common-interface:
presentation: Общий словарь интерфейсов для Английского
format: dict
file_extension: lsdict
file_path: src/common
read_only: false
feature_filter:
interface: ONLY
Если в проекте ранее были сохранены настройки 1C:Language Tool в файле ProjectName/.settings/com.e1c.langtool.prefs
они будут сконвертированы налету:
eclipse.preferences.version=1
storage/defaulEditing=com.e1c.langtool.v8.dt.resourcestorage.composite\:trans
storage/order=com.e1c.langtool.v8.dt.resourcestorage.common\:common;com.e1c.langtool.v8.dt.resourcestorage.context\:trans;com.e1c.langtool.v8.dt.md.dbview\:terms;com.e1c.langtool.v8.dt.storage\:platform;com.e1c.langtool.v8.dt.resourcestorage.composite\:trans
Сконвертированные настройки в ProjectName/.settings/translation_storages.yml
:
edit:
presentation: Default editing storage
rules:
prefercontext-mdo:
storages:
- context:interface-mdo-legacy
- context:model-mdo-legacy
when:
prefercontext: 'true'
resource_path_regex: .*\.mdo$
mdo:
storages:
- context:interface-mdo-legacy
when:
resource_path_regex: .*\.mdo$
module-nstr:
storages:
- context:interface-bsl-legacy
when:
resource_path_regex: .*\.bsl$
prefercontext-other:
storages:
- context:interface
- context:model
when:
prefercontext: 'true'
other:
storages:
- dictionary:common-legacy
- dictionary:common-interface
read: # в данном примере - порядок сохранен из файла прежних настроек
- dictionary:common-interface
- dictionary:common-legacy
- dictionary:regex-common
- context:interface
- context:model
- context:interface-mdo-legacy
- context:model-mdo-legacy
- context:interface-bsl-legacy
- com.e1c.langtool.v8.dt.md.dbview:terms
- com.e1c.langtool.v8.dt.storage:platform
context:
interface:
presentation: Interface context translations
format: properties
file_extension: lstr
read_only: false
feature_filter:
interface: ONLY
model:
presentation: Model context translations
format: properties
file_extension: trans
read_only: false
feature_filter:
model: ONLY
interface-mdo-legacy:
presentation: Interface context Metadata translations
format: properties
file_extension: lstr
read_only: false
feature_filter:
interface: ONLY
settings:
replace_file_name: mdo
model-mdo-legacy:
presentation: Model context Metadata translations
format: properties
file_extension: trans
read_only: false
feature_filter:
model: ONLY
settings:
replace_file_name: mdo
interface-bsl-legacy:
presentation: Interface context module Nstr translations
format: properties
file_extension: nstr
read_only: false
feature_filter:
interface: ONLY
dictionary:
common-interface:
presentation: Interface common translations
format: dict
file_extension: lsdict
file_path: src/common
read_only: false
feature_filter:
interface: ONLY
common-legacy:
presentation: Model common translations
format: dict
file_extension: dict
file_path: src/common
read_only: false
feature_filter:
model: ONLY
regex-common:
presentation: 'Smart RegEx translations: common'
format: dict-regex
file_extension: yml
file_path: src/common_regex
read_only: true
storage:
com.e1c.langtool.v8.dt.md.dbview:terms:
presentation: DbView Terms
read_only: true
com.e1c.langtool.v8.dt.storage:platform:
presentation: Platform context definition
read_only: true
Данный файл конфигурации хранилищ содержит все легаси-настройки, идентичные "комбинированному" провайдеру, и дополнительные сегменты словарей "умных регулярных выражений".
Внимание! После сохранения файла
ProjectName/.settings/translation_storages.yml
- прежний файл настроекProjectName/.settings/com.e1c.langtool.prefs
больше не учитывается. Рекомендуется его удалить из проекта.