ASP.NET MVCは、実装方法、言語を切り替えますか?
-
06-09-2019 - |
質問
私はそれを周りだけで台無しに、ASP.NET MVCに私の簡単なウェブサイトを変換し始めています。私は基本的に別の言語にセッション[「言語」]に設定し、ページをリフレッシュしそこにあるスイッチの言語機能を持っています。これは良く行うことができるが、私はこのために2つのコントローラを作り、そこにセッションを設定している場合は、私を修正してください。問題は、最後のルーティングです。私はいくつかのきちんとした方法でページを更新することができ、または私はそれに現在のアクションと再ルートそれを得ることができますか?それとも、これはAjaxのためのより多くのシナリオで?
アドバイスに感謝!
解決
あなたはセッション変数を使用していない理由はありますか?より一般的な解決策は、ルート内の言語コードを含むことである、すなわちblah.com/en/info又は(英語と日本語)blah.com/jp/info
あなたはこれをしなかった場合は、サイト上のすべてのページには、各言語へのリンクが含まれている可能性があります。あなたが公的にアクセス可能なサイトを作成している場合、これはまた、すべてのコンテンツのインデックスにGoogleのために、それが簡単になるだろう。
この記事では、すなわち、ドメインの言語を含める方法について説明します。 en.blah.comまたはjp.blah.com:<のhref = "http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx" のrel = "noreferrer" > http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx の
UPDATED:。ここでは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>
これらは、バックあなたが上にあるページへのリンクとしてレンダリングされます - 。言語は変更のみで、
他のヒント
続きアプローチ私のために良い働きます:
私は、クッキーとローカリゼーションのための私自身のエンジンを使用しています すべては、あなたがこのような何かにリダイレクトするページ上のいくつかのリンクを配置する必要があります:
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("/");
}
}
}
あなたはこのエンジンに興味を持っている場合は、、私に知らせます。
ここでは、URLに異なる選択を有効にする方法のシンプルなソリューションです。
言語管理のためのコントローラがある
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");