我正试图改变ASP.NET Web API 2
上的文化
但我无法弄清楚要覆盖哪个功能
我尝试了ExecuteAsync
和Initialize
,但应用程序无论如何都会使用英语资源。
这就是我设置文化的方式
protected void SetCulture(string cultureName)
{
// Validate culture name
cultureName = CultureHelper.GetImplementedCulture(cultureName);
// Modify current thread's cultures
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
}
protected override void Initialize(HttpControllerContext controllerContext)
{
if (controllerContext.Request.Headers.AcceptLanguage != null &&
controllerContext.Request.Headers.AcceptLanguage.Count > 0)
{
string language = controllerContext.Request.Headers.AcceptLanguage.First().Value;
SetCulture(language);
}
base.Initialize(controllerContext);
}
这里的资源总是用英文。我在Thread.CurrentThread.CurrentCulture
上放了一块手表,它说fr
private void SendConfirmationEmail(string userId)
{
...
UserManager.SendEmail(userId,
Resources.Resources.ConfirmAccount,
Resources.Resources.PleaseClickToConfirmAccount
+ callbackUrl);
}
我们如何设定当前的文化?
修改
在Global.asax
protected void Application_BeginRequest(Object sender, EventArgs e)
{
HttpRequest currentRequest = HttpContext.Current.Request;
if (currentRequest.Headers.AllKeys.Contains("Accept-Language"))
{
string culture = currentRequest.Headers["Accept-Language"].ToString();
SetCulture(culture);
}
}
Thread.CurrentThread.CurrentCulture
等于fr
。我不明白为什么这些资源仍然是英文的!
编辑2
我在Web API项目的属性中创建了资源文件,现在它可以正常工作。
所以问题出在resources.dll。
我不明白为什么API无法使用resources.dll选择好的资源文件。也许resources.fr.resx不是用dll。
答案 0 :(得分:4)
我发现了问题。
使用资源编译项目时,它会为每个具有.dll
所以我不得不复制这些文件夹。不仅resources.dll
,因为这只是默认语言。这就是为什么无论文化是什么,我的资源都是英文的。
所以要使用resources.dll
.dll
注意:您不必为每种文化添加参考,只需添加默认文化。