1. 程式人生 > >ABP原始碼分析四十三:ZERO的本地化

ABP原始碼分析四十三:ZERO的本地化

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操作。

關於ILocalizationSourceILocalizationDictionaryILocalizationDictionaryProvider的定義和用法參見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本地化

ABP Zero模組擴充套件了ABP基礎框架中的本地化功能,實現了通過資料庫管理本地化的功能。其通過資料庫儲存本地化語言及其資源。 ApplicationLanguage:代表本地化語言的實體類。一種語言就是一個ApplicationLanguage例項。 ApplicationLanguag

ABP原始碼分析ZERO的Application和Tenant

ABP的Zero模組以資料庫為資料來源實現了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting m

ABP原始碼分析十三ABP.Web

ABP.Web模組並不複雜,主要完成ABP系統的初始化和一些基礎功能的實現。 AbpWebApplication : 繼承自ASP.Net的HttpApplication類,主要完成下面三件事一,在Application_Start完成AbpBootstrapper的初始化。整個ABP系統的初始化就是通過A

ABP原始碼分析十三Authorization

Permission:用於定義一個Permission,一個permission可以包含多個子Permission. PermissionDictionary:繼承自Dictionary<string, Permission>類,很明顯是一個用於儲存permission物件的字典。 I

ABP原始碼分析十二ZERO的身份認證

ABP Zero模組通過自定義實現Asp.Net Identity完成身份認證功能, 對Asp.Net Identity做了較大幅度的擴充套件。同時重寫了ABP核心模組中的permission功能,以實現授權。注意:ABP僅僅使用了Asp.Net Identity的身份認證功能,但沒有使用Asp.Net Id

ABP原始碼分析十一ZERO的Audit,Setting,Background Job

AuditLog: 繼承自Entity<long>的實體類。封裝AuditLog的資訊。 AuditingStore: 實現了IAuditingStore介面,實現了將AuditLog的資訊儲存到資料庫的功能。其通過IRepository<AuditLog, long>例項完成對資料

ABP原始碼分析ZERO的配置

ABP Zero模組中需要配置的地方主要集中在三塊:配置靜態的role,配置外部認證源,以及配置本地化語言和資源。 UserManagementConfig/IUserManagementConfig:定義了一個配置項,用於配置外部認證源。預設情況下,ABP Zero使用AbpUser表作為身份

ABP原始碼分析Configuration

核心模組的配置 Configuration是ABP中設計比較巧妙的地方。其通過AbpStartupConfiguration,Castle的依賴注入,Dictionary物件和擴充套件方法很巧妙的實現了配置中心化。配置中心化是一個支援模組開發的框架必備功能。 ABP中核心功能模組中的一些功能的執行時的

ABP原始碼分析十二本地化

本文逐個分析ABP中涉及到locaization的介面和類,以及相互之間的關係。本地化主要涉及兩個方面:一個是語言(Language)的管理,這部分相對簡單。另一個是語言對應得本地化資源(Localization)的管理,這部分稍顯複雜。 LanguageInfo:用於封裝language的基本

ABP原始碼分析十七ABP中的異常處理

ABP 中異常處理的思路是很清晰的。一共五種型別的異常類。 AbpInitializationException用於封裝ABP初始化過程中出現的異常,只要丟擲AbpInitializationException異常就可以,無須做額外處理。這類異常往往是需要維護人員介入分析的。 其他四個異常都在AbpCon

ABP原始碼分析二十ApplicationService

IApplicationService : 空介面,起標識作用。所有實現了IApplicationService 的類都會被自動注入到容器中。同時所有IApplicationService物件都會被注入一些攔截器(例如:auditing, UnitOfWork等)以實現AOP AbpServiceBase:

ABP原始碼分析十六DTO的設計

IDTO:空介面,用於標註Dto物件。 ComboboxItemDto:用於combobox/list中Item的DTO NameValueDto<T>/NameValueDto:用於name value鍵值對的DTO, name為string型別, value為泛型或string型別。

ABP原始碼分析十七DTO 自動校驗的實現

對傳給Application service物件中的方法的DTO引數,ABP都會在方法真正執行前自動完成validation(根據標註到DTO物件中的validate規則)。 ABP是如何做到的? 思路無外乎通過Castle的攔截器實現AOP。本文主要分析ABP是如何設計。 Ivalidate: 空介面,用

ABP原始碼分析十九Auditing

審計跟蹤(也叫審計日誌)是與安全相關的按照時間順序的記錄,它們提供了活動序列的文件證據,這些活動序列可以在任何時間影響一個特定的操作。 AuditInfo:定義如下圖中需要被Audit的資訊。 AuditedAttribute: 用於標識一個方法或一個類的所有方法都需要啟用Auditing功能

ABP原始碼分析十一Timing

Timing這個簡單實用的功能主要用於以統一的方式表示時間。因為ABP中有大量的module,還支援自定義module,所以將時間統一表示為local時間(預設)或utc時間是必要的。 IClockProvider:提供獲取當前時間和標準化時間的介面。 UtcClockProvider:實現了以UTC

ABP原始碼分析十八UI Inputs

以下圖中描述的介面和類都在Abp專案的Runtime/Validation, UI/Inputs目錄下的。在當前版本的ABP(0.83)中這些介面和類並沒有實際使用到。閱讀程式碼時可以忽略,無需浪費時間去尋找其是如何被ABP使用的(本文的目的)。 這些介面和類最終都是通過IInputType被Feature

[Abp 原始碼分析]十三、多語言(本地化)處理

0.簡介 如果你所開發的需要走向世界的話,那麼肯定需要針對每一個使用者進行不同的本地化處理,有可能你的客戶在日本,需要使用日語作為顯示文字,也有可能你的客戶在美國,需要使用英語作為顯示文字。如果你還是一樣的寫死錯誤資訊,或者描述資訊,那麼就無法做到多語言適配。 Abp 框架本身提供了一套多語言機制來幫助我們實

ABP原始碼分析Entity的設計

IEntity<TPrimaryKey>: 封裝了PrimaryKey:Id,這是一個泛型型別 IEntity: 封裝了PrimaryKey:Id,這是一個int型別 Entity<TPrimaryKey> :支援主鍵是泛型型別的Entity Entity:支援主鍵是int型別的

ABP原始碼分析十三快取Cache實現

ABP中有兩種cache的實現方式:MemroyCache 和 RedisCache. 如下圖,兩者都繼承至ICache介面(準確說是CacheBase抽象類)。ABP核心模組封裝了MemroyCache 來實現ABP中的預設快取功能。 Abp.RedisCache這個模組封裝RedisCache來實現快取(

ABP原始碼分析三十ABP.Web.Mvc

ABP.Web.Mvc模組主要完成兩個任務: 第一,通過自定義的AbpController抽象基類封裝ABP核心模組中的功能,以便利的方式提供給我們建立controller使用。 第二,一些常見的基礎功能的實現。 AbpController:這是一個抽象基類,繼承自MVC Controller,是A