私はここにあるブログ投稿をフォローしようとしています。リソースファイルをホストする新しいアセンブリを追加しました(リソースを複数のプロジェクト間で共有する必要がある場合があるため、別のアセンブリを使用しました)。web.configに以下を追加しました。
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="MyResources.Resources"/>   <!-- New entry for resources -->
      </namespaces>
    </pages>
  </system.web.webPages.razor>
そして、私はテスト目的でいくつかのファイルにリソース文字列を追加しました。今私が遭遇しているように見える問題は、リソースをデフォルト以外のものに設定できないことです。したがって、たとえば、生成されたリソースファイルデザイナには次のものがあります。
    /// <summary>
    ///   Looks up a localized string similar to Log in was unsuccessful. Please correct the errors and try again..
    /// </summary>
    public static string Account_LoginUnsuccessful {
        get {
            return ResourceManager.GetString("Account_LoginUnsuccessful", resourceCulture);
        }
    }
このメソッドにブレークポイントを設定した場合resourceCulture、null以外の何物でもありません。私は次のことを試しましたが:
Global.asax.caの場合:
    protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        var culture = new System.Globalization.CultureInfo("fr");
        // Modify current thread's cultures            
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture.Name);
    } // End of Application_AcquireRequestState
他のすべてのコントローラーが継承するベースMVCコントローラーでは、次のようになります。
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        SetCulture(requestContext.HttpContext.Request);
        base.Initialize(requestContext);
    }
    protected override void ExecuteCore()
    {
        SetCulture(Request);
        base.ExecuteCore();
    }
    protected override void Execute(System.Web.Routing.RequestContext requestContext)
    {
        SetCulture(requestContext.HttpContext.Request);
        base.Execute(requestContext);
    }
    protected override IAsyncResult BeginExecute(System.Web.Routing.RequestContext requestContext, AsyncCallback callback, object state)
    {
        SetCulture(requestContext.HttpContext.Request);
        metrics = Metrics.BeginTimer();
        return base.BeginExecute(requestContext, callback, state);
    }
    private void SetCulture(HttpRequestBase Request)
    {
        string cultureName = "fr";
        // Validate culture name
        cultureName = CultureHelper.GetImplementedCulture(cultureName); // This is safe
        // Modify current thread's cultures            
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
    }
さて、私の理解では、スレッドの現在のカルチャを設定すると、リソースファイルのカルチャが変化するはずです。私の人生でこれをうまく機能させることができないようです(したがって、私は約10の異なる場所にカルティアを設定しようとしました)。
私がここで間違っていることについて何か提案はありますか?