1

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

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

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

接受语言:英语

  • /关于
  • /es/sobre-nosotros

接受语言:西班牙语

  • /es/sobre-nosotros
  • /en/about (或者如果可能的话只是 /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());

任何帮助都感激不尽!!!

4

1 回答 1

1

您想要的设置如下:

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

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

尝试设置AddCultureAsRoutePrefixfalse,AttributeRouteProcessingAddAsDefaultCultureRoute。然后调用TranslateInitialAttributeRoutes()

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

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

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

致电后,TranslateInitialAttributeRoutes您可以AddCultureAsRoutePrefix返回true并开始翻译您的西班牙语路线。

于 2016-09-10T11:57:53.180 回答