返回首页


我Äôve一直使用(准确的移动浏览器检测)构建ASP.NET MVC站点输出漂亮的移动友好的模板。斯科特谈到在他的岗位的技术一直非常好。
最近,当我不得不解决类似的问题时,试图呈现出本地化的模板,我到了斯科特从深层次看,AOS的方法,如果我能,Äòtweak??它做我想要的东西,这,看上去就像在Visual Studio:

这让我的网站,为多国语言相同的URL。例如,/首页/指数的URL使用相同的控制器,模型等,但将呼吁为基于当前的UICulture英语和西班牙语的用户有不同的看法。


在这里,AOS如何我做到了。我了斯科特,AOS类和重构他们只是有点让我这个功能扩展,有weren,AOT得到重复的代码位(见{A4})。
首先,我把现有的CustomMobileViewEngine类,并更名为它CustomViewEngine这台发动机将不再仅是移动。除thatm其他没有变化是必要的。

public class CustomViewEngine : IViewEngine



{

    public IViewEngine BaseViewEngine { get; private set; }

    public Func<ControllerContext, bool> IsTheRightDevice { get; private set; }

    public string PathToSearch { get; private set; }



    public CustomViewEngine(Func<ControllerContext, bool> isTheRightDevice, 

           string pathToSearch, IViewEngine baseViewEngine)

    {

        BaseViewEngine = baseViewEngine;

        IsTheRightDevice = isTheRightDevice;

        PathToSearch = pathToSearch;

    }



    public ViewEngineResult FindPartialView(ControllerContext context, 

           string viewName, bool useCache)

    {

        if (IsTheRightDevice(context))

        {

            return BaseViewEngine.FindPartialView(context, PathToSearch + 

                   "/" + viewName, useCache);

        }

        return new ViewEngineResult(new string[] { });

        //we found nothing and we pretend we looked nowhere

    }



    public ViewEngineResult FindView(ControllerContext context, 

                            string viewName, string masterName, bool useCache)

    {

        if (IsTheRightDevice(context))

        {

            return BaseViewEngine.FindView(context, PathToSearch + 

                   "/" + viewName, masterName, useCache);

        }

        return new ViewEngineResult(new string[] { });

        //we found nothing and we pretend we looked nowhere

    }



    public void ReleaseView(ControllerContext controllerContext, IView view)

    {

        throw new NotImplementedException();

    }

}

接下来,我把最通用的AddMobilelt; TGT;扩展方法,它改名AddCustomViewlt; TGT,并把它在其自己的视图助手类。
此外,我重构现有MobileHelpers类调用新的重构AddCustomViewlt; TGT,以防止进一步的重复代码。
最后,我创造了一些AddLanguagelt;在他们自己的LocalizationHelpers类的UICulture检测路由扩展方法; TGT。
public static class LocalizationHelpers

{

    public static bool UICultureEquals(this ControllerContext c, string stringToFind)

    {

        var culture = CultureInfo.CurrentUICulture;

        var cultureName = culture != null ? culture.Name : string.Empty;



        return (cultureName.IndexOf(stringToFind, 

                StringComparison.OrdinalIgnoreCase) >= 0);

    }



    public static void AddLanguage<T>(this ViewEngineCollection ves, 

           string cultureName, string pathToSearch)

           where T : IViewEngine, new()

    {

        ves.AddCustomView<T>(c => c.UICultureEquals(cultureName), pathToSearch);

    }



    public static void AddLanguage<T>(this ViewEngineCollection ves, string cultureName)

        where T : IViewEngine, new()

    {

        ves.AddCustomView<T>(c => c.UICultureEquals(cultureName), cultureName);

    }

}

在项目中使用的本地化的意见登记在Application_Start()方法认为是简单的。
ViewEngines.Engines.Clear();

ViewEngines.Engines.AddLanguage<WebFormViewEngine>("es-ES");

ViewEngines.Engines.AddGenericMobile<WebFormViewEngine>();

ViewEngines.Engines.AddCustomView<WebFormViewEngine>(c => c.IsMobileDevice() 

    && c.UICultureEquals("es-ES"), "Mobile/es-ES");

ViewEngines.Engines.Add(new WebFormViewEngine());

最后,我的样本项目已在自己的类库,这些类,因为它,星光大道,我希望能够在不久的将来提供此功能作为{A5}包。Äôve
我,包括我的示例项目,以供参考。|皮特Mourfield

回答

评论会员:游客 时间:2012/01/27
你的"链接"为您的样品只是一个锚,没有href
丹尼尔Gidman
评论会员:游客 时间:2012/01/27
它是如何结合工作时,你有一个移动设备,也是本地化让我们来添加这里的另一个因素。如果你想要,还支持多设备和本地化多的宗旨?这3种不同的排列考虑。我试图找出自己这样的后果