Unicode resources (Локализация подукта)

Тема в разделе "WASM.WIN32", создана пользователем Dark Silence, 26 сен 2006.

  1. Dark Silence

    Dark Silence New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    16
    Адрес:
    Russia
    При локализации продукта возник ряд сложностей. Локализация выполняется посредством ресурсов на разных локалях.

    Описание метода на сайте 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 ресурсы на нескольких языках. Может есть софт специализированный для работы с ресурсами на нескольких локалях или какой ещё выход, может я что упустил?

    Я уже жалею что выбрал подобный способ локализации :dntknw: он имеет ряд преимуществ, перед остальными, но при выборе я и не догадывался о таких сложностях которые встанут на моём пути :) Поэтому не предлагайте использовать другой способ) Это самый крайний метод)
     
  2. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia
    Всё равно предложу :). Создай ini-файлы с локализованными строками, как это сделано в Total Commander, 7-Zip и большинстве других нормальных программ.

    Microsoft с RSDN'ом в данном случае - нам не указ. Представь себе ситуацию, когда пользователь вызвался перевести твою программу, к примеру, на румынский язык. Если будешь использовать текстовые файлы, то любой мало-мальски грамотный пользователь сможет открыть текстовый файл и перевести все строки, а затем выслать тебе перевод по e-mail. Точно также любой пользователь, который заметил ошибку в переводе, легко исправит её, отредактировав текстовик. Если же используешь DLL, то надо ещё найти такого румына, чтобы он знал, что такой ресурсы и как их редактировать, да ещё и редактор ресурсов у него должен быть с поддержкой Unicode...

    В общем, бросай DLL и переводи свои ресурсы в текстовые файлы (лучше всего в кодировке UTF-8 или UTF-16).
     
  3. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Например так: русский .rc пишется в Win1251, западноевропейские - в Win1252, японский - в ShiftJIS и т.п. Потом всё компилируется RC с соответствующим ключом /c (ну или указать #pragma code_page в каждом RC).
    А для удобного редактирования ресурсов на разных языках есть куча всяких локализаторских прог типа Trados, Passolo, Alchemy Catalyst и т.п.
     
  4. Dark Silence

    Dark Silence New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    16
    Адрес:
    Russia
    SDragon, спасибо за совет.
    Сколько я это себе представлял :) Да, удобства неоспоримы, но есть одно «но». Вот сейчас, кстати, один румын переводит мою программу) и я выяснил что румынский язык весьма размашистый. И фразы на румынском длиннее аналогичный на английском в 2 раза :dntknw: Если бы у меня был ini-файл, было бы худо, т.к. многие надписи обрезались бы.

    reverser спасибо.
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Dark Silence
    Это ещё почему???
     
  6. Dark Silence

    Dark Silence New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    16
    Адрес:
    Russia
    Вот простой пример:

    В 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.»

    Естественно, чтобы диалог сохранил читаемость в румыснкой локали, мне надо немного раздвинуть элемент управления с данным текстом по вертикали, и сдвинуть вниз следующие за ним элементы.

    Т.е. не во всех местах в программе я могу оставить «запас». К тому же нет уверенности что запаса хватит.
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Dark Silence
    А какое отношение имеет ini к ширине текста в диалогах? И в чём преимущество в данном случае перед строками в ресурсах? Или ты и диалоги делаешь разными для разных языков?

    А решение есть: диалоги могут масштабироваться, для того у них размеры исчисляются в dialog base units. В RadASM'e, например, можно настраивать их масштаб.
     
  8. Dark Silence

    Dark Silence New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    16
    Адрес:
    Russia
    IceStudent
    При создании диалога для английского языка я создал элемент управения определённого размера. В него английский текст входит замечательно. Но при вставке в этот же элемент текста на румынском, он обрезается, т.к. он длиннее на 25 процентов.

    Если бы я просто загружал строки из ini-файла и устанавливал бы их на элементы управления, то такая бы обрезка довольно часто попадалась. Как выход я бы мог хранить координаты и размеры элементов в том же ini-файле, но тут теряется смысл, мне проще использовать rc-файлы, вместо ini-файла моего формата)
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ок. Ты говорил просто о строках в ресурсах.
     
  10. Dark Silence

    Dark Silence New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    16
    Адрес:
    Russia
    Ладно, тему можно закрыть, решение проблемы вообщем я нашёл.

    reverser подсказал, спасибо ему) Если у кого возникнет подобная проблема, используйте этот метод — работает, удобно.
     
  11. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    насколко я понимаю, если скрипт ресурсов в ANSI кодировке, то он сначала конвертируется в UNICODE согласно кодовой страницы системы или по умолчанию, а потом уже компилируется. можно сразу создавать в UNICODE, но тогда не знаю, как его будут понимать редакторы ресурсов (может, из VS можно - у меня просто не установлена)
     
  12. Dark Silence

    Dark Silence New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    16
    Адрес:
    Russia
    shoo
    Я написал в первом посте:

    Никак, я нашёл только один редактор ресурсов нормально работающий с UNICODE rc-файлами.