创建全球化的 Windows Mobile 应用程序
2008-05-13 17:25
323 查看
下文将介绍如何创建一个全球化的应用程序,使其自动在中文版 Windows Mobile 下显示中文UI,在英文版Windows Mobile 下显示英文UI。同时,该应用程序还允许用户在中文版 Windows Mobile 下手动切换到英文UI。
这时,在解决方案资源管理器中会多出一个 Form1.zh-CHS.resx 文件,这个文件就是 Form1 的简体中文资源文件。
将 Language 属性设置回“Default”,Visual Studio 2008 将重新加载 Form1.resx 文件,button1 和 label1 的 Text 属性也恢复成了初始值。
在模拟器 CHS Windows Mobile 5.0 Pocket PC R2 Emulator 中运行该应用程序时,button1 控件和 label1 控件的 Text 属性显示的是简体中文。
在模拟器 USA Windows Mobile 5.0 Pocket PC R2 Emulator 中运行该应用程序时,button1 控件和 label1 控件的 Text 属性显示的是英文。
首先卸载项目,然后打开项目文件进行编辑,将 <Reference Include="System" /> 修改成 <Reference Include="System"><Aliases>global,ms</Aliases></Reference> 之后保存。
重新加载项目,在 Program.cs 类中添加一个叫 CurrentCulture 的静态公开字段。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
再创建一个 ComponentResourceManager 类。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
当执行到 InitializeComponent 方法时,以上代码将被执行。
给 button1 增加 Click 事件。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
在中文版 Winodws Mobile 中运行该应用程序,按下 button1 时该应用程序将使用英文资源。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
一、创建本地化资源
首先将 Form1 控件的 Localizable 属性设置为 True,再将 Language 属性设置为“中文(简体)”。然后将 button1 的 Text 属性修改为“按钮”,将 label1 的 Text 属性修改为“标签”,保存。这时,在解决方案资源管理器中会多出一个 Form1.zh-CHS.resx 文件,这个文件就是 Form1 的简体中文资源文件。
将 Language 属性设置回“Default”,Visual Studio 2008 将重新加载 Form1.resx 文件,button1 和 label1 的 Text 属性也恢复成了初始值。
在模拟器 CHS Windows Mobile 5.0 Pocket PC R2 Emulator 中运行该应用程序时,button1 控件和 label1 控件的 Text 属性显示的是简体中文。
在模拟器 USA Windows Mobile 5.0 Pocket PC R2 Emulator 中运行该应用程序时,button1 控件和 label1 控件的 Text 属性显示的是英文。
二、在多国语言之间切换
本来以为 .NETCF 中的语言切换会像 .NET 中一样容易,只要设置 System.Thread.CurrentThread.CurrentUICulture 属性就可以了,没想到 .NETCF 根本就不支持 CurrentUICulture 属性。在网上搜索之后,找到了这个解决方案。解决的办法很巧妙,简单说就是重写 System.ComponentModel.ComponentResourceManager 类的 ApplyResources 方法,使表单在初始化组件时加载用户选择的资源。首先卸载项目,然后打开项目文件进行编辑,将 <Reference Include="System" /> 修改成 <Reference Include="System"><Aliases>global,ms</Aliases></Reference> 之后保存。
重新加载项目,在 Program.cs 类中添加一个叫 CurrentCulture 的静态公开字段。
using System; using System.Linq; using System.Collections.Generic; using System.Windows.Forms; using System.Globalization; namespace SmartDeviceProject1 { static class Program { public static CultureInfo CurrentCulture = CultureInfo.CurrentCulture; [MTAThread] static void Main() { Application.Run(new Form1()); } } }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
再创建一个 ComponentResourceManager 类。
extern alias ms; using cm = ms::System.ComponentModel; using System.Globalization; using SmartDeviceProject1; namespace System.ComponentModel { class ComponentResourceManager : cm.ComponentResourceManager { public ComponentResourceManager(Type type) : base(type) { } public override void ApplyResources(object value, string objectName, CultureInfo culture) { if (culture == null) { culture = Program.CurrentCulture; } base.ApplyResources(value, objectName, culture); } } }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
当执行到 InitializeComponent 方法时,以上代码将被执行。
给 button1 增加 Click 事件。
private void button1_Click(object sender, EventArgs e) { Program.CurrentCulture = (Program.CurrentCulture.Name == "zh-CN") ? new System.Globalization.CultureInfo("en") : new System.Globalization.CultureInfo("zh-CN"); foreach (Control control in Controls) control.Dispose(); InitializeComponent(); }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
在中文版 Winodws Mobile 中运行该应用程序,按下 button1 时该应用程序将使用英文资源。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
相关文章推荐
- 创建全球化的 Windows Mobile 应用程序
- 创建基于Windows Mobile设备的多线程应用程序
- Windows Mobile上菜单的创建
- 创建基于AJAX技术的Scribble应用程序
- 如何为应用程序创建快捷键,并保持桌面清洁
- 利用数据绑定和模板创建Atlas应用程序
- 出现"会话状态已创建一个会话ID,但由于响应已被应用程序刷新而无法保存它" 解决方案
- iOS 一个应用程序从创建到销毁的过程
- android应用程序框架层创建的应用程序进程学习
- 应用程序框架实战十一:创建VS解决方案与程序集
- pixhawk自学笔记之创建一个应用程序(按官网)
- [转] 如何用VB.Net创建一个三层的数据库应用程序
- 在Grails中创建一个简单的Twitter应用程序(第4部分)
- 使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍
- Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
- 结合EF5.0讲MVC4(一)--创建一个MVC4应用程序
- 创建自定义的音频播放应用程序
- 在 Windows Azure 网站上使用 Django、Python 和 MySQL:创建博客应用程序
- 使用Visual Stuido 2012应用程序向导创建MFC DLL
- Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析