A) 改造现有Project:
1. 将现有.rc文件中的相应资源的Lauguage改为EN-US.
2. 编写mui.rcconfig并加入到Project中,此文件是XML格式,例如:
<?xml version="1.0" encoding="utf-8"?>
<localization>
<resources>
<win32Resources fileType="System">
<localizedResources>
<resourceType
typeNameId="#6"
/>
</localizedResources>
</win32Resources>
</resources>
</localization>
上面内容的涵义是将字符串资源做为语种相关的资源, 这种资源将生成在多个资源文件中.
2. 在Project的Properties中的Resources里的command line中的Additional options里加入
/r /fm "$(IntDir)"/HelloPlugin.muires /q mui.rcconfig, 如下所示
这步将mui.rcconfig中的localizedResources节里对应的资源生成到一个muires文件中
3. 在Project Properties里的Post-Build Event中的Command Line填加如下内容:
rem **Extra steps to link the MUI files**
if not exist "$(TargetDir)" md "$(OutDir)"
if not exist "$(TargetDir)$(ProjectName)" md "$(TargetDir)$(ProjectName)"
if not exist "$(TargetDir)$(ProjectName)"/EN-US md "$(TargetDir)$(ProjectName)"/EN-US
link.exe /OUT:"$(TargetDir)$(ProjectName)/EN-US/$(TargetName).exe.mui" /DLL /NOENTRY /MACHINE:X86 "$(IntDir)/$(TargetName).muires"
注意,不同的工程文件上面的预定义宏可能要做相应的修改, 下面解释一下具体每句话的用意:
rem **Extra steps to link the MUI files**
注释语句
if not exist "$(TargetDir)" md "$(OutDir)"
如果$(TargetDir)不存在, 则创建它
if not exist "$(TargetDir)$(ProjectName)" md "$(TargetDir)$(ProjectName)"
如果$(TargetDir)$(ProjectName)不存在, 则创建它
if not exist "$(TargetDir)$(ProjectName)"/EN-US md "$(TargetDir)$(ProjectName)"/EN-US
如果"$(TargetDir)$(ProjectName)"/EN-US不存在, 则创建它
link.exe /OUT:"$(TargetDir)$(ProjectName)/EN-US/$(TargetName).exe.mui"
/DLL /NOENTRY /MACHINE:X86 "$(IntDir)/$(TargetName).muires"
链接muires到目标文件中
4. rebuild project
B) 制作各语种的Project:
1. 创建一个static library工程,为方便起见, 工程名取为语种的名称
参考MSDN里的ms-help://MS.LHSMSSDK.1033/MS.LHSWinSDK.1033/intl/nls_238z.htm, Locale Identifier Constants and Strings中Locale name, Local name做为这个工程的名称.
比如说要制作法语(法国)的库, 名字起为FR-FR, 要制作日文(日本)的库, 名字起为JA-JP.
2. 新创建一个RC文件, 并将A)工程的相应资源, 以本文为例,就是将所有字符串资源加到RC中,注意资源ID要保持一致, 唯一不同的就是字符串的内容, 别忘记将Launguage选为相应的语言
3. 将A)中的mui.rcconfig加入到本工程中.
4. 在Project的Properties中的Resources里的command line中的Additional options里加入
/r /fm "$(IntDir)"/HelloPlugin.muires /q mui.rcconfig
5. 在Project properties中的Post-Build Event中的Command line里加入
rem **Extra steps to link the MUI files**
if not exist "$(TargetDir)" md "$(OutDir)"
if not exist "$(TargetDir)/HelloPlugin/$(ProjectName)" md "$(TargetDir)/HelloPlugin/$(ProjectName)"
if not exist "$(TargetDir)/HelloPlugin/$(ProjectName)" md "$(TargetDir)/HelloPlugin/$(ProjectName)"
link.exe /OUT:"$(TargetDir)/HelloPlugin/$(ProjectName)/HelloPlugin.exe.mui" /DLL /NOENTRY /MACHINE:X86 "$(IntDir)/$(TargetName).muires"
rem ** Copy Checksum from Language Neutral to MUI file **
echo "$(TargetDir)HelloPlugin.exe"
echo "$(TargetDir)/HelloPlugin/$(ProjectName)/HelloPlugin.exe.mui"
muirct -c "$(TargetDir)HelloPlugin.exe" -e "$(TargetDir)HelloPlugin/$(ProjectName)/HelloPlugin.exe.mui"
注意: 这里比A)中多了muirct项, 此项将会将此语种的mui资源检验和加到到HelloPlugin.exe中. 非常重要,否则取不到相应的资源
最终的Binary结果如下:
|_Debug
|_HelloPlugin.exe
|_EN-US
|_HelloPlugin.exe.mui
|_FR-FR
|_HelloPlugin.exe.mui
参考: http://code.msdn.microsoft.com/MUIIzer, 里面有几个文档详细介绍了制作的每一步, 本文就是参照它来完成的. 并且还可以用MUIIzer工具来自动生成相应的MUI工程, 不过可能需要安装.NET framework 3.5, 我试了一下生成过一次,后来就总是出错,说一个COM对象创建不出来,估计是我没安装.NET framework 3.5的原因.
本文介绍如何通过修改项目设置和创建特定语言资源文件实现软件的多语言支持。包括更改资源文件的语言设置、配置本地化资源文件、链接多语言界面资源等步骤。
1216

被折叠的 条评论
为什么被折叠?



