В настоящей записке описываются некоторые из конструкций и процедур, которые можно использовать для локализации вашего компонента, будь то приложения или элемента управления OLE или DLL, который использует MFC.
Обзор
Действительно, есть два вопроса для разрешения при локализации компонент, который использует MFC. Прежде всего необходимо локализовать свои собственные ресурсы — строки, диалоговые окна и другие ресурсы, которые являются специфическими для компонента. Большинство компонентов, созданные с использованием MFC также включать и использовать несколько ресурсов, которые определяются MFC. Необходимо предоставить локализованные ресурсы MFC. К счастью несколько языков уже предоставляются классами MFC.
Кроме того, компонент должен быть готов работать в своей среде (Европейский или DBCS включено окружающей среды). По большей части это зависит от вашего приложения правильно обрабатывать символы с установленным битом высоким и обработки строк с двухбайтовые символы. MFC, по умолчанию включена, для обеих из этих сред, таким образом, чтобы это можно иметь в единый «мире» двоичный файл, который используется на всех платформах с просто разные ресурсы, подключен к сети во время установки.
Локализация компонента ресурсов
Локализация приложения или библиотеки DLL должен включать просто заменить ресурсы с ресурсами, которые соответствуют целевым языком. Для ваших собственных ресурсов, это довольно простой: Редактирование ресурсов в редакторе ресурсов и строить ваше приложение. Если ваш код написан правильно, не будет никаких строк или текст, который необходимо локализовать жестко закодированных в исходный код C++ – все локализации может быть сделано, просто изменяя ресурсов. В самом деле вы можете реализовать компонент таким образом, чтобы все предоставления локализованной версии даже предполагает не сборки из исходного кода. Это является более сложным, но хорошо стоит и выбран для MFC, сам механизм. Это также возможность локализации приложения путем загрузки файла EXE или DLL в редактор ресурсов и непосредственного редактирования ресурсов. Хотя это и возможно, это требует повторного изменения каждый раз, когда вы построить новую версию приложения.
Один из способов избежать, заключается в том, чтобы найти всех ресурсов в отдельный DLL, иногда называют вспомогательной библиотеки DLL. Эта библиотека DLL затем загружается динамически во время выполнения и ресурсы загружаются из этой DLL вместо от главного модуля с вашим кодом. MFC поддерживает этот подход. Рассмотрим приложение под названием MYAPP.EXE; Он может иметь все свои ресурсы в библиотеке DLL, под названием MYRES.DLL. В приложении в InitInstance он будет выполнять следующие действия для загрузки этой DLL и привести к MFC для загрузки ресурсов из этого местоположения:
CMyApp::InitInstance()
{
/ / Одна из первых вещей в коде init
HINSTANCE hInst = LoadLibrary("myres.dll");
Если (hInst! = NULL)
AfxSetResourceHandle(hInst);
/ / будет следовать другой код инициализации
.
.
.
}
Затем MFC будет загружать ресурсы из этой DLL вместо из myapp.exe. Все ресурсы, однако, должны присутствовать в этом DLL – MFC не будет искать экземпляр приложения по данному ресурсу. Этот метод применяет одинаково хорошо для регулярных библиотек DLL, а также OLE контроля. Программа установки будет скопировать соответствующую версию MYRES.Библиотеки DLL, в зависимости от какой язык ресурсов пользователь хотел бы.
Это довольно легко создать ресурс только DLL. Создание проекта библиотеки DLL, добавьте ваш.RC файл к нему и добавьте необходимые ресурсы. Если у вас есть существующий проект, не поддерживающей эту технику, можно скопировать ресурсы с этого проекта. После добавления файла ресурсов в проект вы почти готовы построить проект. Единственное, что вы должны сделать это параметры компоновщику включить/NOENTRY. Это указывает компоновщику DLL имеет не точку входа – так как он не имеет кода, он имеет не точка входа.
Примечание Редактор ресурсов в Visual C++ 4.0 и более поздних поддерживает несколько языков.RC файл. Это можно сделать очень легко управлять вашим локализации в рамках одного проекта. Ресурсы для каждого языка контролируется с помощью директивы препроцессора, генерируемых редактором ресурсов.
С помощью предоставленного MFC локализованные ресурсы
Любое приложение MFC, вы строите повторно использует две вещи от MFC: код и ресурсы. То есть MFC имеет различные сообщения об ошибках, встроенные диалоговые окна и другие ресурсы, которые используются классами MFC. Чтобы полностью настроить ваше приложение, необходимо локализовать не только ресурсы приложения, но и ресурсы, которые поступают непосредственно из MFC. MFC предоставляет несколько различных языковых файлов ресурсов автоматически, так что если язык, который вы используете один из языков, который уже поддерживает MFC, вам просто нужно убедиться, что вы используете эти локализованные ресурсы.
Состоянию на момент написания, MFC поддерживает: китайский, немецкий, испанский, французский, итальянский, японский и корейский. Файлы, которые содержат эти локализованные версии находятся в MFC\INCLUDE\L.* («L» означает локализован) каталогов. Немецкие файлы находятся в MFC\INCLUDE\L.DEU, например. Для того чтобы привести приложения для использования этих RC файлов вместо файлов, расположенных в MFC\INCLUDE, просто добавить /IC:\PROGRAM FILES\DEVSTUDIO\VC\MFC\INCLUDE\L.DEU к RC командной строки (это только один пример: Вам необходимо будет заменить язык по выбору, а также каталог, в который вы установили Visual C++).
Выше инструкции будут работать, если приложение связывает статически с MFC. Большинство приложений ссылки динамически (потому что AppWizard по умолчанию). В этом случае, не только код является динамически связанные – так являются ресурсы. В результате ваши ресурсы можно настроить в вашем приложении, однако MFC осуществление ресурсов по-прежнему загружается из MFC4x.DLL (или более поздней версии) или MFC4xLOC.DLL если он существует. Можно подойти с двух разных точек зрения.
Функция только в профессиональных и корпоративных изданий Статическое связывание с MFC поддерживается только в Visual C++ Professional и корпоративных изданий. Для получения дополнительной информации, смотрите Выпуски Visual C++.
Более сложный подход – корабль один из локализованных MFC4xLOC.DLLs (например, MFC4xDEU для немецкого, MFC4xESP.DLL для испанского и т.д.) или более поздней версии и установить соответствующие MFC4xLOC.DLL в каталог системы при установке приложения. Это может быть очень сложным для разработчиков, так и для конечного пользователя и как таковой не рекомендуется. Техническое примечание 56 более подробная информация об этой техники и ее предостережения.
Простой и надежный подход является включить локализованные ресурсы MFC в приложении или DLL себя (или его вспомогательной библиотеки DLL), если вы используете одну. Это позволяет избежать проблем установки MFC4xLOC.DLL должным образом. Для этого следуйте же инструкции для статического случая, приведенное выше (установление RC командной строки должным образом должен указывать на локализованные ресурсы), за исключением что то необходимо также удалить /D_AFXDLL определяют, была добавлена AppWizard. Когда /D_AFXDLL будет определен, AFXRES.H (и другие файлы MFC RC) не определяют на самом деле все ресурсы (потому что вместо этого они будут вытащил из библиотек DLL MFC).
Технические примечания по номеру |nbsp; Технические примечания по категориям