Create Multiple Language
to MFC Extension DLL Toolkit with Resource only
|
|
Introduction
Multilingual
Library
adds
multiple UI languages'
support to your MFC
application. Multilingual
library uses
resource-only DLLs (sometimes called
satellite DLLs) to
keep translated resources, automatically selects
appropriate language according to Microsoft Windows
settings, and automatically generates a menu for
inclusion in your application with a list of available
languages to allow a user to change the language. The
library is quite
easy to use because only minimal changes to the source
code are required and it works with both EXE and
DLL
On the first run,
Library finds
available resource-only DLLs
in the application directory, makes a list of available
languages, and then selects the most suitable language
according to Microsoft Windows language settings. It
loads selected language
UI resources from
the corresponding resource-only
DLL and then substitutes them for resources
in the main EXE/DLL
file. Toolkit saves the UI
language setting in the Registry and the user
can select other languages by using the menu from your
application at any time.
Using the
Code
Naming convention
To use Multilingual Library, you
have to name satellite DLLs
as Filename.LNG, where LNG is a two or three character
code that identifies language (For example, English is
EN, English-United States is ENU, and Russian is RU).
- Link to
multilang.lib
- Initialize
Multilingual Library
- Add
language selection menu to your
application.
- Add Multilingual
Library to your
application's DLL
with resources.
-
Create and translate
resource-only DLLs
Add
Multilingual Library for
resource-only DLLs to an
EXE MFC application
Link MFC
application to Lingobit Localization Toolkit
- On the Project
menu, click YourProjectName Properties.
- On the left pane, select
Linker and then Input.
- On the right pane, select
Additional Dependencies.
- Add path to
multilang.lib to the Additional
Dependencies.
Changes to the
source code of executable
file (*.exe)
- Add the following line to
the beginning of MainFrm.cpp:
#include "MultiLang.h"
- Add the following code
between
BEGIN_MESSAGE_MAP ( CMainFrame , CFrameWnd )
and END_MESSAGE_MAP
() in
MainFrm .cpp:
ON_COMMAND_RANGE(ID_LANGUAGE_FIRST,
ID_LANGUAGE_FIRST+MAX_LANGUAGES,
OnLanguageFirst)
ON_UPDATE_COMMAND_UI_RANGE(ID_LANGUAGE_FIRST,
ID_LANGUAGE_FIRST+MAX_LANGUAGES,
OnUpdateLanguageFirst)
- Add the following code to
the MainFrm.cpp:
void CMainFrame :: OnLanguageFirst ( UINT nID )
{
MultiLangOnClickMenu ( nID );
AfxMessageBox ( _T ("Please restart application for
changes to take effect"));
}
void CMainFrame :: OnUpdateLanguageFirst
( CCmdUI * pCmdUI )
{
MultiLang UpdateMenu ( pCmdUI );
}
- Add the following lines to
the stdafx.h:
#define ID_LANGUAGE_FIRST 32000
#define MAX_LANGUAGES 100
IDs from
ID_LANGUAGE_FIRST
to
ID_LANGUAGE_FIRST+MAX_LANGUAGES
will be used by thr Multilang Toolkit and should not
be used for other purposes in your application.
- Add a menu item with
ID_LANGUAGE_FIRST
to the application menu.
- Add the following line to
the beginning of YourApplicationName.cpp:
#include "MultiLang.h"
- Call the Multilang
Library
initialization after
CWinApp::InitInstance()
in the InitInstance()
function in YourApplicationName.cpp.
MultiLangInitLocalization(ID_LANGUAGE_FIRST,
MAX_LANGUAGES,
HKEY_CURRENT_USER,
"Software/YourCompanyName/YourProductName",
"GUILanguage");
Add
the Multilingual Toolkit
for resource-only DLLs to
the MFC extension DLL
Link the
MFC Extension DLL to
Lingobit Localization Toolkit:
- On the Project menu, click
YourProjectName Properties.
- On the left pane, select
Linker and then Input.
- On the right pane, select
Additional Dependencies.
- Add a path to multilang.lib
to the Additional Dependencies.
Changes to the
source code of the
MFC Extension DLLs files:
- Add the following line to
the beginning of YourDLLName.cpp:
#include "MultiLang.h"
- Add the following line
between
if (!AfxInitExtensionModule(YourDLLNameDLL, hInstance))
return 0;
and
new CDynLinkLibrary(YourDLLNameDLL);
in the
DllMain
function in YourDllName.cpp.
YourDLLNameDLL.hResource = MultiLangLoadLibrary(hInstance,
HKEY_CURRENT_USER,
"Software/YourCompanyName/YourProductName",
"GUILanguage");
Create
a Resource-Only DLL
There are several ways to
create resource-only DLLs.
Manual
creation of resource-only
DLLs
To create a resource-only DLL,
follow these steps:
-
Create an empty
DLL project.
- In Visual Studio 6,
create a "Win32 Dynamic-Link Library" with "An
empty DLL project" selected.
- In VS .NET or VS 2005,
use "Win32 Project" in the "Visual
C++ Projects" group, and select
Application type "DLL" under "Application
Settings".
- Add the linker option
/NOENTRY to the
linker settings for each build.
- In VS 6, add "/NOENTRY"
to the "Project Options" edit field in the
Project Settings/Linker/Customize tab of the
"Project Settings" dialog.
- In VS.NET or VS 2005,
add "/NOENTRY"
to the "Additional Options" edit field in the
Configuration Properties/Linker/Command line tab
of the project properties dialog.
-
Create a
resource file.
- In VS 6, create a new
"Resource Script" and enter a file name with the
extension ".rc".
- In VS .NET or VS 2005,
create a new "Resource File (.rc)" and enter a
file name with the extension ".rc".
- Copy all the native-language
resources from your application to your new resource
file.
- Change the language of each
resource to that of the
resource-only DLL, and change the text,
dialogs, and bitmaps as required.
For more information, see the "resource-only
DLLs" topics in MSDN help.
Automatic
Creation of Resource-Only
DLLs
You can use Lingobit Localizer,
an innovative software localization tool, to simplify
and speed up creation of
resource-only DLLs. Lingobit Localizer
creates resource-only DLLs in three easy steps without
any changes to the source code. Lingobit Localizer not
only helps with creation of resource-only DLLs, but also
assists in localizability testing, translation, QA
checks, and collaboration with translators. You can read
about it at
http://www.lingobit.com/tutorial/resourceonlydll/.
Points of Interest
-
Lingobit Localizer
- Software Localization Toolkit
-
MSDN
History
2006-06-30: Multilingual Library
1.0 is released.
Downloads
multilang_bin.zip - Binary Files
multilang_src.zip - Source Files
|