# Локализация приложений Локализация приложений осуществляется средствами Java Resource Bundle и специальными тэгами, внедряемыми в код и метаданные приложений. ## Словари Для хранения строк на разных языках используются словари. Словарём является пакет ресурсов (Resource Bundle), содержащий properties-файлы со строками `{ключ}={значение}`: - `{имя_словаря}.properties` \ Словарь по умолчанию - `{имя_словаря}_{язык}.properties` \ Словарь для указанного языка. - `{имя_словаря}_{язык}_{локаль}.properties` \ Словарь для указанного языка с уточнением локали. ### Создание словаря Новый словарь создается через контекстное меню от каталога с ресурсами. 1. В idea перейдите в каталог в котором хотите создать словарь 2. Вызовите на каталоге контекстное меню 3. Выполните пункт `New > Resource Bundle` Имя словаря должно совпадать с именем сущности или пакета. В создавшиеся файлы, добавьте локализованные строки в формате `{ключ}={значение}` ```properties Сaption=Валюта ID=Идентификатор MultiLineName=Многострочный \ текст ``` Обратите внимание, что при создании многострочной ресурсной строки, каждую строку необходимо заканчивать символом `\`. ## Использование локализованных строк Локализация строк доступна в: - Scala-коде `*Dvi/Avi` – классов - Scala-коде `*Dpi/Api` – классов - Scala-коде `*_Pkg` – классов - Аннотациях `@Oper` , `@MainSelection` - `*.avm.xml` – файлах. \ Для свойств, хранящих "наименование" Для получения значения локализованной строки из словаря, имя которого совпадает с текущей сущностью, необходимо указать ключ локализованной строки, обрамлённый тэгами: `[#Ключ_строки]` Если необходимо получить значение строки из произвольного словаря, необходимо указать полный путь к словарю: `[#ru/bitec/app/{модуль}/Словарь.Ключ_строки]` ### Локализованные строки в Scala-коде Для подстановки локализованного значения строки в Scala-код используется макрос `ls"#Ключ_строки"` или `ls"""#Ключ_строки"""`. ```scala def foo(): Unit = { showMessage(ls"[#MyLocalizedMessage]") } ``` ### Локализованные строки в аннотациях ```scala @MainSelection(caption = "[#Gs3_StockMainMenu.caption]") object Gs3_StockMainMenuAvi extends ProjectApplicationAvi {} ``` ### Локализованные строки в `*.avm.xml` ```xml ```