2011-08-11 43 views
1

我工作的地方我在C#项目,在不同的文本条目存储在资源文件(GlobalLanguages.resx和GlobalLanguages.fr.resx)使用本地化这种形式申请后失踪。这些设置为嵌入式。C#应用程序:本地化的DLL建筑安装

在VS 2008的调试/发行版中运行应用程序时,一切都很好,当我从VS 2008之外的输出文件夹中启动exe时,它也可以工作。但是,当我构建visual studio安装程序项目以获取我的安装程序并将其安装在我的机器上,本地化不起作用。即使在安装文件夹中有一个包含.fr.resx值的.dll文件。

安装程序项目设置为包括主体工程的国产化输出。并且将安装的应用程序的当前语言环境输出到日志文件确实会提供正确的值,但文本以默认语言显示。

我们使用IlMerge中的exe合并多个.dll文件,但由于该资源的.dll文件可以发现,我想这不应该成为问题。我真的什么都试过,但我出的主意现在...

希望你们可以帮忙。

感谢

+0

是在文件夹为TH相同的GlobalLanguages.fr.dll文件e exe还是在exe目录下的“fr”目录下?如果你改变这个,它会改变行为吗? –

+0

它就像你说的那样在一个子文件夹“fr”中。我会尝试将它移动到主文件夹,并在我回到我的电脑后立即查看它是否执行了任何操作。谢谢 – Andy

+0

只需具有与在VS中的bin/debug时相同的文件夹结构应该是正确的。另外,确保你没有ilmerge来排除这个等式。 –

回答

0

试试这个只是为了诊断:(你需要明显改变的类别名称/命名空间)。

Type t = typeof(SomeClassInLanguageAssembly); 
Assembly languageAssembly = t.Assembly; 
Console.WriteLine("Current UI culture: "+Thread.CurrentThread.CurrentUICulture); 
Console.WriteLine("Resources in assembly:"); 
languageAssembly.GetManifestResourceNames().ForEach(Console.WriteLine); 
ResourceManager r = new ResourceManager("Language.Assembly.Namespace.ResourceName", languageAssembly); 
Console.WriteLine("'YES' -> " + r.GetString("YES")); 

如果我运行它输出例如:

当前UI培养:FR

资源组件:

Company.Application.Language.Resources.resources

'YES' - > OUI

+0

感谢这段代码,我会稍后再尝试。现在,我只是将语言分成两个独立的资源文件,并编写自己的控制器来检索正确的值。一直在浪费太多时间找到解决方案,并在两个小时内得到了应用程序的概念截止日期证明。非常感谢你的帮助。 – Andy

相关问题