我在使用这种多语言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;
}
然后我将使用我在应用程序开头选择的文件中的资源字符串
答案 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设置为正确语言代码的说明。
如果您有任何问题,请与我们联系。