最近几天空闲时间比较多,就研究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 初探 之 多语言的更多相关文章

  1. DDD开发框架ABP之本地化/多语言支持

    本地化(Localization)也就是多语言功能,借此用户能够选择他的母语或熟悉的语言来使用系统,这显然非常有利于软件系统推向国际化.一个应用程序的UI界面至少有一种语言,DDD开发框架ABP就提供 ...

  2. ABP 初探 之基于EasyUI的CURD

    结束了天天加班的项目,项目虽然结束,但还是有点小问题,只能在后期优化当中完成了,本次做项目采用了,MVC.Webapi.Entityframework,在园了里看到了有关ABP的介绍,同样ABP也是最 ...

  3. ABP 初探 之User、Role、Permission数据库设计 (EntityFramework 继承的另一种使用方法)

    最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容记录下来,同时也分享给大家,希望正在研究ABP源码的朋友有一定帮助. 上篇介绍ABP的多语言,本篇主要介绍权限的数据库设计,用 ...

  4. 基于DDD的.NET开发框架 - ABP初探

    返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...

  5. ABP 初探 之 权限设计

    大.小项目都要设计权限,都想设计一个通用的权限,把权限做的比较复杂,现在了解了ABP的设计思路,觉得设计很简单,但实现方法与思路耐人寻味. 本篇只介绍AbpPermissions的数据库设计,其它表结 ...

  6. ABP 初探 之 AbpSession 扩展

    Abp的权限管理是基于 Identity,所有的扩展也是基于 claims .claims 有许多默认属性,具体连接 关于 Identity的详细介绍,可以参考园友博客 继承 Microsoft.As ...

  7. ABP框架设置默认语言

    在Global.asax文件中设置 private readonly IAbpWebLocalizationConfiguration _webLocalizationConfiguration; p ...

  8. ABP实战--修改语言配置XML至Json

    从ABP官网下载的Zero的多语言配置默认是使用XML文件的,实际使用中XML是没有Json简洁明了的,所以我们将其修改为Json格式. 修改MyLocalizationConfigurer.cs文件 ...

  9. User、Role、Permission数据库设计ABP

    ABP 初探 之User.Role.Permission数据库设计 (EntityFramework 继承的另一种使用方法) 最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容 ...

随机推荐

  1. C语言-指针

    C指针基础知识 C语言中,指针无疑是最令人头疼的.今天无事就来学学C语言的指针,在此留下点笔记,仅供个人参考. 首先要搞懂的是,指针是什么? 指针:是用来存放内存地址的变量. 不管是什么类型的指针,存 ...

  2. 初学者--bootstrap(一)----在路上(1)

    bootstrap: 是目前最受欢迎的前端框架,并基于HTML.CSS.JavaScript 等,而且他是为了适应并兼容各个电子设备,是对媒体查询的封装. 1.什么是媒体查询   他 是响应式布局的方 ...

  3. 在Eclipse中对包进行增删改查

    package com.hanqi.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.R ...

  4. iOS瀑布流实现(Swift)

    这段时间突然想到一个很久之前用到的知识-瀑布流,本来想用一个简单的方法,发现自己走入了歧途,最终只能狠下心来重写UICollectionViewFlowLayout.下面我将用两种方法实现瀑布流,以及 ...

  5. 面向对象设计之SRP(单一职责)原则

    SRP设计原则面向对象类设计的第一个原则,最优先考虑的因素 一个类应该有且仅有一个职责.所谓一个类的职责是指引起该类变化的原因,如果一个类具有一个以上的职责,那么就会有多个不同的原因 引起该类变化,其 ...

  6. Minor【 PHP框架】2.第一个应用与请求的生命周期

    框架Github地址:github.com/Orlion/Minor (如果觉得还不错给个star哦(^-^)V) 框架作者: Orlion 知乎:https://www.zhihu.com/peop ...

  7. Android图片缓存之Glide进阶

    前言: 前面学习了Glide的简单使用(Android图片缓存之初识Glide),今天来学习一下Glide稍微复杂一点的使用. 图片缓存相关博客地址: Android图片缓存之Bitmap详解 And ...

  8. ZOJ Problem Set - 1365 Mileage Bank

    题目不难,主要说下这道题目在输入终止上的问题: 题目要求当输入为0时一次case结束,当输入为#时整个输入全部结束,可以用如下格式解决 while(scanf("%s",str)! ...

  9. Linux NFS 服务部署

    系统环境:Oracle Linux 5.7 服务端:192.168.1.111 客户端:192.168.1.171 一.服务端配置 二.客户端配置 一.服务端配置 1.依次启动portmap和nfs服 ...

  10. JavaMail基础案例开发

    Java邮件开发案例 所需jar包有:mailapi.jar,smtp.jar 一.单独邮件发送案例 package com.itRed.javamail; import java.util.Prop ...