2017-10-04 171 views
2

我嘗試基於資源文件創建一個多語言mvc網站。 我在YouTube上發現了這個視頻,它解釋了這個概念並給出了一些示例代碼:https://youtu.be/oGeAYd3idBc本地主機,但不是服務器上的MVC 5本地化工作

現在的問題是。它工作localhost,但如果我上傳它在我的服務器上,它不起作用。

在這一點上,我開始了大量的研究。我找不到太多,我發現並嘗試過的所有東西都沒有奏效。

許多解決方案建議建議嘗試將web.config中的全球化文化/ uiCulture設置爲自動。這也沒有奏效。

在我的索引頁上,我輸出當前的文化(CultureInfo.CurrentCulture.Name)。 如果用戶設置他的語言,它將在本地主機上更改。但在我的服務器上它總是英語。

所以我希望你能理解我的問題。

現在我的代碼:

的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; 
      } 
     } 

一些截圖可能有幫助。

project structur enter image description here

+0

你是要設置默認文化爲整個應用程序,而不是用戶的文化,所以你可能穿上代碼」不管怎麼說,這個代碼都可以工作。 –

+2

請參閱[ASP.NET MVC 5文化路由和URL](https://stackoverflow.com/a/32839796)。根本沒有理由使用Cookie進行本地化,並且使用它們也對SEO不利。 – NightOwl888

+0

是的,用@ NightOwl888的方法去:-)我會刪除我的「答案」 – DiskJunky

回答

0

我找到了「解決方案」 ......我知道了傻,但我不知道這一點。

看似如果您使用本地化它會創建一個額外的YOURPROJECT.resources.dll其在/斌/解-DE/位於(對我來說)的資源。

您還可以上傳此文件夾/ .DLL

enter image description here

相關問題