0

このチュートリアルに基づいて、プロジェクトに国際化機能を持たせようとしています。さまざまな言語で単語を保存するためのこれらのリソース ファイルがあります。

resources.resx --> デフォルト言語 (en-US) の場合

resources.fa.resx --> ペルシャ語の場合

resources.es.resx --> スペイン語用

のような言葉と文化faを示しています。es

viewsこの方法で、リソースファイル内の単語を同等のものに置き換えました。

<a href="#" >@Resources.IranNewsStand</a>

編集:チュートリアルに基づいてすべてのロジックを実装しましたが、すべての言語に対して 1 つのビューがあり、このビューでは resources.resx を使用しています。それは正しいロジックですか?

Thread.CurrentThread.CurrentCulture私の質問は、プロジェクトが?の値に基づいてどのリソース ファイルをロードするかをどのように知っているかということです 私は何を取りこぼしたか?

編集:これらの手順を実装しました:

1-言及された3つのresxファイル(resources.resx、resources.fa.resx、resources.es.resx)を含むClass Library Project名前があります。Resources

2-Resource project参照として私の mvc アプリケーションに追加されます。

3-controllers はこの Base Controller を継承します:

public class BaseController : Controller
{
    protected override void ExecuteCore()
    {
        string cultureName;
        HttpCookie cultureCookie = Request.Cookies["_culture"];
        if (cultureCookie != null)
            cultureName = cultureCookie.Value;
        else
            cultureName = Request.UserLanguages[0];
        cultureName = utilities.CultureHelper.GetValidCulture(cultureName);
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
        base.ExecuteCore();
    }
}

4-私が言ったように、デフォルトの言語(en-US)文字列を含むファイルviewからリソース文字列を使用しました:resource.resx

<p>@Resources.Resources.Home</p>

5-in view リンクをクリックすると、この jquery コードが実行されるリンクがあります。

    <script type="text/javascript">
        $("#btnChangeLanguage").click(function () {
            $.cookie("_culture", "fa-IR", { expires: 365, path: '/' });
            window.location.reload(); // reload 
        })
    </script>

fa-IRはユーザーが選択した文化ですが、このリンクをクリックしても言語は変わりません。

編集:解決策

私のプロジェクトで、それらを解決するとすべてがうまくいくという2つの問題が見つかりました。

1-jquery コードを正しく動作させるには、jQuery cookie プラグインが必要でした。

<script type="text/javascript" src="~/Scripts/jquery.cookie.js" ></script>

2- の ExecuteCore イベントBaseControllerが発生せず、それが問題だったように聞こえます。したがって、この質問asp.net MVC 4に基づいて、代わりにオーバーライドしようとしました。OnActionExecuted

4

1 に答える 1

2

現在のカルチャに基づいてリソースをプルするロジックは、.NET 自体に組み込まれています。

これには 2 つの手順があります。

  1. 現在のカルチャは、リクエストで適切に設定する必要があります。ASP.NET には、リンク先の記事で説明されているものなど、これを行うための組み込みメカニズムがいくつかあります。
  2. これが設定されると、.NET Framework は要求の現在のカルチャを使用して適切なリソースを読み込みます。要求されたロケールが利用できない場合、カルチャ ニュートラル リソースが読み込まれます ("フォールバック")。
于 2013-04-09T17:40:35.517 に答える