21

単純なWebサイトをASP.NETMVCに変換し始めましたが、それをいじくりまわすだけです。基本的にSession["language"]を別の言語に設定し、ページを更新する言語切り替え機能があります。これがもっとうまくいくかどうか私を訂正してください、しかし私はこれのために2つのコントローラーを作り、そこでセッションを設定しました。問題は、最後のルーティングです。ページをきちんと更新できますか、それとも現在のアクションを取得してそれに再ルーティングできますか?それとも、これはAjaxのシナリオですか?

アドバイスありがとうございます!

4

3 に答える 3

20

セッション変数を使用している理由はありますか?より一般的な解決策は、ルートに言語コードを含めることです。つまり、blah.com / en /infoまたはblah.com/jp/info(英語と日本語の場合)

これを行うと、サイトのすべてのページに各言語へのリンクが含まれる可能性があります。あなたが公的にアクセス可能なサイトを書いているなら、これはまたグーグルがあなたのすべてのコンテンツを索引付けすることをより簡単にするでしょう。

この記事では、ドメインに言語を含める方法について説明します。en.blah.comまたはjp.blah.com:http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

更新:URLルートに言語コードを含める簡単な例を次に示します。

言語パラメータを含めるようにデフォルトルートを変更します。

routes.MapRoute(
"Default", 
"{language}/{controller}/{action}/{id}", 
new { language = "en", controller = "Home", action = "Index", id = "" }
);

各言語のリンクをマスターページに追加します。

<li><%= Html.ActionLink(
    "Spanish", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "es" })%></li>
<li><%= Html.ActionLink(
    "French", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "fr" })%></li>
<li><%= Html.ActionLink(
    "English", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "en" })%></li>    

これらは、言語が変更された場合にのみ、現在のページに戻るリンクとしてレンダリングされます。

于 2009-05-29T22:35:22.673 に答える
7

次のアプローチは私にとってうまくいきます:

私はローカリゼーションにCookieと独自のエンジンを使用しています。ページにリンクを配置して、次のようなものにリダイレクトする必要があります。

public class LanguageController : Controller
{
    //
    // GET: /Language/

    public void Change(string id)
    {
        var cuka = new HttpCookie("lang", id + "");
        cuka.Expires = DateTime.Now.AddYears(10);
        System.Web.HttpContext.Current.Response.Cookies.Add(cuka);

        if (Request.UrlReferrer.IsNotNull())
            Response.Redirect(Request.UrlReferrer.AbsoluteUri);
        else
            Response.Redirect("/");
    }

}

}

このエンジンに興味があれば、私に知らせてください。

于 2009-05-30T18:59:24.303 に答える
0

言語管理用のコントローラーがあります

    public class LocalesController : Controller
{

    public ActionResult Index(string lang = "en_US")
    {
        Response.Cookies["CacheLang"].Value = lang;

        if (Request.UrlReferrer != null)
            Response.Redirect(Request.UrlReferrer.ToString());

        var message = Localization.Get("changedlng");

        return Content(message);
    }

}

個別に呼び出すことができます

new LocalesController().Index("fa");
于 2019-06-19T22:27:35.657 に答える