本地主机,但不是服务器上的MVC 5本地化工作
问题描述:
我尝试基于资源文件创建一个多语言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;
}
}
一些截图可能有帮助。
你是要设置默认文化为整个应用程序,而不是用户的文化,所以你可能穿上代码”不管怎么说,这个代码都可以工作。 –
请参阅[ASP.NET MVC 5文化路由和URL](https://stackoverflow.com/a/32839796)。根本没有理由使用Cookie进行本地化,并且使用它们也对SEO不利。 – NightOwl888
是的,用@ NightOwl888的方法去:-)我会删除我的“答案” – DiskJunky