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源码分析系列文章目录

ABP源码分析四十三:ZERO的本地化的更多相关文章

  1. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  2. ABP源码分析四:Configuration

    核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...

  3. ABP源码分析二十三:Authorization

    Permission:用于定义一个Permission,一个permission可以包含多个子Permission. PermissionDictionary:继承自Dictionary<str ...

  4. ABP源码分析四十七:ABP中的异常处理

    ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationExce ...

  5. ABP源码分析三十三:ABP.Web

    ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现. AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事一,在A ...

  6. ABP源码分析四十:ZERO的Application和Tenant

    ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...

  7. ABP源码分析四十一:ZERO的Audit,Setting,Background Job

    AuditLog: 继承自Entity<long>的实体类.封装AuditLog的信息. AuditingStore: 实现了IAuditingStore接口,实现了将AuditLog的信 ...

  8. ABP源码分析四十二:ZERO的身份认证

    ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现 ...

  9. ABP源码分析四十四:ZERO的配置

    ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...

随机推荐

  1. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  2. Java初始化过程

    这篇文章主要讲解Java在创建对象的时候,初始化的顺序.主要从以下几个例子中讲解: 继承关系中初始化顺序 初始化块与构造器的顺序 已经加载过的类的初始化顺序 加载父类,会不会加载子类 创建子类对象会不 ...

  3. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  4. div实现自适应高度的textarea,实现angular双向绑定

    相信不少同学模拟过腾讯的QQ做一个聊天应用,至少我是其中一个. 过程中我遇到的一个问题就是QQ输入框,自适应高度,最高高度为3row. 如果你也像我一样打算使用textarea,那么很抱歉,你一开始就 ...

  5. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  6. 深入理解javascript函数定义与函数作用域

    最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径 ...

  7. 怎样两个月完成Udacity Data Analyst Nanodegree

    在迷恋数据科学很久后,我决定要在MOOC网站上拿到一份Data Science的证书.美国三个MOOC网站,Udacity上的课程已经被分成了数个nanodegree,每个nanodegree都是目前 ...

  8. hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()的用法

    javascript中有原型这么一个概念,任何一个构造函数都有它对应的原型(prototype),我们可以给这个原型赋予一些我们想要的属性,像下面这样: function Gadget(name, c ...

  9. .NET面试题系列[6] - 反射

    反射 - 定义,实例与优化 在面试中,通常会考察反射的定义(操作元数据),可以用反射做什么(获得程序集及其各个部件),反射有什么使用场景(ORM,序列化,反序列化,值类型比较等).如果答得好,还可能会 ...

  10. 在多线程编程中lock(string){...}隐藏的机关

    常见误用场景:在订单支付环节中,为了防止用户不小心多次点击支付按钮而导致的订单重复支付问题,我们用 lock(订单号) 来保证对该订单的操作同时只允许一个线程执行. 这样的想法很好,至少比 lock( ...