很多时候,一款软件不仅仅只是一套语言环境,如果针对不同国家的人,各写一套软件来发布,明显不现实。
如何实现多语言呢?我相信看完这篇文章后,一定会对你有所帮助.
全球化过程力图确保您的应用程序可以处理来自不同文化的数据。它可能会非常简单,如确保您的日历标题足够宽以便能够处理夏威夷月份名称,或者使用您的用户所期望的负数格式。
全球化不同于本地化,后者实际上是将应用程序的资源翻译为不同的语言。即使只使用一种语言,您的应用程序也需要考虑全球化问题。
CultureInfo 对象是使用某种特定文化标识符创建的。例如,为了创建一个在中国区域设置中使用时包含有关中国区域设置信息的对象,您会在构造函数中指定名称 "zh-ch"。Framework 包括许多有关文化的信息,Windows 还包含用于各种区域设置的数据。除此之外,用户还可以创建他们自己的自定义文化。
如果您打算将您的应用程序本地化为多种语言,具体该怎么办?此过程可能涉及 System.Globalization 中处理的所有数据显示功能,以及应用程序各个部件的翻译。您可能还打算针对不同的文化显示不同的图像。为此,您可以制作应用程序的多个副本,每个都对应一个本地化目标语言。
Framework 提供了一种方法,它可以通过 System.Resources 命名空间中的某些类来提取这些可本地化的资源。用于创建、读取和使用这些资源的主类分别是 ResourceWriter、ResourceReader 和 ResourceManager。
ResourceReader 类允许您枚举资源文件中成对的名称/值。但是,最常见的工作通常是针对某一特定文化来查找特定的资源。这是通过 ResourceManager 类实现的。您可以使用 GetObject 和 GetString 方法访问单独的资源,或者也可以使用 GetResourceSet 方法将某一特定文化的所有资源加载到 Hashtable 中。
在下面的Demo中,将列出目前设备中所支持的语言。然后选择一个语言后,界面会根据选择的语言进行转换。
程序运行后的效果:
当我选择"en-us",点Menu下的Change Language后,窗体的Title已发生变化了。
当我选择"zh-cn",同样操作,也发生变化。
这就是多语言的效果。在实际项目中,可以根据当前UI的语言来取得最初的语言资源。用户也可以在运行中随意切换相应的语言。
具体实现:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1//从ListBox中取得选择的语言名
2CultureInfocInfo=CultureInfo.GetCultureInfo(this.listBox1.SelectedItem.ToString());
3//通过资源管理器来取得资源,SmartDeviceProject5资源文件中对应的命名空间,Form1表示资源文件名
4ResourceManagerrm=newResourceManager("SmartDeviceProject5.Form1",Assembly.GetExecutingAssembly());
5this.Text=rm.GetObject("Form1.Title",cInfo).ToString();
看一下,我的工程中的资源文件:
Form1.zh-cn.resx和Form1.en-us.resx表示2个不同的资源文件,zh-ch表示中文,en-us表示英文。ResourceManager会自动去匹配当前语言所需要的资源文件的。
最后,介绍一个小应用。在.net cf中,是无法取得机器上的所有的资源信息的。只有通过API来取得。
调用EnumSystemLocales来取得资源文件。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->privateconstintLCID_INSTALLED=0x01;
privatedelegateintEnumLocalesHandler(stringlpLocaleString);
privatestaticEnumLocalesHandlerm_localesDelegate;
privatestaticList<CultureInfo>m_cultures;
privatevoidForm1_Load(objectsender,EventArgse)
{
m_cultures=newList<CultureInfo>();
m_localesDelegate=newEnumLocalesHandler(EnumLocalesProc);
IntPtrfnPtr=Marshal.GetFunctionPointerForDelegate(m_localesDelegate);
intsuccess=EnumSystemLocales(fnPtr,LCID_INSTALLED);
for(inti=0;i<m_cultures.Count;i++)
{
if(m_cultures[i].Name!="")
this.listBox1.Items.Add(m_cultures[i].Name);
}
}
privatestaticintEnumLocalesProc(stringlocale)
{
try
{
m_cultures.Add(CultureInfo.GetCultureInfo(int.Parse(locale,NumberStyles.HexNumber)));
}
catch
{
//failedforthislocale-ignoreandcontinue
}
return1;
}
[DllImport("coredll",SetLastError=true)]
privatestaticexternintEnumSystemLocales(IntPtrlpLocaleEnumProc,uintdwFlags);
EnumSystemLocales会遍历取得所有的语言,通过定义委托的方式,来一个个加入到List中。
运行环境:VS2008
代码下载:InternationalDemo.rar
分享到:
相关推荐
.NET Compact Framework 2.0 生成 Wi-Fi 发现应用程序
此安装程序数据库中包含安装 Microsoft .NET Compact Framework 2.0 所需的逻辑和数据
.net compact framework 自定义Radiobutton
WinCE和Windos Mobile(.Net Compact Framework)开发,包括《Windows CE.net内核定制及应用开发.pdf》、《Microsoft .NET mobiililaitteille: .NET Compact Framework.pdf》和《Microsoft .NET Compact Framework 3.5...
MSDN Webcast .NET Compact Framework 3.5版的新特性 PPT
.NET Compact Framework Programming With C# 好不容易找到的,拿来共享,内容不错,只可惜是英文版的。
Delphi for .NET Compact Framework Technology PreviewThis technology preview supports both PocketPC and SmartPhone devices running .NET Compact Framework 1.x.Note: Some devices (such as SmartPhone) do ...
本电子书介绍了.NET Compact Framework开发框架及编程,是目前市场上少有的移动嵌入式图书资源
一个 .net compact framework 2.0 上的简单记事本(在Coolpad N900 的 WinCE6环境下可以运行) vb2005开发环境 包括 屏幕输入面板控制,剪贴板访问,文件读写等基础代码示例
里面有两个PDA环境下安装用的CAB包,一个是.net comapct framework 一个是 sql server 用
Microsoft .NET Compact Framework 开发常见问题解答
这里还将解释桌面电脑和笔记本电脑所用的Microsoft .NET Framework完整版与智能设备所用的.NET Compact Framework(精简版)的差异。本章还将总结.NET Compact Framework 1.0和2.0版本的不同之处。 第Ⅰ部分主要是为...
MSDN Webcast .NET Compact Framework开发技巧大串烧 Video
Windows Mobile .NET Compact Framework通知示例 演示如何在应用程序中创建用户通知
Microsoft .NET Compact Framework (Core Reference) Microsoft .NET Compact Framework (Core Reference) Microsoft .NET Compact Framework (Core Reference)
提供一个演示 .NET Compact Framework 的绘图功能的应用程序
Microsoft .NET Compact Framework API Documentation
.NET Compact Framework移动开发中基于IRDA,TCPIP和HTTP协议等的网络开发源代码,源代码为<.NET Compact Framework移动开发指南>的源码
WinCE开发工具 可用于WinCE6.0的开发 微软官网可以下载到