本人的设想:
1. 读入 xml 文档中的所有语言资源.
2. Form_Load 的时候将读入的语言字串赋值到当前 Form 中的每一个控件上. 具体做法:foreach (Control ctrl in this.Controls){
  ctrl.Text = ....;
}但这样一来, 有些组件无法汉化, 比如菜单栏中的条目就不是继承自 Control 类, 而是 ToolStripItem, 所以 foreach 中没办法枚举到不是 Control 的组件, 也无法对他们的 Text 属性赋值.请问这种情况下应该如何办 ? 本人这种多语言的编程方式有没有问题 ? 是否有更好更通用的方法 ? 谢谢.

解决方案 »

  1.   

    http://www.myfaq.com.cn/A/2005-04-13/136607.html
      

  2.   

    .NET 的这种方法和 IDE 结合确实方便, 不过似乎他要求把语言事先存储在 resource 里面 ?
    这样的话语言就是定死了的, 我主程序发布之后如果要追加发布其他语言, 那只能重新编译打包发布主程序 ?
      

  3.   


    .NET 的这种方法和 IDE 结合确实方便, 不过似乎他要求把语言事先存储在 resource 里面 ?
    这样的话语言就是定死了的, 我主程序发布之后如果要追加发布其他语言, 那只能重新编译打包发布主程序 ?================不知道你看了SDK文档里面相关的章节没有。那个十分详细。另外有很多开源的项目你可以拿来参考,比如SharpDevelop。
      

  4.   

    你可以把资源文件不存放在主程序中,可以另外搞一个dll,把相关资源存放在dll中
      

  5.   

    使用资源文件,
    http://getacoder.cn.cnblogs.com/archive/2006/04/09/370563.html
      

  6.   

    使用XML文件,在当前目录下可建一个“语言”文件夹,里面放入XML文件,有几种语言版本就放入几个XML文件,XML文件结构都相同,窗体加载时可根据选定的语言版本访问不同的XML文件,对于继承自 Control 的控件可按你的方法循环加载,菜单项目也可以循环加载,你可以再找一下资料。
      

  7.   

    查了一下 sdk, ms 的官方例子都是用 ResourceManager, 文档中虽说可以将本地化的各种字串单独编译为 dll, 但个人感觉仍然不如 xml 文本灵活和操作方便, kyle315 的提示我会考虑考虑.
      

  8.   

    使用ResourceManager虽说前期比较方便,但编译后就没办法修改了(生成了DLL),如果要修改还要重新编译,我以前就是这么做的,感觉不方便就改成用XML。
      

  9.   

    问题已解决. 结贴.资源文件有他的优点, 比如换语种之后字符超出大小 .NET 会自动调整. (看资料这么说, 没试过)xml 方式修改起来比较方便, 而且格式通用, 语言可存储在数据库里面, 或远程由 webservice 获得(当然这种情况很少), 缺点是需要给每个需要汉化的控件设置一个键值以对应翻译后的语言. 我这里是占用了 Control.Tag 属性存放 key, 感觉上不太纯粹.