12

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

У меня есть настройки маршрута Prefix, как показано ниже: [RoutePrefix («ан», 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-адреса, он только строит стандартную английскую версию и не даст мне испанскую версию. Может ли кто-нибудь дать мне понять, почему это может быть так? Я не могу для жизни моей фигурой это.

+0

пожалуйста, добавьте ваш код для вызова urlhelper –

+2

Кроме того, изображение вы ссылаетесь в вашем посте не существует – Henrik

ответ

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 }); 
    } 
}