Разработка инсталляторов. Урок 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 >
В программе:
То текст на кнопках будет изменён на использованный в секции. Всё достаточно просто.
Будьте внимательны: если не указывать префикс языка перез названием значения, то сообщенипе будет изменено для всех языков!
Давайте скомпилируем наш скрипт.
Проверим русский язык:
На буржуйском:
Как видим, у нас всё прекрасно получилось. Задача на сегодня выполнена. Если же в будущем мы будем сталкиваться с теми функциями, которые мы сегодня не рассмотрели, но они относятся к языку - они будут естественно описаны и использованы. На этом на сегодня всё. Всем спасибо за внимание.