【问题标题】:how to prefix a culture string such as "en-gb" before the {controller} position in the url in asp.net mvc?如何在 asp.net mvc 的 url 中的 {controller} 位置之前添加诸如“en-gb”之类的文化字符串?
【发布时间】:2012-05-12 02:47:48
【问题描述】:

所以基本上我想实现一个多语种网站,有以下场景:

  • 使用 ASP.NET MVC 3
  • 大多数语言都使用资源文件,因此它们使用相同的视图,但是也有许多特定于国家/地区(即特定语言文化)的视图,并非对所有人都可用。
  • 示例网址:http://localhost/en-us/{area}/{controller}/{action}/{id}

MVC 文件夹结构如下:

- Areas
    - Channel1
        - Controllers
        - Content
        - Views
            - en-us
                - View1.cshtml
                - View2.cshtml
            - zh-cn
                - View1.cshtml
                - View2.cshtml
                <b>- Special.cshtml</b>

    - Channel2
       ....(similar folder structure)
- ....

我认为必须有一种方法可以将“en-us”定义为像 {lang} 这样的参数,并在区域外的默认控制器中做出决定 - 但是我是 asp.net MVC 新手,我该怎么做那个?

【问题讨论】:

    标签: asp.net-mvc multilingual currentculture


    【解决方案1】:

    您始终可以编写自己的视图引擎来根据输入的内容查看文件夹。那里有 ThemedViewengine that does just that 的代码。

    【讨论】:

    • 谢谢,我根据该代码做了一些更改,现在运行良好!
    【解决方案2】:

    没有很好的方法可以做到这一点,但这是可能的。首先,您需要稍微重新排列您的视图——它们仍然必须有一个控制器。假设您拥有的文件(View1.cshtmlView2.cshtml)存在于您的家庭控制器中。把它们放在这里:

    - Views
      - Home
        - en-us
          - View1.cshtml
          - View2.cshtml
        - zh-cn
          - View1.cshtml
          - View2.cshtml
    

    然后,为Global.asax.cs 中的视图创建自定义路由:

    routes.MapRoute(
        "MultiLingual",
        "{lang}/{controller}/{action}/{id}",
        new {  controller = "Home", action = "Index", lang="en-us", id = UrlParameter.Optional }
    );
    

    最后,在您的主控制器(或任何您想要放置视图的控制器)中,使用lang 参数来确定要使用哪个视图:

    public ActionResult View1( string lang, int? id ) {
        return View( lang + "/View1" );
    }
    
    public ActionResult View2( string lang, int? id ) {
        return View( lang + "/View2" );
    }
    

    我试过这个并且它有效,但感觉非常笨重,而且不是很干燥(至少在动作中)。谁有更好的方法?

    【讨论】:

    • 你是对的 - 这意味着你必须为每个视图和控制器处理“lang”变量 - 这显然不是理想的解决方案......我正在尝试找出一种方法去做吧……
    【解决方案3】:

    这是一篇很棒的文章,其中包含有关如何在 ASP.NET MVC 3 上实现全球化的实用建议

    http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx

    【讨论】:

    • 我需要弄清楚 url 位 - 通过 url 检测文化并相应地呈现视图
    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多