Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
zaguzin
8 лет назад

Разработка инсталляторов. Урок 17. Inno Setup: работа с локализацией установщика и собственные сообщения.

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

Для поддержки различных языков в Inno Setup существует секция [Languages]. В ней находится идентификатор языка (Name) и указан путь к файлу, из которого установщик будет читать стандартные сообщения (MessagesFile).

В данном случае используется английский и русский языки, как мы видим выше. Имя (Name) мы можем менять. Указанный путь "compiler:Default.isl" - означает, что язык по умолчанию (Английский) находится в папке с компилятором. По умолчанию это C:\Program Files\Inno Setup 5, а русский язык (Russian.isl) находится в подпапке Languages там-же. Давайте откроем файл с английским языком - Default.isl с помощью редактора. Я использую Notepad++

В секции [LangOptions] у нас находится идентификатор языка (LanguageID=$0409),имя языка (LanguageName=English) и кодовая страница (LanguageCodePage=0). Если в кодовой странице прописано нулевое значение, то язык в списке будет присутствовать всегда, независимо от кодовой страницы системы. Остальные параметры в этой секции отвечают за стиль текста и т.п. В данном случае они закомментированы. В файле с сообщениями для русского языка (Russian.isl) всё похоже.

Название же языка указано символами юникода в шестнадцатеричном виде: LanguageName=<0420><0443><0441><0441><043A><0438><0439>. Это сделано в целях правильного использования и недопущения ошибок.

Можно отредактировать эти файлы прямо в папке с компилятором, то есть изменить стандартные значения. Можно скопировать эти файлы в папку с проектом и переименовать Default.isl в English.isl для собственного удобства. Я так и сделал. То есть эти файлы у меня будут использованы только в этом проекте, для других проектов буду использовать свои. Откроем проект и пропишем значения в секцию [Languages]:

Также хочу обратить ваше внимание на добавление в секцию [Languages] дополнительных возможностей. Например, мы можем указать там путь к текстовым файлам (отображаемым до и после установки) и лицензионному соглашению, которые будут использоваться только для выбранного языка:

InfoBeforeFile: "D:\Program\Do.txt"; InfoAfterFile: "D:\Program\Posle.txt"; LicenseFile: "D:\Program\License.txt"

InfoBeforeFile: "D:\Program\DoRus.txt"; InfoAfterFile: "D:\Program\PosleRus.txt"; LicenseFile: "D:\Program\LicenseRus.txt"

В программе:

InfoBeforeFile - текст из этого файла отображается до установки программы.

InfoAfterFile - текст из этого файла отображается после установки программы.

LicenseFile - файл с лицензионным соглашением.

Я данный функционал в проекте использовать не буду, просто ввёл в курс, что можно так сделать. Файлы можно использовать в формате .txt или .rtf.

Теперь давайте придумаем значения для текста вчерашнего проекта. На русском:

MainFiles=Основные файлы

Themes=Темы

RusLang=Русский язык

EngLang=Английский язык

RusHelp=Русская справка для программы

EngHelp=Английская справка для программы

RusLangFiles=Русская локализация

EngLangFiles=Английская локализация

FullInstallation=Полная установка программы

CustomInstallation=Выборочная установка программы

Для английского языка:

MainFiles=Main Files

Themes=Themes

RusLang=Russian Language

EngLang=English Language

RusHelp=Russian Help Files

EngHelp=English Help Files

RusLangFiles=Russian Localization

EngLangFiles=English Localization

FullInstallation=Full installation

CustomInstallation=Custom installation

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

Теперь создаём секцию [CustomMessages] под секцией [Languages]. Перед названием значения константы пишем префикс - имя языка из секции [Languages] с точкой после названия. На примере одной строки (чтобы не загромождать пост):

russian.MainFiles=Основные файлы

И на английском:

english.MainFiles=Main Files

И так для всех наших сообщений. Секция [CustomMessages] существует для созданий индивидуальных значений для констант. Далее поймёте лучше. То есть у нас получится вот так:

Теперь, когда мы прописали значения для сообщений, нам требуется прописать константы в описание (Description) пунктов установки компонентов. Значения прописываются подобным образом:

{cm:название константы}.

На примере выбора типа установки:

[Types]

Name: "full"; Description: "{cm:FullInstallation}"

Name: "custom"; Description: "{cm:CustomInstallation}"; Flags: iscustom

Скриншот:

Так поступаем со всеми Description, где нужно использовать собственные сообщения. Получаем:

[Types]

Name: "full"; Description: "{cm:FullInstallation}"

Name: "custom"; Description: "{cm:CustomInstallation}"; Flags: iscustom

[Components]

Name: "main"; Description: "{cm:MainFiles}"; Types: full custom; Flags: fixed

Name: "Component1"; Description: "{cm:Themes}"; Types: full custom

Name: "Russian"; Description: "{cm:RusLang}"; Types: full custom

Name: "Russian\Component3"; Description: "{cm:RusHelp}"; Types: full custom

Name: "Russian\Component5"; Description: "{cm:RusLangFiles}"; Types: full custom

Name: "English"; Description: "{cm:EngLang}"; Types: full custom

Name: "English\Component2"; Description: "{cm:EngHelp}"; Types: full custom

Name: "English\Component4"; Description: "{cm:EngLangFiles}"; Types: full custom

В программе:

Также мы можем создать секцию [LangOptions] в скрипте и указать нужные нам значения (шрифт, размер и т.п) для каждого языка. Если требуется, конечно. Также перед названием значения пишем префикс - имя языка и точку. Например:

[LangOptions]

russian.LanguageName=<0420><0443><0441><0441><043A><0438><0439>

russian.LanguageID=$0419

russian.LanguageCodePage=1251

russian.DialogFontName= MS Shell Dlg

russian.DialogFontSize=8

russian.WelcomeFontName=Verdana

russian.WelcomeFontSize=12

russian.TitleFontName=Arial

russian.TitleFontSize=29

russian.CopyrightFontName=Arial

russian.CopyrightFontSize=8

В программе:

Это делать совсем не обязательно. Но полезно, если не хотите редактировать файлы, содержащие локализацию. WelcomeFontName и WelcomeFontSize определяют название и размер шрифта, используемого на страницах Приветствие и Установка завершена. Остальное есть в начале поста.

Также существует секция [Messages]. В данной секции можно изменить только стандартные сообщения инсталлятора. Всё указываем также с префиксом. То есть если вы создали данную секцию и указали в ней такие значения:

[Messages]

russian.ButtonNext=&Вперед >

english.ButtonNext=&Forward >

В программе:

То текст на кнопках будет изменён на использованный в секции. Всё достаточно просто.

Будьте внимательны: если не указывать префикс языка перез названием значения, то сообщенипе будет изменено для всех языков!

Давайте скомпилируем наш скрипт.

Проверим русский язык:

На буржуйском:

Как видим, у нас всё прекрасно получилось. Задача на сегодня выполнена. Если же в будущем мы будем сталкиваться с теми функциями, которые мы сегодня не рассмотрели, но они относятся к языку - они будут естественно описаны и использованы. На этом на сегодня всё. Всем спасибо за внимание.

888
165.834 GOLOS
На Golos с February 2017
Комментарии (1)
Сортировать по:
Сначала старые