NetCore 國際化最佳實踐

NetCore 國際化最佳實踐

ASP.NET Core中提供了一些本地化服務和中間件,可將網站本地化為不同的語言文化。ASP.NET Core中我們可以使用Microsoft.AspNetCore.Localization庫來實現本地化。但是默認只支持使用資源文件方式做多語言存儲,很難在實際場景中使用。有沒有可能支持官方資源文件的基礎上還能支持動態添加修改多語言呢,答案是有的,那就是NetPro.Globalization

安裝

Package Manager方式:

Install-Package NetPro.Globalization 6.0.10

.NET CLI 方式:

dotnet add package NetPro.Globalization --version 6.0.10

PackageReference:

<PackageReference?Include="NetPro.Globalization"?Version="6.0.10"?/>

.NET CLI 方式:

paket add NetPro.Globalization --version 6.0.10

基于NetPro環境的初始化

如基于NetPro環境的使用,比較簡單,在執行安裝步驟后配置多語言持久化的sqlite地址即可

"Globalization":?{"UIQueryStringKey":?"language",?//請求的query攜帶的多語言參數名,默認為language"ConnectionString":?"Data?Source=Globalization.db;Cache=Shared",?//sqlite地址"Cultures":?["zh-CN","en-US"],"Annotations":?true,?//是否打開注冊數據注解本地化服務"Record":?true?//不存在是否記錄(自動插入數據庫默認語系),默認true}

脫離NetPro環境的使用

如不是基于NetPro環境的使用,比需要手動進行各項初始化

public?void?ConfigureServices(IServiceCollection?services){services.AddGlobalization();}
public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env){//置于app.UseRouting()后便可;var?configuration?=?app.ApplicationServices.GetService<IConfiguration>();var?globalization?=?configuration.GetSection(nameof(Globalization)).Get<Globalization>();var?cultures?=?globalization?.Cultures????new?string[]?{?};var?localizationOptions?=?new?RequestLocalizationOptions().AddSupportedUICultures(cultures);localizationOptions.RequestCultureProviders.Insert(0,?new?QueryStringRequestCultureProvider?{?UIQueryStringKey?=?globalization.UIQueryStringKey?});localizationOptions.RequestCultureProviders.Insert(1,?new?AcceptLanguageHeaderRequestCultureProvider());localizationOptions.RequestCultureProviders.Insert(2,?new?CookieRequestCultureProvider());app.UseRequestLocalization(localizationOptions);}

使用

public?class?GlobalizationDemoController?:?ControllerBase{private?readonly?IStringLocalizer<NetPro.Globalization.Globalization>?_localizer;//建議使用NetPro.Globalization.Globalization?統一的類提供字符串承載,過多語言碎片public?GlobalizationDemoController(,?IStringLocalizer<NetPro.Globalization.Globalization>?localizer){_localizer?=?localizer;}///?<summary>///?多語言國際化示例///?</summary>[HttpGet("globalization")]public?IActionResult?Globalization(){var?localMsg?=?_localizer["當前時間為"]?+?$":{DateTime.Now}";return?Ok(new?{?localMsg?});}}

客戶端處理

客戶端請求接口時,依次支持,query,header,cookie等三種方式攜帶多語言標識

  • query 默認 language; 支持修改UIQueryStringKey節點覆蓋默認參數名,推薦query方式

  • header 默認 Accept-Language

  • cookie 默認為 .AspNetCore.Culture ?既:(Microsoft.AspNetCore.Localization.CookieRequestCultureProvider.DefaultCookieName)

實驗:

中文環境:

request?http://localhost:5001/api/globalizationdemo/globalization?language=zh-CN
response?localMsg:?"當前時間為:2022/6/11 14:47:01"

英文環境:

request?http://localhost:5001/api/globalizationdemo/globalization?language=en-US
response?localMsg:?"當前時間為:2022/6/11 14:47:01"

發現依然中文,原因是找不到對應的語言,會自動將_localizer[string]中的字符串作為默認值插入,此時只需要手動再插入一條en-US的翻譯即可

4da0525fea1f04a59a9660b1d29527f0.png

再次請求:

request?http://localhost:5001/api/globalizationdemo/globalization?language=en-US
response?localMsg:?"This  time is:2022/6/11 14:50:25"

總結

除了以上支持sqlite數據庫存儲多語言信息,同時也支持微軟默認的資源文件方式,并且使用方式與原生一致,不會有新的學習成本。

NetPro.Globalizatio:

https://github.com/LeonKou/NetPro/tree/dev_6.0/src/Library/NetPro.Globalization

NetPro框架Github地址:

https://github.com/LeonKou/NetPro

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285084.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

復分析——第1章——復分析準備知識(E.M. Stein R. Shakarchi)

第一章 復分析準備知識 (Preliminaries to Complex Analysis) The sweeping development of mathematics during the last two centuries is due in large part to the introduction of complex numbers; paradoxically, this is based on the seemingly absurd no…

網構軟件-Internetware

網構軟件&#xff0c;973項目提的一個概念。概念。作為一種新型軟件形態&#xff0c;它應該涵蓋哪些研究范疇&#xff1f;評價它成功的基本標準是什么&#xff1f;我們看待一件事物&#xff0c;首先都會從已知的認知空間里尋找與之對應者。那么&#xff0c;能與網構相對應的大概…

List集合的remove一個對象的方法

import java.util.ArrayList;import java.util.List;class A{   public boolean equals(Object obj){     return true;   }} public class ListTest2 { public static void main(String[] args) {   // TODO Auto-generated method stub     System.out.println…

【ArcGIS微課1000例】0009:ArcGIS影像拼接(鑲嵌、鑲嵌至新柵格)

本課程以 DEM數據為例,講述ArcGIS中影像的拼接方法及注意事項。 文章目錄 方法一:Mosaic工具方法二:Mosaic To New Raster工具實驗數據下載觀察兩個數據,接邊處切合效果很好。 方法一:Mosaic工具 使用Mosaic工具要千萬注意,Mosaic的結果是將輸入柵格追加到目標柵格上,…

Python:file (read,readline,readline )使用方法

Python讀取文件時&#xff0c;在使用readlin、readlines時會有疑惑&#xff0c;下面給大家詳解&#xff1a;一、例&#xff1a;a.txt的內容為 aaa 123 bbb 456二、首先我先設置個變量&#xff1a; a"a.txt" cfile(a)三、此時我們分別看下使用read、readl…

C語言試題170之矩陣轉置

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:設有一矩…

【ArcGIS微課1000例】0010:ArcGIS影像裁剪(裁剪、掩膜提取)

文章目錄 裁剪方法方法一:Extract By Mask(按掩膜提取)方法二:Clip(裁剪)數據下載裁剪方法 方法一:Extract By Mask(按掩膜提取) 加載配套的實驗數據,運行Extract By Mask(按掩膜提取)工具,參數設置如下: 掩膜提取結果: 方法二:Clip(裁剪) 加載配套的實驗…

阿里創新自動化測試工具平臺--Doom

背景 信息系統上線后通常會需要迭代升級甚至重構&#xff0c;如何確保系統原有業務的正確性非常重要。曾經有一家叫瑞穗證券的證券公司因為一個系統bug導致了數億美金的損失&#xff0c;賠掉了公司一年的利潤。這樣的極端例子雖然少見&#xff0c;但是卻像達摩克利斯之劍警示著…

《微信讀書》自定義樣式

一直用微信讀書看書&#xff0c;但是微信讀書的Web版的布局不太喜歡。 重寫下它的樣式再加上單擊關閉工具欄&#xff0c;這樣看著舒服多了^_^&#xff1a; /*浮動工具欄*/ document.getElementsByClassName("readerControls")[0].style.left"0"; document.…

內核態和用戶態的區別

當一個任務&#xff08;進程&#xff09;執行系統調用而陷入內核代碼中執行時&#xff0c;我們就稱進程處于內核運行態&#xff08;或簡稱為內核態&#xff09;。此時處理器處于特權級最高的&#xff08;0級&#xff09;內核代碼中執行。當進程處于內核態時&#xff0c;執行的內…

C# NanoFramework WIFI掃描、連接和HttpWebRequest 之 ESP32

可喜可賀新板子終于到了&#xff0c;啥也不說&#xff0c;趕緊搞起來。ESP32的主要功能就是WIFI&#xff0c;有了WIFI &#xff0c;就可以直接連接家里的WIFI路由器啥的&#xff0c;直接連接到外網了&#xff0c;這個時候&#xff0c;它就相當于是一個小型的電腦或手機&#xf…

【ArcGIS微課1000例】0011:ArcGIS空間查詢(按位置選擇Select by Location)完全案例詳解

利用按位置選擇工具,您可以根據要素相對于另一圖層要素的位置來進行選擇。例如,如果您想了解最近的洪水影響了多少家庭,那么可以選擇該洪水邊界內的所有家庭。 您可使用多種選擇方法,選擇與同一圖層或其他圖層中的要素接近或重疊的點、線或面要素。 文章目錄 1、點—點查詢…

C語言試題171之實現希爾排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現希…

[轉]收集android上開源的酷炫的交互動畫和視覺效果:Interactive-animation

原文鏈接&#xff1a;http://www.open-open.com/lib/view/open1411443332703.html 描述&#xff1a;收集android上開源的酷炫的交互動畫和視覺效果。 1.交互篇 2.視覺篇 交互篇 1.SlidingUpPanelLayout 項目介紹&#xff1a;他的庫提供了一種簡單的方式來添加一個可拖動滑動面板…

EntityFramework用法探索(三)CodeFirst流暢API

Code First Fluent API&#xff0c;使用流暢API來定義模型映射。 同樣使用與上文 Database First 模式相同的例子&#xff0c;假設需要設計一個零售系統&#xff0c;我們先構建一個 Customer 類。 1 public class Customer 2 { 3 public long Id { get; set; } 4 p…

[轉]JS導出PDF

通過純js將網頁保存為pdf&#xff0c;A4分頁&#xff0c;無需服務端參與 1.引入js庫文件&#xff1a; <script src"../static/jspdf/html2canvas.js"></script><script src"../static/jspdf/jsPdf.debug.js"></script> 2.思路&a…

js瀏覽器對象模型(BOM)

瀏覽器對象模型(Browser Object Model,BOM)&#xff1a;瀏覽器為js提供的對象集合。 1 windows對象 windows對象&#xff1a;表示瀏覽器的框架以及與其相關的內容&#xff0c;比如滾動條和導航欄圖標等等。或者說windows對象就代表瀏覽器本身。windows對象是個全局對象&#xf…

Hello Playwright:(8)等待頁面加載

在我們前面的文章中&#xff0c;我們始終使用await page.GotoAsync(url);加載頁面&#xff0c;我們的目的是等待足夠長的時間讓頁面上的元素出現。但是&#xff0c;我們更希望永遠不要因為等待浪費任何時間。WaitUntilGotoAsync方法的定義如下&#xff1a;Task<IResponse?&…

【ArcGIS微課1000例】0012:ArcGIS創建及連接ArcSDE企業級地理數據庫實例

文章目錄 實驗材料實驗過程創建企業級數據庫連接企業級數據庫創建要素類要素入庫實驗材料 ArcGIS:版本為10.2Server.ecp:版本為10.2SQL Server:版本為2008實驗過程 創建企業級數據庫 企業級地理數據庫的創建需要通過工具箱來實現。 數據庫平臺:SQL Server 實例:localhos…

C語言試題172之實現冒泡排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現冒泡…