设置ABP默认使用中文

ABP提供的启动模板, 默认使用是英文:

640?wx_fmt=png

虽然可以通过右上角的菜单切换成中文, 但是对于国内项目来说, 默认使用中文是很正常的需求.

前期准备

使用ABP CLI创建一个名为AbpStudy的ASP.NET MVC项目:

abp new AbpStudy

关于MVC的启动模板可以看文档, 这里就不赘述.

使用ABP版本的是当前最新的v0.19, 后续版本应该也适用

方法1: 通过服务设置

该方法参考了此回答, 谢谢@maliming.

  1. 编辑AbpStudy.Web工程下的Startup.cs文件, 在Configure方法的开始增加一行代码:

        public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory){app.ApplicationServices.GetService<ISettingDefinitionManager>().Get(LocalizationSettingNames.DefaultLanguage).DefaultValue = "zh-Hans";app.InitializeApplication();}

该方法首先获取了SettingDefinitionManager的服务实例, 然后调用Get方法获取了默认语言的SettingDefinition, 然后设置了默认值"zh-Hans", 即中文.

运行, 就会发现默认语言已经变成中文了:

640?wx_fmt=png

怎么样, 非常简单吧?

关于ABP的Setting, 现在官方的文档还未写完. 等待官方文档完善后我会更新到文章里

方法2: 通过数据设置

虽然方法1非常简单, 但是因为是通过代码写死了默认语言, 如果想设置其他默认语言, 只能再次修改代码.

既然默认语言是通过Setting设置的, 那么我们可不可以通过数据设置默认语言呢?答案是肯定的.

ABP启动模板的数据库中有一个名为AbpSettings的表, 里面即是各种Setting的值.

我们可以向其中增加一条默认语言的记录:

INSERT INTO AbpSettings(Id, Name, Value, ProviderName)
Values(newid(), 'Abp.Localization.DefaultLanguage', 'zh-Hans', 'Global')

其中的Name的值即是方法1中LocalizationSettingNames.DefaultLanguage的值, 相当于默认语言Setting的一个Key.

640?wx_fmt=png

把方法1中我们增加的那行代码删除后, 再次运行确认默认语言仍然是中文.

如果我们把记录中的"zh-Hans"改为"en", 重新运行后默认语言就会切换成英文了.

方法3: 通过Seed设置

方法3实际上是方法2的一个改进: 我们利用了ABP提供了Seed系统(即可通过代码初始化系统的一些数据), 这样我们在正式上线项目时, 不需要再额外执行SQL语句来执行数据初始化了.

首先我们把AbpSettings表中我们手动插入的那条记录删除.

然后在AbpStudy.Domain工程的Settings文件夹中增加一个名为AbpStudySettingDataSeedContributor的类, 用来为Setting设置初始化数据. 类代码如下:

    public class AbpStudySettingDataSeedContributor : IDataSeedContributor, ITransientDependency{private readonly IGuidGenerator _guidGenerator;private readonly ISettingRepository _settingRepository;public AbpStudySettingDataSeedContributor(IGuidGenerator guidGenerator, ISettingRepository settingRepository){_settingRepository = settingRepository;_guidGenerator = guidGenerator;}public async Task SeedAsync(DataSeedContext context){await _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(),LocalizationSettingNames.DefaultLanguage,"zh-Hans",GlobalSettingValueProvider.ProviderName));}

该类注入了GuidGenerator用来生成GUID, 和SettingRepository用来向AbpSettings表插入数据.

SeedAsync方法中使用InsertAsync方法插入了默认语言的记录, 记录的值与方法2中SQL中是一致的.

然后我们运行AbpStudy.DbMigrator工程, 这是启动模板附带的一个用来执行数据库迁移的一个工具, 它会扫描到我们刚写的AbpStudySettingDataSeedContributor类并调用它, 从而完成数据初始化.

AbpStudy.DbMigrator工程有自己的数据库连接串, 定义在appsettings.json文件中, 别忘了将它修改成与Web工程中的一样.

运行DbMigrator截图:

640?wx_fmt=png

再次查看AbpSettings表中的数据, 发现记录已经插入了, 与我们使用SQL语句插入的一样, 所以默认中文也同样可以生效.

禁用其他语言

如果你的项目不用考虑多语言, 那么右上角的语言切换菜单就显得有点多余了, 我们可以通过以下修改禁用其他语言:

修改AbpStudy.Web工程下的AbpStudyWebModule类, 将ConfigureLocalizationServices方法中其他语言的options.Languages.Add(...)代码删除, 只保留中文的即可:

再次运行, 发现右上角语言切换的菜单就不见了, 完美!

640?wx_fmt=png

关于ABP框架设置默认语言的方法就介绍到这, 示例工程放到GITHUB中.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础篇--Java IO--概览

字符流、字节流、输入流、输出流 Java 中使用IO(输入输出)来读取和写入,读写磁盘文件、内存、网络数据。输入输出是相对内存而言,往内存中读数据就为输入流,从内存中往外写就是输出流。 根据处理类型分为字符流、字节…

.NET轻松写博客园爬虫

爬虫,是一种按照一定的规则,自动地抓取网站的程序或者脚本。.NET写爬虫非常简单,并能轻松优化性能。今天我将分享一段简短的代码,爬出博客园前200页精华内容,然后通过微小的改动,将代码升级为多线程爬虫&am…

kettle同步数据中文乱码问题解决

最近在使用kettle进行数据同步的时候,发现同步来的中文数据产生了乱码。试了下网上的解决方案,最终解决了这个问题。步骤如下: 1:kettle中配置源数据库、目标数据库编码 2:编辑“表输入”,去掉勾选“允许建…

WTM重磅更新,LayuiAdmin免费用 and more

从善如登,从恶如崩。对于一个开发人员来说,那就是做一个好的系统不容易,想搞砸一个系统很简单,删库跑路会还不会么。对于我们开源框架的作者来说,做一个好的框架就像登山(也许是登天)&#xff0…

kettle数据库操作OPTION SQL_SELECT_LIMIT=DEFAULT问题解决

今天在使用kettle配置数据库映射的时候,有如下报错: Couldnt get field info from [select * from pre_user_base_bak]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax …

.netcore 分布式事务CAP2.6 快速入门

CAP介绍:CAP是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案。可以解决跨服务器的数据一致性问题。一个简单的列子,如:订单系统创建订单后需要通知邮件通知用户下单成功,解决方案有下面几种&#xff1…

#3601. 一个人的数论

#3601. 一个人的数论 首先这个转化还是很巧妙的,或者很套路的,直接莫比乌斯反演,然后看到了自然数幂之和的形式,那么我们就可以转化为多项式处理,项数就减少到了d1,然后看到题目给出的都是质因数分解结果&a…

2019-03-5-算法-进化(最长公共前缀)

题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl"示例 2: 输入: ["dog","racecar","…

自然数幂之和

自然数幂之和 https://blog.csdn.net/suncongbo/article/details/97622131 这个文章的整理非常全面。

从你的全世界路过—一群程序员的稻城亚丁游记

转眼之间又即将到九月,又到了这个适合去川西旅游的最佳季节。最近有一些朋友问我稻城亚丁的旅游情况,因此我将去年写的这一篇游记再次发出来,希望对那些有计划去川西旅游的朋友们有帮助!温馨提示:本文图片较多&#xf…

P2303 [SDOI2012] Longge(数论/欧拉函数)

P2303 [SDOI2012] Longge 一道看似非常基础的数论题,但是蕴含了非常多的知识,求解 ∑i1ngcd(i,n)\sum_{i1}^ngcd(i,n) i1∑n​gcd(i,n) 这个东西我们轻松地就能化简成id∗φid*\varphiid∗φ的形式,然后考虑如何快速求解,那么可以…

基于SQLite+EF6实现一套自己的Key-Value存储管理工具包(1)

在项目中,经常会需要对一些特定的业务对象进行属性的扩展,而且这些属性的扩展还具备极不可预测性、相互关系松散等特点。大部分的开发人员是最讨厌这类涉及到数据字段扩展的需求变更。这种调整,轻则数据要加字段,重则程序代码要做…

【C】Natasha V1.3.6.0 的升级日志

文章转载授权级别:C 预计阅读时间:8分钟开源库满足于个人,而完善于大众。Natasha 自稳定版发布之后,众多老铁参与增强改进,感谢如下老铁的反馈:1. 异常搜集在 wenjq0911 建议下,添加…

.NET 程序员如何学习Vue

之所以取这个标题,是因为本文来自内部培训的整理,培训的对象是公司的 .NET 程序员,.NET 程序员学习 Vue 是为了在项目中做二次开发时能够更好地跟产品对接。Vue 是现在比较流行的前端框架,也是非常容易入门的前端框架,…

.Net之微信小程序获取用户UnionID

前言:在实际项目开发中我们经常会遇到账号统一的问题,如何在不同端或者是不同的登录方式下保证同一个会员或者用户账号唯一(便于用户信息的管理)。这段时间就有一个这样的需求,之前有个客户做了一个微信小程序商城&…

自由源自于自律 及其他三则分享

Office 365 官方公众号的新创深度内容推荐竹板这么一打呀,别的咱不夸,单说我们的Office 365官方公众号(“微软Office365”),近一段时间来在内容创作上面有一些新的突破——推出了一个关于探讨大脑及思维运作的专题。请…

2019-03-11-算法-进化(求众数)

题目描述 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 示例 1: 输入: [3,2,3] 输出: 3示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2思路&#xff1a…

淘宝商品数据库设计的一些经验

前言这几个月都在做一个通过淘宝API线下管理淘宝店的系统,学习了很多东西,这里想对淘宝商品表设计用自己的想法表现出来,如果你觉得很扯淡,可以写下自己的看法.OK,切入正题.淘宝的商品这块的复杂程度,是我见…

2019-03-11-算法-进化(搜索二维矩阵II)

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列每列的元素从上到下升序排列 示例: 现有矩阵 matrix 如下: [[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9…

A and B and Lecture Rooms

A and B and Lecture Rooms 题意要求我们找有多少个点iii满足dis(i,x),dis(i,y)dis(i, x), dis(i, y)dis(i,x),dis(i,y),输出点iii的数量即可。 首先特判无解的情况就是dis(x,y)dis(x, y)dis(x,y)为奇数时,接下来我们讨论有解的情况,大致分…