簡単なWebサイトをASP.NETMVCに変換し始めましたが、それをいじくりまわしました。基本的にSession ["language"]を別の言語に設定し、ページを更新する言語切り替え機能があります。これがもっとうまくできるかどうか私を訂正してください、しかし私はこれのために2つのコントローラーを作り、そこでセッションを設定しました。問題は、最後のルーティングです。なんらかの方法でページを更新できますか、それとも現在のアクションを取得して再ルーティングできますか?それとも、これはAjaxのシナリオですか?
アドバイスありがとうございます!
セッション変数を使用している理由はありますか?より一般的な解決策は、ルートに言語コードを含めることです。つまり、blah.com/en/infoまたはblah.com/jp/info(英語と日本語の場合)
これを行うと、サイトのすべてのページに各言語へのリンクが含まれる可能性があります。公的にアクセス可能なサイトを作成している場合、これにより、Googleがすべてのコンテンツのインデックスを作成しやすくなります。
この記事では、ドメインに言語を含める方法について説明します。 en.blah.comまたはjp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx
更新:URLルートに言語コードを含めるsimpleの例を次に示します。
言語パラメータを含めるようにデフォルトルートを変更します。
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>
これらは、言語が変更された場合にのみ、現在のページに戻るリンクとしてレンダリングされます。
次のアプローチは私にとってうまくいきます:
私はローカリゼーションに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("/");
}
}
}
このエンジンに興味があれば、私に知らせてください。
ここにあります 異なる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");