Приложение на 2-х языках

Тема в разделе "WASM.WIN32", создана пользователем ntcdm, 15 июн 2007.

  1. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Необходимо сделать программу на VC++ на 2-х языках с возможностью выбора между языками.

    Раньше я делал так: выносил все ресурсы, например русские, в отдельную ДЛЛ, а потом если пользователь хочет выбрать русский язык подгружал эту длл и вызывал

    AfxSetResourceHandle(hDll);

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

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

    Если бы вторая схема позволяла больше управление, это было бы оптимально.

    Кто может помочь по данному вопросу ?
     
  2. JohnSmith

    JohnSmith New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    41
    сделать каталог languages, в котором будут файлики ini или xml , что больше по душе. я xml советую.

    по определенным тегам прочитал все строковые ресурсы и используешь.

    очень распространенный подход.

    плюсы:
    - не нужно заморачиваться с дллками
    - если пользователь захочет - переведет на свой язык спокойно.
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Не было печали.. Посмотрите на текущий офис, на его размеры.

    HRSRC FindResourceEx( HMODULE hModule,
    LPCTSTR lpType,
    LPCTSTR lpName,
    WORD wLanguage
    );

    Передавая явно язык, управляешь локализацией. Удобства, конечно, теряются, но се ля ви. Если не брать в расчет фреймворки, то придётся повозиться.
     
  4. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Почитал в msdn что в Windows 2000 и более поздних вторая описанная мной схема работает некорректно, и майкрософт ее не рекомендует. рекомендуется использовать дллки с ресурсами, что я скорее всего и сделаю.
     
  5. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100
    Я делал, файлы со строками, и при создание окон вводил тексты с этого файла (сделал процедуру, суёшь номер получаешь ссылку на строку), говорят на си проще через ini файлы т.к. в винде есть функции для работы с ними, (насколько я понял надо дать одну строку и получить другую)

    Пример ini файла языка

    [
    Код (Text):
    1. TFrmOptions02Fonts]
    2. GroupBox.Caption=Шрифты и цвета:
    3. Edit.Text=Текст мессаги
    4. TreeView.Items=#Alex,"Новая линия","Новая линия",Alex#
    5.  
    6.  
    7. [TFrmOptions03Sounds]
    8. GroupBox.Caption=Звуки:
    9. TreeView.Items=#"Юзать только, если чат не является активным"#
     
  6. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Да, это выход. Но если в приложении больше 10-ти далоговых окон и больше 100 контролов, перелопачивать это все как-то нет желания. Я скопом все ресурсы загрузил в прогу RCLocalize, перевел, и теперь думаю как это оптимальнее всего впихнуть обратно.