MVC RouteLocalization难以重定向到正确的前缀

时间:2016-09-08 13:27:29

标签: asp.net-mvc-5 routelocalization-mvc

我正在使用RouteLocalization.Mvc库在我的网站上进行翻译,并且在不使用默认文化时遇到一些困难(英语)。

当我的浏览器的语言设置为英语时,我的网站已本地化为西班牙语并且所有路由都正常工作 - 我获得了英语中没有前缀的路由,并且按照预期使用西班牙语作为前缀/ es /路由。

但是,当我将浏览器的文化设置为西班牙语时,我会在未加前缀的路由上获取翻译页面,但我真正想要的前缀是(以我的about页面为例):

接受语言:英语

  • /约
  • / ES /自我-nosotros

接受语言:西班牙语

  • / ES /自我-nosotros
  • / en / about(或者只是/如果可能的话)

我计划重定向到正确的前缀,但似乎无法弄清楚如何做到这一点。

var config = new Configuration()
{
    DefaultCulture = "en",
    AcceptedCultures = new HashSet<string> { "en", "es" },
    AddCultureAsRoutePrefix = true,
    AddTranslationToSimiliarUrls = true,
    AttributeRouteProcessing = AttributeRouteProcessing.AddAsNeutralRoute
};

// translations omitted

CultureSensitiveHttpModule.GetCultureFromHttpContextDelegate = Localization.DetectCultureFromBrowserUserLanguages(acceptedCultures, defaultCulture);
GlobalFilters.Filters.Add(new CultureSensitiveActionFilterAttribute());

任何帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:1)

您需要的设置如下:

  • 英文本地化路线(不含前缀)
  • 西班牙语的本地化路线(带前缀)
  • 没有中立路线

我认为你的英文路线实际上是中性路线(因为AttributeRouteProcessing.AddAsNeutralRoute)。

尝试将AddCultureAsRoutePrefix设为false,将AttributeRouteProcessing设为AddAsDefaultCultureRoute。然后拨打TranslateInitialAttributeRoutes()

这会将没有前缀的属性路由添加为本地化英语路由。文档中的一些信息:

  

首先,您必须决定如何处理由RouteLocalization截获的初始属性路由。可以通过Configuration.AttributeRouteProcessing属性选择一些可能性。

     

如果您的属性路线例如英语是默认的,您可以定义每个属性路线应该作为英语文化的本地化路线添加。因此,您可以将DefaultCulture设置为&#34; en&#34;和AttributeRouteProcessing到AddAsDefaultCultureRoute。

致电TranslateInitialAttributeRoutes后,您可以将AddCultureAsRoutePrefix设置回true,然后开始翻译西班牙语路线。