`
isiqi
  • 浏览: 16490094 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多

2009-08-16 13:54 by IamEasy_Man, 87 visits, 网摘, 收藏, 编辑

介绍一种多国语言的实现办法,这也是微软推荐的方式,打开windows mobile下的windows目录可以看到有很多以MUI为后缀名的文件,例如shellres.dll.0804.mui和shell.dll.0804.mui。。。。。。我们可以用eXeScope.exe或者resources hacker这样的文件查看器查看一下这些文件究竟是怎么一回事,不难发现文件里面都是一些资源ID和相对应的字符串。也许你就疑惑这是为什么呢?这些文件有什么作用呢?下面分解。

MUIMultilingual User Interface的缩写,意为多语言用户界面,主要是用来实现软件的国际化,也就是软件的多国语言版本的实现。其实一个mui文件也是一个DLL来的,但是这个dll有点特殊,不像我们以往的带来了那样包含了很多的函数体供dll外或者本身调用,而是只包含字符串资源,所以可以在vs下新建一个dll项目,不需要其他代码,只需要dll的入口点如下:


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1#include"windows.h"
2
3
4/////////////////////////////////////////////////////////////////////////////
5
6//DLLEntryPoint
7
8extern"C"
9
10BOOLWINAPIDllMain(HANDLEhInstance,DWORDdwReason,LPVOIDlpReserved)
11
12{
13
14returnTRUE;
15
16

除此以外,刚才也提到了,dll里只包含字符串资源,所以必须添加一个资源配置文件如***.rc,在里面添加相应的字符串资源信息,如下:


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1IDR_HELLO_MENUBARMENUDISCARDABLE
2
3BEGIN
4
5MENUITEM"Exit",PSP_DLGINDIRECT
6
7POPUP"Menu"
8
9BEGIN
10
11MENUITEM"Exit",PSP_DLGINDIRECT
12
13MENUITEM"Test",ID_MENU_TEST
14
15END
16
17

在这里要特别注意了,因为每一个mui也就是说每一个dll就代表一种语言,所以在资源配置文件里就是通过对每个字符串资源进行相应语言的更改达到多国语言的效果,例如你要做成简体中文版本,你就必须在重新建一个dll,同样建立一个资源配置文件,但是得把刚才上面的这段资源配置脚本代码改成如下:


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1IDR_HELLO_MENUBARMENUDISCARDABLE
2
3BEGIN
4
5MENUITEM"退出",PSP_DLGINDIRECT
6
7POPUP"菜单"
8
9BEGIN
10
11MENUITEM"退出",PSP_DLGINDIRECT
12
13MENUITEM"测试",ID_MENU_TEST
14
15END
16
17

然后可以通过把定义资源IDresources.h这个文件共享出来,让多个mui文件和应用程序用同一个资源ID

同时你还需要在dll项目添加一个导出文件如***.def,其实不需要导出函数名如下就可以(其实下面的导出函数名可以不需要):

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1LIBRARY"hello.exe.0804.mui"
2
3EXPORTS
4

也许你还会问,那应用程序怎么去通过匹配相应的mui文件来进行语言的定位?请看。

刚才说到windows目录下有shellres.dll.0804.mui,其实mui文件的命名有一定的规则可循,可不是乱来的,首先shellres.dll表明这个mui文件是专门用于shellres.dll多国语言版本,再例如hello.exe.0804.mui这个表示是专用于hello.exe。然后0804这又是表示什么意思呢,这是微软定义的语言ID是一个十六进制数,例如简体中文的ID0x0804,而美国英语ID则是0409。其他国家的语言ID可以查看sdk中的Language Identifiers and Locales

那系统怎么去实现识别应用使用哪一个mui文件呢?在系统注册表中HKEY_CURRENT_USER\Control\Panel\Desktop\MultiUILanguageId记录了系统的默认语言ID,所以系统会根据这个默认ID进行自动配置,而不需程序员再使用代码控制。但是有一点要注意的是mui文件和应用程序要放在同一个目录下。在使用vs生成mui文件时,可以通过对项目属性进行设置,让vs直接生成mui文件,在dll项目中项目属性”----“链接器”----“常规中的输出文件” $(OutDir)/your_mui_name,只需要修改your_mui_name为你相应mui文件名就可以。

使用mui来实现多国语言版本的实现,不需要更改应用程序的代码,只需要直接添加或删除独立的mui文件,mui文件和应用程序是高分离的,方便管理。

分享到:
评论

相关推荐

    emWin多国语言实现

    在嵌入式系统开发中,实现用户界面(UI)的多国语言支持是常见的需求,尤其是在全球化的背景下。本文将详细讲解如何在基于STM32F4处理器的系统上,利用LTDC(Liquid Crystal Display Controller)和DMA2D(Direct ...

    多国语言实现+友好错误提示

    "多国语言实现"是这个过程的核心,它包括创建、管理和更新多种语言的文本资源。 首先,我们需要理解如何在程序中设计语言切换功能。这通常通过资源文件(如.resx或.properties)来实现,这些文件存储了不同语言版本...

    MFC多国语言实现方法

    总之,MFC多国语言实现涉及到资源文件的创建、编译、链接,以及运行时的资源加载和UI更新。理解这些基本概念和步骤,开发者就能够灵活地在Visual Studio 2008中构建支持多种语言的MFC应用程序。

    WPF 多国语言实现与动态切换当前语言

    本文将深入探讨如何在WPF项目中实现多国语言支持,并且讲解如何实现在运行时动态切换应用的语言环境。 首先,我们需要创建语言资源文件。这些文件通常以.resx扩展名存储,每种语言对应一个文件。例如,对于英文和...

    Delphi实现多国语言

    这些文件不直接影响多国语言实现,但确保项目结构正确是必要的。 实现多国语言的步骤通常包括: 1. **设计阶段**: 在界面上放置动态创建的组件占位符,或者使用TStringGrid等组件来存储多个语言的文本。 2. **...

    基于MFC的多国语言实现类

    // 确定多国语言版本 CString t(m_strRootPath); if(! ML.Init(t, _T("ec_lang"))) { MessageBox(NULL, _T("Muli-Language error, can not load language resource."), _T("Error"), MB_OK | MB_ICONERROR); ...

    VB实现多国语言的切换

    在VB(Visual Basic)编程环境中,实现多国语言切换是一项重要的功能,特别是在开发全球化软件时。这个小例子展示了如何在VB应用中集成多语言支持,从而使得程序能够适应不同国家和地区的用户。以下是对该主题的详细...

    C# 多国语言支持

    在本文中,我们将深入探讨C#如何实现多国语言支持,并结合提供的资源文件来理解其工作原理。 首先,C#通过.NET Framework的国际化和本地化功能来实现多国语言支持。国际化的概念是指设计和实现可以处理多种文化和...

    程序实现多国语言包的动态切换

    程序实现多国语言的动态切换解决方案 实现思想:传统的做法是把所有的资源都放到动态库中,一种语言一个动态库,程序运行的时候通过加载不同的动态库来实现多语言功能。这样做的缺点是不能动态切换语言,如果更换...

    WPF实现多国语言

    实现起来要完成以下目标: 一个版本容纳多种语言. 这就意味着不要创建单独的英语版本、法语版本、日语版本等等。 许多电子产品(例如电视和数码相机)在同一模块中支持多语言。你不需要购买不同模块或给软件打补丁来...

    Winform利用资源文件实现多国语言(含源代码)

    本教程将详细讲解如何在Winform应用中利用资源文件实现多国语言切换,并提供相应的源代码供参考。 首先,我们需要理解资源文件在多语言支持中的作用。资源文件是一种特殊类型的文件,用于存储应用程序中的文本字符...

    mfc 多国语言制作

    在开发软件时,为了满足全球用户的使用需求,通常需要实现多国语言支持。MFC(Microsoft Foundation Classes)是Microsoft提供的一套C++类库,用于构建Windows应用程序。本主题将详细探讨如何在MFC应用中实现多国...

    VC实现多国语言方案汇总

    本篇文章将详细介绍如何在VC++中实现多国语言支持,主要依据提供的"VC支持多国语言解决方案汇总.pdf"文档。 首先,我们需要理解“国际化”(Internationalization)和“本地化”(Localization)的概念。国际化是指...

    Terawins T200 OSDTool多国语言操作说明

    为了实现多国语言切换功能,首先需要准备一系列特定格式的文字图资。这些图资需遵循以下规范: - 图片格式:PNG8 - 图资位深:支持1BP、2BP或4BP - 尺寸要求:图片尺寸应为字体大小的整数倍 - 色盘一致性:不同语言...

    Qt实现多国语言安装

    Qt提供了一个强大的国际化(i18n)支持,使得开发者能够轻松地实现多国语言的切换和安装。本教程将深入讲解如何使用Qt实现多国语言安装,以便满足不同地区用户的需求。 首先,理解Qt的i18n机制是至关重要的。Qt使用...

    PHP对接百度翻译接口API 实现多国语言翻译

    PHP对接百度翻译接口API 实现多国语言翻译

    多国语言 多国语言 多国语言

    本文将深入探讨如何使用Visual Studio 2005(VS2005)中的WinForms和C#来实现多国语言支持,同时提供相关的源码供参考。 一、多国语言概述 多国语言支持使得软件能够适应不同国家和地区的用户,通过提供多种语言...

    PHP-SongCMS企业建站多国语言

    ### 三、多国语言实现 1. **语言包**:PHP-SongCMS通过语言包来实现多国语言功能。每个语言包包含了一组特定语言的字符串翻译,这些字符串涵盖了网站的菜单、提示信息等所有需要显示给用户的内容。 2. **动态加载*...

    winform多国语言切换 翻译.rar

    C# winform多语言实现,通过xml文件配置实现,可在线切换多国语言 C# winform多语言实现,通过xml文件配置实现,可在线切换多国语言 C# winform多语言实现,通过xml文件配置实现,可在线切换多国语言 C# winform...

    Delphi 多国语言开发包

    Delphi 多国语言开发包是一款专为使用Delphi编程环境的开发者设计的工具,它极大地简化了在应用程序中实现多语言支持的过程。这个开发包包含了一系列组件和示例项目,帮助开发者轻松地将程序转化为支持多种语言的...

Global site tag (gtag.js) - Google Analytics