我正在將項目轉換爲使用衛星組件。 我創建了一個新的類庫(名爲「Resources」)。所有的默認資源位於根級*.resx
。 然後每個文化都有一個文件夾。衛星組件,ASP.NET語言不變
「EN /」 與*.en.resx
EN-GB/ 與*.en-GB.resx
我改變了.resx文件Access Modifier
「公開」,並改變這些設置。
BuildAction: EmbeddedResource
CopyToOutputDirectory: CopyAlways
我確定.resx
設計師*.Designer.cs
使用 「資源」 的命名空間。
我將類庫添加到ASP.NET MVC應用程序,並在global.asax.cs
我有根據需要設置的文化。
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
我嘗試添加了al.exe
和Resgen.exe
命令,在資源類庫生成後事件。
「C:\ Program Files文件\微軟的SDK \的Windows \ V7.1 \ BIN \ Resgen.exe」 EN-GB/MyResourceFile.en-GB.resx「C:\ Program Files文件\微軟的SDK \ Windows \ v7.1 \ Bin \ al.exe「/ t:lib /eed:en-GB/MyResourceFile.en-GB.resources/culture:en-gb /out:Resources.resources.dll
展望MVC應用程式內爲bin/
每種語言文件夾下有文件夾有3個文件:
MyResources.en-GB.Designer.cs,MyResources.en-GB.resx, Resources.resources.dll
根級別只有Resources.dll
和Resources.resources.dll
但默認語言工作正常。第二個*.resources.dll
是由於生成後事件。
當我更改CurrentUICulture時,它不會更改UI語言。在將資源從App_GlobalResources/
移出到外部組件之前,它可以正常工作(Razor示例)。
@Resources.MyResources.StringIdentifier
使用.NET Reflector查看資源.dlls
這些是不同之處。
編輯:
設置的CurrentCulture和的UICulture在global.asax.cs
後,我測試了手動檢索ResourceManager
其實際工作和預期語言檢索到的字符串。
System.Resources.ResourceManager gStrings =
new System.Resources.ResourceManager("Resources.MyResources", System.Reflection.Assembly.Load("Resources")); // Resources=Project Name
string test = gStrings.GetString("TestString"); // WORKS IN GLOBAL.ASAX.CS!!!
我在MVC控制器中嘗試了相同的測試,但它不起作用。所以ResourceManager可以被檢索的唯一地方是Global.asax.cs。
奇怪的是,在剃刀中的UI級別進行相同的測試只會返回默認文化文本! cultureInfo是正確的,但ResourceManager只返回ASP.NET MVC Razor UI中的默認語言。 (這是嚴格的測試)
@{
System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentUICulture;
System.Resources.ResourceManager gStrings =
new System.Resources.ResourceManager("Resources.MyResource", System.Reflection.Assembly.Load("Resources"));
string s = gStrings.GetString("Test"); // DOESN'T WORK IN UI
}
TLDR版本:
從資源(的.resx)從App_GlobalResources文件轉換爲附屬程序集。
問題在眼前。
我可以使用global.asax
中的CurrentUICulture語言爲衛星程序集手動調用ResourceManager,它按預期方式工作,但是相同的測試從UI端失敗並在MVC控制器中失敗。
默認語言工作正常,所以爲什麼不切換語言?
+1分享。我使用cookies作爲語言,因此文化只能設置爲登錄時。在我有機會詳細調查您的應用程序之前(以及它是否實際適用於衛星資源)還需要一段時間,謝謝發佈。它們有點棘手,在多個項目中使用時需要非常繁瑣的細節。 :) – lko
我認爲你需要爲每一個請求進入文化設置。從餅乾中獲取它沒有問題。我的資源也在一個單獨的圖書館(我認爲這是你的意思是衛星?) – Jacco