我正在使用MVC 4,C#和Razor建立一个网站,但在实施国际化方面存在问题。
在关注国际化的Nadeem Afana's博客后,我已成功正确地实施了90%的英语背景。但是,我遇到错误视图中的资源问题(下面的示例代码)。
<h1 class="grey lighter smaller">
<span class="blue bigger-125">
<i class="icon-warning-sign"></i>
@Resources.ErrorMessage
</span>
</h1>
当抛出错误(无论是404还是500)时,它会重定向到错误控制器并根据处理的异常呈现必要的视图(下面的示例)。然而,与其他页面不同,它尝试将语言转换为 en-us ,网站的其余部分仅将其转换为 en ,后者是正确的格式。
public ActionResult ServerError()
{
Response.StatusCode = (int) HttpStatusCode.InternalServerError;
return View();
}
我在帮助程序中有代码,如果数据库中不存在(例如下面的例子),它将剥离文化的第二部分(例如'us')
public static string GetNeutralCulture(string name)
{
if (name.Length > 2)
{
return name;
}
return name.Substring(0, 2);
}
从上面我知道网站无法将语言转换为'en-us',因为数据库中没有数据存在。但是,如果不支持,当我指定将语言剥离到帮助者中的Neutal Culture时,这并不能解决为什么它将它转换为'us'。由于我不知道如何纠正问题,有人可以给我一些建议。
哦,我已经检查了母版页,以确保网站的主要语言设置为<html lang="en">
,以便确定这是一个问题的可能性。
答案 0 :(得分:0)
今天早上回来工作后,我又看了一眼上面的问题。问题不在于我的代码,而是主要web.config
文件缺少关键元素的更多问题。
当遇到错误时,它会将用户重定向到web.config文件的customErrors部分(如下),然后相应地将其传递给控制器。
<customErrors mode="On" defaultRedirect="/ServerError?">
<error statusCode="401" redirect="/InvalidUser?" />
<error statusCode="403" redirect="/InvalidUser?" />
<error statusCode="404" redirect="/PageNotFound?" />
</customErrors>
默认情况下,web.config将使用en-us
作为主要语言,无论您是否已将“en,es,fr”(等)指定为受支持的语言(在web.config之外)。要解决这种情况,您需要在<system.web>
中添加的内容与以下代码类似。
<globalization
enableClientBasedCulture="true"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="en"
uiCulture="en"/>