0

我需要在 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 因子)时,会收到一个回复“欢迎”。

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

我错过了什么或做错了什么?

4

1 回答 1

0

问题解决了,把答案留给其他人:

我的接受语言标头设置为“he, he-IL”,CLR 总是选择默认语言资源。我有默认语言的资源和 he-IL 的另一个资源。

我在想 CLR 确定正确的资源文件,he 和 he-IL 是相同的。这不是真的。虽然我了解到“he”本身是遗留的,并且这些天不应该再出现,但解决方案是添加第三个资源来映射“he”标题 - 名为 MyResource.he.resx - 或从接受语言标头只留下已经映射的“he-IL”。

于 2015-05-06T11:05:34.147 回答