最近幾天空閑時(shí)間比較多,就研究Abp的多語(yǔ)言,Abp是基于接口的依賴(lài)注入,有很多思想與方法都很好,需自己深入體會(huì)與應(yīng)用,轉(zhuǎn)化成自己的思想應(yīng)用于實(shí)踐。
本篇介紹基于 開(kāi)源DemoModuleZeroSamplePRoject,多語(yǔ)言分為兩部分,基于后臺(tái)的CS代碼和前臺(tái)的JS。
資源文件定義分為Web端和嵌入DLL層
基于Dll層的資源文件需設(shè)置文件屬性為嵌入,否則發(fā)布后找不到資源文件。
基于Web端的初始化方法
//Add/remove localization sources here Configuration.Localization.Sources.Add( new xmlLocalizationSource( ModuleZeroSampleProjectConsts.LocalizationSourceName, HttpContext.Current.Server.MapPath("~/Localization/ModuleZeroSampleProject") ) );
嵌入Dll的初始化方法 abp是命名空間,Localization.Sources.AbpXmlSource是文件路徑。
Configuration.Localization.Sources.Add( new DictionaryBasedLocalizationSource( AbpConsts.LocalizationSourceName, new XmlEmbeddedFileLocalizationDictionaryProvider( Assembly.GetExecutingAssembly(), "Abp.Localization.Sources.AbpXmlSource" )));
后臺(tái)CS 分為三部分,分別對(duì)應(yīng)Controller、application、Core
多語(yǔ)言的使用第一步是初始化,只能指定了資源文件名稱(chēng)才能正常解析與使用,
Cotroller 初始化方法,創(chuàng)建Cotroller基類(lèi)ModuleZeroSampleProjectControllerBase,在構(gòu)造函數(shù)添加 資源路徑

public abstract class ModuleZeroSampleProjectControllerBase : AbpController { protected ModuleZeroSampleProjectControllerBase() { LocalizationSourceName = ModuleZeroSampleProjectConsts.LocalizationSourceName; } }View CodeApplication、Core 初始化方法,創(chuàng)建Service基類(lèi),所有的方法都繼承該基類(lèi),資源文件屬性都要設(shè)置 嵌入

public class MarketApplicationServiceBase : ApplicationService { protected MarketApplicationServiceBase() { LocalizationSourceName = MarketCoreConsts.LocalizationSourceName; } }View Code前端JS部分初始化,一空要引用abp.js 在abp.js里定義了資源初始化的相關(guān)方法

abp.localization = abp.localization || {}; abp.localization.localize = function (key, sourceName) { sourceName = sourceName || abp.localization.defaultSourceName; var source = abp.localization.values[sourceName]; if (!source) { abp.log.warn('Could not find localization source: ' + sourceName); return key; } var value = source[key]; if (value == undefined) { return key; } var copiedArguments = Array.prototype.slice.call(arguments, 0); copiedArguments.splice(1, 1); copiedArguments[0] = value; return abp.utils.formatString.apply(this, copiedArguments); }; abp.localization.getSource = function (sourceName) { return function (key) { var copiedArguments = Array.prototype.slice.call(arguments, 0); copiedArguments.splice(1, 0, sourceName); return abp.localization.localize.apply(this, copiedArguments); }; }; abp.localization.isCurrentCulture = function (name) { return abp.localization.currentCulture && abp.localization.currentCulture.name && abp.localization.currentCulture.name.indexOf(name) == 0; }; abp.localization.defaultSourceName = undefined; abp.localization.abpWeb = abp.localization.getSource('AbpWeb');View Code通過(guò)如何方法可以讀取資源文件
<script> $(function () { var appLocalizationSource = abp.localization.getSource('Market'); //xml文件名 function localize() { return appLocalizationSource.apply(this, arguments); }; alert(localize('Role_IsDefault')) // xml當(dāng)中定義的字段 }) </script>
前端加載的資源文件都來(lái)源于JS 動(dòng)態(tài)生成 <script src="~/AbpScripts/GetScripts?v=@(Abp.Timing.Clock.Now.Ticks)" type="text/javascript"></script>
引用上面的Js文件會(huì)生成如下 內(nèi)容

Views 界面也可以通過(guò)如下方法顯示多語(yǔ)言,L 方法位于如下命名空間Abp.Web.Mvc.Views.AbpWebViewPage

新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注