C# 在C中的MVC应用程序中实现本地化所需的步骤

C# 在C中的MVC应用程序中实现本地化所需的步骤,c#,localization,resx,http-accept-header,C#,Localization,Resx,Http Accept Header,我需要在MVC应用程序中实现resource.resx消息的本地化,但一直未能做到这一点 回顾我将遵循的步骤: 一,。创建一个本地化项目并添加尽可能多的resource.resx文件,以支持所需的语言。以所有选择的语言添加要显示的消息。在Visual Studio的访问修改器选项中选择“公共”。确保您根据所需约定命名资源文件,即默认语言为MyResource.resx,法语本地化为MyResource-fr.resx,罗马尼亚本地化为MyResource.ro,等等 二,。从http请求中检测并

我需要在MVC应用程序中实现resource.resx消息的本地化,但一直未能做到这一点

回顾我将遵循的步骤:

一,。创建一个本地化项目并添加尽可能多的resource.resx文件,以支持所需的语言。以所有选择的语言添加要显示的消息。在Visual Studio的访问修改器选项中选择“公共”。确保您根据所需约定命名资源文件,即默认语言为MyResource.resx,法语本地化为MyResource-fr.resx,罗马尼亚本地化为MyResource.ro,等等

二,。从http请求中检测并分析Accept Language http标头。选择“q”因子最高的一个,无论何时出现。如果不存在或所有q值相同,则选择接受的第一种语言

更新:我刚刚了解到see@Zealous评论,添加到web.config也会做同样的事情,所以不需要手动操作

三,。使应用程序控制器从基础控制器继承也可以通过过滤器来完成,该过滤器将Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture的引用更改为动态创建的新实例,根据接受的最首选语言,如前一步提取的

四,。将对在上述步骤中创建的本地化项目的引用添加到需要引用消息的项目中。在引用消息时,只需引用要显示的消息的资源默认文件名“dot”。在我们的示例中,它将是MyResource.Welcome

预期结果:将设置为Accept Language的http请求发送到“fr”时,接收到带有Bienvenue的响应,而将Accept Language设置为“en”或添加几种语言并使用q因子时,接收到带有Welcome的响应

不知何故,我的回答总是使用默认的资源文件(在本例中为英语)


我遗漏了什么或做错了什么?

问题已解决,将答案留给其他人:

我的accept language标题设置为he,he-IL CLR总是选择默认的语言资源。我有一个用于默认语言的资源,另一个用于IL

我在想,对于CLR来说,要确定合适的资源文件,he和IL都是相同的。事实并非如此。
虽然我了解到只有他一个人是遗留下来的,现在不应该再出现了,但解决方案是要么添加第三个资源来映射he标题,名为MyResource.he.resx,要么从accept language标题中删除he,只留下已经映射的he IL。

此处解释的完整本地化:以及@Zealous:确实,使用web配置设置,我可以删除手动执行的所有基本控制器内容。我检查了线程区域性和ui区域性,两者都设置正确,但我仍然得到默认语言。就像我从一开始就得到的结果一样。