Перейти к основному содержанию
`Ctrl`+`K`

# Локализация приложений

Локализация приложений осуществляется средствами Java Resource Bundle и специальными тегами, внедряемыми в код и метаданные приложений.

## Словари

Для хранения строк на разных языках используются словари. Словарём является пакет ресурсов (Resource Bundle), содержащий `properties`-файлы со строками `{ключ}={значение}`:

- `{имя_словаря}.properties` - словарь по умолчанию

- `{имя_словаря}_{язык}.properties` - словарь для указанного языка.

- `{имя_словаря}_{язык}_{локаль}.properties` - словарь для указанного языка с уточнением локали.

### Создание словаря

Новый словарь создается через контекстное меню от каталога с ресурсами.

1. В IDEA перейдите в каталог в котором хотите создать словарь.

2. Вызовите на каталоге контекстное меню.

3. Выполните пункт `New > Resource Bundle`.

Имя словаря должно совпадать с именем сущности или пакета.

В создавшиеся файлы, добавьте локализованные строки в формате`{ключ}={значение}`:

    Сaption=Валюта
    ID=Идентификатор
    MultiLineName=Многострочный \
    текст

При создании многострочной ресурсной строки, каждую строку необходимо заканчивать символом `\`.

## Использование локализованных строк

Локализация строк доступна в:

- Scala-коде `*Dvi/Avi` – классов.

- Scala-коде `*Dpi/Api` – классов.

- Scala-коде `*_Pkg` – классов.

- Аннотациях `@Oper` , `@MainSelection`.

- `*.avm.xml` – файлах (для свойств, хранящих «наименование»)

Для получения значения локализованной строки из словаря, имя которого совпадает с текущей сущностью, необходимо указать ключ локализованной строки, обрамлённый тегами: `[#Ключ_строки]`.

Если необходимо получить значение строки из произвольного словаря, необходимо указать полный путь к словарю: `[#ru/bitec/app/{модуль}/Словарь.Ключ_строки]`.

### Локализованные строки в Scala-коде

Для подстановки локализованного значения строки в Scala-код используется макрос `ls"#Ключ_строки"` или `ls"""#Ключ_строки"""`.

    def foo(): Unit = {
        showMessage(ls"[#MyLocalizedMessage]")
    }

### Локализованные строки в аннотациях

    @MainSelection(caption = "[#Gs3_StockMainMenu.caption]")
    object Gs3_StockMainMenuAvi extends ProjectApplicationAvi {}

### Локализованные строки в `*.avm.xml`

    <representation caption="[#caption]">
    	<attributes>
    		<attr name="sSystemName"
                  caption="[#sSystemName]"
    			  isVisible="true"/>
        <attributes/>
    <representation/>

## Ввод значений на другом языке

Операция `Ввести текст на другом языке` позволяет ввести значение на другом языке для выбранного редактируемого поля.

Операция доступна если:

1. Ввод включен в характеристиках класса или глобально в настройках модуля `btk`.

2. Поле в выборке называется так же как и атрибут у редактируемого объекта класса.

3. Поле редактируемо.

4. Поле должно быть выбрано (нажали на поле ввода).

В списке выберете редактируемое поле и в контекстном меню выберете `Информация` -> `Ввести текст на другом языке`. В карточке выберете редактируемое поле и на тулбаре `Информация` -> `Ввести текст на другом языке`.

### Включение

Для класса `Карточка класса` -> `Характеристики` -> `Доступен ввод текста на других языках`.

Глобально `Настройки и сервисы` -> `Настройки модулей системы` -> `Общие настройки модулей` -> `btk` -> `bTextLangEnabledAll`.