0

この多言語 MVC 4 Web アプリケーションの実行に少し問題があります。あらゆる場所を調べましたが、必要なものが正確に見つかりませんでした。

私が欲しいのは、ソリューションを 4 つのプロジェクトに分割したものです。その中には、Web MVC 4 プロジェクト (メイン プロジェクト) とリソース プロジェクトがあり、そこで 2 つのリソース ファイル (en-US.resx と pt-BR. resx) 次のように、ビューの pt-BR リソース テキストを使用して、viewBag.title を簡単に割り当てることができます。

      @using Resources
      @{
           ViewBag.Title = pt_BR.HomeTitle;
      }

私が知りたい唯一のことは、リソース ファイル (pt_BR および en_US) を何かに保存する方法であり、テキストは次のように変換されます。

      var culture = Resources.en_US; //or var culture = Resources.pt_BR;

その後

       @using Resources
       @{
           ViewBag.Title = culture.HomeTitle;
       }

次に、アプリケーションの最初に選択したファイルのリソース文字列を使用します

4

2 に答える 2

1

terjetyl が言及したことに加えて、カルチャを変更できるようにするには、コントローラーに追加機能を追加する必要があります。

まず、次のクラスを作成する必要があります (Controllers フォルダーに配置できます)。

public class BaseController : Controller
{
    protected override void ExecuteCore()
    {
        string cultureName = null;

        // Attempt to read the culture cookie from Request
        HttpCookie cultureCookie = Request.Cookies["_culture"];

        // If there is a cookie already with the language, use the value for the translation, else uses the default language configured.
        if (cultureCookie != null)
            cultureName = cultureCookie.Value;
        else
        {
            cultureName = ConfigurationManager.AppSettings["DefaultCultureName"];

            cultureCookie = new HttpCookie("_culture");
            cultureCookie.HttpOnly = false; // Not accessible by JS.
            cultureCookie.Expires = DateTime.Now.AddYears(1);
        }

        // Validates the culture name.
        cultureName = CultureHelper.GetImplementedCulture(cultureName); 

        // Sets the new language to the cookie.
        cultureCookie.Value = cultureName;

        // Sets the cookie on the response.
        Response.Cookies.Add(cultureCookie);

        // Modify current thread's cultures            
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

        base.ExecuteCore();
    }
}

次に、作成したクラスから継承するように、MVC プロジェクトのすべてのコントローラーを作成する必要があります。

この後、Views フォルダーの Web.configの namespaces タグに次のコードを追加する必要があります。

<add namespace="complete assembly name of the resources project"/>

最後に、言語を変更するボタンに、「_culture」Cookie を正しい言語コードに設定するための指示を追加する必要があります。

ご不明な点がございましたら、お知らせください。

于 2013-07-18T21:01:58.660 に答える