12

Używam najnowszej wersji pakietu AttributeRouting w Nuget do konfiguracji routingu dla mojego projektu ASP.Net MVC. Tworzę stronę internetową, która ma dwa języki: angielski (podstawowy) i hiszpański (wtórny). Adresy URL obu języków są różne. Na przykład informacje o nas w języku angielskim wyglądają tak: www.root.com/en/about-us, podczas gdy wersja hiszpańska może być następująca: www.root.com/es/sobre-nosotros.Problemy z atrybutem Routing i lokalizacja

Mam konfigurację trasy prefiks jak poniżej: [RoutePrefix („en”, TranslationKey = „Home”)]

Wtedy mam program, który stworzyłem, który odczytuje wartości z pliku XML do FluentTranslationProvider . Kod dla zarejestrować swoje trasy wygląda następująco:

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

I wydaje się działać, bo mogę odwiedzić moją Routes.axd stronę i zobacz, co następuje: http://imm.io/nm7Z

Później w moją stronę, mój kod pokazuje że moja CurrentCulture jest ustawiona na es-AR, ale kiedy zadzwonię do klasy URLHelper w celu zbudowania adresu URL, buduje ona tylko domyślną angielską wersję i nie da mi wersji hiszpańskiej. Czy ktokolwiek może mi powiedzieć, dlaczego tak się dzieje? Nie mogę tego do końca życia.

+0

proszę Cię dodać kod do wywoływania urlhelper –

+2

Również obraz, który odwołuje się w post nie istnieje – Henrik

Odpowiedz

1

Czy próbowałeś zaktualizować parametr RouteValueDictionary i przekazać go jako parametr do pomocnika url? Robię coś podobnego do przełączania ssl.

Oto niektóre przykładowy kod do rozważenia, jako funkcję pomocnika:

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