MVC 5 本地化工作在 localhost 但不是服务器
MVC 5 localization working on localhost but not server
我尝试创建一个基于资源文件的多语言 mvc 网站。
我在 youtube 上找到了这个视频,它解释了这个概念并给出了一些示例代码:https://youtu.be/oGeAYd3idBc
现在的问题是。它可以在本地主机上运行,但是如果我将它上传到我的服务器上,它就无法运行。
在这一点上我开始了很多研究。我找不到太多,我找到并尝试过的一切都没有用。
许多解决方案建议尝试将 web.config 中的全球化 culture/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>
语言控制器
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;
}
}
一些可能有帮助的屏幕截图。
我发现 "solution"...我知道它很傻,但我不知道。
似乎如果您使用资源进行本地化,它会创建一个额外的 YOURPROJECT.resources.dll,位于 /bin/de-DE/(在我的例子中)。
您还必须上传此 文件夹/.dll
我尝试创建一个基于资源文件的多语言 mvc 网站。 我在 youtube 上找到了这个视频,它解释了这个概念并给出了一些示例代码:https://youtu.be/oGeAYd3idBc
现在的问题是。它可以在本地主机上运行,但是如果我将它上传到我的服务器上,它就无法运行。
在这一点上我开始了很多研究。我找不到太多,我找到并尝试过的一切都没有用。
许多解决方案建议尝试将 web.config 中的全球化 culture/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>
语言控制器
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;
}
}
一些可能有帮助的屏幕截图。
我发现 "solution"...我知道它很傻,但我不知道。
似乎如果您使用资源进行本地化,它会创建一个额外的 YOURPROJECT.resources.dll,位于 /bin/de-DE/(在我的例子中)。
您还必须上传此 文件夹/.dll