代码之家  ›  专栏  ›  技术社区  ›  aligray

MVC路由本地化难以重定向到正确的前缀

  •  1
  • aligray  · 技术社区  · 10 年前

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

    我的网站已本地化为西班牙语,当浏览器的语言设置为英语时,所有路由都能正常工作-我得到的是英语中的无前缀路由和西班牙语中的带前缀/es/routes。

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

    接受语言:英语

    • /关于
    • /es/sobre nosotros公司

    接受语言:西班牙语

    • /es/sobre nosotros公司
    • /正在/大约(如果可能的话,只是/大约)

    我计划重定向到正确的前缀,但似乎不知道该怎么做。

    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 回复  |  直到 10 年前
        1
  •  1
  •   Community Mohan Dere    6 年前

    您需要的设置如下:

    • 英语本地化路线(无前缀)
    • 西班牙语本地化路线(带前缀)
    • 无中性路线

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

    尝试设置 AddCultureAsRoutePrefix 到 false , AttributeRouteProcessing 到 AddAsDefaultCultureRoute .然后拨打 TranslateInitialAttributeRoutes() .

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

    例如,如果您的属性路由为英语为默认路由,则可以定义每个属性路由都应添加为英语文化的本地化路由。因此,您可以将DefaultCulture设置为“en”,将AttributeRouteProcessing设置为AddAsDefaultCuultureRoute。

    拨打电话后 TranslateInitialAttributeRoutes 您可以设置 将文化添加为路由前缀 true 然后开始翻译您的西班牙语路线。

    推荐文章