문제

간단한 웹 사이트를 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");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top