zoukankan      html  css  js  c++  java
  • 创建全球化的 Windows Mobile 应用程序

    下文将介绍如何创建一个全球化的应用程序,使其自动在中文版 Windows Mobile 下显示中文UI,在英文版Windows Mobile 下显示英文UI。同时,该应用程序还允许用户在中文版 Windows Mobile 下手动切换到英文UI。

    一、创建本地化资源

    首先将 Form1 控件的 Localizable 属性设置为 True,再将 Language 属性设置为“中文(简体)”。然后将 button1 的 Text 属性修改为“按钮”,将 label1 的 Text 属性修改为“标签”,保存。

     image

    这时,在解决方案资源管理器中会多出一个 Form1.zh-CHS.resx 文件,这个文件就是 Form1 的简体中文资源文件。

    image

    将 Language 属性设置回“Default”,Visual Studio 2008 将重新加载 Form1.resx 文件,button1 和 label1 的 Text 属性也恢复成了初始值。

    image

    在模拟器 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> 之后保存。

     image

    重新加载项目,在 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());
    }
    }
    }

    再创建一个 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);
    }
    }
    }

    当执行到 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();
    }

    在中文版 Winodws Mobile 中运行该应用程序,按下 button1 时该应用程序将使用英文资源。

  • 相关阅读:
    安装git工具在ubuntu系统
    Ubuntu 16.04安装JDK并配置环境变量-【小白版】
    【gRPC使用问题4】
    【gRPC使用问题3】生成出来无法识别Google.Api.AnnotationsReflection.Descriptor
    LNMP
    Centos下安装Mysql
    yum方式安装的Apache目录详解和配置说明
    Centos下 yum方式安装LAMP
    CentOS配置网易163 yum源
    Apache主配置文件httpd.conf 详解
  • 原文地址:https://www.cnblogs.com/chinatefl/p/1430844.html
Copyright © 2011-2022 走看看