【发布时间】:2010-11-22 12:52:49
【问题描述】:
我试图机智地使用 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 设置为“/Views/Shared/_Layout.sv.cshtml”,而不是预期的“/Views/Shared/_Layout.cshtml”。
当然,我可以伪造文件路径,但这会产生缓存问题和不同的本地化问题。对吧?
谁有更好的方法来创建本地化视图?我不想使用相同的视图,而是使用资源字符串。这样的观点太可怕了,几乎让我哭了,因为它们太难读了。
如果你还不明白我在找什么:
/Views/User/Details.sv.cshtml
Hejsan @Model.FirstName
Detta är en lite rolig text på svenska.
/Views/User/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 全球化?我为所有斯堪的纳维亚国家都这样做,并且像魅力一样工作。最后我有一个来自
App_GlobalResources文件夹的文本视图。 -
因为与每种语言一个视图相比,它使视图不可读。
标签: asp.net-mvc localization razor