您的位置:首页 > 其它

开发国际化程序,在不同语言环境中显示对应的语言

2006-06-02 15:47 537 查看
本文适用对象:开发国际化程序的IT工作者,在不同语言环境中显示对应的语言
开发环境:vs.net c# 2003
这是参考:http://blog.csdn.net/ChengKing/archive/2005/11/30/540648.aspx?Pending=true
代码如下:
(一).功能
当一个系统有了一定规模,可能要销售到国外其它国家,这时候要实现多种资源文件.
本代码示例将介绍怎样实现: 一个系统同时具有简体,繁体,英文等不同资源文件.
实现原理:
将多资源文件存储在多个*.txt文件(例如CN.txt En.txt等)中,程序根据当前当前浏览器
语言设置 读取相应的资源文件
(二).具体步骤如下
1. 创建一个资源文件
a.建立一个记事本文件: a.txt,并在里面写入: _name=姓名
b.选"文件"->"另存为"->在弹出窗口最下面的"编码"格式栏选择需要保存的格式:
Unicode 或 Unicode big endian 或 UIF-8,
不要选择ANSI编码格式(否则,读取的时候会检索不到资源,我实验的时候输出了一个:"?")
2. 编译资源文件
打开Dos窗口运行命令:
C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/Bin/resgen C:/Inetpub/wwwroot/多种资源文件

/Resource/a.txt
注意一点: 路径要修改为您自己的文件实际路径
运行后会在a.txt的当前文件夹下面生成一个资源文件: a.resources
系统在运行时就是动态读取a.resources文件来显示不同资源文件的,就像我们在编程时
写的代码为*.cs文件,计算机只认识*.cs编译后的*.aspx.resx一样
(三).代码
经过(二)步骤之后,就可以运行代码了.
主要操作资源文件类代码如下:

using System;
using System.Resources;
using System.Globalization;

namespace 多种资源文件
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class ResourceClass
{
/// <summary>界面资源对象</summary>
public ResourceManager myResManager;

/// <summary>界面区域对象对象</summary>
protected CultureInfo myCulture;

protected string strPath = @"C:/Inetpub/wwwroot/多种资源文件/Resource"; //这里要修改成自己的实际路径

public string strLangString = "zh-CN";

public ResourceClass()
{

// 建立資源管理器实例
this.myResManager = ResourceManager.CreateFileBasedResourceManager("a",this.strPath,null);

// 建立区域实例
this.myCulture = new CultureInfo(this.strLangString);
}
public string GetResource(string strKey)
{
string strValue = "";
strValue = myResManager.GetString(strKey,myCulture);
return strValue;
}
public static string GetBrowserDefaultLanguage(string strLangString) // "zh-cn,zh-tw;q=0.5"
{
try
{
int[] intLang = new int[3];

intLang[0] = strLangString.IndexOf("zh-tw");
intLang[1] = strLangString.IndexOf("zh-cn");
intLang[2] = strLangString.IndexOf("en");

int intMin = 0;

if(intLang[0] != -1 && intLang[1] != -1){intMin = Math.Min(intLang[0],intLang[1]);}
if(intLang[2] != -1){intMin = Math.Min(intMin,intLang[2]);}

if(intMin == intLang[0]) // 繁体中文.
{
return ("zh-TW");
}
else if(intMin == intLang[1]) // 简体中文.
{
return ("zh-CN");
}
else // 英文.
{
return ( "en");
}
}
catch
{
return ( "zh-CN"); //简体中文
}

}
}
}

(四).设置浏览器当前区域资源类型
选浏览器中的菜单:"工具"->"选项"->“常规”选项卡->"语言",选择语言.
选择好后,程序就会自动读取当前浏览器设置的资源文件进行显示不同的文件.

上面只建立了一个a.txt文件,读者可以根据需要分别建立多个不同的资源文件
来建立更多的资源文件
例如: Chinese.txt文件中显示: _name=姓名
English.txt文件中显示: _name=name 等,甚至可以建立任何语言资源文件
以上为转载,向作者致敬
当我解决好乱码问题,发现对源文件的选取,及如何判断浏览器的语言类别,还存在问题,于是着手解决
1、首先,置断点,弄清楚程序的运行;
2、按照上面四所说的方法,轻松旧搞好了,但是对.net datagrid的数据,如何显示多语言,还在进一步测试。
我手上正在开发的.net程序,所用到的datagrid,是自己定义的,并不能直接找到text,令我一度束手无策。
<续上>
当我对datagrid,无法去更改text,即中文翻译,我认真看了一下,底层程序代码,发现了有一个datagrid.items[int index].headertext,问题迎刃而解

了,下面把我的开发国际化程序的经历整理一下。
首先,自己写一个类:
代码如下:
using System;
using System.Resources;//最重要的一个
using System.Globalization;
using System.Web.SessionState;
using System.IO;
using System.Web;

namespace ITResource
{
/// <summary>
/// ITResource 的摘要说明。
/// </summary>
public class ITResourceClass : System.Web.UI.Page
{
public ResourceManager myResManager;

protected CultureInfo myCulture;

public ITResourceClass(string fileName)
{
//
// TODO: 在此处添加构造函数逻辑
//
//此处是存放文件的路径,本文作者使用的是虚拟路径以,当然可以使用实际路径增强程序的可移植性
//下文的testdata_2,testdata_1就是放在此处
string strPath = Server.MapPath("../wwwroot/test");
string strLangString = Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"].ToString()//"zh-cn";//此处为设置语言类型
this.myResManager = ResourceManager.CreateFileBasedResourceManager(fileName,strPath,null);
this.myCulture = new CultureInfo(strLangString);
}

public string GetResource (string strKey)
{
string strValue = "";
strValue = myResManager.GetString(strKey,myCulture);
return strValue;
}

}
}
页面调用,代码为:
private void setLang()
{
string LangString_wblogin2 = Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"].ToString()
//Session["languageValue"].ToString();//get user default language type

if(LangString_wblogin2.ToString().Trim().Equals(""))
{
return;
}
else
{
string langFileName = this.getfileName(LangString_wblogin2.ToString().Trim());
ITResourceClass myClass = new ITResourceClass(langFileName);

this.label1.text=myClass.GetResource("text");

}
}
//根据不同语言对应不同的resource文件夹
private string getfileName(string langtype)
{
if (langtype.Equals("zh-cn"))
{
return ("testdata_2");//Simplified Chinese的文件
}
else if (langtype.Equals("zh-hk"))
{
return ("testdata_1");//Traditional Chinese的文件
}
else
{
return ("");//("english");
}
}
那么文件testdata_2,testdata_1该怎么建呢,下面我来教你如何解决:
这是Microsoft 给使用者留下来的建造resource文件的便捷用法,注意,这种文件仅仅支持text=我是.net工程师
的语法。
好,创建文件如下:
testdata_2://中文简体
text=我是.net工程师
testdata_1://中文繁体
text=и琌.net祘畍
致此,你就学完了根据不同语言设置,显示不同语言的程序开发。
可参考:
http://www0.ccidnet.com/tech/guide/2002/01/21/92_3939.html
http://www.daima.com.cn/Info/89/Info31054/
http://bin270.blogchina.com/4943605.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: