使用ASP.NET MVC的多语言网站

时间:2008-11-14 21:03:20

标签: asp.net-mvc url-rewriting multilingual

在构建多语言网站(使用ASP.NET网络表单)时,我将使用HTTP模块重写URL,最终得到友好的东西(对于人类和搜索引擎),如:

uk/products/product_category_one/sub_category_one/index.aspx
uk/products/product_category_one/sub_category_one/widget_mk5.aspx
es/productos/categoría_de_producto_una/widget_mk5.aspx

我(新手)对MVC的理解是URL应该采用

的格式
  

控制器/动作/标识符

因此,使用MVC复制上述功能将最终得到类似于以下的URL:

products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5

问题..

  • 我可以在“控制器”细分受众群之前的网址中插入国家/地区代码吗?
  • 是否可以将'products'和'productos'映射到同一个控制器?

感谢您的帮助

修改 除了下面的Panos回答,我还发现了有关ASP.NET Website的更多信息。

2 个答案:

答案 0 :(得分:12)

网址几乎可以采用您喜欢的任何其他形式。有关详情,请查看ASP.NET MVC Framework (Part 2): URL Routing。只是为了开始(因为我不确定它是否是最佳解决方案),您可以在global.asax中添加两个新路由:

        routes.MapRoute(
            "ukRoute",
            "{lang}/Products/{action}/{id}/{subcategory}",
            new { lang = "uk", controller = "Products", action = "Index", id = "", subcategory = "" }
        );
        routes.MapRoute(
            "esRoute",
            "{lang}/Productos/{action}/{id}/{subcategory}",
            new { lang = "es", controller = "Products", action = "Index", id = "", subcategory = "" }
        );

这些路由了解以下网址(并将它们映射到ActionResult Category(string id, string subcategory)的{​​{1}}方法):

ProductsController

如果您想在视图中创建此类网址,可以使用以下内容:

uk/Products/Category/1/A
es/Productos/Category/1/A

答案 1 :(得分:3)

您可以这样做,但请记住,并非所有国家/地区都是语言。例如,en-gb是英国英语的常用表示,或者更具体地说,例如英国内容的英国语言环境。如果可以的话,值得遵循RFC1766派生的语言-LELALE惯例。

顺便提一下,搜索引擎在处理内容协商时往往做得相当不错,因此您不必为不同语言的相同内容分别设置URI。例如,Google Japan将使用ja-JP作为接受语言标头进行抓取。