Подтвердить что ты не робот

Проблемы с маршрутизацией атрибутов и локализацией

Я использую самую новую версию пакета AttributeRouting в Nuget для настройки моей маршрутизации для моего проекта ASP.Net MVC. Я создаю веб-сайт с двумя языками: английский (основной) и испанский (вторичный). URL-адреса для двух языков разные. Например, о нас для английского было бы так: www.root.com/en/about-us, тогда как испанская версия может быть такой: www.root.com/es/sobre-nosotros.

У меня есть настройка префикса маршрута, как показано ниже: [RoutePrefix ( "en", TranslationKey = "Главная" )]

Затем у меня есть программа, которую я создал, которая считывает значения из файла XML в FluentTranslationProvider. Код для регистрации моих маршрутов выглядит так:

var translations = new FluentTranslationProvider();
        translations
            .AddTranslations()
            .FromFile();

routes.MapAttributeRoutes(
            config =>
                {
                    config.AddRoutesFromControllersOfType<BaseController>();
                    config.AddTranslationProvider(translations);
                    config.CurrentUICultureResolver =
                        (httpContext, routeData) =>
                        (string) routeData.DataTokens["cultureName"] ??
                        Thread.CurrentThread.CurrentUICulture.Name;
                });

И это работает, потому что я могу посетить мою страницу Routes.axd и увидеть следующее: http://imm.io/nm7Z

Позже на моей странице мой код показывает, что мой CurrentCulture установлен в es-AR, но когда я вызываю класс URLHelper для создания URL-адреса, он создает только английскую версию по умолчанию и не даст мне испанскую версию. Может ли кто-нибудь дать мне понять, почему это может быть так? Я не могу для жизни своей фигуры.

4b9b3361

Ответ 1

Вы пробовали обновить RouteValueDictionary и передать это как параметр вашему помощнику URL? Я делаю что-то подобное для переключения ssl.

Вот пример кода, который следует рассматривать как вспомогательную функцию:

@functions {

  public static string LanguageUrl(WebViewPage page, string actionName, string controllerName, string desiredCulture)
  {
    // translate action name here, if needed.
    return page.Url.Action(actionName, controllerName, new { cultureName = desireCulture } );
  }
}