ASP.NET MVC 스위치 언어, 구현 방법?
-
06-09-2019 - |
문제
간단한 웹 사이트를 ASP.NET MVC로 변환하기 시작했습니다. 기본적으로 세션 [ "언어"]을 다른 언어로 설정하고 페이지를 새로 고치는 스위치 언어 기능이 있습니다. 이것이 더 잘할 수 있다면 저를 바로 잡으십시오. 그러나 나는 이것을 위해 두 개의 컨트롤러를 만들고 세션을 설정했습니다. 문제는 끝의 라우팅입니다. 깔끔한 방식으로 페이지를 새로 고칠 수 있습니까? 아니면 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 경로에 언어 코드를 포함하는 예.
언어 매개 변수를 포함하도록 기본 경로를 변경하십시오.
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");