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

网上去下一个汉字简繁对照表,按照ID,简体,繁体建库,存进去

这里有现成的:http://hi.baidu.com/%D3%E1%B5%C2%D4%F3/blog/item/8265afcf2263c20b93457e25.html

将库中的数据分别取读成两个哈希表(Hashtable),键值均为ID,是固定的,主键分别是简体字,繁体字,方便哈希查找也可放在DataTable或者数组内(更方便),这里汉字大概不超过1万个,且数据量很小,三者效率都较好

将哈希表分别放在服务器内存 ---- cache 中

繁简转换时,要替换的内容进行逐字替换,替换时,用写好的函数对照哈希表就行了也可以遍历哈希表替换你的内容,主要是看内容长(总字符数)还是哈希的汉字多,替换前,可以先写判断下,这样有助于提高效率

具体代码就在这里不公布了

一般,多在服务端生成繁简两种版本的静态页面,以避免过多运算

在客户端多用JS实现,效率较高

private void Form3_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar>=(char)48 &&e.KeyChar<=(char)58)

{

MessageBox.Show("数字:" + e.KeyChar)

}

else

{

MessageBox.Show("字符:" + e.KeyChar)

}

}