Особенности разработки при локализации

9 4

В данной статье хочу описать типы строк локализации по месту их использования, объекты системы DIRECTUM для строк локализации, в каких компонентах системы можно использовать строки локализации, а также опишу несколько вариантов локализации компонент, в которых нет возможности указывать строки локализации.

Для отображения текстовых элементов пользовательского интерфейса системы на разных языках в системе используются строки локализации. Задание значений локализуемых строк производится в компоненте Словарь локализации. Для возможности работы системы в английском интерфейсе в поставку должен входить модуль Поддержка английского языка пользовательского интерфейса.

Типы строк локализации

Локализуемые строки системы по месту их задания бывают следующих типов:

Локализуемые строковые реквизиты

Это значения определенных строковых реквизитов некоторых компонент системы, перечень компонент и их реквизитов приведен ниже в таблице. В таблице также приведен префикс элемента, который автоматически определяется от места задания локализуемой строки.

 

Компонента разработчика

Место задания (реквизит/свойство)

Префикс

Типы справочников

Заголовок в карточке типа справочника

REF

Заголовок в ед. числе в карточке типа справочника

REFSINGULAR

Заголовки в таблице «Реквизиты»

REQ

Заголовки «Действий»

ACT

Заголовки в таблице «Представления»

VIEW

Типы карточек электронных документов

Заголовок в карточке типа карточки электронного документа

EDOC

Заголовки в таблице «Реквизиты»

REQ

Заголовки «Действий»

ACT

Подсказки к «Действиям»

 

Заголовки в таблице «Представления»

VIEW

Диалоги

Заголовок в карточке диалога

DIRDLG

 

Заголовки в таблице «Реквизиты»

REQ

Разработка отчетов

Описание в карточке отчета

REPORT

Сценарии

Заголовок в карточке сценария

SCRIPT

 

Пример локализуемого строкового реквизита - Заголовок в компоненте Типы справочников

Наименования реквизитов типа признак

Это наименования значений реквизитов типа «Признак». Префикс создаваемой строки локализации «PICK». Например, для реквизита справочников Состояние записи значения Действующая/Закрытая;

Локализуемые свойства редактора форм 

Это заголовки элементов форм типов справочников, типов карточек документов и диалогов (ниже приведен список локализуемых элементов форм)

Компонента разработчика

Место задания (реквизит/свойство)

Префикс

Редактор форм

Заголовок для элементов формы типа «Поле», «Многострочное поле», «Поле с кнопкой», «Поле выбора записей»

LABEL

 

Заголовок для элементов формы типа «Закладка»

TAB

 

Заголовок для элементов формы типа «Группа»

GROUP

 

Заголовок для элементов формы типа «Кнопка»

BUTTON

 

Заголовок для элементов формы типа «Колонка таблицы»

COLUMN

 

Заголовок для элементов формы типа «Гиперссылка», «Изображение», «Веб-браузер», «Метка», «Выпадающий список», «Флажок», «Группа переключателей»; подсказка для элемента формы типа «Гиперссылка» и  элемента ленты «Кнопка»

 

 

Пример локализуемого свойства редактора форм:

Текстовые сообщения

Это текстовые сообщения, генерируемые пользователю в ISBL-коде.

Связь локализуемых строк с записями Словаря локализации осуществляется двумя способами:

  • посредством выбора из Словаря локализации – для локализуемых строк типа «Локализуемые строковые реквизиты», «Наименования реквизитов типа признак» и «Локализуемые свойства редактора форм»;
  • посредством вызова специальных ISBL-функций – для локализуемых строк типа «Текстовые сообщения»:
  • LoadString(Code; GroupCode; LanguageCode) – возвращает локализованную строку с кодом Code из группы строк с кодом GroupCode;
  • LoadStringFmt(Code; GroupCode; LanguageCode; Args) – возвращает отформатированную локализованную строку с кодом Code из группы строк с кодомGroupCode.
  •  LanguageCode определяет язык, для которого должно быть считано значение записи Словаря локализации. Если этот параметр опущен, то будет использоваться тот язык системы, который установил пользователь.

Объекты системы DIRECTUM для строк локализации

Для доступа к настройкам локализации в системе используется объект ILocalization. Используя данный объект можно:

  • получить значение локализованной строки с помощью метода GetString.
  • получить и задать текущий язык системы с помощью свойства CurrentLanguage. Код текущего языка считывается из профиля пользователя.

Примечание: Не рекомендуется устанавливать текущий язык системы с помощью свойства CurrentLanguage. Для изменения текущего языка системы следует воспользоваться компонентой Установка текущего языка.

  • получать информацию о параметрах локализации системы с помощью свойств IsMultiLanguageSystemPrimaryLanguageSupportedLanguages.
  • установить региональные настройки для приложения в обход региональных настроек пользователя, заданных в операционной системе с помощью свойства Locale.

В базе данных информация о списках языков локализации хранится в таблице SBSupportedLanguages, информация о строках данные о локализации текстовых элементов интерфейса хранятся в таблице SBLocalizedData и информация о дате последнего обновления групп локализации хранятся в таблице SBLocalizationSysData.

Особенности использования строк локализации        

Учет локализации на формах   

При работе со строками локализации на формах необходимо учитывать, что строки русской и английской локализации могут иметь разную длину, что в последствии может привести к скрытию части букв. Поэтому желательно, чтобы длина строк разноязычных локализации были примерно одинаковы. Если такое невозможно, следует ставить отступ для заголовка поля, соответствующий самой длинной строке локализации заголовка элемента формы.

В качестве примера можно рассмотреть случай, когда заголовок поля From сместился на форме из-за локализации. В русской локализации поле называется «С». Как видно, длины слов «С» и «From» отличаются. В следствие чего получилось смещение, представленное на рисунке ниже:

В редакторе форм можно быстро проверить расположение заголовков полей для разной локализации с помощью элемента на ленте  Локализация.

Учет локализации в типовых маршрутах

Для наименования типового маршрута, заголовков параметров типового маршрута нет возможности использовать строки локализации. Обходной вариант указывать заголовок на русском и английском языке через слеш или только на английском языке.


           

Для формирования тем задач, заданий и уведомлений c локализацией нужно прописать код при старте задачи или задания/уведомления, который подставляет значение из строки локализации:

Для формирования результатов выполнения и текста по умолчанию с локализацией можно воспользоваться одним из способов:

  1. в схеме типового маршрута у блока в заголовке результата выполнения и тексте по умолчанию указать только английский заголовок;
  2. в схеме типового маршрута у блока в заголовке результата выполнения и тексте по умолчанию указать русский и английский заголовок через слеш;

  1. создать прикладной блок и для него настроить результаты выполнения и текст по умолчанию с привязкой к Словарю локализации

Учет локализации в мастерах действиях

В мастерах действиях не предусмотрено использование Словаря локализации. Обойти данный момент можно несколькими способами:

  1. указать имена этапов, описание этапов, заголовки элементов окна этапа, наименования значений признаков только на английском языке;
  2. указать имена этапов, описание этапов, заголовки элементов окна этапа, наименования значений признаков на русском и английском языке через слеш.

Пример одного из этапов мастера действий:

Пример параметра мастера действий с типом «Признак»:

  1. создать этапы, параметры мастера действий как на русском, так и английском языке. Для этапов использовать параметры на соответствующем языке. От локализации пользователя показывать этапы на русском языке или на английском.

Учет локализации в строковых реквизитах

Для реквизитов с типом «Строка» нельзя использовать строки локализации. Обходные решения:

1) пользователь указывает данные на русском и английском языке через слеш;

2) пользователь указывает данные только на английском языке;

3) подменять реквизиты на форме карточки от локализации текущего пользователя;

4) для справочников использовать несколько представлений;

5) дублировать реквизиты, т.е. заводить реквизиты для каждого языка.

 

Что следует учесть при использовании локализации

1) Учитывайте в разработке, что предопределенные переменные YES_VALUE и NO_VALUEне локализуются, т.е. их значения всегда равны ДА и НЕТ соответственно.

2) При использовании локализации не забывайте переводить все отображаемые пользователю сообщения.

3) Учитывайте увеличение трудоемкости при локализации, в среднем она возрастает примерно на 10-50%, если перевод предоставляется заказчиком, и на 20-100%, если перевод осуществляется собственными силами.

4) При экспорте разработки не забывайте вручную добавлять строки локализации, которые используются в текстах разработки, так как они автоматически не подгружаются при экспорте. Для решения данной ситуации можно воспользоваться сценарием, описанным в статье Автоматическая выгрузка строк локализации и констант, используемых в тексте разработки.

Александр Чугунов

Сюда еще можно добавить про возможность использовать в коде строки локализации без функций LoadString и тд. Для этого добавляем строку локализации в группу CONST. Пример есть в этой статье. Обычно такие строки используют в коде вместо явного указания строкового значения, например, CONST_AUTONUMBER ( = 'АВТОНОМЕР') можно использовать вместо 'АВТОНОМЕР' или LoadString("AUTO_CODE"; SYSRES_SBDATA;)

Андрей Сукач

Когда планируется поддержка Юникода / UTF-8? :)

Марина Котусева

"Для формирования тем задач, заданий и уведомлений c локализацией нужно прописать код при старте задачи или задания/уведомления, который подставляет значение из строки локализации:" - и чью локализацию он учтет? Пользователя workflow?

Юлия Литвинюк
"Для формирования тем задач, заданий и уведомлений c локализацией нужно прописать код при старте задачи или задания/уведомления, который подставляет значение из строки локализации:" - и чью локализацию он учтет? Пользователя workflow?

Тут необходимо идти от особенностей самого бизнес-процесса:

1) все участники процесса используют одну локализацию, например, филиал в другой стране. Тогда есть смысл формировать темы задач, заданий и уведомлений при старте ТМ, определяя локализацию инициатора.

2) в рамках одного процесса используют различные локализации, но известны исполнители, использующие другой язык, например, топ-менеджеры компании. Тогда лучше при создании заданий/уведомлений определять исполнителя и его локализацию  и сформировать темы/инструкции на требуемом языке

3) если в рамках одного блока бизнес-процесса исполнители могут быть с различной локализацией, то в данном случае есть 3 варианта:

  • оставлять темы  только на английском языке
  • задавать темы  2х языках через слеш
  • уже после создания заданий подменять в них темы, исходя из локализации исполнителя.

Авторизуйтесь, чтобы написать комментарий