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。