<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      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!

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          成人免费视频 视频免费看 | 三级片一区二区三区 | 国产真实露脸乱子伦 | 亚洲第一中文字幕 | 国产三区四区 | 亚洲自拍婷婷 | 三及片在线视频 | 躁BBB躁BBB躁BBBBBB | 欧美黑人狂躁少妇无码中文字幕 | 99精品久久毛片A片 |