资源不会加载当前的文化
我试图改变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。
我解决了这个问题。
使用资源编译项目时,它会为每个文化创建一个带有.dll
的文件夹
所以我不得不复制这些文件夹。 不仅是resources.dll
因为这只是默认语言。 这就是为什么无论文化是什么,我的资源都是英文的。
所以要使用resources.dll
- 你必须导入该引用
- 使用所有
.dll
复制bin文件夹中的所有文化文件夹
注意:您不必为每种文化添加参考,只需添加默认文化。