Skip to content

增加了使用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"]