返回总目录《一步一步使用ABP框架搭建正式项目系列教程》


本篇目录

  • 扯扯本地化
  • ABP中的本地化
  • 小结

扯扯本地化

本节来说说本地化,也有叫国际化、全球化的,不管怎么个叫法,反正道理都是一样的,就是一个系统具有选择多种语言的能力。比如,我们用的电脑或手机,可以在设置中选择语言,但是这并不影响系统已经具有的功能,只是显示的文字变成你所选语言的文字了。再比如说微信,功能设置里面也能选择语言,比如你选择的是英语,那么我们在中文看到的朋友圈就变成了“Moments”。

图片图片

想要更详细地了解本地化的理论知识,请查看本地化文档

其实本地化,一般来说我们用不上,因为我们大多数开发人员开发的软件还是供国人使用的,只需要中文就够了。但是也有些软件的用户是老外(虽然软件很小型),或者软件做大了,需要向国外扩张,也需要本地化,这篇文章就献给有需要的人或者想要了解一下本地化的人。

ABP中的本地化

ABP提供了一个强大而又灵活的本地化系统。你可以将本地化文本存储到资源文件,XML文件,数据库,甚至自定义的数据源。接下来,逐一介绍这几种本地化。

首先从ABP官网的启动模板生成一个项目(包含了Module-zero模块),取名ABPMVCTest,截图如下:

图片

然后,接下来就是还原Nuget包,以及更新数据库了。还不熟悉的园友,可以查看该系列之前的文章。

XML文件

首先,打开Core项目,找到本地化Localization文件夹,将下面的Source文件夹重命名为XmlSource(这里只是为了演示需要),如下所示:
图片

然后打开Core项目的对应的Module模块文件(此处是ABPMVCTestCoreModule.cs文件),修改代码如下:

图片

打开xml资源对应的中文文件ABPMVCTestABPMVCTest-zh-CN.xml,更改下面一句代码:

图片
图片

编译,生成,刷新页面,可以看到UI上显示的文本已经变成了我们更改后的文本:

图片

此外,还要注意,Module文件中还有另一种写法,见下:

Configuration.Localization.Sources.Add(new DictionaryBasedLocalizationSource(ABPMVCTestConsts.LocalizationSourceName,new XmlFileLocalizationDictionaryProvider(HttpContext.Current.Server.MapPath("~/Localization/XmlSource"))));

与上一种写法不一样的是,这种写法针对的是文件系统,需要写明资源文件的路径,而上一种写法,需要指定xml文件为可嵌入的资源。更多信息请看《ABP理论学习之本地化》。

注意:在Web项目中建立一个Localization文件夹,再在其下建立一个文件夹XmlSource,放置各类语言的Xml文件,因为Core层的MapPath方法的根目录就是Web项目的根目录。其实本人觉得,将本地化放在Web层是更为合理的,因为这本来就是跟UI相关的东西嘛,而且使用文件系统访问的方式必须将本地化资源放在web项目。

资源文件

如下图所示,在Core层的Localization文件夹下再建立一个文件夹ResSource,在该文件夹下为每种语言建立一个文件,这里只建立两个文件,一个是中文的文本本地化,以en后缀结尾的是英文文本本地化。
图片

在Core层的Module中的PreInitialize方法中加入下面的代码:

  Configuration.Localization.Sources.Add(new ResourceFileLocalizationSource(ABPMVCTestConsts.LocalizationSourceName,AbpMvcTest.ResourceManager));

修改之后的效果(取到的就是上面资源文件定义的文本):

图片

Json文件

Json文件也可以存储本地化的文本,和xml文件用法很相似。
首先在Localization文件夹下建立文件夹JosnSource,分别建立两个json文件,对应中文和英文的本地化资源。

图片

然后需要在Core层的Module的PreInitialize方法中进行配置,Json文件可以存储到文件系统中,也可以内嵌到程序集中,可以参考xml文件的配置:

文件系统的json文件,配置方法如下:
因为路径问题(MapPath会到网站的根目录下去找,所以core层中的资源找不到),应该在web项目下创建json本地化资源文件。

Configuration.Localization.Sources.Add(new DictionaryBasedLocalizationSource(ABPMVCTestConsts.LocalizationSourceName,new JsonFileLocalizationDictionaryProvider(HttpContext.Current.Server.MapPath("~/Localization/JsonSource"))));

内嵌在程序集中的json文件,配置方法如下:

首先将所有的json文件在属性面板中设置为“可嵌入的资源”,然后在Module中配置代码

 Configuration.Localization.Sources.Add(new DictionaryBasedLocalizationSource(ABPMVCTestConsts.LocalizationSourceName,new JsonEmbeddedFileLocalizationDictionaryProvider(Assembly.GetExecutingAssembly(),"ABPMVCTest.Localization.JsonSource")));

效果都是一样的,效果如下:

图片

注意:这里一定要注意Json文件的命名空间。在官方文档中,命名空间是程序集名称+json文件的层次,而我在这次实践中,应该是“默认命名空间+json文件的层次”。

数据库

要将本地化资源存储到数据库中,可以在ABP项目中添加Module-zero模块(在使用启动模板创建项目时勾选包含module-zero模块即可)。

关于使用module-zero模块将本地化资源存储到数据库的理论知识,您可以参考:《Module Zero之语言管理

在一开始的步骤中,我们已经更新了数据库,然后数据库中就会生成下面两张跟语言相关的表AbpLanguages和AbpLanguageTexts。

图片

AbpLanguages表用来存储应用程序支持哪些国家的语言,AbpLanguageTexts表存储的是同一个key,对应显示不同的文本。

语言也是一个实体,也需要对它进行CRUD操作,因此一般我们也需要创建一个语言管理的菜单,在语言管理的页面上对所有语言文本进行统一管理。这里只为了演示,就直接在数据库中插入两条数据(以数据库表中的截图为准),如下:

图片

图片

显示的效果如下:
图片

图片

这里需要注意一下几点:

  • 在webmodule的PreInitialize中开启Configuration.Modules.Zero().LanguageManagement.EnableDbLocalization();
  • AbpLaguages表和AbpLanguageTexts表中要有数据。尤其注意AbpLanguageTexts表的TenantId,Source,LanguageName,Key这几个字段的值一定是存在的(TenantId是AbpTenants表中的值,Source是你在代码中定义的资源名称,LanguageName是AbpLaguages表的Name字段,Key是代码中使用到的L("Key")),因为这几张表之间没有外键约束,所以出错你也很难找到原因,楼主就是这样,耽误了不少时间。
  • 已经存在的xml或者json本地化资源不要移除,因为这些都是次级资源或者回退资源,数据库中找不到时就去这些静态资源中去找。
  • 每次更改数据库中的文本数据时,要重置你的应用程序,因为这些本地化文本都是从缓存中取得的。

小结

ABP中的本地化系统很强大、健壮。可以从静态资源中(xml文件和json文件)获得,也可以从数据库中获得,最主要的是配置很简单,我们只需要写一点儿代码(甚至一句代码)就可以搞定,最主要工作就是我们根据自己的需要添加本地化文本。这个需要我们以后专门写一个功能,来实现在界面上进行对数据库中的本地化文本进行CRUD。这里就不实现这个功能了,大家知道原理就可以了。

转载于:https://www.cnblogs.com/farb/p/ABPPracticeLocalization.html

一步一步使用ABP框架搭建正式项目系列教程之本地化详解相关推荐

  1. 《一步一步使用ABP框架搭建正式项目系列教程》

    这一节我们说说数据库迁移(Migration). 我们之前用的DBFirst创建了实体类,但当初这么做的原因是为了节省时间.现在我们通过创建的实体类和DbContext类利用EF的Code First ...

  2. h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台

    SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台 作者:一一哥 我在上一章节中讲解了Spring Boot中整合Mybatis,接下来我给大家介绍一款内存数据库--H2. H ...

  3. ABP框架搭建项目系列教程基础版

    我现在要着手一个新的项目,也打算用这个框架,所以想要将我一步一步用这个框架的做项目的步骤和想法跟大家分享出来. 经过前面十二篇的基础教程,现在终于该做个总结了. 第一篇,我们建议新手朋友们先通过ABP ...

  4. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇) - 广州.net微软技术俱乐部12月份活动报名帖...

    这是广州.net微软技术俱乐部12月份活动报名帖.此帖会持续更新. 活动课程标题是:如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇) 这是内容大纲: ABP框架简介(这里会聊聊.net真 ...

  5. 在基于ABP框架的前端项目VueElement项目中采用电子签名的处理

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  6. SSM框架整合:各种配置文件的整合和详解

    SSM框架整合:各种配置文件的整合和详解 前言 学习了ssm框架的整合之后,对于数量众多的配置文件,和各种不同的配置方式感到甚是头疼,接下来教给大家一个清晰明白的配置,分门别类的配置不同的xml文件. ...

  7. 【直播】陈安东,但扬:CNN模型搭建、训练以及LSTM模型思路详解

    CNN模型搭建.训练以及LSTM模型思路详解 目前 Datawhale第24期组队学习 正在如火如荼的进行中.为了大家更好的学习"零基础入门语音识别(食物声音识别)"的课程设计者 ...

  8. python setting.py_python基础教程:Django框架的中的setting.py文件说明详解

    这篇文章主要介绍了Django框架的中的setting.py文件说明详解,这个文件包含了所有有关这个Django项目的配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.加载数据库,数据库 ...

  9. Django框架的中的setting.py文件说明详解

    这篇文章主要介绍了Django框架的中的setting.py文件说明详解,这个文件包含了所有有关这个Django项目的配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.加载数据库,数据库 ...

最新文章

  1. Spring mvc Data Redis—Pub/Sub(附Web项目源码)
  2. 红警1开源放出源码,4K高清重制版登顶Steam畅销榜!网友:青春回来了
  3. Tomcat在自定义xml文件中配置虚拟目录
  4. php 转化数字,php实现中文转数字
  5. 将字符串中的大写字母变成小写字母
  6. Python+django网页设计入门(11):在线考试与自动评分
  7. Ubuntu配置教程
  8. 解决win7检测不到第二个显示器的方法
  9. ZOJ 3430 Detect the Virus
  10. 创建maven web项目无法创建sec目录
  11. CS231n李飞飞计算机视觉 卷积神经网络详解上
  12. 手撕源码之SpringApplication.java【Spring Boot 2.4.4】
  13. 《Java程序设计基础 第3版》pdf 附下载链接
  14. 大数据shipin教程_尚硅谷大数据视频教程,粉丝众多,人手一套尚硅谷教程
  15. STM32电机TB6612驱动
  16. 算法学习(五)—— 广度优先搜索
  17. clr 80004005
  18. Android 关于Excel表格的读与写(包括图片、字体颜色,语言)
  19. Eclipse插件简介
  20. xilinx gt ip 位置约束

热门文章

  1. ppt形状html,PPT如何才能高大上?“形状”在PPT有这些妙用
  2. 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (三)—— repeater plugin 开发
  3. 我给出了一个 四色定理 的 证明
  4. CF终于上紫了。。。
  5. .Net工程师面试笔试宝典
  6. 使用WG-8010 GPRS通讯模块
  7. 人生新的开始,组建大数据公司
  8. 学生网页课程设计期末作业 HTML+CSS+JavaScript甜品蛋糕网页设计(5页)
  9. Word控件Spire.Doc 【文本】教程(5) ;从 Word 文档中的文本框中提取文本
  10. 支付宝手机网站支付示例