Българска локализация на setup project във MS Visual Studio 2005

Visual Studio 2005 предоставя инструменти за лесна направа на инсталации под формата на Setup/Deployment project. Сравнително лесно се правят инсталации, които са straight-forward и не изискват някаква сложна логика. Поддържат се и предварителни изисквания (prerequisites), custom actions както и ред други благини.
За съжаление няма българска локализация и още по-лошо – няма никаква локализация, която да поддържа кирилица. Проблемите, които произтичат от това са няколко:
– създадения инсталатор изглежда непрофесионално; опитваш се да предложиш продукт, а се инсталира на латиница. Тук имам предвид стандартните съобщения като ОК, Cancel надписите на бутоните
– design time се предоставя известен набор възможности за въвеждане на разни текстове като ProductName и др. За съжаление, ако се въведат на кирилица излиза warning, а run-time на същото място излизат ??????.

Има и други такива, за които всеки, на когото му се е налагало да използва може да сети и сам.

Какво може да се направи?
Накратко начина, по-който може да се кирилизира инсталатора не е лесен и изисква известни усилия, но в крайна сметка се постига желания резултат.

Като начало се инсталира Windows SDK Components for Windows Installer Developers от http://msdn2.microsoft.com/en-us/library/aa370834.aspx
От тук използваме инструмента Orca, който най-общо може да редактира ресурсните таблици на MSI файл, както и няколко скрипта в подпапка SamplesScripts

– Генерираме setup project-a от Visual Studio 2005. Обикновено той се състои от setup.exe и някакъв msi файл
– С помощта на Orca отваряме msi файла. Тук в зависимост от сложността на инсталацията може да се наложи да се експортират доста таблици от меню Tables->Export tables, но за по-прости setup проекти нужните таблици са:
Property.idt – обща информация за проекта като ProductName и други такива
Control.idt – текстовете по контролите и диалозите
RadioBut.idt – текстове на радио бутоните
– Превеждаме тези таблици както намерим за добре
– Кодовата таблица на msi setup файла, трябва да се промени на 1251, за да работи правилно с кирилица
WiLangId.vbs .msi codepage 1251
– Обратно импортиране на преведените таблици обратно в msi файла
WiImport.vbs .msi <път до idt файловете> Property.idt
WiImport.vbs .msi <път до idt файловете> Control.idt
WiImport.vbs .msi <път до idt файловете> RadioBut.idt

…..

Вече е всичко готово и MSI файлът е локализиран успешно!

Както може да се види обаче, процесът е доста дълъг и неприятен. Да се следва тази процедура при всеки build е крайно досадно и скучно.
Може да се ускори значитено като се поставят някои команди в Post-Build Property-to на самия проект, а именно първо се добавят следните файлове към проекта
– WiLangId.vbs, WiImport.vbs (те се намират в Windows SDK Components for Windows Installer Developers пакета в подпапка SamplesScripts)
– всички idt файлове, които са нужни за проекта
– в Post-Build Property се добавят тези редове:
cscript “$(ProjectDir)WiLangId.vbs” “$(BuiltOuputPath)” codepage 1251
cscript “$(ProjectDir)WiImport.vbs” “$(BuiltOuputPath)” “$(ProjectDir)” Property.idt
cscript “$(ProjectDir)WiImport.vbs” “$(BuiltOuputPath)” “$(ProjectDir)” Control.idt
cscript “$(ProjectDir)WiImport.vbs” “$(BuiltOuputPath)” “$(ProjectDir)” RadioBut.idt

И това е всичко.
Вече след всеки build автоматично проектът ще се кирилизира, ресурсните таблици ще се импортират обратно в него и се получава един красив български setup project!

Както обикновено се случва – всеки метод има някои недостатъци. Най-общо това са:
– ако се промени нещо по интерфейса (добави се нов стандартен диалог към проекта например) е нужно ресурсните таблици да се прегенерират и да се merge-нат към вече преведените
– при промяна design time на properties те не се отразяват, защото… се замазват от преведените ресурсни таблици. Решение за това е промените да се правят и в Proprty.idt

Като заключение ми се струва, че Microsoft не са обмислили setup projects (за момента, може би в VS 2008 ще е различно) и освен проблемите с локализацията има и доста недъзи по самия процес на направа на проекта….
Е имат и доста добри неща – най-вече добрата интеграция с Visual Studio :))