在网上找到的一般的做法是这样的:
以资源文件的形式保存字符串,然后使用CultureInfo类和ResourceManager类来读取字符串中的值,当用户选择不同的语言时,取出相应的字符串赋值给"对象.Text",这样做在字符串数量不多的时候是可以的,当字符串的数量很多的时候,用户如果选择其它语言的时候程序就会在不断的读取、赋值的过程中变得很慢,有其它更好的方法吗?谢谢各位!

解决方案 »

  1.   

    可以使用String Resource Generator(简称SRGenerator),网上有一些使用方法的说明,很方便的。这是一个免费的工具,安装文件名:SRGenerator.msi。
      

  2.   

    对于字符串资源,如果读取慢是因为运行时从程序集中读取资源耗时。那把字符串作为常数储存会如何。感觉可能会快些,但编译得到的程序集也会大些。这样在用户切换Culture时,是读取不同类文件中的常数值。也许要写一个switch。毕竟资源文件对于某些地区存在无法取出的问题。以上是猜测,未经实际测试。错了当我胡说。
      

  3.   

    没有,我们实现的多语言就是放在资源文件中,不慢不要每次都去返回ResourceManager读取,批量读取
      

  4.   

    一般都是存在资源文件里,或者存在附带的数据文件(xml,text),改变的时候要批量读出来。批量赋值就算你的界面使用了几M的文字也不会慢,不过一般界面不会很大。
      

  5.   

    scow(怡红快绿) 所说的常数值,似乎不利于把语言分离出来吧,
    而且语言少的话还可以。语言多的话,就在程序里附加了太多冗余数据了吧
      

  6.   

    是的,我想的有几个地区,就几个类。除了自带的本地化,还没考虑过其他方法。
    与主题不直接相关,对于xxx.region.resx,对于某些地区存在取不出资源的情况,各位有遇到过没。
    http://community.csdn.net/Expert/topic/5213/5213949.xml?temp=.8428919
      

  7.   

    我们现在采用的方法:
    单独建里一个类.里面包含所有的界面要显示的字段,相当于一个字典.每个字段用数组的方式保存,里面可以设置很多中语言.根据选择语言不同,取对应的值.速度还可以.
    比如 public readonly string [] toolBarTool={"简体","繁体","英文"};等
      

  8.   

    不知道楼上各位说的批量读取是怎样实现的?
    我是这样的:用户选择其中一种语言时,执行下面的操作:
     private void chineseToolStripMenuItem_Click(object sender, EventArgs e)
            {
                ci = new CultureInfo("zh-CN");
                ReadRes();
            }
     private void ReadRes()
            {
                fileToolStripMenuItem.Text = rm.GetString("file", ci);
                openToolStripMenuItem.Text = rm.GetString("open", ci);
                closeToolStripMenuItem.Text = rm.GetString("close", ci);
             }
    其中rm是ResourceManager类,ci是CultureInfo类假如程序的界面很复杂,ReadRes()中有很多项需要读取,当用户选择语言时,因为读取、赋值的次数比较多,用户等待的时间就比较长,怎样修改程序才能让效率提高?还有就是让编写程序简单些,因为要把程序中所有用到的字符串都在ReadRes()中列一遍,这个过程有其它更简单的方法吗?谢谢各位!
      

  9.   

    是的,放在一个单独的文件中对翻译人员和添加其它的语言版本有很大的便利。我们也是这样做的,现在的做法是以“名称 = 值”的形式将字符串保存为txt格式,然后用Resgen编译为rsources格式的资源文件,在用户选择其它语言时,通过CultureInfo、ResourceManager来读取。这样的做法确实是可行的,但我们考虑到在字符串资源达到一定数量后,当用户选择其它语言时,程序需要去读所有的字符串并赋值一遍,这样的效率会很低,有没有这样一种做法:语言文件可以单独放在一个文件中,且在选择其它语言时能快速地读出来?不知道问题有没有描述清楚,如有问题请各位留言,先谢谢各位了!