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到系统的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系统之本地化的更多相关文章
- InChatter系统之服务器开发(二)
现在我们继续进行InChatter系统的服务器端的开发,今天我们将实现服务契约同时完成宿主程序的开发,今天结束之后服务器端将可以正常运行起来. 系统的开发是随着博客一起的,颇有点现场直播的感觉,所有在 ...
- (Linux基础学习)第六章:查询与修改系统的本地化(locale)与键盘布局的设置(locelectl)
第1节:可查询与修改系统的本地化(locale)与键盘布局的设置[root@centos7 ~]# localectl System Locale: LANG=en_US.UTF-8 VC Keyma ...
- InChatter系统之客户端实现原理与阶段小结
InChatter客户端的开发可以说是目前系统的阶段性结尾了.很抱歉的是,这篇文章来的这么晚,迟到了这么久. 在客户端的开发主要针对两个方面: 消息的传输与处理 消息的UI交互处理 一.消息的传输与处 ...
- InChatter系统之客户端消息处理中心
一.模块结构 首先来看下客户端消息处理中心模块的简单结构: ChatCallback:服务器端我们定义的回调接口IChatCallback的客户端实现 ChatMsgCenter:服务端的消息处理中心 ...
- InChatter系统之服务客户端的开发
今天终于开始客户端的开发了,客户端完成以后,我们将可以进行简单的交流.开发完成的程序只是一个很简单的雏形,在本系统完成以后,以及完成的过程中,大家都可以下载源码,在此基础上融入自己的想法和尝试,可以按 ...
- InChatter系统之服务端的Windows服务寄宿方式(三)
为了部署的方便,我们开发Windows服务的服务寄宿程序,这样我们的服务便可以作为系统服务,随着系统的启动和关闭而启动和关闭,而避免了其他的设置,同时在服务的终止时(如系统关闭等)能及时处理服务的关闭 ...
- InChatter系统之服务器开发(一)
服务器端是整个消息系统的中枢,类似与人类的大脑.没有他,根本无法实现客户端之间的交流,为什么呢?这也涉及到我们的系统涉及,在服务器端,每个客户端的标识数据都会在服务器端进行保存,在这种情况下,当某一个 ...
- BLAST在Windows系统中本地化
简介 NCBI除了提供在线的Web BLAST序列比对服务外,还提供FTP方式下载序列比对工具.这允许在本地平台上针对从NCBI下载或本地创建的数据库执行BLAST搜索.这些实用程序没有图形用户界面, ...
- InChatter系统开源聊天模块前奏曲
最近在研究WCF,又因为工作中的项目需要,要为现有的系统增加一个聊天模块以及系统消息提醒等,因此就使用WCF做服务器端开发了一个简单的系统. 开发最初学习了东邪孤独大哥的<传说的WCF系列> ...
随机推荐
- hdu 1251 统计
他妹的.敲完了.电脑死机了,所有消失了,又从新打了一遍,... 这是什么节奏 #include <stdio.h> #include <string.h> #include & ...
- Educational Codeforces Round 18 C. Divide by Three DP
C. Divide by Three A positive integer number n is written on a blackboard. It consists of not more ...
- 谈谈对redux的认识
redux是从flux演变而来,但又独立于react.简言之就是,redux是一种单纯的状态管理器.可以和react搭配,也可以和其它框架搭配. redux有三个重要的部分组成: store, act ...
- java垃圾回收机制的使用
public class Test { public static void main(String[] args) throws Exception { Book b=new Book(true); ...
- Ubuntu midi 播放
One of the simplest methods to play a midi file in Ubuntu is to install timidity. sudo apt-get insta ...
- wamp的手动安装
Wamp的手动安装 (http://www.cnblogs.com/homezzm/archive/2012/08/01/2618062.html) 一.Apache2.4安装 1.修改\Apache ...
- ubuntu 12.04 samba 配置(转载)
转自:http://blog.sina.com.cn/s/blog_a5b607f801013av9.html 首先当然是要安装samba了,呵呵: 代码: sudo apt-get install ...
- bzoj 4555: [Tjoi2016&Heoi2016]求和【NTT】
暴力推式子推诚卷积形式,但是看好多blog说多项式求逆不知道是啥.. \[ \sum_{i=0}^{n}\sum_{j=0}^{n}S(i,j)*2^j*j! \] \[ S(i,j)=\frac{1 ...
- 徐州联赛选拔赛 - 计算IP地址值
题目链接 思路:这是一道非常简单的题目,直接用公式计算就好了.对于IP地址a.b.c.d,转换为十进制数就是(a<<24)|(b<<16)|(c<<8)|d.唯一要 ...
- iOS 计算字符串显示宽高度
ObjC(Category of NSString): - (CGSize)getSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size{ ...