MVC 4的多语言应用程序

时间:2013-07-18 20:15:52

标签: c# asp.net-mvc localization globalization multilingual

我在使用这种多语言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;
       }

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

2 个答案:

答案 0 :(得分:2)

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

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

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

中手动设置线程文化
<globalization uiCulture="pt-BR" culture="pt-BR" />

答案 1 :(得分: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设置为正确语言代码的说明。

如果您有任何问题,请与我们联系。