ABP <https://abp.io/>提供的启动模板, 默认使用是英文:



虽然可以通过右上角的菜单切换成中文, 但是对于国内项目来说, 默认使用中文是很正常的需求.
本文介绍了如何实现默认语言的几种方法, 希望能对ABP爱好者有所帮助, Let's begin!

前期准备

使用ABP CLI <https://docs.abp.io/en/abp/master/CLI>创建一个名为AbpStudy的ASP.NET MVC项目:
abp new AbpStudy
关于MVC的启动模板可以看文档
<https://docs.abp.io/en/abp/latest/Getting-Started-AspNetCore-MVC-Template>,
这里就不赘述.

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

方法1: 通过服务设置

该方法参考了此回答
<https://github.com/abpframework/abp/issues/723#issuecomment-467747111>,
谢谢@maliming.

* 编辑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", 即中文.

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



怎么样, 非常简单吧?

关于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.
插入后的结果:



把方法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 )); }
该类注入 <https://docs.abp.io/en/abp/latest/Dependency-Injection>了GuidGenerator
用来生成GUID, 和SettingRepository用来向AbpSettings表插入数据.

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

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

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

运行DbMigrator截图:



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

禁用其他语言

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

修改AbpStudy.Web工程下的AbpStudyWebModule类, 将ConfigureLocalizationServices方法中其他语言的
options.Languages.Add(...)代码删除, 只保留中文的即可:
private void ConfigureLocalizationServices() {
Configure<AbpLocalizationOptions>(options => { options.Resources
.Get<AbpStudyResource>() .AddBaseTypes( typeof(AbpUiResource) );
//options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
//options.Languages.Add(new LanguageInfo("en", "en", "English"));
//options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
//options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); }); }
再次运行, 发现右上角语言切换的菜单就不见了, 完美!



关于ABP框架设置默认语言的方法就介绍到这, 示例工程放到GITHUB <https://github.com/wakuflair/AbpStudy>中.
Happy Coding!

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信