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