12

Nuget の AttributeRouting パッケージの最新バージョンを使用して、ASP.Net MVC プロジェクトのルーティングをセットアップしています。英語 (プライマリ) とスペイン語 (セカンダリ) の 2 つの言語を使用する Web サイトを作成しています。2 つの言語の URL は異なります。たとえば、英語版の about us は www.root.com/en/about-us のようになりますが、スペイン語版は www.root.com/es/sobre-nosotros のようになります。

以下のようにルート プレフィックスを設定しています: [RoutePrefix("en", TranslationKey = "Home")]

次に、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 を構築すると、デフォルトの英語版のみが構築され、スペイン語版は提供されません。なぜこれが当てはまるのか、誰かが私に洞察を与えることができますか? 私は一生これを理解することはできません。

4

1 に答える 1

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 } );
  }
}
于 2014-03-04T16:44:02.770 に答える