Version 3 (modified by 16 years ago) (diff) | ,
---|
О локализации собсно GGBuildTools
Проблему представляло из себя то что в консоль под windows выводятся кракозяблики, хотя в GUI-шные формы все идет как надо. В ходе проведенных исследований выяснено - венды все еще используют cp866 в консоли, вместо cp1251 - это верно для русских версий всех вендов вплоть до XP и оно там так стоит по умолчанию.
В lcl есть средства для работы с GetText. Кроме этого есть средства для перекодировки строк в gettext-файлах в нужную. К сожалению, в Lazarus 0.9.24 все еще используется ANSI по умолчанию в GUI - переход на юникод уже совершен в 0.9.25, но тот все ещё в разработке. К счастью, в 0.9.24 (точнее в rtl компиллятора fpc 2.2.0, который там используется) в модуле wstringh уже пробиты базовые преобразования для различных вариантов представления юникода, в т.ч. для utf-8 который и требуется. Также имеется достаточно уродливый и сделанный наспех модуль lconv в котором есть перекодировки между utf-8, cp1251 и koi8-r. Кодировки cp866 нет. К сожалению, там все сделано кое-как. В lcl из svn текущей версии лазаруса обнаружились обновленные версии исходников модуля Translate (больше не использует lconv), и модуль lconvencoding - фактически представляющий из себя переписанный по-человечьи lconv - там в нормальной форме прописана работа с огромным множеством кодировок, но cp866 также отсутствует. К счастью, в этом модуле все сделано так, что добавить новую кодировку особого труда не составит.
Таким образом, планируется взять в дерево исходников GGBuildTools модули Translate и lconvencoding из trunk-а svn-а Lazarus-а, ибо ждать выхода версии 0.9.26 бессмысленно. Либо модифицировать модуль lconvencoding для того чтобы он поддерживал cp866, либо добавить нужный функционал в свои модули, но связанно с lconvencoding. После чего выполнить локализацию консольных утилит с помощью GetText в кодировке utf-8, извлекаемые из которого строки преобразуются в cp866 штатными средствами lcl с вручную настроенным перекодированием в cp866 (через widestringmanager).