2009-02-25 58 views
0

有没有办法获得.net DLL的可用资源翻译?如何从一个DLL获得可用的翻译

我们的软件正在翻译成一些不同的语言,我想让用户选择软件所使用的语言,尽管我只想让他们只选择翻译过的语言

回答

1

我刚刚得到类似的问题,以备将来参考。

对于我的软件翻译是在程序文件夹中,每个文件夹下的文件名都是以它们自己的子文件夹命名的。代码可以解释这一切:

private void SettingsForm_Load(object sender, EventArgs e) 
    { 
    // load default language to the list 
     languageList.Add(new Language("English", "en")); 
     string fileName = "myProgram.resources.dll"; 

    // load other languages available in the folder 
     DirectoryInfo di = new DirectoryInfo(Application.StartupPath); 
     foreach (DirectoryInfo dir in di.GetDirectories()) 
     { 
      if (File.Exists(dir.FullName + "\\" + fileName)) 
      { 
       try 
       { 
        CultureInfo ci = new CultureInfo(dir.Name); 
        languageList.Add(new Language(ci.NativeName, ci.Name)); 
       } 
       catch 
       { 
        // whatever happens just don't load the language and proceed ;) 
        continue; 
       } 
      } 
     } 
    } 

它广告的一些异常处理开销,但有多少用户会在安装目录中创建自定义文件夹具有完全相同命名为本地化文件假冒资源? :P

+0

已经制定了类似的解决方案,但忘了在这里发布,所以恭喜,我给你答案:D – Stormenet 2009-09-07 15:52:10

1

所以你需要能够获得基础DLL的文化,然后枚举所有的卫星DLL?

第一部分很简单(只是获取程序集级属性)。

对于后者,类ResourceManager中似乎没有助手,这意味着您需要模拟其探测机制(可能包括可用于属性和.config文件的所有覆盖项)。

另一种方法是在构建或安装时构建列表(如果以后可以添加其他语言,后者会更好),为.config文件创建一个列表。