最近几天空闲时间比较多,就研究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. iOS-在团队开发过程中控制代码版本

    Cornerstone Svn简单使用指南: -- what if 负责编写 一.安装并拷贝项目 1.第一步:安装svn.2.第二步:第一个使用svn,找到“Check Out Working Cop ...

  2. android studio和eclipse中如何获取sha1值

    首先如果是eclipse的话, 直接打开eclipse开发工具 那么接下来问题来了,现在很多开发者都已经从es转型到as开发工具了, 在android studio上没有直接提供这个GUI界面让我们去 ...

  3. c#属性中的get和set属性

    get是给属性赋值,set是取属性的值. get.set用法: 一是隐藏组件或类内部的真是成员: 二是用来建立约束的,比如,实现“有我没你”这种约束: 三是用来响应属性变化事件,当属性变化是做某事,只 ...

  4. 无法启动WP Emulator

    记得以前Vware不能运行设置的东西了吗?http://www.cnblogs.com/dunitian/p/4480750.html 如果不清楚可以参考上面的链接 重启的时候选择第二项 重新打开就o ...

  5. Mac SVN 设置代理(Proxy)并 Checkout 代码

    1. 设置代理 Finder 菜单里面 -> 前往 -> 前往文件夹 -> /Users/username/.subversion -> 编辑文件 servers 在文件的 [ ...

  6. C#设计模式系列:装饰模式(Decorator)

    1. 装饰模式简介 装饰模式动态地给一个对象添加额外的职责.例如一幅画有没有画框都可以挂在墙上,画就是被装饰者.但是通常都是有画框的.在挂在墙上之前,画可以被蒙上玻璃,装到框子里,所以在画上加一层画框 ...

  7. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据

    我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...

  8. ASP.NET MVC之如何看待内置配置来提高性能优化(四)

    前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...

  9. Javascript之一切皆为对象1

    在javascript的世界里,有这么一句话,一切皆为对象. 但是这个对象,应该怎么理解呢? OMG,难道值类型也是对象?!! 当然,不是. 准确地讲是对于“引用类型”而言. 那,在JavaScrip ...

  10. 使用CSS3 Media Queries实现网页自适应

    原文来源:http://webdesignerwall.com 翻译:http://xinyo.org 当今银屏分辨率从 320px (iPhone)到 2560px (大屏显示器)或者更大.人们也不 ...