.Net Core制作的多语言切换网站Demo,不同于官方实例,每种语言只有一个资源文件。
其实ASP.NET Core中官方提供了Microsoft.AspNetCore.Localization库来实现本地化。
参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-2.2
但按照官方写法,每个控制每个视图都要建一个资源文件,这样语种多了,工作量暴增,
所以想到使用自定义中间件来更改主线程的CurrentCulture
和CurrentUICulture
属性为特定语言,
即可实现.resx
资源文件的全局利用。
以图一为例,设置ResourceFile.resx
的访问级别为Public
后,会生成ResourceFile.Designer.cs
文件。点开可以看到此文件的命名空间是WebApplication1.Resources
。
在.NET Core中.resx资源文件是和线程的语言相关,其主要和当前线程的如下两个语言属性相关:
*Thread.CurrentThread.CurrentCulture <br> *Thread.CurrentThread.CurrentUICulture
如果当前线程的这两个属性是什么语言,那么.resx资源文件就会返回对应语言的内容。
Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CN");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
附加:官方文档中ASP.NET Core的本地化中间件默认支持3种语言文化提供器,demo中我使用的Cookie.
*URL中的查询字符串
*Cookie
*请求头