0

我在做这个多语言 MVC 4 Web 应用程序时遇到了一点麻烦,我到处找,但是我没有找到我想要的东西。

我想要的是:我的解决方案除以 4 个项目,其中,有 web MVC 4 项目(主项目)和一个资源项目,我在其中创建了 2 个资源文件(en-US.resx 和 pt-BR. resx)我可以轻松地创建 viewBag.title,例如在视图上使用 pt-BR 资源文本,如下所示:

      @using Resources
      @{
           ViewBag.Title = pt_BR.HomeTitle;
      }

我唯一想知道的是如何将资源文件(pt_BR和en_US)存储在某些东西中,并且文本将被转换,就像这样

      var culture = Resources.en_US; //or var culture = Resources.pt_BR;

接着

       @using Resources
       @{
           ViewBag.Title = culture.HomeTitle;
       }

然后我将使用我在应用程序开头选择的文件中的资源字符串

4

2 回答 2

2

您可以做的是为英文文本创建一个 Home.resx 文件,为葡萄牙文文本创建一个 Home.pt-BR.resx 文件,然后像这样访问它们

   @{
       ViewBag.Title = Resources.Home.Title;
   }

您线程的文化将选择正确的文件。您可以在 web.config ex 中手动设置线程文化。

<globalization uiCulture="pt-BR" culture="pt-BR" />
于 2013-07-18T20:29:16.190 回答
1

除了 terjetyl 提到的,为了能够改变文化,您需要向控制器添加额外的功能。

首先,您需要创建以下类(您可以将其放在 Controllers 文件夹中):

public class BaseController : Controller
{
    protected override void ExecuteCore()
    {
        string cultureName = null;

        // Attempt to read the culture cookie from Request
        HttpCookie cultureCookie = Request.Cookies["_culture"];

        // If there is a cookie already with the language, use the value for the translation, else uses the default language configured.
        if (cultureCookie != null)
            cultureName = cultureCookie.Value;
        else
        {
            cultureName = ConfigurationManager.AppSettings["DefaultCultureName"];

            cultureCookie = new HttpCookie("_culture");
            cultureCookie.HttpOnly = false; // Not accessible by JS.
            cultureCookie.Expires = DateTime.Now.AddYears(1);
        }

        // Validates the culture name.
        cultureName = CultureHelper.GetImplementedCulture(cultureName); 

        // Sets the new language to the cookie.
        cultureCookie.Value = cultureName;

        // Sets the cookie on the response.
        Response.Cookies.Add(cultureCookie);

        // Modify current thread's cultures            
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

        base.ExecuteCore();
    }
}

然后,您需要使 MVC 项目中的每个控制器都继承自创建的类。

在此之后,您需要在 Views 文件夹的 Web.config 上的命名空间标签上添加以下代码。

<add namespace="complete assembly name of the resources project"/>

最后,您需要在更改语言的按钮上添加将“_culture”cookie 设置为正确语言代码的说明。

如果您有任何问题,请告诉我。

于 2013-07-18T21:01:58.660 回答