【问题标题】:Localization with separate Language folders within Views在视图中使用单独的语言文件夹进行本地化
【发布时间】:2011-03-05 01:34:25
【问题描述】:

我正在尝试为视图中的每种语言设置特定文件夹。 (我知道这不是最好的方法,但现在必须这样)
例如 /Views/EN/User/Edit.aspx /Views/US/User/Edit.aspx

它们都将使用相同的控制器和模型,但每种语言都有不同的视图。

在我的Global.asax.cs 我有:

routes.MapRoute(
    "Default", // Route name
    "{language}/{controller}/{action}/{id}", // URL with parameters
    new { language = "en", controller = "Logon", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    new { language = @"en|us" } // validation
);

这工作正常,但总是指向同一个视图。
如果我把路径放到 Lanagugage 文件夹,它就可以工作:

return View("~/Views/EN/User/Edit.aspx");

但显然这不是一个很好的方法。
有没有办法让 MVC 在正确的语言文件夹中查找?

我知道这不是进行本地化的最佳方式,但我不能使用资源文件。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-2 views routes


    【解决方案1】:

    更改 ViewEngine 以使用路由参数

    Change lookup rule for views

    编辑

    由于为视图扫描的路径列表是静态的,因此无法通过根据上面的链接更改列表来根据某些控制器实例选择不同的视图。 这看起来是一个更有希望的起点:

    http://www.dotnetguy.co.uk/post/2010/01/31/ASPNET-MVC-e28093-Dynamically-Changing-The-Master-Page-%28Theming%29.aspx

    它覆盖 CreateView 以更改呈现的视图。该示例更改了母版页,但希望它也适用于视图。

    【讨论】:

    • 看起来不错,但我如何从路由表/URL 中获取 {language}?
    • 需要更改 ViewPath 并离开 master 但效果很好。感谢您的帮助。
    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2012-03-09
    相关资源
    最近更新 更多