1.安装扩展ResXManager用于管理本地化资源文件
2.添加资源文件Resource.resx
使用工具ResXManager增加其他资源文件,具体参考ResXManager使用
3.注册本地化
public static class ServiceCollectionExtensions {public static IServiceCollection AddLanguage(this IServiceCollection service){service.Configure<RequestLocalizationOptions>(options =>{var cultures = new List<CultureInfo>{new CultureInfo("zh-Hans"),new CultureInfo("en")};options.DefaultRequestCulture = new RequestCulture(cultures[0]);//当服务接收到的请求没有指明当前区域文化,就会使用此默认的区域文化options.SupportedCultures = cultures;//影响日期、时间、数字、货币的展示格式options.SupportedUICultures = cultures;//影响查找那些区域文化资源(如:.resx、json文件等),也就是说,如果这里没有添加没有区域文化A,即使添加了A区域的资源文件,也无法生效。一般Culture和UICultrue保持一致 });service.AddLocalization(options => options.ResourcesPath = "");return service;}}
Program.cs中添加本地化服务
通过AddLocalization注册了IStringLocalizerFactory和IStringLocalizer<>,并指定了资源的根目录为“Resources”
Program.cs中注册请求本地化中间件
注:app.UseRouting() 之后再调用 app.UseRequestLocalization()
本地化使用
使用IStringLocalizer<>方式注入
调用
完整代码
[Authorize] [ApiController] [Route("controller")] //[PermissionAuthorize(Permissions.Users)] public class FileController : ControllerBase {private IStringLocalizer<Resource> _localizer;public FileController(IStringLocalizer<Resource> localizer) {_localizer = localizer;}[HttpGet("GetLocal")]public string GetLocal(){return _localizer["start"];//资源名称区分大小写 } }
请求结果
本次请求没有明确区域文化,又因以上本地化配置中明确请求中未指定区域文化时(或指定不存在的区域文化时)默认的区域文化是“zh-Hans”,结果显示中文
因注册app.UseRequestLocalization(),响应头中会附带语言
注: