• InChatter系统之本地化


    InChatter现在支持本地化了,其实这个只是很细节的东西,但是咱也是可以走走国际范。哈哈

    其实最重要的原因只是想进行一次本地化的开发。这个概念相信大部分人都有,但是在实际项目中真的很少会涉及到,我也就InChatter这个项目来实践下本地化开发。

    一、InChatter的本地化实施

    1.新建一个新的类库,命名为:InChatter.Localization

    2.在项目右键->属性,打开项目工程的属性窗口

    3.选择资源页签,修改资源的访问修饰符为Public(这样我们才可以访问资源)

    4.按图中的方式添加你定义你的系统资源。保存以后,可以在Properties文件夹中看到我们的资源文件Resources.resx

    5.在项目工程属性窗口,你是无法添加两个资源文件的,我们可以直接将上述的Resources.resx复制一份,修改为Resources.en.resx

    6.将语言内容修改为对应的英文即可

    通过上述部分,我们变可以成功的完成资源的创建,编译项目以后的文件目录:

    InChatter.Localization.dll
    en
    而在en目录中,存在InChatter.Localization.resources.dll

    我们默认的资源存储在InChatter.Localization.dll中,而我们英文的资源存在InChatter.Localization.resources.dll

     如果我们删除en文件夹,在英文的环境下,因为无法找到en资源,系统将直接使用默认的中文资源。

     二、本地化系统窗体

    1.使用生成的dll添加系统引用(需要将默认资源dll以及各个语言资源文件夹copy到系统的binDebug目录下),解决方案下的项目可直接引用项目

    2.在WPF中使用项目资源

     (1)Xaml中绑定资源

         由于Resource中存在的都是静态属性的资源,在Xaml中绑定静态属性即可

    <Window x:Class="InChatter.Client.WPFClient.View.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:InChatter.Client.WPFClient.Utility"
            Title="{x:Static rex:Resources.MessageWindow}" Height="600" Width="800"      
            WindowStartupLocation="CenterScreen"
            xmlns:rex="clr-namespace:InChatter.Localization.Properties;assembly=InChatter.Localization"
            Visibility="{Binding WindowStatus,Mode= TwoWay}" >
    </Window>

    这里我们引用前缀,并绑定了Title属性

     (2)代码中的绑定

    ResourceManager rm = new ResourceManager("InChatter.Localization.Properties.Resources", typeof(InChatter.Localization.Properties.Resources).Assembly)

     我们本地测试时,在窗体的InitializeComponent()之前设置:

    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");

    强制程序设置为英文的语言环境。

    需要注意的是,在WPF由于MVVM绑定,处理时会引入新的线程,所以在WPF测试中,在ViewModel中也需要加入该设置才能保证ViewModel中设置的资源也为英文,这里的都是针对当前运行线程的,如果程序中加入了新的线程,都需要做这样的处理,当然这是在中文环境下。这里仅限于测试,真实使用时,会根据本地环境自动加载中文或英文,其他语言也可自行开发。

    三、CurrentCulture和CurrentUICulture

    资源信息的加载主要是有CurrentUICulture来决定的,而一些格式化选项则是有CurrentCulture来决定。

    CurrentCulture是操作系统的用户区域环境的设置,而CurrentUICulture则是操作系统的语言设置。

    附: 

    Winform添加资源方式

    1.使用我们上述的第二种Code的方式

    2.对窗体进行自定义,设置窗体属性的Localizabletrue,在默认语言下设置窗体语言,完成以后,将窗体的Language修改为需要本地化的语言(默认为Default),然后再设置窗体界面语言即可。这种方式,资源是跟窗体关联的。

    可本地化语言信息:

    http://www.science.co.il/Language/Locale-codes.asp

     

     

  • 相关阅读:
    调试跳转动态打印
    PHP对redis操作详解
    SSL证书没有绿锁您与此网站建立的连接并非完全安全解决办法
    63. Unique Paths II
    62. Unique Paths
    40. Combination Sum II
    60. Permutation Sequence
    59. Spiral Matrix II
    批量修改名字的脚本
    57. Insert Interval
  • 原文地址:https://www.cnblogs.com/wpfworld/p/3521744.html
Copyright © 2020-2023  润新知