增加了使用json文件做为国际化资源的实现方法,使用步骤如下:
为项目创建资源文件
需要为使用到国际化资源的每个页面以及子页面,创建国际化资源,例:假如你的项目结构是这样
.
├── Controllers
│ └── HomeController.cs
│ └── AboutController.cs
├── Views
│ └── Home
│ └── Index.cshtml
│ └── About
│ └── Index.cshtml
│ └── Shared
│ └── _Layout.cshtml
├── appsetting.json
└── Program.cs
在项目根目录创建名称为i18n的文件夹,在它下面创建资源文件,资源名称要与页面文件名保持一致
.
├── Controllers
│ └── HomeController.cs
│ └── AboutController.cs
├── Views
│ └── Home
│ └── Index.cshtml
│ └── About
│ └── Index.cshtml
│ └── Shared
│ └── _Layout.cshtml
├── i18n
│ └── Views
│ └── Home
│ └── Index.en-US.json
│ └── Index.zh-CN.json
│ └── About
│ └── Index.en-US.json
│ └── Index.zh-CN.json
│ └── Shared
│ └── _Layout.en-US.json
│ └── _Layout.zh-CN.json
├── appsetting.json
└── Program.cs
这个例子创建了英文和中文两个资源包 不使用文件夹方式创建资源包,用圆点代替的示例
.
├── Controllers
│ └── HomeController.cs
│ └── AboutController.cs
├── Views
│ └── Home
│ └── Index.cshtml
│ └── About
│ └── Index.cshtml
│ └── Shared
│ └── _Layout.cshtml
├── i18n
│ └── Views.Home.Index.en-US.json
│ └── Views.Home.Index.zh-CN.json
│ └── Views.About.Index.en-US.json
│ └── Views.About.Index.zh-CN.json
│ └── Views.Shared._Layout.en-US.json
│ └── Views.Shared._Layout.zh-CN.json
├── appsetting.json
└── Program.cs
使用国际化服务
csharp
builder.Services.AddJsonLocalization(options => options.ResourcesPath = "i18n"); //i18n是自定义的资源文件夹名称
builder.Services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
调用国际化中间件
csharp
var app = builder.Build();
app.UseRequestLocalization("zh-CN", "en-US"); //第一个参数指定的语言包是默认值,切换语言包通过url添加参数?culture=en 实现
在视图中使用
csharp
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer L
@L["home"]
@L["about"]