通过请求动态更改语言资源的好方法

pau*_*s_l 8 .net c# asp.net localization asp.net-web-api

我有一个ASP.NET Web API应用程序,它应该适当地响应用户的Accept-Language标头.

目前,字符串存储在resx中,并通过Visual Studio生成的类以编译安全的方式访问.我想做的是保持当前的方法并为resx的每个翻译版本创建附属程序集.然后分析用户的Accept-Language标头以查看用户接受的语言,并从附属程序集加载所请求语言的资源.

我想我可以通过ResourceManager在帮助下创建一组特定于语言的对象来实现所有这些行为,ResourceSet但是由于Visual Studio负责自动更新resx的类,因此无法保持编译时的安全性.文件.

动态选择本地化语言资源的最佳方法是什么?

Cla*_*fou 11

从阅读您的问题,我没有看到ASP.NET自动提供的任何内容.您可以配置ASP.NET(无论是WebForms还是MVC)以使用accept-language请求标头并设置相应的UICulture(它将影响ResourceManager加载哪个附属程序集)和Culture(这将影响依赖于区域设置的格式和解析,例如日期适当的.

要配置您的应用程序以使用该accept-language列表为每个请求设置UICulture和Culture(根据此MSDN页面),请按以下方式配置您的web.config:

<globalization uiCulture="auto" culture="auto" />
Run Code Online (Sandbox Code Playgroud)

每页还有一个等效的配置设置.

然后,根据资源回退过程,如果您的应用程序包含匹配文化的附属程序集(或者,如果失败,则为其父中性文化),资源管理器将使用它.如果没有,那么将使用您的默认资源(如果这是您的基本语言,则为英语).