I18N渲染为EN-US而不是中立文化

时间:2013-12-06 15:16:22

标签: c# asp.net-mvc razor internationalization

我正在使用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">,以便确定这是一个问题的可能性。

1 个答案:

答案 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"/>

来源:Globalization Element (ASP.NET Settings Schema)