根据当前文化调用不同的(本地化)视图

use*_*862 4 c# asp.net-mvc internationalization

我正在使用LocalizationAttribute哪种工具ActionFilterAttribute来本地化视图.我只是穿上[Localize]控制器.我正在使用LocalizeStrings.resx文件根据当前线程上的语言进行应用.一切都适用于这个简单的情况(使用本地化的字符串).现在我想本地化完整的页面(而不仅仅是字符串).

要使用哪种方法?

我是否需要识别哪个线程在控制器上是最新的并且基于该值来调用视图:

public ActionResult AboutUs()
{
    switch (Thread.CurrentThread.CurrentUICulture.Name)
    {
        case "en-US":
            return View("EnglishUSView");               
        case "de-DE":
            return View("GermanView");              
        default:
            return View(); 
    }
    return View();
}
Run Code Online (Sandbox Code Playgroud)

或者你推荐别的什么?

Bob*_*ock 7

我建议简单地扩展RazorViewEngine和覆盖FindPartialView,FindView以便通知ViewEngine在线程内部查看当前文化的视图.如果找不到该页面,请继续使用.

  1. 延伸 RazorViewEngine
  2. Inside View文件夹应该是(假设英语是默认语言.)Index.cshtmlIndex.de-DE.cshtml
  3. 修改Global.asax.cs文件,在应用程序启动内你应该调用本地化的视图引擎(实现RazorViewEngine的那个)

调节器

no further modification needed
Run Code Online (Sandbox Code Playgroud)

查看

/Views/Home/Index.cshtml
/Views/Home/Index.de.DE.cshtml
Run Code Online (Sandbox Code Playgroud)

帮手

public class LocalizedRazorViewEngine : RazorViewEngine
{
   public override ViewEngineResult FindPartialView ...
   public override ViewEngineResult FindView...
}
Run Code Online (Sandbox Code Playgroud)

ApplicationStart

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new LocalizedRazorViewEngine());
Run Code Online (Sandbox Code Playgroud)