2011-08-11 64 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

相關問題