葡萄架上的牵牛花

东拼西凑之东成西就
posts - 202, comments - 250, trackbacks - 10, articles - 0

若一个EXE文件或DLL文件内定义有多种语言的资源(Dialog, String Table),当这个文件被安装到不同语言的Windows操作系统中运行时,操作系统会自动装载读入相应语言的资源。只要你正确地设定资源的语言属性,并不需要你书写任何指定语言的代码(当然LoadStringDialogBox等等时不可少的)。

以上是非UNICODE项目的单可执行文件多语言对应的实现方式,是从用户观点来阐述的。但作为开发人员,你一般只安装有一种语言的操作系统,怎样测试的其他语言的用户界面呢?

Windows NT 4.0的时代,你可以在控制面板中简单地设置缺省的系统语言(Default System Locale),你可以发现它会立即产生效果。比如说,你用的是中文版的Windows NT 4.0,你若把缺省的系统语言设成日文,你就立即可以调试你的多语言项目中的日文界面了。但从Windows 2000开始,这个功能不再是免费的午餐了。

在控制面板的地域设置里改变缺省的系统语言,改变的仅仅是代码页和显示的字体,并不会改变操作系统的资源装载器的语言选择。操作系统会顽固地读入当地语言的资源,然后按你设定的语言的代码页来解释来显示而已。你会看到一堆乱码。继续研究,你会发现NT 4.0时代的神奇的SetThreadLocale也不再有效。其实你可以编写一个包含以下内容的简单项目,然后观察缺省的系统语言修改前后的变化,你会发现GetSystemDefaultUILanguage的结果不会变化。

        LANGID slid=GetSystemDefaultUILanguage();

        LANGID ulid=GetUserDefaultUILanguage();

        LANGID sdlid=GetSystemDefaultLangID();

        LANGID udlid=GetUserDefaultLangID();

        LCID sdloc=GetSystemDefaultLCID();

        LCID udloc=GetUserDefaultLCID();

        LCID tloc=GetThreadLocale();

这时候,为了调试你的非当地语言的界面,你可能会想到下面的几种办法:

1, 安装Windows 2000/XP/2003的多国语版(MUI版),安装后你会发现控制面板的地域设置对话框会有变化。麻烦在于这需要特别的License、额外的Money。而且若你的现有系统不是英文系统的话,需要你重装系统。另外,因为多国语版是基于英文版的,有些细微的地方和Localized版还是不一样的。

2, 修改设计,将单可执行文件多语言对应的实现方式改为微软推荐的一种语言一个资源DLL的实现方式(类似于Office的多国语实现方式)。

3, 修改代码,将ANSI的实现全部改为UNICODE的实现。

4, 增加代码,比如说用FindResourceEx来指定装载读入某种语言的资源。

我仅仅需要暂时调试一下而已,不想大动干戈,怎么办?真的没有更简单的解决办法吗?寻寻觅觅,我找到了下面的方法5

5, 打开注册表,在HKCU\Software\Policies\Microsoft\Control Panel\Desktop下面,增加一个名为MultiUILanguageID、类型为REG_DWORD的设置,将其值设为你想显示的语言的ID。根据Troubleshooting Windows 2000 MultiLanguage Version的记述,设成四位16进制数值(four-digit hexadecimal codes representing languages)的REG_SZ类型也可以。

 

相关链接:

l         Explaining the Windows 2000 Regional Options Dialog

l         Multilingual Support in Windows 2000 Professional: Choosing the Right Version for Your Organization

l         GlobalDev Home > Dr. International > FAQs > Windows 2000

l         Windows 2000 MUI(日文)

l         Frequently Asked Questions - Windows Server 2003, Windows XP & Windows 2000 MUI

l         INFO: Resource Language Loading Order

l         Google上的新闻组讨论线索之一

l         Google上的新闻组讨论线索之二

l         Google上的新闻组讨论线索之三

l         Writing Win32 Multilingual User Interface Applications

l         Microsoft Global Development and Computing Portal

 

(若有谬误,请不吝指正)

Post Comment

Title  
Name  
Url
Comment   
Protected by Clearscreen.SharpHIPEnter the code you see: