javascript
.net core 实现基于 JSON 的多语言
.net core 實現基于 JSON 的實現多語言
Intro
上次我們提到了,微軟默認提供基于資源文件的多語言本地化,個人感覺使用起來不是太方便,沒有 json 看起來直觀,于是動手造了一個輪子, dotnet core 基于 json 的本地化組件
GetStarted
需要引用 nuget 包 WeihanLi.Extensions.Localization.Json
注冊服務:
services.AddJsonLocalization(options =>{options.ResourcesPath = Configuration.GetAppSetting("ResourcesPath");options.ResourcesPathType = ResourcesPathType.TypeBased; // 默認方式和微軟找資源的方式類似// options.ResourcesPathType = ResourcesPathType.CultureBased; // 在對應的 culture 子目錄下尋找資源文件,可以參考后面的示例});中間件配置(如果是asp.net core,和之前一樣):
app.UseRequestLocalization();That's it~
添加你的資源文件
TypeBased 資源文件的路徑
For Types:
Home/Index => Controllers/HomeController
資源路徑:
[ResourcesPath]/Controllers/HomeController.[cultureName].json
示例:
Resources/Controllers/HomeController.en.json
Resources/Controllers/HomeController.zh.json
For Razor 視圖:
示例:
Resources/Views/Home/Index.en.json
Resources/Views/Home/Index.zh.json
CultureBased 資源文件路徑
For Types:
Home/Index => Controllers/HomeController
資源路徑:
[ResourcesPath]/[cultureName]/Controllers/HomeController.json
示例:
Resources/en/Controllers/HomeController.json
Resources/zh/Controllers/HomeController.json
For Razor 視圖:
示例:
Resources/en/Views/Home/Index.json
Resources/zh/Views/Home/Index.json
Copy your resource files to output:
需要設置將資源文件拷貝到輸出目錄,否則會找不到資源文件,可以在啟動項目項目文件中加入以下示例代碼:
<ItemGroup> <Content Update="Resources\**\*.json"><CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>上面的配置會將 Resources 目錄下的所有 json 文件拷貝到輸出目錄下,可以根據自己的需要進行修改
Use
用法和之前是一樣的
Controller 示例:
public class ValuesController : Controller {private readonly IStringLocalizer<ValuesController> _localizer;public ValuesController(IStringLocalizer<ValuesController> localizer){_localizer = localizer;}// GET: api/<controller>[HttpGet]public string Get(){return _localizer["Culture"];} }Razor 視圖示例:
@using Microsoft.AspNetCore.Mvc.Localization @using Microsoft.Extensions.Localization @using WeihanLi.Extensions.Localization.Json.Sample.Controllers @inject IHtmlLocalizer<HomeController> HtmlLocalizer @inject IStringLocalizer<HomeController> StringLocalizer @inject IViewLocalizer ViewLocalizer @{ViewData["Title"] = "Index"; } <h2>Index</h2> <div>string: @StringLocalizer["Hello"]</div> <div>html: @HtmlLocalizer["Hello"]</div> <div>view: @ViewLocalizer["Hello"]</div>資源文件示例:
{"Culture": "中文" }Samples
AspNetCore3.1 Basic Sample
ActivityReservation
總結
以上是生活随笔為你收集整理的.net core 实现基于 JSON 的多语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABP框架v2.0 和 ABP商业版
- 下一篇: CAP原理