使应用程序支持各种语言本地化,可以使你的应用程序支持面对各个国家用户的版本的语言。
下面以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;
}

 

posted on 2006-06-19 17:52  Programming & Crack  阅读(1806)  评论(2编辑  收藏  举报