【发布时间】:2017-12-20 03:10:33
【问题描述】:
当我正在从事的项目中同时需要静态本地化和动态本地化时,我遇到了一个非常复杂的情况。
我需要本地化的内容:
- 静态页面(例如:“关于”、“帮助”、“联系方式”...)
例如:
"domain.com/about" - 用于英文本地化。
"domain.com/es-es/about" - 用于西班牙语本地化。
这就是我现在所在的位置,它正在工作。
目前,文化是在路由机制中提供和指定的(最适合 SEO),而不是存储在 cookie 或会话中。
RouteConfig.cs 如下所示:
// Localized Default:
routes.MapRoute(
name: "LocalizedDefault",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new { culture = new CultureRouteConstraint() }
);
// Default:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { culture = "en-us", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
- 动态页面 - 用户在其个人资料中输入的内容(例如:“全名”、“关于”...)
现在这是我遇到的问题......
基本上,我需要允许用户输入他们个人资料的许多翻译,并为访问个人资料的用户选择正确的翻译。 此外,如果用户访问的个人资料没有提供其语言的翻译,我需要向他显示“默认”翻译,但网站界面仍将使用他的语言。
所以,我的方法是:
对于动态页面,我想我需要一个cookie的帮助,它包含用户的文化,并消除URL中的{culture}路由参数,站点界面本地化将由cookie或浏览器确定(用户-语言)当没有 cookie 时。内容本地化将由 URL“{content}”末尾的路由参数确定。
例如:
"domain.com/user/username" - 用于默认内容本地化(用户将设置为默认语言)。
"domain.com/user/username/en-us" - 用于英文内容本地化。
"domain.com/user/username/es-es" - 用于西班牙语内容本地化。
我得出以下结论:
• 对于匿名用户 = 对于静态页面,本地化由 URL 中的 {culture} 路由参数确定,但对于动态页面,去除了 {culture} 参数,站点界面由 cookie 和 {content URL 末尾的 } 参数代表内容本地化。
• 对于经过身份验证的用户 = 对于所有页面(静态和动态),本地化仅由 cookie 确定,这使得 URL 简短而友好,并且不影响 SEO。
这种方法可以接受吗?
我想不出什么是最佳实践解决方案来实现它,同时保留 SEO 和友好/简单的 URL?
顺便说一句 - 我专注于 URL 和 SEO,数据库和其他问题都表现良好。
谢谢!
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing