При локализации продукта возник ряд сложностей. Локализация выполняется посредством ресурсов на разных локалях. Описание метода на сайте rsdn: http://rsdn.ru/article/ui/multilang.xml Собственно проблемы (вопросы): 1. Если rc-файл в ANSI то всякие специфичные символы для языков вроде немецкого, румынского и т.п. теряются напрочь, переводя rc-файл в UNICODE я теряю возможность быстро поправить его в редакторе ресурсов любого VS до версии 2005 (которую использовать с несколькими языками просто невозможно, чтобы в ней работать с rc-файлом, содержащим в себе неск. языков требуется проворачивать хитрый финт, который просто утомляет. Описание проблемы: http://www.codecomments.com/Visual_Studio/message742832.html (англ. язык) ) Отсюда вопрос: есть ли какой-нибудь редактор ресурсов позволяющий работать с rc-файлам в UNICODE? Беглый поиск с утра по Google привёл только к SiComponents — Resource Builder, утилита бажная. Мой rc-файл принимать отказывается, ссылаясь на множества ошибок там где их нет. Зато умеет сохранять ресурсы в Unicode. 2. Как-то же Microsoft умудряется вставлять в туже Shell32.dll ресурсы на нескольких языках. Может есть софт специализированный для работы с ресурсами на нескольких локалях или какой ещё выход, может я что упустил? Я уже жалею что выбрал подобный способ локализации он имеет ряд преимуществ, перед остальными, но при выборе я и не догадывался о таких сложностях которые встанут на моём пути Поэтому не предлагайте использовать другой способ) Это самый крайний метод)
Всё равно предложу . Создай ini-файлы с локализованными строками, как это сделано в Total Commander, 7-Zip и большинстве других нормальных программ. Microsoft с RSDN'ом в данном случае - нам не указ. Представь себе ситуацию, когда пользователь вызвался перевести твою программу, к примеру, на румынский язык. Если будешь использовать текстовые файлы, то любой мало-мальски грамотный пользователь сможет открыть текстовый файл и перевести все строки, а затем выслать тебе перевод по e-mail. Точно также любой пользователь, который заметил ошибку в переводе, легко исправит её, отредактировав текстовик. Если же используешь DLL, то надо ещё найти такого румына, чтобы он знал, что такой ресурсы и как их редактировать, да ещё и редактор ресурсов у него должен быть с поддержкой Unicode... В общем, бросай DLL и переводи свои ресурсы в текстовые файлы (лучше всего в кодировке UTF-8 или UTF-16).
Например так: русский .rc пишется в Win1251, западноевропейские - в Win1252, японский - в ShiftJIS и т.п. Потом всё компилируется RC с соответствующим ключом /c (ну или указать #pragma code_page в каждом RC). А для удобного редактирования ресурсов на разных языках есть куча всяких локализаторских прог типа Trados, Passolo, Alchemy Catalyst и т.п.
SDragon, спасибо за совет. Сколько я это себе представлял Да, удобства неоспоримы, но есть одно «но». Вот сейчас, кстати, один румын переводит мою программу) и я выяснил что румынский язык весьма размашистый. И фразы на румынском длиннее аналогичный на английском в 2 раза Если бы у меня был ini-файл, было бы худо, т.к. многие надписи обрезались бы. reverser спасибо.
Вот простой пример: В nag-диалоге друг под другом стоят несколько надписей (элементы управления static), в одном из них установлен такой текст: «LinkyCat has not trial period. You may use the program for as long as you like without buying it. However, some features will be locked.» В переводе на румынский: «LinkyCat nu are o perioadă limitată de оncercare. Puteţi folosi programul oricât de mult doriţi, fără să îl cumpăraţi. Totuşi, dacă nu aveţi licenţă, unele opţiuni nu vor fi disponibile.» Естественно, чтобы диалог сохранил читаемость в румыснкой локали, мне надо немного раздвинуть элемент управления с данным текстом по вертикали, и сдвинуть вниз следующие за ним элементы. Т.е. не во всех местах в программе я могу оставить «запас». К тому же нет уверенности что запаса хватит.
Dark Silence А какое отношение имеет ini к ширине текста в диалогах? И в чём преимущество в данном случае перед строками в ресурсах? Или ты и диалоги делаешь разными для разных языков? А решение есть: диалоги могут масштабироваться, для того у них размеры исчисляются в dialog base units. В RadASM'e, например, можно настраивать их масштаб.
IceStudent При создании диалога для английского языка я создал элемент управения определённого размера. В него английский текст входит замечательно. Но при вставке в этот же элемент текста на румынском, он обрезается, т.к. он длиннее на 25 процентов. Если бы я просто загружал строки из ini-файла и устанавливал бы их на элементы управления, то такая бы обрезка довольно часто попадалась. Как выход я бы мог хранить координаты и размеры элементов в том же ini-файле, но тут теряется смысл, мне проще использовать rc-файлы, вместо ini-файла моего формата)
Ладно, тему можно закрыть, решение проблемы вообщем я нашёл. reverser подсказал, спасибо ему) Если у кого возникнет подобная проблема, используйте этот метод — работает, удобно.
насколко я понимаю, если скрипт ресурсов в ANSI кодировке, то он сначала конвертируется в UNICODE согласно кодовой страницы системы или по умолчанию, а потом уже компилируется. можно сразу создавать в UNICODE, но тогда не знаю, как его будут понимать редакторы ресурсов (может, из VS можно - у меня просто не установлена)
shoo Я написал в первом посте: Никак, я нашёл только один редактор ресурсов нормально работающий с UNICODE rc-файлами.