让你的.NET程序支持多语言

辛辛苦苦作出来的软件,咱们固然但愿能让更多的人用,支持多语言是必须的。下面我将以Asp.net Web Form为例来介绍如何支持多语言。其余程序好比windows程序,过程都是大同小异的。css

大概分如下几个步骤:

  1. 生成默认资源文件,翻译资源文件。
  2. 写一点代码实现语言切换
  3. 一些高级话题。例子老是简单的,真实项目会遇到哪些问题?

下面是详细步骤:程序员

生成默认资源文件,翻译资源文件。

    1. 建立一个Asp.net web form 项目,添加一个WebForm, 里面加上一些元素,好比label,button等,设置他们的text。
    2. 选择菜单 Tool->Generate Local Resource, 你会看到VS自动建立了一个文件夹App_LocalResources,而且里面有一个文件WebForm1.aspx.resx。做为一个技术人员,本身打开看一下吧,是个xml文件。
      Note:对于Asp.net MVC咱们不能用这样的方式自动生成资源文件,须要本身建立。
    3. 3. 这时,打开WebForm1.aspx,你会看到有些东西变了,出现了一些相似meta:resourcekey="Label1Resource1"的代码。这就是理解Asp.net 支持多语言最基础的东西。Asp.net将经过这个resoruceKey来从资源文件中找到对应这个label在不一样语言下应该显示的文本。

       

    4. 这个时候,你尝试改变资源文件中的文本呢,而后从新启动调试,你会看到页面上内容会发生变化。好了,到如今已经完成了支持多语言的最基础的东西。
    5. 复制这个资源文件WebForm1.aspx.resx,把新文件命名为WebForm1.aspx.zh-CN.resx,把里面的文本改为汉语的。若是你一开始写的就是汉语,那么你能够把它命名为en-US,而后把内容改成英语。

写一点代码实现语言切换

6. 如何让页面显示翻译后的内容呢?很是简单,为了测试你能够先这么作:在WebForm1后台代码添加以下方法:web

protected override void InitializeCulture()
 {
 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CN");
 Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
 base.InitializeCulture();
 }

 

    1. 添加如上代码后,启动调试你将看到中文页面。尝试把zh-CN改成其余语言代码你的系统将会显示为其余语言。
      一点小提醒 :若是对英语言的资源文件不存在,或者某些项不存在,系统将会自动从默认资源文件中查找,因此即便没有翻译完界面上也不会显示空白。
    2. 实际项目中你极可能会但愿网站可移动台改变语言,这也不复杂,只须要在界面上加上几个连接或者按钮,有时候能够是几个小图片显示不一样国家的国旗,当用户点击后把用户的选择保存一下而后再动态替换InitializeCulture()函数中的语言代码便可。
    3. 没有多语言经验的程序员在平时编程时会把一些要在界面上显示的内容硬编码到代码中,这样的话在支持多远以前须要把这些硬编码的文本提取到资源文件中。要否则是无法支持多语言的。VS的代码检查工具能够帮你找到这些支持多语言有问题的代码。除了VS自动生成的资源文件,你还能够建立本身的资源文件。

一些高级话题。

好吧,实际项目固然没有这么简单,这篇小文章给固然也不可能把实际项目中可能遇到的问题所有讲清楚。我会把我曾经遇到过的比较典型的一些问题以及解决方案写一下。编程

      1. 资源的翻译问题。
        实际项目确定要找专业的翻译人员来翻译,他们怎么打开咱们的资源文件呢?比较经常使用的作法是把资源文件导出到Excel中,或者其余翻译行业专用的格式,翻译完了而后再导入。已经有一些工具支持这个功能。有的项目会有几百个资源文件,这些文件的管理确实并不简单。
      2. 翻译的版本管理。
        当咱们完成了第一个版本的翻译,有开发出第二个版本时,固然也要对第二个版本进行翻译,由于界面上会有不少新加入的和改变的内容。也许你已经想到将会面临的问题了,该如何找到这些变化了的内容而后把他们发给翻译人员呢?总不能手动比较而后一个一个挑选出来吧!在这里推荐一个咱们本身开发的工具,能够帮你找到这些变化了的资源,翻译人员直接登陆网站便可完成翻译。网址是 rtp.cleancodesoft.com
      3. 界面的布局问题。
        当项目实际翻译完成后,你会发现界面上有些东西乱套了。中文是两个字符的内容英语可能要一长串。对于web程序在写css的时候要考虑这些问题,对于windows程序,则须要从新打开设计器,从属性窗口中选择语言,这时设计器会自动加载选中语言的资源,而后你能够从新调整布局。没有捷径,你须要从新检查全部界面,最好有个细心的tester帮你作这件事。
      4. 可不能够不用.resx资源文件? 固然能够。原理都是同样,把须要翻译的内容提取出来,而后动态读取。怎么保存无所谓,方便就好。有不少开源项目和其余平台下的项目都有本身五花八门的办法。但据我所知用.resx应该是最简单的。 
相关文章
相关标签/搜索