c# - asp.net mvc本地化

标签 c# asp.net-mvc localization routing

我正在尝试使用路由实现本地化

我有以下内容:

routes.MapRoute( "DefaultLocalized", 
                 "{lang}/{controller}/{action}/{id}",
                 new { controller = "Home",
                       action = "Index",
                       id = "",
                       lang = "en" }
               );

routes.MapRoute( "Default",
                 "{controller}/{action}/{id}",
                 new { controller = "Home",
                       action = "Index",
                       id = "" }
               );

当我调用我的页面 domain/en/home/index 时,它工作正常但是当我调用 domain/home/index 时我得到错误 404:资源不能找到了。

此外,当我在 domain/en/home/index 并单击安全页面时,我被重定向到 domain/Account/login 如何重定向到 domain/en/Account/login?

此外,当我遇到应用程序错误时,如何将我重定向到 domain/en/home/error

真正的问题是如何将语言作为路由参数来实现本地化?

最佳答案

默认情况下,路由将匹配从左到右,因此“domain/home/index”将首先匹配 lang=domain、controller=index、action(默认为 index)、id(默认为 0/空)。

要解决这个问题,我相信您可以在 MapRoute 上指定一个正则表达式(匹配,例如,恰好有 2 个字符的语言)——它在某些时候发生了变化,但是……(抱歉,目前没有 IDE,所以我无法准确检查)。

根据内存,它可能是:

routes.MapRoute( "DefaultLocalized", 
             "{lang}/{controller}/{action}/{id}",
             new { controller = "Home",
                   action = "Index",
                   id = "",},
             new { lang = "[a-z]{2}" }
           );

请注意,您可能不希望每个 Action 都采用“字符串语言”,因此您应该在基本 Controller 或 Action 过滤器(在任一情况下,可能会将信息添加到 ViewData)。

关于c# - asp.net mvc本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/660872/

相关文章:

c# - 如何使用 { get; 访问私有(private)变量放; }

asp.net-mvc - VS2012调试器在调试ASP MVC项目时不会打开浏览器

ios - 是否可以根据语言以外的标准对应用程序名称进行本地化?

iPhone、本地化、info.plist

过早发送 C# HTTP 基本身份验证凭据

c# - 显示任何进程,如模态窗口

c# - EF-1 :1 relation not on primary key

c# - ItextSharp 中的 Pdf 合并问题(合并 Pdf 后不保留其值)

asp.net-mvc - 不正确的 http header 字段值编码

.net 本地化 : coexistence of old-school . resx 和新派 wpf .baml