使应用程序支持各种语言本地化,可以使你的应用程序支持面对各个国家用户的版本的语言。
下面以XtraEditors 为例子进行资源本地化。
你需要哪种语言版本的应用程序,你就需要建立哪种语言的assembly,其中包含该语言的本地资源。
SDK提供了本地化工具Winres.exe。工具的具体使用,参见SDK帮助。
默认的情况下,XtraEditors类库仅支持英语。要把编辑器的用户界面转为其他的语言,你需要手工进行。
其中XtraEditors使用的字符都是存储在LocalizationRes.resx 文件中的。为建立本地资源文件,你需要
以下步骤:
* 复制 LocalizationRes.resx 文件到你的应用程序目录,并将其改名,名字遵循资源命名的规则
(例如,德语"LocalizationRes.de.resx").文件LocalizationRes.resx 的路径:
Developer Express Inc.NET\XtraEditors\Sources\DevExpress.XtraEditors
\DevExpress.XtraEditors\LocalizationRes.resx
注意:至于命名规则在类CultureInfo 中详细列出。
附:
zh-HK 0x0C04 中文 - 香港特别行政区
zh-MO 0x1404 中文 - 澳门特别行政区
zh-CN 0x0804 中文 - 中国
zh-CHS 0x0004 中文(简体)
zh-SG 0x1004 中文 - 新加坡
zh-TW 0x0404 中文 - 台湾
zh-CHT 0x7C04 中文(繁体)
* 修改资源文件。这意味着将原字符串转为目标字符串。这步工作可以用Visual Studio .NET很好的实现
* 用Resgen.exe工具将.resx文件转换为.resources文件。例如,用下述命令建立包含德语.resources文件:
resgen LocalizationRes.de.resx LocalizationRes.de.resources
* 用AL或者其他SDK工具建立一个DLL,并将.resources文件嵌入其中。使用如下命令:
al /out:DevExpress.XtraEditors.Resources.Dll /v:0.0.0.0 /culture:de
/embed:LocalizationRes.de.resources,DevExpress.XtraEditors.LocalizationRes.de.resources
/keyfile:strongkey.snk
注意:1.关于al工具的使用可以查看SDK帮助。
2.这里需要的strongkey.snk应该是和DevExpress~使用的相同。如果有必要的话,你可以将
.resources文件发送到Support@DevExpress.com ,让公司来编译。
下列代码可以设置应用程序的本地运行语言环境:
static void Main()
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de");
Application.Run(new Form1());
}
应用到本地对象:
XtraEditors 的运行时用户界面可以加载Localizer对象。为此,你需要首先建立一个Localizer的子类,
接着,重写Localizer.GetLocalizedString方法,这样就可以改变编辑界面的标题了。最后需要的就是将
Localizer实例化,并赋值给Localizer.Active属性,以使其生效。
// creating the Localizer descendant
public class GermanLocalizer : Localizer {
// overriding the GetLocalizedString method
public override string GetLocalizedString(StringId id){
switch(id) {
// ...
case StringId.PictureEditMenuCut: return "Ausschneiden";
case StringId.PictureEditMenuCopy: return "Kopieren";
case StringId.PictureEditMenuPaste: return "Einfugen";
case StringId.PictureEditMenuDelete: return "Loschen";
case StringId.PictureEditMenuLoad: return "Laden";
case StringId.PictureEditMenuSave: return "Speichern";
// ...
}
return "";
}
}
using DevExpress.XtraEditors.Controls;
private void Form1_Load(object sender, System.EventArgs e) {
GermanLocalizer gLocalizer = new GermanLocalizer();
Localizer.Active = gLocalizer;
}