VC ++ 10 MFC: как правильно сделать локализацию - PullRequest
8 голосов
/ 05 января 2012

Я парень .NET, которому приходится работать над приложением MFC. Приложение представляет собой исполняемый файл VS2008 MFC, который я преобразовал в VS2010. Первоначальные разработчики сделали локализацию, указав имя файла .txt с парами ключ-значение в нем в командной строке приложения. Установленные ярлыки для исполняемого файла указывают другой файл .txt в зависимости от страны, в которой устанавливается приложение. Это, конечно, не работает, если вы просто запускаете .exe напрямую. Это кажется странным способом сделать что-то для меня.

Я хочу сделать это более корректным способом MFC, но мне трудно найти окончательные ответы в Google. Насколько я понимаю, что таблица строк в файле .rc должна использоваться для этой локализации? Это лучшая практика для МФЦ?

Что касается таблицы строк, я прочитал, что практикой является создание нескольких таблиц строк, каждая для своего языка. Как приложения MFC выбирают какой язык использовать? Основано ли это на текущих настройках языка машины или я могу управлять этим (возможно, мы хотим, чтобы язык определялся установщиком Wix .msi, который мы также создаем)?

Я также читал, что встраивание всех ресурсов в приложение MFC перестало быть популярным, и что теперь вам следует компилировать отдельные ресурсы .dll? Разве это плохо плохо расследуют, как это сделать ...

Наконец, я должен сделать что-то особенное, чтобы MFC поддерживал Unicode или MFC Unicode по умолчанию?

Спасибо

Ответы [ 2 ]

10 голосов
/ 09 января 2012

Идея состоит в том, что все локализуемые элементы должны храниться в ресурсах. Стандартные объекты пользовательского интерфейса, такие как меню и диалоги, автоматически сохраняются там (ресурсы) для вас, но такие элементы, как строковые литералы (например, сообщения об ошибках, сообщения в сообщениях, ...), должны быть извлечены из исходного кода в таблицу строк. В этой короткой статье кода проекта моей показано, как легко извлечь строки из таблицы строк в вашем коде.

Примечание. В вашем скрипте ресурсов должна быть только одна таблица строк (.rc).

С этого момента вы можете переводить свои ресурсы и создавать DLL-библиотеки ресурсов (также называемые спутниковыми DLL). Идея состоит в том, что вы сохраняете разные копии файлов .rc для каждого языка. Каждый перевод компилируется в DLL без кода , которая действует как контейнер для ресурсов.

Эта другая моя статья кода проекта позволяет вам легко загружать библиотеки ресурсов в соответствии с настройками системы или предпочтениями пользователя: код просматривает среди ваших библиотек ресурсов ресурсы, доступный язык которых лучше всего соответствует настройкам пользователя (на основе языка пользовательского интерфейса и региональные настройки). Код также позволяет легко создать меню со всеми доступными языками. Таким образом, ваш пользователь может переопределить выбор по умолчанию.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Мое объявление следует. Не стесняйтесь пропустить: -)

Что касается перевода ресурсов, управления переводами и создания библиотек ресурсов, вы можете проверить appTranslator .

КОНЕЦ ОБЪЯВЛЕНИЯ: -)

Что касается Unicode, MFC поставляется с версиями кода ANSI и Unicode. Вам решать, хотите ли вы создать приложение ANSI или Unicode: просто сделайте свой выбор на первой странице настроек проекта. Конечно, если вы начинаете с нуля, вам обязательно следует использовать Unicode. Но если устаревшие причины вынуждают вас оставаться ANSI / MBCS, не беспокойтесь слишком сильно: это не помешает вам локализовать ваше приложение.

6 голосов
/ 05 января 2012

Несколько лет назад, когда мне приходилось работать с несколькими языками в MFC, мы использовали отдельные библиотеки ресурсов.Все, что вам нужно сделать, это сделать один вызов для переключения, который обрабатывает функции ресурсов, которые будут использоваться с этого момента.

Вам нужно сделать больше, чем просто изменить строки.В частности, в диалогах будут содержаться строки, и вам может понадобиться изменить макет, если эти строки станут слишком длинными после перевода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...