ABP 初探 之 多语言
最近几天空闲时间比较多,就研究Abp的多语言,Abp是基于接口的依赖注入,有很多思想与方法都很好,需自己深入体会与应用,转化成自己的思想应用于实践。
本篇介绍基于 开源Demo ModuleZeroSampleProject,多语言分为两部分,基于后台的CS代码和前台的JS。
资源文件定义分为Web端和嵌入DLL层
基于Dll层的资源文件需设置文件属性为嵌入,否则发布后找不到资源文件。
基于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"
)));
后台CS 分为三部分,分别对应Controller、Application、Core
多语言的使用第一步是初始化,只能指定了资源文件名称才能正常解析与使用,
Cotroller 初始化方法,创建Cotroller基类 ModuleZeroSampleProjectControllerBase,在构造函数添加 资源路径
public abstract class ModuleZeroSampleProjectControllerBase : AbpController
{
protected ModuleZeroSampleProjectControllerBase()
{
LocalizationSourceName = ModuleZeroSampleProjectConsts.LocalizationSourceName;
}
}
Application、Core 初始化方法,创建Service基类,所有的方法都继承该基类,资源文件属性都要设置 嵌入
public class MarketApplicationServiceBase : ApplicationService
{ protected MarketApplicationServiceBase()
{
LocalizationSourceName = MarketCoreConsts.LocalizationSourceName;
}
}
前端JS部分初始化,一空要引用abp.js 在abp.js里定义了资源初始化的相关方法
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');
通过如何方法可以读取资源文件
<script>
$(function () {
var appLocalizationSource = abp.localization.getSource('Market'); //xml文件名
function localize() {
return appLocalizationSource.apply(this, arguments);
};
alert(localize('Role_IsDefault')) // xml当中定义的字段
})
</script>
前端加载的资源文件都来源于JS 动态生成 <script src="~/AbpScripts/GetScripts?v=@(Abp.Timing.Clock.Now.Ticks)" type="text/javascript"></script>
引用上面的Js文件会生成如下 内容

Views 界面也可以通过如下方法显示多语言,L 方法位于如下命名空间 Abp.Web.Mvc.Views.AbpWebViewPage

ABP 初探 之 多语言的更多相关文章
- DDD开发框架ABP之本地化/多语言支持
本地化(Localization)也就是多语言功能,借此用户能够选择他的母语或熟悉的语言来使用系统,这显然非常有利于软件系统推向国际化.一个应用程序的UI界面至少有一种语言,DDD开发框架ABP就提供 ...
- ABP 初探 之基于EasyUI的CURD
结束了天天加班的项目,项目虽然结束,但还是有点小问题,只能在后期优化当中完成了,本次做项目采用了,MVC.Webapi.Entityframework,在园了里看到了有关ABP的介绍,同样ABP也是最 ...
- ABP 初探 之User、Role、Permission数据库设计 (EntityFramework 继承的另一种使用方法)
最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容记录下来,同时也分享给大家,希望正在研究ABP源码的朋友有一定帮助. 上篇介绍ABP的多语言,本篇主要介绍权限的数据库设计,用 ...
- 基于DDD的.NET开发框架 - ABP初探
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- ABP 初探 之 权限设计
大.小项目都要设计权限,都想设计一个通用的权限,把权限做的比较复杂,现在了解了ABP的设计思路,觉得设计很简单,但实现方法与思路耐人寻味. 本篇只介绍AbpPermissions的数据库设计,其它表结 ...
- ABP 初探 之 AbpSession 扩展
Abp的权限管理是基于 Identity,所有的扩展也是基于 claims .claims 有许多默认属性,具体连接 关于 Identity的详细介绍,可以参考园友博客 继承 Microsoft.As ...
- ABP框架设置默认语言
在Global.asax文件中设置 private readonly IAbpWebLocalizationConfiguration _webLocalizationConfiguration; p ...
- ABP实战--修改语言配置XML至Json
从ABP官网下载的Zero的多语言配置默认是使用XML文件的,实际使用中XML是没有Json简洁明了的,所以我们将其修改为Json格式. 修改MyLocalizationConfigurer.cs文件 ...
- User、Role、Permission数据库设计ABP
ABP 初探 之User.Role.Permission数据库设计 (EntityFramework 继承的另一种使用方法) 最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容 ...
随机推荐
- How to Use Android ADB Command Line Tool
Android Debug Bridge (adb) is a tool that lets you manage the state of an emulator instance or Andro ...
- SSRS1:配置SMTP Server发送mail
为了使用SSRS发送mail,必须为Reporting service配置SMTP Server. 1,在Reporting Service Configuration Manager中配置Email ...
- OpenCASCADE Linear Extrusion Surface
OpenCASCADE Linear Extrusion Surface eryar@163.com Abstract. OpenCASCADE linear extrusion surface is ...
- OpenCASCADE Curve Length Calculation
OpenCASCADE Curve Length Calculation eryar@163.com Abstract. The natural parametric equations of a c ...
- 区分元素特性attribute和对象属性property
× 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是<javascript高 ...
- 在Linux(ubuntu server)上面安装NodeJS的正确姿势
上一篇文章,我介绍了 在Windows中安装NodeJS的正确姿势,这一篇,我们继续来看一下在Linux上面安装和配置NodeJS. 为了保持一致,这里也列举三个方法 第一个方法:通过官网下载安装 h ...
- [c++] Callable Objects
Five kinds of callable objects: Functions Pointers to functions Objects of a class that overloads () ...
- 恢复SharePoint Server 2013 中的“新颖快建视图”
初始化后就很漂亮的"新颖快建视图" 在配置好了OWA(Office Web Apps)的环境下,可以使用独特的"新颖快建视图"新建文件与文件夹,如下图所示: F ...
- Linux:Ubuntu16.04下创建Wifi热点
Linux:Ubuntu16.04下创建Wifi热点 说明: 1.Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 2.本篇文章转载自编程人生 具体步骤如下: 1. ...
- 【数据挖掘】朴素贝叶斯算法计算ROC曲线的面积
题记: 近来关于数据挖掘学习过程中,学习到朴素贝叶斯运算ROC曲线.也是本节实验课题,roc曲线的计算原理以及如果统计TP.FP.TN.FN.TPR.FPR.ROC面积等等.往往运用 ...