让你的.NET程序支持多语言
辛辛苦苦做出来的软件,我们当然希望能让更多的人用,支持多语言是必须的。下面我将以Asp.net Web Form为例来介绍如何支持多语言。其他程序比如windows程序,过程都是大同小异的。
大概分以下几个步骤:
- 生成默认资源文件,翻译资源文件。
- 写一点代码实现语言切换
- 一些高级话题。例子总是简单的,真实项目会遇到哪些问题?
下面是详细步骤:
生成默认资源文件,翻译资源文件。
- 创建一个Asp.net web form 项目,添加一个WebForm, 里面加上一些元素,比如label,button等,设置他们的text。
- 选择菜单 Tool->Generate Local Resource, 你会看到VS自动创建了一个文件夹App_LocalResources,并且里面有一个文件WebForm1.aspx.resx。作为一个技术人员,自己打开看一下吧,是个xml文件。
Note:对于Asp.net MVC我们不能用这样的方式自动生成资源文件,需要自己创建。 - 3. 这时,打开WebForm1.aspx,你会看到有些东西变了,出现了一些类似meta:resourcekey="Label1Resource1"的代码。这就是理解Asp.net 支持多语言最基础的东西。Asp.net将通过这个resoruceKey来从资源文件中找到对应这个label在不同语言下应该显示的文本。
- 这个时候,你尝试改变资源文件中的文本呢,然后重新启动调试,你会看到页面上内容会发生变化。好了,到现在已经完成了支持多语言的最基础的东西。
- 复制这个资源文件WebForm1.aspx.resx,把新文件命名为WebForm1.aspx.zh-CN.resx,把里面的文本改成汉语的。如果你一开始写的就是汉语,那么你可以把它命名为en-US,然后把内容改为英语。
写一点代码实现语言切换
6. 如何让页面显示翻译后的内容呢?非常简单,为了测试你可以先这么做:在WebForm1后台代码添加如下方法:
protected override void InitializeCulture()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CN");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
base.InitializeCulture();
}
- 添加如上代码后,启动调试你将看到中文页面。尝试把zh-CN改为其他语言代码你的系统将会显示为其他语言。
一点小提醒 :如果对英语言的资源文件不存在,或者某些项不存在,系统将会自动从默认资源文件中查找,所以即使没有翻译完界面上也不会显示空白。 - 实际项目中你很可能会希望网站可移动台改变语言,这也不复杂,只需要在界面上加上几个链接或者按钮,有时候可以是几个小图片显示不同国家的国旗,当用户点击后把用户的选择保存一下然后再动态替换InitializeCulture()函数中的语言代码即可。
- 没有多语言经验的程序员在平时编程时会把一些要在界面上显示的内容硬编码到代码中,这样的话在支持多远之前需要把这些硬编码的文本提取到资源文件中。要不然是没法支持多语言的。VS的代码检查工具可以帮你找到这些支持多语言有问题的代码。除了VS自动生成的资源文件,你还可以创建自己的资源文件。
一些高级话题。
好吧,实际项目当然没有这么简单,这篇小文章给当然也不可能把实际项目中可能遇到的问题全部讲清楚。我会把我曾经遇到过的比较典型的一些问题以及解决方案写一下。
- 资源的翻译问题。
实际项目肯定要找专业的翻译人员来翻译,他们怎么打开我们的资源文件呢?比较常用的做法是把资源文件导出到Excel中,或者其他翻译行业专用的格式,翻译完了然后再导入。已经有一些工具支持这个功能。有的项目会有几百个资源文件,这些文件的管理确实并不简单。 - 翻译的版本管理。
当我们完成了第一个版本的翻译,有开发出第二个版本时,当然也要对第二个版本进行翻译,因为界面上会有很多新加入的和改变的内容。也许你已经想到将会面临的问题了,该如何找到这些变化了的内容然后把他们发给翻译人员呢?总不能手动比较然后一个一个挑选出来吧!在这里推荐一个我们自己开发的工具,可以帮你找到这些变化了的资源,翻译人员直接登录网站即可完成翻译。网址是 rtp.cleancodesoft.com - 界面的布局问题。
当项目实际翻译完成后,你会发现界面上有些东西乱套了。中文是两个字符的内容英语可能要一长串。对于web程序在写css的时候要考虑这些问题,对于windows程序,则需要重新打开设计器,从属性窗口中选择语言,这时设计器会自动加载选中语言的资源,然后你可以重新调整布局。没有捷径,你需要重新检查所有界面,最好有个细心的tester帮你做这件事。 - 可不可以不用.resx资源文件?
当然可以。原理都是一样,把需要翻译的内容提取出来,然后动态读取。怎么保存无所谓,方便就好。有很多开源项目和其他平台下的项目都有自己五花八门的办法。但据我所知用.resx应该是最简单的。
- 资源的翻译问题。
让你的.NET程序支持多语言的更多相关文章
- 如何让你的Python程序支持多语言
如何让你的Python程序支持多语言 本文介绍如何通过Python标准库gettext帮助你的程序支持多语言. 代码例子 import random guessesTaken = 0 print(_( ...
- 分享两种实现Winform程序的多语言支持的解决方案
因公司业务需要,需要将原有的ERP系统加上支持繁体语言,但不能改变原有的编码方式,即:普通程序员感受不到编码有什么不同.经过我与几个同事的多番沟通,确定了以下两种方案: 方案一:在窗体基类中每次加载并 ...
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
上篇 IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源 介绍了纯代码刷新 实现程序内切换语言. 但效率底下,也存在一些问题.暂放弃. ...
- 本地化SilverLight应用程序(多语言支持)
原文 http://www.cnblogs.com/seaworm/archive/2010/11/30/1892325.html 利用资源文件(Resources File)使SilverLight ...
- WPF应用程序支持多国语言解决方案
原文:WPF应用程序支持多国语言解决方案 促使程序赢得更多客户的最好.最经济的方法是使之支持多国语言,而不是将潜在的客户群限制为全球近70亿人口中的一小部分.本文介绍四种实现WPF应用程序支持多国语言 ...
- Office 2010 安装程序包的语言不受系统支持
主要看了这篇文章之后让我有了处理思路. 最后我直接用压缩文件进行安装,没有时行解压.这样就不会出现找不到什么文件的问题了.所以语言不受系统支持问题也就解决了. 原文内容: 前几天,有位好友跟我说他的 ...
- 让现有vue前端项目快速支持多语言 - 用.net core程序快速替换中文为资源Key,咱不干体力活
前言 最近应公司上层要求,需要将现有项目尽快支持多语言,而中文内容可以找专业人员翻译.那么咱们说干就干,首先我们项目的前端是用vue写的spa程序且组件方面用的element ui,那么自然而然想到用 ...
- 你的程序支持复杂的时间调度嘛?如约而来的 java 版本
你的程序支持复杂的时间调度嘛? 这篇文章介绍了时间适配器的c#版本,是给客户端用的,服务器自然也要有一套对应的做法,java版本的 [年][月][日][星期][时间] [*][*][*][*][*] ...
- Win10 UWP 开发系列:使用多语言工具包让应用支持多语言
之前我在一篇blog中写过如何使用多语言工具包,见http://www.cnblogs.com/yanxiaodi/p/3800767.html 在WinEcos社区也发布过一篇详细的文章介绍多语言工 ...
随机推荐
- 【BZOJ2199】 [Usaco2011 Jan]奶牛议会
Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 (1 & ...
- 微软Hololens学院教程-Hologram 230-空间场景建模(Spatial mapping )【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
- ExtJs 4.2.1 报错:Uncaught TypeError: Cannot call method 'getItems' of null
做项目的时候遇到这个问题,搞了一上午终于解决了,让我们看看是什么问题: buttons: [ { text: '保存', icon: '../../../Images/extjs/disk.png', ...
- TCP/IP长连接和短连接
http://www.cnblogs.com/bigwalnut/articles/2129070.html TCP/IP通信程序设计的丰富多样性 刚接触TCP/IP通信设计的人根据范例可以很快编出一 ...
- 明晰三种常见存储技术:DAS、SAN和NAS
随着企业网络应用的时间和应用的数据量的加大,企业已经感觉到存储容量和性能落后与网络的应用发展需求,特别是流媒体企业,在这种应用条件下满足用户的存储需求的技术应用诞生,DAS.NAS和SAN三种存储技术 ...
- jquery判断对象是否获得焦点
var isFocus=$("#tRow").is(":focus"); if(true==isFocus){ alert("focus") ...
- 团体程序设计天梯赛-练习集L2-011. 玩转二叉树
L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...
- POJ 3761 Bubble Sort(乘方取模)
点我看题目 题意 : 冒泡排序的原理众所周知,需要扫描很多遍.而现在是求1到n的各种排列中,需要扫描k遍就变为有序的数列的个数,结果模20100713,当然了,只要数列有序就扫描结束,不需要像真正的冒 ...
- hdu 4794 FIb求循环节
很容易看出来这道题是求模n意义下fib数列的最小循环节 对于fib数列的最小循环节的求法,我们可以这样: 1.令n=p1^m1 * p2^m2 * p3^m3…… 2.分别计算fib数列在模p1^m1 ...
- tomcat集群部署
1.apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求 2.由apache作为入口,如果是请求静态页面或者是静态文件,由apache直接提供,如果是请求动态页面,则让apac ...