本地化与国际化
- 基本上相关代码都在在Orchard.Framework.Localization中。
- T("english")是如何调用到WebViewPage.cs中的Localizer T的。
1.LocalizationModule:Autofac.Module 此类主要完成属性注入功能
通过Override Load(ContanerBuilder builder)来注册Text与Itext类,使在每次调用或加载时,新建一个Text对象。
通过AttachTocomponentRegistration来进行属性注入。找到所有形如public Localizer T{get;}的属性,使其与LocalizationUtilities.Resolve(e.context,scope)挂钩,把这个对象赋值给T属性。
- LocalizationUtilities类,负责采用构造函数注入的方式,把Text.Get方法set给T属性。
- Text类才是最终干事情的,负责返回LocalizedString对象。
- DefaultLocalizedStringManager 就是基础类了,负责具体的读取po文件的解析与实现。
总结
- 目前为止,基本理清Orchard国际化与本地化的架构逻辑,其中涉及到的知识点颇多,使人脑洞大开,功率不足。主要知识点有:Autofac的属性注入,构造函数注入,Lambda匿名函数,po文件,Autofac的某些事件的复写,cache,接口编程思想,Razor,ViewContext,WebViewPage,静态构造函数,委托,委托属性,Orchard的scop与shpe待相关概念,扩展属性,Culture类。
- 参考如下: