【发布时间】:2011-03-20 21:00:59
【问题描述】:
在 SO 上存在关于 MVC 中的多语言应用程序的问题,但主要通过提供有关实现资源文件的详细信息,然后在视图或控制器中引用这些资源字符串来回答这些问题。结合用户区域设置的检测,这对我来说很好。
我现在要做的是支持本地化路由。例如,我们为每个网站都有一些核心页面,例如“联系我们”页面。
我想要实现的是:
1) 像这样的路线
/zh/Contact-us(英文路线)
/sl/Kontakt(斯洛文尼亚路线)
2) 这两个路由都必须转到相同的控制器和操作,并且它们不会被本地化(它们将是英文的,因为它们是网站核心实现的一部分,因此对用户隐藏起来):
我的想法是让Controller“Feedback”和Action“FeedbackForm”
3) FeedbackForm 将是一个 View 或 View User 控件(它会使用对 RESX 文件中的字符串的引用,正如我之前所说,我已经设置了它并且它可以工作)
4) 我有一个附加到 BaseController 的 SetCulture 属性,它是我所有控制器的父级,这个属性实际上继承了 FilterAttribute 并实现了 IActionFilter - 但它有什么作用?好吧,它会检测浏览器文化并将该文化设置在 Session 和 cookie 中(永远)——这个功能也可以正常工作。它已经影响了 Views 和 View User Controls 但目前它不影响路由。
5) 在页面顶部,我将给用户一个机会来选择他的语言 (sl|en)。该决定必须推翻 4)。如果用户到达我们的网站并被检测为斯洛文尼亚语并且他们决定切换到英语,则该决定必须成为永久性的。从此时起,SetCulture 属性必须以某种方式失去其作用。
6) 切换后,路由应立即更新 - 如果用户位于 /sl/Kontakt 他应该立即被重定向到/en/Contact-us。
这些是我想要的设计限制。简而言之,我不想在显示本地化内容的同时使用英文路线,反之亦然。
欢迎提出建议。
编辑:
这里有一些信息和指导 - Multi-lingual websites with ASP.NET MVC,但我仍然希望听到更多关于这个问题的想法或实践。
【问题讨论】:
-
你只需要翻译动作和控制器吗?我认为如果您需要翻译映射到枚举的路由值(类似于 www.catalogue.com/products/listbytoken/manufacturer 中的制造商),那将是痛苦的
标签: asp.net-mvc