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

Required steps for implementing localization in a MVC application in C#

我需要在 MVC 应用程序中实现资源 (.resx) 消息的本地化,但一直未能实现。

查看我正在执行的步骤:

1. 创建本地化项目并添加与您需要支持的语言一样多的资源 (.resx) 文件。添加您想要以所有选定语言显示的消息。 Select "Public" 在 Visual Studio 的 "access modifier" 选项。确保根据所需的约定命名资源文件,即 MyResource.resx 用于默认语言,MyResource-fr.resx 用于法语本地化,MyResource.ro 用于罗马尼亚本地化,等等。

2. 从http请求中检测并解析Accept-Language http header。选择具有最高 'q' 因素的那个,只要存在。如果存在 none 或所有 q 值都相同,则选择接受的第一种语言。

(更新:我刚刚了解到(请参阅@Zealous 评论)将 <globalization enableClientBasedCulture="true" culture="auto" uiCulture="auto"/> 添加到 web.config将完全相同,因此无需手动工作)。

3. 使应用程序控制器继承自更改 Thread.CurrentThread.CurrentCulture 和 [=59 的引用的基本控制器(也可以通过过滤器完成) =]根据从前面的步骤中提取的最喜欢的语言,即时创建的新实例。

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

预期结果:将 Accept-Language 设置为 'fr' 的 http 请求发送后,收到 "Bienvenue" 的响应,而将 Accept-Language 设置为 'en' (或添加多种语言并使用 q 因子),收到 "Welcome".

的响应

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

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

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

我的 accept-language header 设置为 "he, he-IL" 并且 CLR 总是选择默认语言资源。我有默认语言的资源和 he-IL.

的资源

我在想,他和 he-IL 是一样的,为了让 CLR 确定正确的资源文件。这不是真的。 尽管我了解到单独 "he" 是遗留问题,这些天不应再出现,但解决方案是添加第三个资源来映射 "he" header - 命名为 MyResource.he.resx -或从 accept-language header 中删除 "he",只留下已经映射的 "he-IL"。