【问题标题】:I18N Rendering as EN-US and not Neutral CultureI18N 呈现为 EN-US 而不是中性文化
【发布时间】:2013-12-06 15:16:21
【问题描述】:

我正在使用 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();
}

如果数据库中不存在文化的第二部分(例如“我们”),我在帮助器中有代码(例如下面的示例)

public static string GetNeutralCulture(string name)
{
  if (name.Length > 2)
  {
    return name;
  }

  return name.Substring(0, 2);
}

据我了解,该网站无法将语言转换为“en-us”,因为数据库中不存在该语言的数据。但这并不能解决为什么当我指定将语言剥离为帮助器中的中性文化(如果不支持)时,它将其转换为“我们”的原因。由于我不知道如何纠正这个问题,有人可以给我一些建议。

哦,我已经检查了母版页,确保网站的主要语言设置为&lt;html lang="en"&gt;,以排除这是一个问题的可能性。

【问题讨论】:

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


    【解决方案1】:

    今早复工后,又重新审视了上面的问题。问题不在于我的代码,而在于主要的 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 之外)。为了纠正这种情况,您需要在&lt;system.web&gt; 中添加类似于以下代码的内容。

    <globalization
      enableClientBasedCulture="true"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en"
      uiCulture="en"/>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      相关资源
      最近更新 更多