$$SET_DEFAULT_LANG
Feature Only in Professional
and Enterprise Editions Creating a Custom AppWizard is supported only
in Visual C++ Professional and Enterprise Editions. For more information.
$$SET_DEFAULT_LANG(
macro-name );
Parameters
macro-name
A macro name you
add to the dictionary. The value of macro-name must be a three-letter
string that corresponds to a language previously selected by an MFC
AppWizard or custom AppWizard user. The following table provides a partial
list of possible values for macro-name.
Language
Identifiers
|
Value |
Language |
|
DEU |
German |
|
ENU |
English |
|
ESP |
Spanish |
|
FRA |
French |
|
ITA |
Italian |
|
JPN |
Japanese |
|
SVE |
Swedish |
Remarks
You use the
$$SET_DEFAULT_LANG directive to specify a language-identifer for the
CCustomAppWiz::LoadTemplate function to use when it searches for a custom
resource template to load for use by CCustomAppWiz::CopyTemplate or
CCustomAppWiz::ProcessTemplate.
Note Code
to perform the following procedure is automatically generated if your custom
AppWizard uses the existing set of MFC AppWizard steps for generating an
executable file and if you select more than one language from the Custom
AppWizard project type’s language list.
If you use the
$$SET_DEFAULT_LANG directive in a loop defined by the $$BEGINLOOP
and $$ENDLOOP directives, you can use $$BEGINLOOP and $$ENDLOOP to modify macros to write code that finds, extracts, and
processes multiple language versions of a language-specific template. For
information on how $$BEGINLOOP and $$ENDLOOP modify macros.
The language identifier, which
is the value of macro-name, also specifies the search order that LoadTemplate uses to search for a DLL.
Say that $$SET_DEFAULT_LANG
is called with a macro-name that expands to “DEU”. LoadTemplate will
go through the following algorithm to locate a template named TEMPLATE.RC:
- Try locating TEMPLATE_DEU.RC
in the custom AppWizard’s resources.
- If not there, try locating
TEMPLATE.RC in the custom AppWizard’s resources.
- If not there, try locating
TEMPLATE.RC in MFCAPWZ.DLL
- If not there, try locating
TEMPLATE.RC in APPWZDEU.DLL
- If not there, try locating
TEMPLATE.RC in all the other APPWZ*.DLLs selected by the custom AppWizard
user.
- If not there, display an
error and stop file generation.
Notice that in step 1,
LoadTemplate looks for the template under the localized name
(TEMPLATE_DEU.RC). If it can’t find a template named TEMPLATE_DEU.RC in the
custom AppWizard’s resources, it reverts back to searching for the actual
name (TEMPLATE.RC).
Note If
AppWizard itself is being run rather than a custom AppWizard, MFCAPWZ.DLL
starts the search process at step 3, and thus never tries to locate the
template under the localized name.
Example
Imagine that a user of your
custom AppWizard generates a project that will generate an application for
use by English-, French-, and Japanese-speaking people. To create the user’s
project, your custom AppWizard must find the templates containing strings
translated into these languages. It must search in DLLs that include, at
least, your custom AppWizard’s DLL, MFCAPWZ.DLL, and possibly APPWZENU.DLL,
APPWZFRA.DLL, and APPWZJPN.DLL. For simplicity, we will examine finding and
loading one template, FILE.TXT.
Because FILE.TXT is a text
file, it will probably be translated into English, French, and Japanese.
Your custom AppWizard’s DLL must contain three versions of this file named
FILE_ENU.TXT, FILE_FRA.TXT, and FILE_JPN.TXT. Also, your custom AppWizard
must make the following addition to the dictionary:
myprojectaw.m_Dictionary[“FILE”] = “FILE.TXT”;
To track the three languages
specified by the user, you add macros to the dictionary as follows:
myprojectaw.m_Dictionary[“LANG_SUFFIX_0”] = “ENU”;
myprojectaw.m_Dictionary[“LANG_SUFFIX_1”] = “FRA”;
myprojectaw.m_Dictionary[“LANG_SUFFIX_2”] = “JPN”;
Then, when your custom
AppWizard must find and load language-specific templates, it does so in a
loop as follows:
$$BEGINLOOP(NUM_LANGS)
$$SET_DEFAULT_LANG(LANG_SUFFIX)
$$// Include text from the
$$// properly localized template:
$$INCLUDE(FILE)
$$ENDLOOP
If NUM_LANGS has the value of
“3”, then this loop will iterate three times. During each iteration,
MFCAPWZ.DLL will modify its lookup procedure for the LANG_SUFFIX macro and
CCustomAppwiz::LoadTemplate will modify its template-loading procedure as
follows:
- First iteration: LANG_SUFFIX
first becomes LANG_SUFFIX_0. The value of FILE is extracted from the
dictionary and, when $$INCLUDE causes LoadTemplate to be
called, the value of FILE is combined with the value of LANG_SUFFIX_0 to
produce FILE_ENU.TXT.
- Second iteration:
LANG_SUFFIX first becomes LANG_SUFFIX_1. The value of FILE is extracted
from the dictionary and, when $$INCLUDE causes LoadTemplate
to be called, the value of FILE is combined with the value of
LANG_SUFFIX_1 to produce FILE_FRA.TXT.
- Third iteration: LANG_SUFFIX
first becomes LANG_SUFFIX_2. The value of FILE is extracted from the
dictionary and, when $$INCLUDE causes LoadTemplate to be
called, the value of FILE is combined with the value of LANG_SUFFIX_2 to
produce FILE_JPN.TXT.
Thus, the value of LANG_SUFFIX
is transformed to “ENU”, “FRA”, and “JPN” and LoadTemplate will know to
first load APWZENU.DLL, then APWZFRA.DLL, and finally APWZJPN.DLL if any of
the templates it seeks are not in the custom AppWizard’s DLL. For more
information on the transformation of macro names.
Note The
argument to the $$SET_DEFAULT_LANG directive must correspond to an
APPWZ*.DLL already chosen by the MFC AppWizard or custom AppWizard user.
Otherwise, MFCAPWZ.DLL will display an error message and stop file
generation immediately after parsing the $$SET_DEFAULT_LANG
directive. |