TN057: локализация компонентов MFC
Примечание |
---|
Следующая техническая заметка не была обновлена со времени сначала была включена в подключенной документации.В результате некоторые процедуры и разделы могут оказаться устаревшей или неверны.Последние новости, рекомендуется поиск раздела процента в подключенном индексу документации. |
Эта заметка описываются некоторые конструкции и процедур можно использовать для локализации пользовательский компонент, если он ЯВЛЯЕТСЯ приложение или элемент управления или библиотеки DLL, которое использует MFC.
Общие сведения
На самом деле 2 " проблема " разрешить локализуя компонент, который использует MFC.Во-первых, необходимо локализовать собственные ресурсы — строки, диалоговые окна и другие ресурсы, относящиеся к компоненту.Большинство компонентов, построенные с помощью MFC также включают и используется несколько ресурсов, заданных MFC.Необходимо предоставлять локализованные ресурсы MFC.К счастью, несколько языков уже этот MFC.
Кроме того, компонент должен быть подготовлен запуска в своей среде целевого объекта (европейской или двухбайтовой кодировка-разрешенной среде).В большинстве случаев это зависит от того, приложение обработки символов с набором старшего бита правильно и при обработке строки с повторяющимися символами байта.Включен MFC, по умолчанию для обоих из этих сред, то что можно иметь одно всемирное бинарный, который используется на всех платформах, если только другие ресурсы заткнутые в пределах во время настройки.
Локализация ресурсов компонента
Локализовать приложение или библиотеки DLL должен включать достаточно просто заменить ресурсы с ресурсами, которые соответствуют целевому языку.Для собственных ресурсов - это относительно просто: правка ресурсов в редакторе ресурсов и выполните построение приложения.Если код написан правильно, будут строки или отправляют СМС, что нужно локализовать жестко запрограммированы в свой исходный код C++ – локализация может быть предпринята просто изменив ресурсы.В действительности, можно реализовать пользовательский компонент так, что вся защита локализованную версию даже не включает построение исходного кода.Это более сложное, но рекомендуется затраты и механизм кандидатом для MFC.Кроме того, можно локализовать приложение, загрузив файл EXE или DLL в редакторе ресурсов и редактирования ресурсы напрямую.Хотя возможно, необходимо reapplication тех изменений при каждом построении новую версию приложения.
Одним из способов избежать, обнаружить все ресурсы в отдельных библиотек DLL, иногда называется спутниковым библиотеки DLL.Эта библиотека DLL затем загружается во время выполнения и ресурсы загружаются из библиотеки DLL вместо из основного модуля с полностью кодом.MFC непосредственно поддерживает такой подход.Рассмотрим приложение называется MYAPP.EXE; он может иметь все его ресурсов, расположенных в библиотеке DLL MYRES.DLL.В InitInstance приложения оно выполнил следующее для загрузки библиотеки DLL MFC, и вызвать загрузить ресурсы из этого расположения.
CMyApp::InitInstance()
{
// one of the first things in the init code
HINSTANCE hInst = LoadLibrary("myres.dll");
if (hInst != NULL)
AfxSetResourceHandle(hInst);
// other initialization code would follow
.
.
.
}
Из затем on, загрузка ресурсов MFC из библиотеки DLL вместо из myapp.exe.Все ресурсы, однако должны присутствовать в этой библиотеке DLL; MFC не будет выполнять поиск экземпляра приложения в поиске заданного ресурса.Этот метод применяется с тем же успехом на обычную библиотеку DLL, а также ЯВЛЯЕТСЯ элементам управления.Программа установки копироватьTfа бы соответствующая версия MYRES.DLL в зависимости от языкового стандарта ресурса (uri), для которого пользователь хотел was.
Сравнительно легко создать dll-библиотеку ресурсов.Создается проект библиотеки DLL, добавьте в него свой rc-файл, а затем добавить необходимые ресурсы.Если имеется существующий проект, который не использует этот метод, можно скопировать ресурсы из этого проекта.После добавления в проект файл ресурсов, почти все готово для построения проекта.Единственная самое необходимо сделать набор параметров компоновщика включено /NOENTRY.Это сообщает компоновщику, что библиотека DLL не имеет точку входа поскольку он не имеет никакой код не имеет точку входа.
Примечание |
---|
Редактор ресурсов в Visual C++ 4.0 и более поздних версий поддерживают несколько языков в rc-файл.Это может сделать ее очень легко управлять ваша локализация в одном проекте.Ресурсы для каждого языка управляются директивами препроцессора, формируемыми редактором ресурсов. |
Предоставленными локализованные ресурсы MFC
Любое приложение MFC, построении повторяющиеся использования 2 действия из MFC: код и ресурсы.Иными словами, MFC имеет различные сообщения об ошибке, встроенные диалоговые окна и другие ресурсы, используемые классами MFC.Чтобы полностью локализовать приложение, необходимо локализовать не только ресурсы приложения, но также ресурсы, которые поступают непосредственно из MFC.MFC предоставляет несколько различных файлов языковых ресурсов автоматически, так что если язык, предназначен будет один из языков MFC уже поддерживает просто необходимо убедиться, что использует эти локализованные ресурсы.
Из этой записи, MFC поддерживает немецкий, испанский, китайский, японский, французское итальянское, и корейца.Файлы, содержащие эти локализованные версии в каталогах MFC\INCLUDE\L.* («l» означает локализованные ресурсы).Например, немецкие файлы расположены в папке MFC\INCLUDE\L.DEU.Чтобы приложение использовало эти RC-файлы вместо файлов, расположенных в MFC\INCLUDE, добавьте /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU в командной строке RC (это просто пример; вам потребуется заменить пользовательский языковой стандарт выборки, а также каталог, в котором установлен Visual C++).
Приведенные выше инструкции будут работать, если приложение связывается статически с MFC.Большинство приложений связываются динамически (значение по умолчанию AppWizard).В этом сценарии динамически связан не только код, но и ресурсы.В результате можно локализовать ресурсов в приложении, но ресурсы реализации MFC по-прежнему будут загружаться из MFC7x.DLL (или более поздней версии) или из MFC7xLOC.DLL, если он существует.Можно причалить этому из 2 различных углами.
Более сложный подход отправить одно из локализованного MFC7xLOC.DLLs (например, MFC7xDEU, немецкий, MFC7xESP.DLL для испанского языка и т д) или более поздней версии и устанавливает соответствующее MFC7xLOC.DLL в системный каталог, когда пользователь установит приложение.Это может быть весьма сложным для разработчиков, так и для пользователей и поэтому не рекомендуется.См. раздел Техническая примечание 56 дополнительные сведения об этом методе и его предостережениях.
Самый простой и самый безопасный способ включения локализованных ресурсов в приложении MFC или библиотеку DLL (или его вспомогательной библиотеки DLL при использовании единица).Это позволяет избежать проблем установки MFC7xLOC.DLL правильно.Для этого выполните те же инструкции в статический случае заданной выше (установка командную строку RC правильно до точки до локализованных ресурсов), за исключением того, что необходимо также удалить /D_AFXDLL указано, добавленный AppWizard.При /D_AFXDLL указано, AFXRES.H (и другие файлы MFC RC), не определены ресурсы (поскольку они будут запрашиванны из библиотеки DLL MFC вместо).