使用共享资源时,需要创建同名的共享资源虚拟类,一定要注意的是,这个类的命名空间必须是根命名空间。
![](https://img.haomeiwen.com/i14607808/a33ee2c631ea4a57.png)
在需要全球化的项目中,我们肯定会把本地化的资源文件放在指定的目录中,例如图示的Resources目录。控制器和视图对应的资源文件只需要按照规定的方式把资源文件放到对应的目录中就可以了,ASP.NET Core本地化时会自动寻找对应的资源文件。
而共享资源文件显然是没有什么对应目录的,这个资源文件要放在资源目录的根路径下,同时创建一个同名的共享资源虚拟类,类不必有任何属性或方法。在控制器中使用
IStringLocalizer<SharedResource> sharedLocalizer
注入共享资源的本地化对象,在视图中则使用@inject IHtmlLocalizer<SharedResource> SharedLocalizer
,可以把注入代码放到_ViewImports.cshtml文件中。重点来了:和共享资源同名的虚拟类,也就是图示的SharedResource类,命名空间必须是项目的根命名空间。
当我们在Resources目录下创建SharedResource类时,它的命名空间默认是
根命名空间.Resources
,务必要记得把命名空间的.Resources
删掉。否则本地化对象找不到对应的资源文件。我的理解是,虚拟类和资源文件必须在同一个命名空间,而资源文件是没有命名空间的,或者说就是根命名空间,因此虚拟类也必须放在根命名空间。
网友评论