ABP <https://abp.io/>提供的啟動模板, 默認(rèn)使用是英文:
雖然可以通過右上角的菜單切換成中文, 但是對于國內(nèi)項目來說, 默認(rèn)使用中文是很正常的需求.
本文介紹了如何實現(xiàn)默認(rèn)語言的幾種方法, 希望能對ABP愛好者有所幫助, Let's begin!
前期準(zhǔn)備
使用ABP CLI <https://docs.abp.io/en/abp/master/CLI>創(chuàng)建一個名為AbpStudy的ASP.NET MVC項目:
abp new AbpStudy
關(guān)于MVC的啟動模板可以看文檔
<https://docs.abp.io/en/abp/latest/Getting-Started-AspNetCore-MVC-Template>,
這里就不贅述.
使用ABP版本的是當(dāng)前最新的v0.19, 后續(xù)版本應(yīng)該也適用
方法1: 通過服務(wù)設(shè)置
該方法參考了此回答
<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"; // 默認(rèn)使用中文 app.InitializeApplication(); }
該方法首先獲取了SettingDefinitionManager的服務(wù)實例, 然后調(diào)用Get方法獲取了默認(rèn)語言的SettingDefinition,
然后設(shè)置了默認(rèn)值"zh-Hans", 即中文.
運行, 就會發(fā)現(xiàn)默認(rèn)語言已經(jīng)變成中文了:
怎么樣, 非常簡單吧?
關(guān)于ABP的Setting, 現(xiàn)在官方的文檔還未寫完. 等待官方文檔完善后我會更新到文章里
方法2: 通過數(shù)據(jù)設(shè)置
雖然方法1非常簡單, 但是因為是通過代碼寫死了默認(rèn)語言, 如果想設(shè)置其他默認(rèn)語言, 只能再次修改代碼.
既然默認(rèn)語言是通過Setting設(shè)置的, 那么我們可不可以通過數(shù)據(jù)設(shè)置默認(rèn)語言呢?答案是肯定的.
ABP啟動模板的數(shù)據(jù)庫中有一個名為AbpSettings的表, 里面即是各種Setting的值.
我們可以向其中增加一條默認(rèn)語言的記錄:
INSERT INTO AbpSettings(Id, Name, Value, ProviderName) Values(newid(),
'Abp.Localization.DefaultLanguage', 'zh-Hans', 'Global')
其中的Name的值即是方法1中LocalizationSettingNames.DefaultLanguage的值,
相當(dāng)于默認(rèn)語言Setting的一個Key.
插入后的結(jié)果:
把方法1中我們增加的那行代碼刪除后, 再次運行確認(rèn)默認(rèn)語言仍然是中文.
如果我們把記錄中的"zh-Hans"改為"en", 重新運行后默認(rèn)語言就會切換成英文了.
方法3: 通過Seed設(shè)置
方法3實際上是方法2的一個改進(jìn): 我們利用了ABP提供了Seed系統(tǒng)(即可通過代碼初始化系統(tǒng)的一些數(shù)據(jù)), 這樣我們在正式上線項目時,
不需要再額外執(zhí)行SQL語句來執(zhí)行數(shù)據(jù)初始化了.
首先我們把AbpSettings表中我們手動插入的那條記錄刪除.
然后在AbpStudy.Domain工程的Settings文件夾中增加一個名為AbpStudySettingDataSeedContributor的類,
用來為Setting設(shè)置初始化數(shù)據(jù). 類代碼如下:
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表插入數(shù)據(jù).
在SeedAsync方法中使用InsertAsync方法插入了默認(rèn)語言的記錄, 記錄的值與方法2中SQL中是一致的.
然后我們運行AbpStudy.DbMigrator工程, 這是啟動模板附帶的一個用來執(zhí)行數(shù)據(jù)庫遷移的一個工具, 它會掃描到我們剛寫的
AbpStudySettingDataSeedContributor類并調(diào)用它, 從而完成數(shù)據(jù)初始化.
AbpStudy.DbMigrator工程有自己的數(shù)據(jù)庫連接串, 定義在appsettings.json文件中, 別忘了將它修改成與Web工程中的一樣.
運行DbMigrator截圖:
再次查看AbpSettings表中的數(shù)據(jù), 發(fā)現(xiàn)記錄已經(jīng)插入了, 與我們使用SQL語句插入的一樣, 所以默認(rèn)中文也同樣可以生效.
禁用其他語言
如果你的項目不用考慮多語言, 那么右上角的語言切換菜單就顯得有點多余了, 我們可以通過以下修改禁用其他語言:
修改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", "簡體中文")); }); }
再次運行, 發(fā)現(xiàn)右上角語言切換的菜單就不見了, 完美!
關(guān)于ABP框架設(shè)置默認(rèn)語言的方法就介紹到這, 示例工程放到GITHUB <https://github.com/wakuflair/AbpStudy>中.
Happy Coding!
熱門工具 換一換