ABP Zero模块扩展了ABP基础框架中的本地化功能,实现了通过数据库管理本地化的功能。其通过数据库保存本地化语言及其资源。
ApplicationLanguage:代表本地化语言的实体类。一种语言就是一个ApplicationLanguage实例。
ApplicationLanguageProvider:实现了ILanguageProvider接口,通过IApplicationLanguageManager实例设置DefaultLanguage和获取应用所配置的Language的列表。
ApplicationLanguageManager/IApplicationLanguageManager:通过IRepository<ApplicationLanguage>实例完成ApplicationLanguage实体的CRUD操作。同时实现ApplicationLanguage实体的更改事件,具体就是当ApplicationLanguage实体状态变化时,将对应的ApplicationLanguage实体从缓存中移除。
ApplicationLanguageText:代表数据库中的本地化资源的实体类。在ABP 基础框架中,是用资源文件保存本地化资源的,但是Zero中使用数据库保存本地化资源。
ApplicationLanguageTextManager/IApplicationLanguageTextManager: 通过IRepository<ApplicationLanguageText, long>实例完成ApplicationLanguageText实体的CRUD操作。
关于ILocalizationSource,ILocalizationDictionary和ILocalizationDictionaryProvider的定义和用法参见ABP核心框架中的本地化模块。ABP.Zero中重新实现了这三个接口,以完成从数据库中读取资源。如果明白了ABP核心框架中的本地化模块的用法,下面几个对象是很容易理解的。
IMultiTenantLocalizationSource : 扩展了ABP中的ILocalizationSource接口。重载了GetString和GetStringOrNull以提供根据tenant信息返回本地化字符串的方法。
MultiTenantLocalizationSource:实现了IMultiTenantLocalizationSource 接口。通过MultiTenantLocalizationDictionaryProvider实例完成本地化资源的读取。
IMultiTenantLocalizationDictionary : 扩展了ABP核心框架中的ILocalizationDictionary,重载了GetOrNull和GetAllStrings以提供根据tenant信息返回本地化字符串的方法。
MultiTenantLocalizationDictionary:实现了IMultiTenantLocalizationDictionary接口,通过IRepository<ApplicationLanguageText, long> 实例从数据库读取与指定tenant相关的本地化资源。并且通过ICacheManager实例缓存本地化资源
MultiTenantLocalizationDictionaryProvider:实现了ILocalizationDictionaryProvider接口,通过MultiTenantLocalizationDictionary获取与指定tenant相关的本地化资源。
MultiTenantLocalizationDictionaryCacheHelper:提供了两个静态方法一个用于获取localization cache,另一个方法CalculateCacheKey用于生成CacheKey。一个cacheKey对应一个本地化资源(字典类型)。
MultiTenantLocalizationDictionaryCacheCleaner:将一个指定的本地化资源从缓存中删除。
ILanguageManagementConfig:提供EnableDbLocalization方法激活是否使用Database作为本地化资源的数据源
LanguageManagementConfig:实现了ILanguageManagementConfig接口中的EnableDbLocalization方法。具体就是将其他本地化Source从configuration中移除,替换为Database Source。
ABP源码分析四十三:ZERO的本地化的更多相关文章
-
使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
-
ABP源码分析四:Configuration
核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...
-
ABP源码分析二十三:Authorization
Permission:用于定义一个Permission,一个permission可以包含多个子Permission. PermissionDictionary:继承自Dictionary<str ...
-
ABP源码分析四十七:ABP中的异常处理
ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationExce ...
-
ABP源码分析三十三:ABP.Web
ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现. AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事一,在A ...
-
ABP源码分析四十:ZERO的Application和Tenant
ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...
-
ABP源码分析四十一:ZERO的Audit,Setting,Background Job
AuditLog: 继承自Entity<long>的实体类.封装AuditLog的信息. AuditingStore: 实现了IAuditingStore接口,实现了将AuditLog的信 ...
-
ABP源码分析四十二:ZERO的身份认证
ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现 ...
-
ABP源码分析四十四:ZERO的配置
ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...
随机推荐
-
html5语义化标签使用规范
Html5添加了很多语义化标签,一个典型的html5页面结构可以如下安排 一.使用案例 1. 头部——header和nav标签 header头部,body下的直接子元素header一般用于放页面的介绍 ...
-
ASP.NET 生命周期 简介
当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面, 完全识别 HTTP 页面处理程序类后,ASP.NET 运行时 ...
-
工作流(Workflow)学习---基础知识整理
工作流定义: 工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成. 工 ...
-
统计学习方法——P1
背景基础知识备忘 平均差 MD=(∑|xi-x'|)/n 加权平均差 A.D=(∑|xi-x'|fi)/∑fi 方差 标准差 SD=方差的平方根 分布函数: 设X是一个随机变量,x是任意实数,函数 ...
-
Cookie 和 Session的基本使用
cookie: 放在客户端上的键值对. 1.设置cookie obj = render(request,'index.html') obj.set_cookie('key','value') retu ...
-
WebSocket和Socket
WebSocket和Socket tags:WebSocket和Socket 引言:好多朋友想知道WebSocket和Socket的联系和区别,下面应该就是你们想要的 先来一张之前收集的图,我看到这张 ...
-
Dynamics CRM项目实例之七:站点地图修改,联系人-订单-积分管理
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复138或者20141229可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面文章发表后,不 ...
-
js中类定义函数时用prototype与不用的区别
转载自:https://blog.csdn.net/yexudengzhidao/article/details/72866047 先看例子 function ListCommon2(first,se ...
-
android4.2 telephone应用层分析
InCallScreen.java 复制通话界面的显示和提供人机交互的接口.进入该界面第一个调用ONCreate.否则进入OnNewIntent,该配置文件是incall_screen.xml,当中i ...
-
Python撰写mail
版本1 指定邮箱进行发送 """ 说明:指定账户密码进行邮件发送 由312051952@qq.com-->c4kaichen@163.com "&qu ...