中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Core中怎么實現本地化機制

發布時間:2021-06-08 16:18:13 來源:億速云 閱讀:364 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關.NET Core中怎么實現本地化機制,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創建一個MVC網站

為了測試ASP.NET Core的本地化,我們首先在Visual Studio 2017中創建一個MVC項目LocalizationSample。

.NET Core中怎么實現本地化機制

配置Startup類

ASP.NET Core中,如果希望啟動本地化,首先需要在Startup類的ConfigureServices方法中使用services.AddLocalization添加本地化服務。

public void ConfigureServices(IServiceCollection services)
{
 services.AddLocalization(o =>
 {
 o.ResourcesPath = "Resources";
 });
 
 services.AddMvc();
}

在這個方法中,我們指定了文件夾Resources作為存放翻譯文件的目錄。

注: 如果不指定存放翻譯文件的目錄, ASP.NET Core會默認從網站根目錄下讀取。

然后我們需要在Configure方法中添加本地化中間件。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 app.UseStaticFiles();

 IList<CultureInfo> supportedCultures = new List<CultureInfo>
 {
 new CultureInfo("en-US"),
 new CultureInfo("zh-CN"),
 };
 app.UseRequestLocalization(new RequestLocalizationOptions
 {
 DefaultRequestCulture = new RequestCulture("en-US"),
 SupportedCultures = supportedCultures,
 SupportedUICultures = supportedCultures
 });

 app.UseMvc(routes =>
 {
 routes.MapRoute(
  name: "default",
  template: "{controller=Home}/{action=Index}/{id?}");
 });
}
  • app.UseRequestLocalization必須放置app.UseMvc之前

  • DefaultRequestCulture參數指定了默認的語言文化,即用戶不指定任何文化時的默認語言文化

  • SupportedCultures和SupportedUICultures是指定當前應用支持的所有語言文化

注: SupportedCultures指定的是數字和日期格式, SupportedUICultures指定的翻譯文件

添加資源文件

下面我們嘗試添加一個資源文件

  1. 首先我們創建一個Resources文件夾,這就是我們在前面Startup類中配置的目錄名。

  2. 然后我們在Resource文件夾中添加一個資源文件,并命名為Controllers.HomeController.zh-CN.resx。

  3. 在這個資源文件中,添加一個字段Hello, 并設置其值為“你好”。

.NET Core中怎么實現本地化機制

在Controller中獲取本地化字符串

現在我們打開默認生成的HomeController, 清空里面所有的action, 并添加一個新的action, 代碼如下:

public class HomeController : Controller
{
 public HomeController()
 {
 
 }

 public IActionResult Hello()
 {
 return Content("Hello");
 }
}

啟動項目之后訪問/Home/Hello, 結果如下

.NET Core中怎么實現本地化機制

下面我們修改HomeController的代碼, 來引入本地化字符串訪問器

public class HomeController : Controller
{
 private readonly IStringLocalizer<HomeController> _localizer;

 public HomeController(IStringLocalizer<HomeController> localizer)
 {
 _localizer = localizer;
 }

 public IActionResult Hello()
 {
 return Content(_localizer["Hello"]);
 }
}

代碼解釋

  • IStringLocalizer是一個本地化字符串訪問器的泛型接口,這里我們通過依賴注入的方式在HomeController的構造函數中將其注入

  • 我們可以通過IStringLocalizer的屬性訪問器獲取到對應字段在不同語言下的文本。

最終效果

現在我們啟動程序, 重新訪問/Home/Hello, 結果如下

.NET Core中怎么實現本地化機制

你會發現結果沒有變化,這是因為默認我們設置的語言文化是en-US, 但是我們之前沒有添加en-US的資源文件,所以程序就直接將訪問的字段名輸出了。

現在我們修改URL, 訪問/Home/Hello?ui-culture=zh-CN, 結果如下

.NET Core中怎么實現本地化機制

我們期望的“你好”被正確輸出了,這說明ASP.NET Core默認支持在Url中以culture參數的形式設置當前網站使用的語言文化。

資源文件命名

為什么我們之前添加了一個名為Controllers.HomeController.zh-CN.resx的資源文件,本地化字符串訪問器IStringLocalizer就能定位到這個文件并讀取其中的字段屬性呢?

這是由ASP.NET Core資源文件的命名約定決定的。

ASP.NET Core資源文件的名稱由2部分組成:

  • 去掉程序集名稱的完整類名

  • 語言文化名稱

以前面的例子為例:

我們創建了一個本地化字符串訪問器接口,它的泛型類型是HomeController, 其完整類名是LocalizationSample.Controllers.HomeController, 當前程序集的名稱是LocalizationSample, 所以去掉程序集名稱之后,剩余部分是Controllers.HomeController。當我們設置culture參數是zh-CN時, ASP.NET Core查找的資源文件名是Controllers.HomeController.zh-CN.resx, 這正是我們前面添加的中文語言文化資源文件名。

如果你不喜歡這種方式,ASP.NET Core還提供了另外一種資源文件的組織方式

你可以Resources目錄下創建以下目錄結構

Resources

     Controllers

          HomeController.zh-CN.resx

本地化字符串訪問器也能自動定位到這個文件。

默認的語言文化提供器

ASP.NET Core的本地化中間件默認支持3種語言文化提供器

  • URL中的查詢字符串

  • Cookie

  • 請求頭

URL中的查詢字符串

ASP.NET Core會從URL中的culture參數中獲取當前應用使用的語言文化,這就是前面例子中,“你好”能正確輸出的原因

除了指定ui-culture參數,你還可以使用culture參數指定當前格式化時間,數字等所使用的語言文化。

?culture=zh-CN&ui-culture=zh-CN

?culture=zh-CN

?ui-culture=zh-CN

Tips: 當只指定culture或ui-culture參數時,ASP.NET Core會自動將culture和ui-culture設置成一樣的。即?culture=zh-CN等同于?culture=zh-CN&ui-culture=zh-CN

Cookie

ASP.NET Core中還支持使用Cookie的方式設置當前應用使用的語言文化。默認使用的Cookie名稱是.AspNetCore.Culture。

.AspNetCore.Culture的值格式如下

c=zh-CN|uic=zh-CN

c=zh-CN

uic=zh-CN

其中c表示culture, uic表示ui-culture。

下面我們使用Chrome的開發者工具, 為當前網頁添加語言文化Cookie

.NET Core中怎么實現本地化機制

然后我們訪問/Home/Hello, "你好"也被正確的輸出了

.NET Core中怎么實現本地化機制

這說明ASP.NET Core從Cookie中讀取到了語言文化配置

請求頭

除了URL查詢字符串和Cookie, ASP.NET Core還支持在請求頭中指定語言文化。請求頭中語言文化字段名稱是 Accept-Language。

Accept-Language的文檔,參見https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Language

這里我們使用Postman來測試一下,我們設置Accept-Language為zh-CN, zh;q=0.9, 結果如下

.NET Core中怎么實現本地化機制

如何在View中使用本地化

除了Controller, 我們更多的是在View中使用本地化。
如果希望在View中使用本地化,首先需要在Startup類的ConfigureServices方法中啟用View本地化。

public void ConfigureServices(IServiceCollection services)
{
 services.AddMvc()
  .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
}

這里LanguageViewLocationExpanderFormat支持2種方式,這個和前面Controller的本地化文件名稱約定類似

  • Suffix, 例/Resources/Home/Hello.zh-CN.resx

  • Path, 例/Resources/Home/zh-CN/Hello.resx

下面我們修改HomeController的代碼,Hello方法將返回一個View

HomeController

public IActionResult Hello()
{
 //return Content(_localizer["Hello"]);
 return View();
}

Hello.cshtml

@{
 ViewData["Title"] = "Hello";
}

<h3>Good Bye</h3>

然后我們創建如下圖的目錄結構, 并創建資源文件Hello.zh-CN.resx, 并添加GoodBye字段,其值為"再見"

.NET Core中怎么實現本地化機制

.NET Core中怎么實現本地化機制

使用ViewLocalizer

ViewLocalizer類可以幫助我們在Razor視圖中使用本地化文本。現在我們來修改Hello.cshtml, 在文件添加本地化引用,并注入一個ViewLocalizer對象

@using Microsoft.AspNetCore.Mvc.Localization

@inject IViewLocalizer Localizer
@{
 ViewData["Title"] = "Hello";
}

<h3>@Localizer["GoodBye"]</h3>

這里我們使用ViewLocalizer讀取了本地化文本,它的用法和IStringLocalier一樣,都是通過屬性訪問器訪問對應字段的本地化文本。

最終效果

現在我們運行程序并訪問/Home/Hello, 結果如下

.NET Core中怎么實現本地化機制

然后我們繼續訪問/Home/Hello?ui-culture=zh-CN, 結果如下

.NET Core中怎么實現本地化機制

以上就是.NET Core中怎么實現本地化機制,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克| 乐昌市| 扶余县| 客服| 四川省| 阿尔山市| 肇源县| 伊金霍洛旗| 汨罗市| 邯郸市| 梅州市| 迭部县| 池州市| 临澧县| 晴隆县| 林芝县| 吴忠市| 麦盖提县| 厦门市| 孝感市| 巴南区| 宽甸| 东城区| 阿合奇县| 沙坪坝区| 垦利县| 弋阳县| 法库县| 玛纳斯县| 盐源县| 开封市| 铁岭县| 马龙县| 灵宝市| 化德县| 贺州市| 运城市| 莲花县| 象州县| 古蔺县| 丘北县|