2017-10-04 22 views
2

리소스 파일을 기반으로 다중 언어 MVC 웹 사이트를 만들려고합니다. 컨셉을 설명하고 몇 가지 예제 코드를 제공하는이 비디오를 youtube에서 찾았습니다. https://youtu.be/oGeAYd3idBcMVC 5 지역화가 로컬 호스트에서 작동하지만 서버가 아닙니다.

지금 문제가 있습니다. localhost 작동하지만 내 서버에 업로드 할 경우 작동하지 않습니다.

이 시점에서 저는 많은 연구를 시작했습니다. 나는 많이 찾지 못했습니다. 내가 찾은 모든 것을 시도했지만, 효과가 없었습니다.

web.config의 globalization culture/uiCulture를 auto로 설정하는 것이 좋습니다. 이것은 또한 효과가 없었습니다.

색인 페이지에서 현재 문화권 (CultureInfo.CurrentCulture.Name)을 출력합니다. 사용자가 언어를 설정하면 localhost에서 변경됩니다. 하지만 내 서버에서 항상 영어.

내 문제를 이해하시기 바랍니다. 이제

내 코드 :

의 Web.config

<system.web> 
<globalization culture="auto" uiCulture="auto"></globalization> 
</system.web> 

index.cshtml

@using System.Globalization 

@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<div class="pushContent"></div> 
<div class="container"> 
    <div class="row"> 
     <ul> 
      <li>@Html.ActionLink("English", "Change", "Language", new { LanguageAbbrevation = "en" }, null)</li> 
      <li>@Html.ActionLink("German", "Change", "Language", new { LanguageAbbrevation = "de-DE" }, null)</li> 
     </ul> 
    </div> 
    <div class="row"> 
     <p> 
      CurrentCulture is now @CultureInfo.CurrentCulture.Name 
     </p> 
    </div> 
</div> 
<div class="pushFooter"></div> 

LanguageController

public ActionResult Change(string LanguageAbbrevation) 
     { 
      if (LanguageAbbrevation != null) 
      { 
       CultureInfo.CurrentCulture.ClearCachedData(); 
       CultureInfo culture; 
       culture = CultureInfo.CreateSpecificCulture(LanguageAbbrevation); 

       CultureInfo.DefaultThreadCurrentCulture = culture; 
       CultureInfo.DefaultThreadCurrentUICulture = culture; 
      } 

      HttpCookie cookie = new HttpCookie("Language"); 
      cookie.Value = LanguageAbbrevation; 
      cookie.Expires = DateTime.MaxValue; 
      Response.Cookies.Add(cookie); 

      return View("Index"); 
     } 

Global.asax.cs

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      HttpCookie cookie = HttpContext.Current.Request.Cookies["Language"]; 

      if(cookie != null && cookie.Value != null) 
      { 
       CultureInfo.CurrentCulture.ClearCachedData(); 
       CultureInfo culture; 
       culture = CultureInfo.CreateSpecificCulture(cookie.Value); 

       CultureInfo.DefaultThreadCurrentCulture = culture; 
       CultureInfo.DefaultThreadCurrentUICulture = culture; 
      } 
      else 
      { 
       CultureInfo.CurrentCulture.ClearCachedData(); 
       CultureInfo culture; 
       culture = CultureInfo.CreateSpecificCulture("en"); 

       CultureInfo.DefaultThreadCurrentCulture = culture; 
       CultureInfo.DefaultThreadCurrentUICulture = culture; 
      } 
     } 

일부 스크린 샷이 도움이 될 수 있습니다. enter image description here

+0

당신은 아마 돈 때문에, 전체 응용 프로그램, 사용자가 아닌 문화의 기본 문화를 설정하는 것입니다 가지고있는 코드 ' 이 코드가 어쨌든 작동하도록하고 싶지 않습니다. –

+2

[경로 및 URL의 ASP.NET MVC 5 문화권] (https://stackoverflow.com/a/32839796)을 참조하십시오. 현지화를 위해 쿠키를 사용하는 이유가 전혀 없으며 쿠키를 사용하는 것도 SEO에 좋지 않습니다. – NightOwl888

+0

그래, @ NightOwl888의 접근 방식을 따라 가라 :-) 나는 내 "대답"을 제거 할 것이다 – DiskJunky

답변

0

project structur

는 내가 그 바보를 알고 ...은 "솔루션"을 찾았지만, 나는이를 모른다.

리소스를 로컬 리 제이션에 사용하는 경우 겉으로보기에는 /bin/de-DE/ (내 경우에는)에있는 추가 YOURPROJECT.resources.dll이 생성됩니다.

당신은 또한 업로드해야이 폴더/.DLL

enter image description here