MVC 5内容全球化

问题描述:

我有一个非常复杂的情况,当我需要在我正在处理的项目中使用静态本地化和动态本地化时。MVC 5内容全球化

我需要的本地化:

  1. 静态的页面(如: “关于”, “帮助”, “联系人” ...)

例如:

“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 } 
    ); 
  1. 动态页面 - 内容的用户在他们的个人资料(如输入 “姓名”, “关于” ... )
  2. 现在,这里是我有...

    基本上我需要让用户输入他们的个人资料的许多翻译,并且还挑选合适的翻译用户访问个人资料的问题。 此外,如果用户访问用户未提供其语言翻译的个人资料,则需要向他展示“默认”翻译,但该网站界面仍将保留其语言。

    所以,我对这种做法:

    对于动态网页,我想我需要从一个cookie,它包含了用户的文化帮助,并消除在URL中的{文化}路由参数,该网站界面当没有cookie时,本地化将由cookie或浏览器(用户语言)确定。内容本地化将根据URL“{content}”末尾的路由参数确定。

    例如:

    “domain.com/user/username” - 对于默认内容定位(用户将设置为默认的语言)。

    “domain.com/user/username/en-us” - 用于英文内容本地化。

    “domain.com/user/username/es-es” - 用于西班牙语内容本地化。

    我得出了以下结论:

    •对于匿名用户=的定位是通过在URL中的{文化}路线参数确定静态页面,但对于动态页面的{文化}参数被消除,网站界面由cookie确定,URL末尾的{content}参数代表内容本地化。

    •对于通过身份验证的用户=所有页面(静态为&动态)本地化仅由cookie确定,这会生成一个简短的&友好的URL,并且SEO不受影响。

    这种方法可以接受吗?

    我不能确定什么是最佳实践解决方案,以实现这一点,同时保留搜索引擎优化和友好/简单的网址?

    顺便说一句 - 我专注于URL和SEO,数据库和其他问题都表现良好。

    谢谢!

开始=>

  • 针对静态页面的定位是通过在URL中的{文化}路线参数确定匿名用户=,但对于{文化}参数消除动态页面,该网站接口从cookie确定并且URL末尾的{content}参数代表内容本地化。

既然你关心搜索引擎优化,cookie在匿名页面上是禁止的。这些页面上的所有内容都应通过URL进行控制。

对于这种情况,我认为将{culture}{content}参数放入URL中是最直观的,但是在相反的两端。

{culture}/{controller}/{action}/{content} 

您可能使这些参数可选用一个精心制作的路由配置逻辑默认的。为了便于阅读,您可以考虑在最后一个参数之前添加一个静态的/content/分段,这将需要额外的路线才能使两个分段可选。

当没有cookie时,站点界面本地化将由cookie或浏览器(用户语言)确定。

这很好(假设您使用URL而不是cookie作为上面提到的可选值)。这为用户通过URL覆盖浏览器(用户语言)提供了一种简单的方法。由于(用户语言)是一个可以被防火墙改变的标题,这可能不是用户的真正偏好,如果你没有提供覆盖它的方式,那是一个可怕的用户体验。我还建议设法重写用户界面上可见的用户语言(通过指向具有文化内容的URL的链接),而不仅仅通过URL可用。

请记住,搜索引擎可能不提供此标题,因此,如果不可用,您还应该有一个备用计划(默认文化)。提供时始终将URL视为文化的首选,并忽略(用户语言)标题。

  • 验证的用户=为所有页面(静态&动态)的定位是仅通过cookie来确定,这使得短&友好的URL和SEO不受影响。

您有只能通过身份验证的用户达到网址更大的灵活性,所以使用Cookie这边独好。虽然,如果网站的其他部分将文化置于可能让使用URL导航的强大用户感到有点奇怪的URL中,

就我个人而言,我的目标是与网站其他部分保持一致,而不是通过认证页面的“简短网址”,因为它通常只是匿名网页,其中“漂亮的短网址”同时适用于搜索引擎优化和共享目的。但是,如果您希望有大量的高级用户在浏览器中编辑URL,可能值得考虑。

+0

我希望能从你那里得到答案,你似乎对这个话题有很好的理解。谢谢。 –