設定ABP預設使用中文 更新ABP v3 0方法

2022-01-10 06:34:51 字數 4073 閱讀 4586

abp提供的啟動模板, 預設使用是英文:

雖然可以通過右上角的選單切換成中文, 但是對於國內專案來說, 預設使用中文是很正常的需求.

本文介紹了如何實現預設語言的幾種方法, 希望能對abp愛好者有所幫助, let's begin!

使用abp cli建立乙個名為abpstudy的asp.net mvc專案:

abp new abpstudy
關於mvc的啟動模板可以看文件, 這裡就不贅述.

使用abp版本的是當前最新的v3.0.2, 後續版本應該也適用

該方法參考了此回答, 謝謝@maliming.

編輯abpstudy.web工程下的startup.cs檔案, 在configure方法的開始增加一行**:

該方法首先獲取了settingdefinitionmanager的服務例項, 然後呼叫get方法獲取了預設語言的settingdefinition, 然後設定了預設值"zh-hans", 即中文.

執行, 就會發現預設語言已經變成中文了:

怎麼樣, 非常簡單吧?

關於abp的setting, 現在官方的文件還未寫完. 等待官方文件完善後我會更新到文章裡

雖然方法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實際上是方法2的乙個改進: 我們利用了abp提供了seed系統(即可通過**初始化系統的一些資料), 這樣我們在正式上線專案時, 不需要再額外執行sql語句來執行資料初始化了.

首先我們把abpsettings表中我們手動插入的那條記錄刪除.

然後在abpstudy.domain工程的settings資料夾中增加乙個名為abpstudysettingdataseedcontributor的類, 用來為setting設定初始化資料. 類**如下:

public class abpstudysettingdataseedcontributor : idataseedcontributor, itransientdependency

public async task seedasync(dataseedcontext context)

該類注入了guidgenerator用來生成guid, 和settingrepository用來向abpsettings表插入資料.

seedasync方法中使用insertasync方法插入了預設語言的記錄, 記錄的值與方法2中sql中是一致的.

然後我們執行abpstudy.dbmigrator工程, 這是啟動模板附帶的乙個用來執行資料庫遷移的乙個工具, 它會掃瞄到我們剛寫的abpstudysettingdataseedcontributor類並呼叫它, 從而完成資料初始化.

執行dbmigrator截圖:

再次檢視abpsettings表中的資料, 發現記錄已經插入了, 與我們使用sql語句插入的一樣, 所以預設中文也同樣可以生效.

2020-07-04 更新開始

"settings":
在最後增加一行內容:"abp.localization.defaultlanguage": "zh-hans", 就樣就可設定預設語言為中文.

但是有網友反映這樣設定後, 在abp3.0中預設語言還是英文, abp的gihub上也有一些類似的issue(#2775, #2469). 這又是什麼原因呢?

原因是瀏覽器傳送的中文的accept-language的值與abp值不匹配導致的:

解決的辦法也很簡單:

);這樣修改後, abp就會忽略瀏覽器傳送的accept-language值, 從而使我們的預設設定生效. (別忘了清除瀏覽器的cookie快取)

以下是一些技術細節, 不感興趣可以不看:)

asp.net core的本地化機制中會維護乙個requestcultureprovider的列表, 預設列表中有三個值:

querystringrequestcultureprovider: 通過url中的查詢字串確定culture

cookierequestcultureprovider: 通過cookie確定culture

acceptlanguageheaderrequestcultureprovider: 通過瀏覽器傳送的accept-header確定culture

這個列表的優先順序為從上到下, 也就是說如果通過查詢字串提供了culture, 那麼剩下的provider就不會有生效.

而abp的語言預設值, 只有列表中所有的provider都未命中才會生效.

你可以試一下通過在url後加上?culture=zh-hans, 這樣會強制使用簡體中文, 因為querystring是優先順序最高的

同理, cookie是第2高的, 所以上面讓你清除瀏覽器cookie, 以免影響預設值

上面的解決方法的思路就是, 把第3個acceptlanguageheaderrequestcultureprovider從列表中刪除了, 從而讓預設語言值生效.

更多細節請檢視asp.net core本地化文件

如果你的專案不用考慮多語言, 那麼右上角的語言切換選單就顯得有點多餘了, 我們可以通過以下修改禁用其他語言:

修改abpstudy.web工程下的abpstudywebmodule類, 將configurelocalizationservices方法中其他語言的options.languages.add(...)**刪除, 只保留中文的即可:

private void configurelocalizationservices());}

再次執行, 發現右上角語言切換的選單就不見了, 完美!

設定ubuntu預設中文字元

一.ubuntu預設的中文字元編碼 ubuntu預設的中文字元編碼為zh cn.utf 8,這個可以在 etc environment中看到 sudo gedit etc environment 可以看到如下內容 path usr local sbin usr local bin usr sbin ...

kali2020 設定中文及換源更新

更換中文 sudo dpkg reconfigure locales 取消en us.utf 8 選擇zh cn.gbk zh cn.utf 8 用空格選定 接著選擇字元 zh cn.utf 8 重啟reboot 解決編碼錯誤顯示問題,終端輸入 sudo apt get install ttf wq...

Win10下設定預設輸入法與預設中文輸入

實現的效果 把自己需要的乙個或多個輸入法軟體新增到輸入法列表中 一般就指定乙個 避免了需要在打字時ctrl shift等快捷鍵在多個輸入法中不停切換的麻煩 首選語言預設為中文,畢竟作為乙個中國人,大部分情況下還是輸入中文字元比較多 實現步驟 win i快捷鍵進入windows設定,選擇 時間和語言 ...