2012-11-13 56 views
7

我正在研究將本地化字符串稍後插入活動ASP.NET(MVC4)網站/應用程序的項目。我們計劃實現此目的的方式(用於驗證消息等)是從客戶端獲取字符串,將其放入.resx文件中,將此.resx文件編譯爲.resources文件,然後編譯爲.dll文件。最後,將這個.dll文件放在現場的相關語言文件夾中。 但是,該手動創建的.dll沒有被應用程序拾取。相反,它會回落到默認語言.dll。 另一方面,如果.resx文件是通過Visual Studio(2012)編譯的,那麼該應用程序將愉快地獲取該.dll文件,並顯示其中的本地化文本。手動創建不適用於應用程序的字符串資源文件

我猜測問題在於我手動創建.dll的方式,儘管我找不到任何問題。下面是我在命令行控制檯運行:

resgen Strings.fr-FR.resx Strings.fr-FR.resources 

然後,

al /t:lib /culture:fr-FR /embed:Strings.fr-FR.resources /out:MyApplication.resources.dll 
+1

你是否強大的簽署組件? – oasten

+0

嘗試過,無論是否有強烈的簽名。他們都沒有工作。 –

+1

您的原始解決方案在哪裏?它是從你的MVC項目還是在MVC項目的獨立程序集中? – oasten

回答

3

這可能是因爲在法國本地化的資源DLL使用時要生成它的命名空間是不同的從您的應用程序使用的資源文件的命名空間。

您必須將您的資源文件從Strings.fr-FR.resources重命名爲MyApplication.Namespace.Where.My.Resource.Files.Are.Located.Resources.fr-FR.resources

默認情況下,資源文件位於Properties文件夾中。這意味着您可以使用完全限定名稱MyApplication.Properties.Resources.MyString訪問本地化字符串。

如果您的應用程序被命名爲MyApplication,你的資源文件屬性文件夾下生成你的資源文件是這樣的:

resgen Strings.fr-FR.resx MyApplication.Properties.Resources.fr-FR.resources 

然後生成的DLL是這樣的:

al /t:lib /Culture:fr-FR /embed:MyApplication.Properties.Resources.fr-FR.resources /out:MyApplication.resources.dll 

現在當你將它放入應用程序的bin文件夾中的fr-FR文件夾中時,它應該被識別。

看看您之前生成的程序集清單以及現在使用ildasm.exe生成的清單。在第二種情況下,您會看到以下行.mresource public 'MyApplication.Properties.Resources.fr-FR.resources',在第一種情況下,它應該類似於.mresource public 'Strings.fr-FR.resources'。由於您的應用程序在本地化的字符串中查找命名空間'MyApplication.Properties',它找不到它......當然,將'MyApplication.Properties.Resources'改爲適用於您的應用程序的任何東西(可能是'MyApplication.Localization .Strings')。

+0

properties文件夾不適用於我們,但是在使用resgen.exe生成資源文件時必須考慮路徑。謝謝! –

相關問題