.net core 實現基於 JSON 的多語言


.net core 實現基於 JSON 的多語言

Intro

上次我們提到了,微軟默認提供基於資源文件的多語言本地化,個人感覺使用起來不是太方便,沒有 json 看起來直觀,於是動手造了一個輪子, dotnet core 基於 json 的本地化組件

GetStarted

需要引用 nuget 包 WeihanLi.Extensions.Localization.Json 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

More

擴展增加了 CultureBased 方式,這樣就方便將某一種語言的語言包打包,也方便了擴展,支持其他語言的時候只需要導入一個其他語言的語言包即可

在線示例: https://reservation.weihanli.xyz/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM