如何用VS2008编写MUI程序

本文介绍如何通过修改项目设置和创建特定语言资源文件实现软件的多语言支持。包括更改资源文件的语言设置、配置本地化资源文件、链接多语言界面资源等步骤。

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的原因.

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值