我試圖很聰明,並使用VirtualPathProvider來查找本地化的視圖。它接受請求的視圖路徑並在檢查文件後修改它。如果發現它返回一個本地化的虛擬文件:剃刀的本地化視圖
public pseudoclass MyFileProvider : VirtualPathProvider
{
bool FileExists(string requestedPath)
{
if (IsLocalizedView(requestedPath))
return true;
return base.FileExists(requestedPath);
}
bool IsLocalizedView(string requestedPath)
{
var uri = requestedUri.AddLocaleByMagic("sv");
if (FileExistsInternal(uri))
return true;
}
//some more stuff to return the actual file
}
的問題是,我得到以下異常:
的的VirtualPathProvider返回VirtualFile對象與VirtualPath設置爲「/查看/共享/ _layout。 sv.cshtml'而不是預期的'/Views/Shared/_Layout.cshtml'。
當然,我可以僞造文件路徑,但這會產生緩存和不同本地化的問題。對?
任何人都有更好的方式來創建本地化的意見?我不想使用相同的視圖,而是使用資源字符串。這種觀點非常可怕,幾乎讓我哭泣,因爲它們很難閱讀。
如果你還沒有明白我在尋找:
/Views/User/Details.sv.cshtml
Hejsan @Model.FirstName
Detta är en lite rolig text på svenska.
/瀏覽/用戶/ Details.en.cshtml
Hello @Model.FirstName
This is a test on english.
控制器
public ActionResult Details()
{
return View(new User()); //should automagically use a swedish or english view
}
我希望能夠在不必在每個請求手動執行任何切換視圖(使用的CurrentCulture局部之一)。
爲什麼不執行ASP.NET全球化?我爲所有斯堪的納維亞國家做到這一點,並且像魅力一樣工作。最後,我有一個View來自'App_GlobalResources'文件夾中的文本。 – balexandre 2010-11-22 13:12:33
因爲與每種語言的一個視圖相比,它使視圖不可讀。 – jgauffin 2010-11-22 13:16:20