日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】ABP源码分析十二:本地化

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】ABP源码分析十二:本地化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文逐個分析ABP中涉及到localization的接口和類,以及他們之間的關系。本地化主要涉及兩個方面:一個是語言(Language)的管理,這部分相對簡單。另一個是語言對應得本地化資源(Localization)的管理,這部分稍顯復雜。

LanguageInfo:用于封裝language的基本信息。

?

ILanguageProvider:接口定義一個返回本地化語言集合的方法。這里使用接口做隔離是有必要的,因為ABP底層框架的DefaultLanguageProvider只是返回通過代碼hardcode到系統中的LanguageInfo信息。如果需要從其他source(比如數據庫)中獲取配置的LanguageInfo信息,那么我們就必須實現自定義的LanguageProvider。

DefaultLanguageProvider:從LocalizationConfiguration讀取LanguageInfo的集合。

ILanguageManager/LanguageManager:通過調用ILanguageProvider接口返回LanguageInfo的一個集合。以及返回服務器的當前語言設置,如果服務器的當前語言不在LocalizationConfiguration的本地化語言集合中,則返回LocalizationConfiguration的本地化語言集合中的第一項。

?

以下是上面介紹的接口和類之間的關系

?


?

ILocalizationConfiguration/LocalizationConfiguration:?用于配置支持本地化的語言的一個LanguageInfo集合,以及這些語言所對應的本地化資源。這兩者分別對應ILocalizationConfiguration中的Lanugages和Sources屬性。注意這個Sources是一個ILocalizationSourceList實例。

下面是一個具體的web項目中的本地化配置。

這里有個限制需要留意,本地化資源是以SourceName分組的。比如上面的SimpleTaskSystem就是一個SourceName,其就標注了一組本地化資源(實際項目中獲取指定字符串的本地化資源時,必須同時指定一個SourceName,以告知ABP從那組資源文件中讀取本地化字符串)。

不能給LocalizationConfiguration的source添加兩組本地化資源,而這兩組本地化資源卻使用同一個SourceName。如果另一組本地化資源需要使用相同的SourceName的話,需要以LocalizationSourceExtensionInfo的形式添加到LocalizationConfiguration的source的Extensions中。

?

實際項目中本地化資源的路徑。

?

上面圖中的資源文件是以什么樣的形式被裝載到ABP中的呢?圖上的代碼已經說明,通過DictionaryBasedLocalizationSource實例的形式被添加到LocalizationConfiguration的Sources中。
Source就是一個ILocalizationSourceList實例,是一個List. 另外ILocalizationSourceList實例還有一個IList<LocalizationSourceExtensionInfo>屬性,這是用于擴展同組資源文件使用的。

?

LocalizationSourceExtensionInfo:用于擴展本地化資源。ABP在LocalizationManager初始化的過程中將LocalizationSourceExtensionInfo所對應的本地化資源擴充到ILocalizationSource對象的相應本地化資源字典中。

?

ILocalizableString/LocalizableString:封裝需要被本地化的string的信息,并提供Localize方法(調用ILocalizationManager的GetString方法)返回本地化的string. SourceName指定其從那個本地化資源讀取本地化文本。

FixedLocalizableString:封裝不需要被本地化的string

?

ILocalizationContext/LocalizationContext:?上下文類封裝了LocalizationManager。一般用作方法調用時的參數。

?

ILocalizationSource/IDictionaryBasedLocalizationSource/DictionaryBasedLocalizationSource: 從下面的圖可以看出這組接口和類大致就相當于Facade模式的實現。ILocalizationManager對象通過ILocalizationSource對象調用各種本地化相關的邏輯。一組本地化資源只對應一個ILocalizationSource實例。

?

?

ILocalizationDictionary:提供了索引器this[]方法的接口,該方法接受一個string返回的是本地化的string。當LocalizationManager初始化動作結束后,每一種本地化語言的都對應有且僅有的一個ILocalizationDictionary對象,這個對象用于保存該語言的所有本地化信息。

LocalizationDictionary:實現了ILocalizationDictionary和IEnumerable兩個接口,他本身就是一個具有集合操作的類。其內部封裝了一個Dictionary的實例,用于提供真正的集合操作。這個基類只提供了從其內部的Dictionary中根據原string查找返回本地化的string。?其本身并沒有將本地化資源文件中的數據加載到其內部的Dictionary的功能,這部分是在其子類中實現的。

XmlLocalizationDictionary:實現BuildFomFile和BuildFomXmlString方法用于從XML文件讀取本地化數據

JsonLocalizationDictionary:實現BuildFromFile和BuildFromJsonString方法用于從Json文件讀取本地化數據

JsonLocalizationFile:?反序列化Json字符串到JsonLocalizationFile對象。

?

ILocalizationDictionaryProvider:它封裝了一個IDictionary<string, ILocalizationDictionary>實例(這是ABP在runtime時候,唯一持有本地化資源的對象),其中key就是sourceName(比如上面的"SimpleTaskSystem")。并且提供了一個方法Initialize來初始化本地化這個Dictionary。可以通過實現這個接口來提供其他類型的本地化資源。比如Abp.Zero?就實現了數據庫的本地化資源。

LocalizationDictionaryProviderBase:實現了ILocalizationDictionaryProvider的抽象類,實現了extend本地化Dictionary的方法,這個方法主要用于初始化完成以后,用于擴展相應的ILocalizationDictionary對象。

XmlFileLocalizationDictionaryProvider:提供從xml文件中讀取本地化信息,并將本地化信息裝載到DefaultDictionary(IDictionary<string, ILocalizationDictionary>?對象)中。

JsonFileLocalizationDictionaryProvider:提供從Json文件中讀取本地化信息,并將本地化信息裝載到DefaultDictionary(IDictionary<string, ILocalizationDictionary>?對象)中。

JsonEmbeddedFileLocalizationDictionaryProvider:提供從xml文件(本地資源)中讀取本地化信息,并將本地化信息裝載到DefaultDictionary(IDictionary<string, ILocalizationDictionary>?對象)中。

XmlEmbeddedFileLocalizationDictionaryProvider:提供從Json文件(本地資源)中讀取本地化信息,并將本地化信息裝載到DefaultDictionary(IDictionary<string, ILocalizationDictionary>?對象)中。

?

?

ILocalizationManager/LocalizationManager:遍歷LocalizationConfiguration中的ILocalizationSourceList實例,通過其ILocalizationSource的ILocalizationDictionaryProvider實例完成本地化資源的初始化。提供GetString方法返回本地化的string.LocalizationManager維護了一個ILocalizationSource對象的字典用于維護所有的本地化資源。

?

?

LocalizationManager通過調用InitializeSources初始化和load本地化資源文件中的內容到IDictionary<string,ILocalizationSource>實例對象?_sources中

?

返回ABP源碼分析系列文章目錄

總結

以上是生活随笔為你收集整理的【转】ABP源码分析十二:本地化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。