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到系统的bin\Debug目录下),解决方案下的项目可直接引用项目

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

可本地化语言信息:

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

InChatter系统之本地化的更多相关文章

  1. InChatter系统之服务器开发(二)

    现在我们继续进行InChatter系统的服务器端的开发,今天我们将实现服务契约同时完成宿主程序的开发,今天结束之后服务器端将可以正常运行起来. 系统的开发是随着博客一起的,颇有点现场直播的感觉,所有在 ...

  2. (Linux基础学习)第六章:查询与修改系统的本地化(locale)与键盘布局的设置(locelectl)

    第1节:可查询与修改系统的本地化(locale)与键盘布局的设置[root@centos7 ~]# localectl System Locale: LANG=en_US.UTF-8 VC Keyma ...

  3. InChatter系统之客户端实现原理与阶段小结

    InChatter客户端的开发可以说是目前系统的阶段性结尾了.很抱歉的是,这篇文章来的这么晚,迟到了这么久. 在客户端的开发主要针对两个方面: 消息的传输与处理 消息的UI交互处理 一.消息的传输与处 ...

  4. InChatter系统之客户端消息处理中心

    一.模块结构 首先来看下客户端消息处理中心模块的简单结构: ChatCallback:服务器端我们定义的回调接口IChatCallback的客户端实现 ChatMsgCenter:服务端的消息处理中心 ...

  5. InChatter系统之服务客户端的开发

    今天终于开始客户端的开发了,客户端完成以后,我们将可以进行简单的交流.开发完成的程序只是一个很简单的雏形,在本系统完成以后,以及完成的过程中,大家都可以下载源码,在此基础上融入自己的想法和尝试,可以按 ...

  6. InChatter系统之服务端的Windows服务寄宿方式(三)

    为了部署的方便,我们开发Windows服务的服务寄宿程序,这样我们的服务便可以作为系统服务,随着系统的启动和关闭而启动和关闭,而避免了其他的设置,同时在服务的终止时(如系统关闭等)能及时处理服务的关闭 ...

  7. InChatter系统之服务器开发(一)

    服务器端是整个消息系统的中枢,类似与人类的大脑.没有他,根本无法实现客户端之间的交流,为什么呢?这也涉及到我们的系统涉及,在服务器端,每个客户端的标识数据都会在服务器端进行保存,在这种情况下,当某一个 ...

  8. BLAST在Windows系统中本地化

    简介 NCBI除了提供在线的Web BLAST序列比对服务外,还提供FTP方式下载序列比对工具.这允许在本地平台上针对从NCBI下载或本地创建的数据库执行BLAST搜索.这些实用程序没有图形用户界面, ...

  9. InChatter系统开源聊天模块前奏曲

    最近在研究WCF,又因为工作中的项目需要,要为现有的系统增加一个聊天模块以及系统消息提醒等,因此就使用WCF做服务器端开发了一个简单的系统. 开发最初学习了东邪孤独大哥的<传说的WCF系列> ...

随机推荐

  1. 关于maven pom

    1 maven pom.xml只是配置文件 构建的流程已经固化在maven中了,pom.xml只是对这个流程的配置.特别是插件,在不进行人工绑定的情况下,插件是对应固定的生命周期的,我们操作的时候是操 ...

  2. 运行tomcat6w.exe ,提示 指定的服务未安装 unable to open the service 'tomcat6'

    错误:运行tomcat6w.exe ,提示 指定的服务未安装 unable to open the service 'tomcat6'(我用的是官网下载的解压版) 解决方法: 打开命令行提示符窗口=& ...

  3. git不同分支局部代码合并 git cherry-pick

    cherry-pick 可以局部代码合并. cherry-pick不仅可以用在不同分支之间,还可以用在同一个分支上. 比如说你在某一个向某个分支中添加了一个功能,后来处于某种原因把它给删除了,然而后来 ...

  4. Python下的LibSVM的使用

    突然觉的笔记真的很重要,给自己省去了很多麻烦,之前在Python 3 中装过libsvm 每一步都是自己百度上面搜寻的,花费了很长时间,但是并没有记录方法.这次换了电脑,又开始重新搜寻方法,觉得太浪费 ...

  5. Spring--quartz中cronExpression配置说明

    Spring--quartz中cronExpression Java代码   字段      允许值         允许的特殊字符 秒       0-59        , - * / 分     ...

  6. vs2010统计代码行数

    参考:http://www.cnblogs.com/zfanlong1314/archive/2013/03/08/2950100.html 正则表达式:^:b*[^:b#/]+.*$ 文件类型:*. ...

  7. bzoj 4823: [Cqoi2017]老C的方块【最大权闭合子图】

    参考:https://www.cnblogs.com/neighthorn/p/6705785.html 并不是黑白染色而是三色染色(还有四色的,不过是一个意思 仔细观察一下不合法情况,可以发现都是特 ...

  8. 第四章vs2107 代码实际运用-后台权限管理讲解 创建角色

    先看一下项目整体结构图: 实体类和数据操作都在前面用TT模板批量生产了.下面开始介绍权限代码这块的逻辑. 创建角色开始. 1. 角色的创建我们用到三张表 A.menuinfo(菜单表)  role(角 ...

  9. ls -l 详解

    ls -l 是文件系统的一个命令,用来查询当前路径的文件的属性.大小等详细信息

  10. [POI2001]Gra绿色游戏

    Description 绿色游戏是一种两人游戏,双方分别称Ann和Billy.游戏的内容主要是轮流在棋盘上移动一颗棋子.棋盘上的点一部分是绿色的,其余是白色的:全部从1至a+b编号.编号1至a的点属于 ...