Сложность перенаправления MVC RouteLocalization на правильный префикс
Я использую библиотеку RouteLocalization.Mvc для переводов на моем сайте и испытываю некоторые трудности, когда не использую стандартную культуру (английский).
Мой сайт локализован на испанский язык, и все маршруты работают правильно, если в браузере установлен английский язык - я получаю маршруты без префиксов на английском языке и с префиксом / es / маршруты на испанском, как и ожидалось.
Тем не менее, когда я устанавливаю культуру моего браузера на испанский язык, я получаю переведенные страницы по маршрутам без префиксов, но я действительно хочу использовать префиксы (используя в качестве примера мою страницу about):
Accept-язык: английский
- /около
- / ES / Sobre-nosotros
Accept-язык: испанский
- / 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());
Любая помощь будет высоко ценится!!!
1 ответ
Вы хотите настроить следующее:
- Локализованные маршруты на английском языке (без префикса)
- Локализованные маршруты на испанском языке (с префиксом)
- Нет нейтральных маршрутов
Я думаю, что ваши английские маршруты на самом деле нейтральные (из-за AttributeRouteProcessing.AddAsNeutralRoute
).
Попробуйте установить AddCultureAsRoutePrefix
в false
, AttributeRouteProcessing
в AddAsDefaultCultureRoute
, Тогда позвони TranslateInitialAttributeRoutes()
,
Это добавит ваши атрибуты маршрутов без префиксов в качестве локализованных английских маршрутов. Некоторая информация из документации:
Сначала вы должны решить, как будут обрабатываться исходные маршруты атрибутов, которые перехватываются RouteLocalization. Существует несколько возможностей, которые можно выбрать с помощью свойства Configuration.AttributeRouteProcessing.
Если ваши маршруты атрибутов, например, являются английскими по умолчанию, вы можете определить, что каждый маршрут атрибута должен быть добавлен как локализованный маршрут для английской культуры. Поэтому вы должны установить DefaultCulture в "en" и AttributeRouteProcessing в AddAsDefaultCultureRoute.
После звонка TranslateInitialAttributeRoutes
вы можете установить AddCultureAsRoutePrefix
вернуться к true
и затем начните переводить свои испанские маршруты.