0

ASP.NET は初めてで、多言語 Web サイトを設計したいと考えています。
ユーザーがホームページ上部のメニュー バーから言語を選択できるようにし、Web ブラウザーのアドレス バーにも表示できるようにしたいと考えています。
そのために、以下のコードをRouteConfigClass に追加しました:

routes.MapRoute(
        name; "Default",
        url: "{lang}/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    )

まず、セットできませCultureInfoCurrentThread。私は作成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 を使用しています)。(それは可能ですか??!!)
助けていただければ幸いです。

4

1 に答える 1

1
  1. あなたがしたように言語を変更するアクションを作成します
  2. リストまたはデフォルトの言語から言語を選択します (例外をスローしないでください!)
  3. クッキーに保存
  4. リファラー サイトへのリダイレクトを行います (パラメーターを介して渡す必要はありません)。
  5. コントローラーの初期化メソッドでスレッドの言語を設定します (これを行うための基本コントローラー クラスを作成します)。Cookie が存在しないか無効な場合は、既定値を設定し、Cookie を再度送信します。
于 2012-12-08T08:03:45.663 に答える