我需要在 MVC 应用程序中实现资源 (.resx) 消息的本地化,但一直未能这样做。
查看我正在遵循的步骤:
1.创建一个本地化项目并添加与您需要支持的语言一样多的资源 (.resx) 文件。以所有选定的语言添加要显示的消息。在 Visual Studio 的“访问修饰符”选项中选择“公共”。确保根据所需的约定命名资源文件,即默认语言为 MyResource.resx,法语本地化为 MyResource-fr.resx,罗马尼亚语本地化为 MyResource.ro,等等。
2.从http请求中检测并解析Accept-Language http头。选择具有最高“q”因子的那个,只要存在。如果不存在或所有 q 值都相同,则选择第一种接受的语言。
(更新:我刚刚了解到(见@ Zealous评论)添加<globalization enableClientBasedCulture="true" culture="auto" uiCulture="auto"/>
到 web.config 将完全一样,所以不需要手动工作)。
3.使应用程序控制器继承自基础控制器(也可以通过过滤器完成),根据最喜欢的方式,将 Thread.CurrentThread.CurrentCulture 和 Thread.CurrentThread.CurrentUICulture 的引用更改为动态创建的新实例接受的语言,从前面的步骤中提取。
4.将上一步中创建的本地化项目的引用添加到需要引用消息的项目中。引用消息时,只需引用要显示的消息的资源默认文件名“点”即可。在我们的示例中,它将是 MyResource.Welcome。
预期结果:在发送设置了 Accept-Language 为 'fr' 的 http 请求时,会收到带有“Bienvenue”的响应,而在将 Accept-Language 设置为 'en'(或添加多种语言并使用 q 因子)时,会收到一个回复“欢迎”。
不知何故,我的回复总是使用默认资源文件(在本例中为英语)。
我错过了什么或做错了什么?