ASP.NET は初めてで、多言語 Web サイトを設計したいと考えています。
ユーザーがホームページ上部のメニュー バーから言語を選択できるようにし、Web ブラウザーのアドレス バーにも表示できるようにしたいと考えています。
そのために、以下のコードをRouteConfig
Class に追加しました:
routes.MapRoute(
name; "Default",
url: "{lang}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
)
まず、セットできませCultureInfo
んCurrentThread
。私は作成CultureController
し、そこでユーザーの選択に基づいて言語を設定しました。他のビューとコントローラーでは変更されません。(すべてのユーザーが Web サイトに入ると 1 つのスレッドが表示されると聞いています)
public ActionResult ChangeLanguage ( string lang, String returnUrl = null )
{
if ( !new[] { "en", "fr", "ar" }.Contains( lang ) )
throw new ArgumentException( "Language not supported." );
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo( lang );
if ( returnUrl == null )
return RedirectToAction( "Index", "Home" );
return Redirect( returnUrl );
}
2 番目の問題: リンクにも lang を渡す必要がありますが、そうしたくありません。例えば:
@Html.ActionLink("About", "About", "Home")
もう機能しません。CultureInfo
格納されてCurrentThread
いるセッションまたはセッションに基づいて、言語パラメータが満たされるようにします。(私は現在 Session を使用しています)。(それは可能ですか??!!)
助けていただければ幸いです。