日期:2014-05-18  浏览次数:20943 次

c#winform:开发多语言应用程序!!
问题是:在窗体上添加一个语言menu,有几个选项:english,Chinese(simplied),German,Japanes等选项,当选择其中一项时,程序的语言就显示该语言。
程序默认语言是english.
例如:程序的登陆界面上有几个label,分别为UserName,password,login,servername。当选择Chinese(simplied)选项时,这几个label应显示为:用户名,密码,登录,服务器名。

大概就是这个意思,很多网站都提供多语言选项的。
因本人是初学者,有些东西不明白,所以希望大家能提供一个具体可行的方法。
谢谢各位高手!!!

 

------解决方案--------------------
动态加载资源文件
------解决方案--------------------
一般情况下都是用资源文件做,不过不推荐使用.
 最好是做多个XML文件,有几种语言就做几个XML文件. 用来保存控件名,以及控件的内容,
例如:英文XML文件
<form Name = 'Login'>
<Control name = 'BtnSave'>
Save
</Control>
</form>
对应的中文文件就是
<form Name = 'Login'>
<Control name = 'BtnSave'>
保存
</Control>
</form>

还要用个地方来保存默认语言.


每次启动一个窗体的时候首先识别默认语言,然后根据默认语言遍历Xml文件.
------解决方案--------------------
把所有字段存放在一个表中,程序运行时从这表中读取相应的语言的字段。
如:建一个mFieldName表,用Form的名字和FieldName做关键字,再加几个english,Chinese(simplied),German,Japanes等字段,当然在修改或新加窗体的时候维护这个表.
然后在程序运行时根据不同的选项读取不同的字段(english,Chinese(simplied),German,Japanes)。
------解决方案--------------------
C# code

<?xml version="1.0" encoding="utf-8"?> 
<Text> 
  <TAG key="0001" CHS="国际贸易-供应链系统" JP="" KR="?????????" EN="" /> 
  <TAG key="0002" CHS="中文" JP="" KR="????" EN="" /> 
  <TAG key="0003" CHS="韩文" JP="" KR="????" EN="" /> 
  <TAG key="0004" CHS="国际贸易" JP="" KR="" EN="" /> 
  <TAG key="0005" CHS="供应链系统" JP="" KR="" EN="" /> 
  <TAG key="00001" CHS="添加药品类别-" JP="" KR="??????" EN="" /> 
</Text> 
<!--
这个写在在Text.config里面,假设一个Label吧你起名字就的LG_lblName 其余的控件都的起这样的前面加上LG_XX 
然后在aspx里面的 <form>  <asp:Panel ID="LG_Panel" runat="server"  Width="100%"> 
<table> <tr> <td>ddd </td> </tr> </table> </asp:Panel > </form>这些都是必须的。然后调用的时候也就是我 
给你的那个类在上面 
CS里面这样调用 Language.ChangeControlsText(LG_Panel); 
支持多国语言。
忘了起名字的时候假设国际贸易-供应链系统叫这个名字吧 ,那这个Label吧你起名字就的叫LG_0001必须和 
Text.Config里面的 对起来 <TAG  key="0001"  CHS="国际贸易-供应链系统"  JP="" 
  KR="?????????"  EN=""  /> 

-->

------解决方案--------------------
探讨
一般情况下都是用资源文件做,不过不推荐使用.
最好是做多个XML文件,有几种语言就做几个XML文件. 用来保存控件名,以及控件的内容,
例如:英文XML文件
<form Name = 'Login'>
<Control name = 'BtnSave'>
Save
</Control>
</form>
对应的中文文件就是
<form Name = 'Login'>
<Control name = 'BtnSave'>
保存
</Control>
</form>

还要用个地方来保存默认语言.


每次启动一个窗体的时候首先识别…

------解决方案--------------------
C# code



/*
 * 
//ArrayList 和 StringCollection 类以及 List 泛型类通过元素的从零开始的索引提供对元素的访问。

//Hashtable、SortedList、ListDictionary 和 StringDictionary 类以及 Dictionary 和 SortedDictionary 泛型类通过元素的键提供对元素的访问。

//NameObjectCollectionBase 和 NameValueCollection 类以及 KeyedCollection 和 SortedList 泛型类通过其元素的从零开始的索引或者通过其元素的键提供对元素的访问。
 * 
 * 
 * ****************
 * CultureInfo 类 *
 * ****************
 区域性/语言名称 
 区域性标识符 
 区域性 
 
""(空字符串) 
 0x007F 
 固定区域性 
 
af 
 0x0036 
 南非荷兰语 
 
af-ZA 
 0x0436 
 南非荷兰语(南非)
 
sq 
 0x001C 
 阿尔巴尼亚语 
 
sq-AL 
 0x041C 
 阿尔巴尼亚语(阿尔巴尼亚) 
 
ar 
 0x0001 
 阿拉伯语 
 
ar-DZ 
 0x1401 
 阿拉伯语(阿尔及利亚) 
 
ar-BH 
 0x3C01 
 阿拉伯语(巴林) 
 
ar-EG 
 0x0C01 
 阿拉伯语(埃及)