asp.net(C#)如何用globalization实现多语言转换?

Python09

asp.net(C#)如何用globalization实现多语言转换?,第1张

#region Language Operation

/// <summary>

/// 设置app.config中的Language的value.

/// </summary>

/// <param name="AppKey">key</param>

/// <param name="AppValue">value</param>

public void SetLanguageValue(string AppKey, string AppValue)

{

XmlDocument xDoc = new XmlDocument()

string configpath = System.Reflection.Assembly.GetExecutingAssembly().CodeBase + ".config"

string path = configpath.Substring(8)

//此处配置文件在程序目录下

xDoc.Load(path)

XmlNode xNode

XmlElement xElem1

XmlElement xElem2

xNode = xDoc.SelectSingleNode("//appSettings")

xElem1 = (XmlElement)xNode.SelectSingleNode("//add[@key='" + AppKey + "']")

if (xElem1 != null)

{

xElem1.SetAttribute("value", AppValue)

}

else

{

xElem2 = xDoc.CreateElement("add")

xElem2.SetAttribute("key", AppKey)

xElem2.SetAttribute("value", AppValue)

xNode.AppendChild(xElem2)

}

xDoc.Save(path)

}

public void SetCurrentLanguageIMG()

{

设置调用的资源文件语言包

switch (OctoSTPNet.Method.Language.LanguageType)

{

case "zh-CHS":

{

menuSChinese1.Checked = Janus.Windows.UI.InheritableBoolean.True

menuEnglish.Checked = Janus.Windows.UI.InheritableBoolean.False

menuTChinese.Checked = Janus.Windows.UI.InheritableBoolean.False

// menuSChinese.Image = OctoSTPNet.Properties.Resources.Tip

//menuEnglish.Image = null

//menuTChinese.Image = null

}

break

case "zh-TW":

{

menuSChinese1.Checked = Janus.Windows.UI.InheritableBoolean.False

menuEnglish.Checked = Janus.Windows.UI.InheritableBoolean.False

menuTChinese.Checked = Janus.Windows.UI.InheritableBoolean.True

}

break

default:

{

menuSChinese1.Checked = Janus.Windows.UI.InheritableBoolean.False

menuEnglish.Checked = Janus.Windows.UI.InheritableBoolean.True

menuTChinese.Checked = Janus.Windows.UI.InheritableBoolean.False

}

break

}

}

private void englishToolStripMenuItem_Click_1(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)

{

SetLanguageValue("LanguageType", "EN")

menuSChinese1.Checked = Janus.Windows.UI.InheritableBoolean.False

menuEnglish.Checked = Janus.Windows.UI.InheritableBoolean.True

menuTChinese.Checked = Janus.Windows.UI.InheritableBoolean.False

MessageBoxManager.Show("Please Re-Start OctO to view new Language!", "OctO-Change Language")

}

private void chinaCHSToolStripMenuItem_Click_1(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)

{

SetLanguageValue("LanguageType", "zh-CHS")

menuSChinese1.Checked = Janus.Windows.UI.InheritableBoolean.True

menuEnglish.Checked = Janus.Windows.UI.InheritableBoolean.False

menuTChinese.Checked = Janus.Windows.UI.InheritableBoolean.False

MessageBoxManager.Show("Please Re-Start OctO to view new Language!", "OctO-Change Language")

}

private void chinaTWToolStripMenuItem_Click_1(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)

{

SetLanguageValue("LanguageType", "zh-TW")

menuSChinese1.Checked = Janus.Windows.UI.InheritableBoolean.False

menuEnglish.Checked = Janus.Windows.UI.InheritableBoolean.False

menuTChinese.Checked = Janus.Windows.UI.InheritableBoolean.True

MessageBoxManager.Show("Please Re-Start OctO to view new Language!", "OctO-Change Language")

}

#endregion

A. 如何手动建立并编辑资源文件

1. 建立名为 LocProject 的 ASP.NET Web 应用程序。如需详细说明,请参阅建立 Web 项目。

注意:程序中会使用项目名称 LocProject

2. 在项目中,加入新项(Add New Item...)

3. 选择 "资源文件"(Assembly Resource File) 。文件名为 strings.resx (名称中间不能有".",否则,容易错误)。资源文件 strings.resx 将会包含英文的原有资源。每当应用程序找不到更适合 UI 文化特性的资源,就会存取这些资源。

文件将加入至项目中,并在 XML 设计工具 中打开。

4. 在 "数据表"(Data Tabls:) 列表中,选择 "data"。

5. 在 "数据" (Data:) 页面中,增加2行数据 txtSearch 和 txtWelcome, 如下:

name value

txtSearch Search for the following text:

txtWelcome Welcome to Localization!

6. 再重复1次步骤 2 到 5,建立另外一个命名为 strings.zh-CHS.resx.resx 的资料文件,数据如下:

name value

txtSearch 搜索字符串:

txtWelcome 欢迎本地化!

B. 如何存取资源

1. 加入 System.Resources 和 System.Globalization 命名空间。以下代码如下:

using System.Resources

using System.Globalization

namespace LocProject

2. 声明 ResourceManager 类的变量 LocRM

// C#

namespace LocProject_CS

{

public class WebForm1 : System.Web.UI.Page

{

protected ResourceManager LocRM

3. 将以下代码加入到 WebForm1 方法 Page_Load 中,创建 ResourceManager 类的实例。ResourceManager 构造函数使用两个参数。第一个是资源文件的根名称,也就是不含文化特性和 .resx 后缀的资源文件名称。第二个参数是主要组件。

// C#

LocRM= new ResourceManager("LocProject.strings", typeof(WebForm1).Assembly)

注意:如果您没有将项目命名为 LocProject,就应该修改资源文件的根名称。

C. 如何显示页面中的静态资源字符串

将代码放在 <form>和 </form>标记 (Tag) 之间:

<h3><%=LocRM.GetString("txtWelcome")%></h3>

注意: ResourceManager 中区分大小写。

D. 如何将资源字符串赋给控件的属性

1. 加入代码:

//C#

Label1.Text=LocRM.GetString("txtSearch")

Label2.Text=LocRM.GetString("txtWelcome")

2. 增加 System.Threading 命名空间。

// C#

using System.Threading

3. 将下列代码加入 Page_Load 方法的起始处,指定 Web Form 网页应按照浏览器的 Accept-Language 标题中所指定之文化特性来显示资源和格式。这段代码相当重要,因为如果没有的话,您的 Web 应用程序就会按照服务器的文化特定设置,而这可能对 Web Form 网页的远端使用者并不适用。

// C#

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0])

Thread.CurrentThread.CurrentUICulture = new CultureInfo(Request.UserLanguages[0])

编译、执行就可以看到结果。控制面板\区域选项 中,如果选择:中文(中国),就会显示中文网页;如果选择其它,则会显示英文网页。

NET

Framework

语言包中包含面向非英语语言的翻译文字,例如错误消息。如果没有安装语言包,则这些信息默认情况下显示为英文。在单台计算机上可以安装多个语言包,其中每个语言包可供一种语言使用。

为了确保你的应用程序不会显示乱码,劝你不要删除。