MVC5网站 - 观点国际化

时间:2016-01-27 19:23:58

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我一直在关注多个教程(例如this one),并且我能够通过资源(.resx)文件构建多语言ASP.NET网站。

问题是,对于单词或短语来说这很好......但是如果你有一个包含数百个单词的多个段落的视图呢?你是如何管理的?我的感觉是,在这种情况下,.resx文件的键值转换看起来效率很低。

我一直在做很多研究试图解决这个问题,到目前为止还没有成功。我最接近的是this post(甚至为.zip提供了所有代码),但遗憾的是它基于MVC4(不是5),我无法将其转换为MVC5。但它使用了一个出色的解决方案来解决这个问题,我希望用这种语言呈现这个视图。问题:添加后缀ViewName.fr.cshtml,以便视图自动重定向到正确的语言。这就是代码,这就是我陷入MVC5的地方:

public class LocalizedViewEngine : RazorViewEngine
{
    public override ViewEngineResult FindPartialView (ControllerContext controllerContext, string partialViewName, bool useCache)
    {
        List<string> searched = new List<string>();

        if (!string.IsNullOrEmpty(partialViewName))
        {
            ViewEngineResult result;

            result = base.FindPartialView(controllerContext, string.Format("{0}.{1}", partialViewName, CultureInfo.CurrentUICulture.Name), useCache);

            if (result.View != null)
            {
                return result;
            }

            searched.AddRange(result.SearchedLocations);

            result = base.FindPartialView(controllerContext, string.Format("{0}.{1}", partialViewName, CultureInfo.CurrentUICulture.TwoLetterISOLanguageName), useCache);

            if (result.View != null)
            {
                return result;
            }

            searched.AddRange(result.SearchedLocations);
        }

        return new ViewEngineResult(searched.Distinct().ToList());
    }

    public override ViewEngineResult FindView (ControllerContext controllerContext, string viewName, string masterName, bool useCache)
    {
        List<string> searched = new List<string>();

        if (!string.IsNullOrEmpty(viewName))
        {
            ViewEngineResult result;

            result = base.FindView(controllerContext, string.Format("{0}.{1}", viewName, CultureInfo.CurrentUICulture.Name), masterName, useCache);

            if (result.View != null)
            {
                return result;
            }

            searched.AddRange(result.SearchedLocations);

            result = base.FindView(controllerContext, string.Format("{0}.{1}", viewName, CultureInfo.CurrentUICulture.TwoLetterISOLanguageName), masterName, useCache);

            if (result.View != null)
            {
                return result;
            }

            searched.AddRange(result.SearchedLocations);
        }

        return new ViewEngineResult(searched.Distinct().ToList());
    }
}

并不是说我想让这个特定的代码工作,但我想找到一个解决方案来显示特定语言的视图&#34;问题

0 个答案:

没有答案