1

我正在使用 MVC 4 和剃刀视图。我们有一个从资源文件中提取的应用程序。目前只有一组资源文件,但我们要求在网站的某些部分进行一些翻译,这将看到一些额外的外语资源文件。

应用程序的一部分向用户发送推荐,并且在该推荐中,可以选择设置要显示的语言(无论用户客户端也设置了什么)。这将在查询字符串上设置为lang=ES. 我们像这样在视图中引用资源变量@Resources.Templates.ReferralAcceptance.DefaultAcceptanceMessage。如果查询字符串中没有可用的语言值,我需要默认为从客户端发送的cultureCode,如果不可用,它将回退到我们拥有的标准英文版本。

我是资源文件的新手,尤其是 MVC。我解决这个问题的最佳方法是什么?

4

2 回答 2

2

这是我过去所做的:

在您的web.config文件中,添加以下设置:

  <system.web>
    <globalization enableClientBasedCulture="true" />
  </system.web>

这将处理您的后备实例,其中查询字符串中没有设置语言。


现在让控制器使用查询字符串“lang”参数:

(我通常会在“BaseController”中有以下代码,并让我的控制器继承自此。)

将以下覆盖方法添加到您的控制器:

protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)
{
    var culture = requestContext.HttpContext.Request.QueryString["lang"];

    //!!Check to see if culture exists and is valid before setting the thread culture

    var cultureInfo = new CultureInfo(culture);
    Thread.CurrentThread.CurrentCulture = cultureInfo;
    Thread.CurrentThread.CurrentUICulture = cultureInfo;

    return base.BeginExecute(requestContext, callback, state);
}

这使您能够读取查询字符串中的“lang”值,然后使用它来设置线程的文化。这应该覆盖设置设置的任何文化enableClientBasedCulture

于 2013-07-17T23:03:30.653 回答
0

与其使用查询字符串来指定语言,不如定义一个新路由,例如http://MyHost/Culture/Controller/Action/Id.

本文的第 2 部分很好地解释了您需要在此处执行的操作:

创建双语 asp.net MVC 应用程序 - 第 1 部分

创建双语 asp.net MVC 应用程序 - 第 2 部分

于 2013-07-17T23:06:16.340 回答