PL と EN の 2 つの言語の間で MVC 3 のビューを切り替えたいと考えています。Views に EN と PL という 2 つのフォルダーを作成しました。したがって、任意のサイトで適切な言語リンクをクリックした後、ルートを変更したい:
routes.MapRoute(
"pl", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "PL", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
に:
routes.MapRoute(
"en", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "EN", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
適切なリンク (言語スイッチャー) をクリックすると、すべてのスレッドに永続的な CultureInfo が変更されます。_スイッチャー付きレイアウト ビュー:
<ul>
<li>@Html.ActionLink("En", "ChangeCulture", null, new { lang = "en"}, null)</li>
<li>@Html.ActionLink("Pl", "ChangeCulture", null, new { lang = "pl"}, null)</li>
</ul>
およびコントローラー(すべてのコントローラーのメソッドで確認でき、リクエスト間で永続化できる静的変数 lang も設定します):
public ActionResult ChangeCulture(string lang)
{
PLController.lang = lang;
CultureSettings setCulture = new CultureSettings();
setCulture.InitializeCulture(lang);
cookie.Value = CultureInfo.CurrentCulture.Name;
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
return View("Index");
}
InitializeCulture メソッドは、次のように Page クラスからオーバーライドされます。
public class CultureSettings : Page{
public void InitializeCulture(string culture)
{
String selectedLanguage;
if(culture == null)
{
selectedLanguage = "pl";
}
else
{
selectedLanguage = culture;
}
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
base.InitializeCulture();
}
}
CultureInfo を適切に設定します。ここで、(現在の CultureInfo に従って) すべてのナビゲーション リンクのルートを切り替え、ルート パターンを mysite.com/PL/{controller}/{action} から mysite.com/EN/{controller}/{action} に変更したいと考えています。
誰かがこの問題に対するアイデアやより良いアプローチを持っていますか? ただし、条件として、アドレスは mysite.com/EN または mysite.com/PL のようになっている必要があります。違いはありません (つまり、en.mysite.com)。