12

Nugetで最新のAttributeRoutingパッケージを使用して、ASP.Net MVCプロジェクトのルーティングを設定しています。私は、英語(プライマリ)とスペイン語(セカンダリ)の2つの言語を持つウェブサイトを作成しています。 2つの言語のURLが異なります。たとえば、英語についてはwww.root.com/en/about-us、スペイン語版の場合はwww.root.com/es/sobre-nosotrosとなります。属性のルーティングとローカリゼーションの問題

私は以下のようにルートプレフィックスを設定している: [RoutePrefix(「EN」、TranslationKeyは=「ホーム」)]

その後、私は私はそれがFluentTranslationProviderにXMLファイルから値を読み込み、作成したプログラムを持っています。登録私のルートのコードは次のようになります。

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に設定されていますが、URLをビルドするためにURLHelperクラスを呼び出すと、デフォルトの英語版のみが作成され、スペイン語版は得られません。なぜこれが事実かもしれないのか誰にも私に洞察を与えることができますか?私はこれを私の人生のためにすることはできません。

+0

はまた –

+2

urlhelper呼び出すためにあなたのコードを追加してください、画像は、あなたが存在していないあなたのポストににリンク – 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 }); 
    } 
}