Хранилище пеереводов

Описание

Система хранения переводов 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).

Основные возможности:

При миграции настроек с версии 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" # Заменять имя файла на другое, если указанное здесь

Основные возможности:

Общие словари

Провайдер не контекстны файловых хранилищ (словарей) имеет свою зарезервированную секцию в файле настроек.

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: ""

Основные возможности:

Проверка глобальной уникальности в словарях (префиксация)

Если установлена уникальность 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

Пример файла после миграции с версии 0.9

Если в проекте ранее были сохранены настройки 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 больше не учитывается. Рекомендуется его удалить из проекта.