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

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

本文介绍了如何实现默认语言的几种方法, 希望能对ABP爱好者有所帮助, Let's begin!

前期准备

使用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", 即中文.

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

怎么样, 非常简单吧?

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

2019/11/9更新: 文档已上线 点击查看

方法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
));
}

该类注入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中.

Happy Coding!

最新文章

  1. jqGrid插件getCol方法的一个改进
  2. 添加ssh key
  3. 使用余弦定理制作磁盘形状h5音乐播放器
  4. WPF之Binding深入探讨
  5. CentOS如何挂载硬盘
  6. 关于Android圆形图片的一种优化方案(可以显示网络图片)
  7. Sqrt函数高效实现
  8. 第十三章、学习 Shell Scripts 善用判断式
  9. gulp自动化框架的搭建
  10. linux 使用外部设备的(光盘) 安装和更新库
  11. loadrunner:从数据库中取值进行参数化
  12. 入侵必练的CMD命令
  13. C#实现冲顶大会辅助工具 (截图+图像识别+搜索)
  14. angular4.0命令行汇总
  15. Tomcat中的c3p0数据库连接池的释放
  16. unity使用UGUI创建摇杆
  17. Cocos2d-swift V3.x 中的update方法
  18. [Swift]LeetCode605. 种花问题 | Can Place Flowers
  19. Linux查看mysql 安装路径和运行路径
  20. 关于Vue数组操作

热门文章

  1. apache自动打包日志脚本
  2. Modify column Vs change column
  3. 50 行 Python 代码,带你追到女神
  4. javascript基础学习第一天
  5. [机器学习] kears入门:用单层网络实现玩具回归
  6. TestNG独立运行的几种方法.md
  7. win10安装.NET Framework 3.5方法
  8. 刷脸即可解锁让iDevice取证不再难如登天
  9. Linux 常见的常识及常用快捷键方式
  10. 【POJ - 2456】Aggressive cows(二分)