当前位置: 首页 > news >正文

Asp.net Core API 本地化

本文是一个demo,演示了如何根据用户接口查询字段(正常放header中),设置当前culture,并获取当前culture的key value给用户提示

  1. 创建Resources文件夹,添加以下三个文件
    在这里插入图片描述
    其中ExceptionUnuse 是一个空的类,供IStringLocalizer使用,IStringLocalizer 决定了resource文件需要以Exceptions开头进行命名,且需要注意Exceptions这个类的命名空间,因为这个决定了能否找到资源文件
    在这里插入图片描述
namespace CoreAPILocalization
{
    public class Exceptions
    {

    }
}

  1. 创建中间件,设置当前culture
using Microsoft.Extensions.Options;
using System.Globalization;

namespace CoreAPILocalization.CoreConfig
{
    public class CultureMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly IOptions<RequestLocalizationOptions> _options;

        public CultureMiddleware(RequestDelegate next, IOptions<RequestLocalizationOptions> options)
        {
            _next = next;
            _options = options;
        }

        public async Task InvokeAsync(HttpContext context)
        {
            var cultureQuery = context.Request.Query["culture"];
            if (!string.IsNullOrWhiteSpace(cultureQuery))
            {
                var culture = new CultureInfo(cultureQuery);
                if (_options.Value.SupportedCultures.Contains(culture))
                {
                    Thread.CurrentThread.CurrentCulture = culture;
                    Thread.CurrentThread.CurrentUICulture = culture;
                }
            }

            await _next(context);
        }
    }
}

  1. 创建全局异常filter
namespace CoreAPILocalization.CoreConfig
{
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;
    using Microsoft.Extensions.Localization;
    using System.Net;

    namespace ExceptionFilter
    {
        public class GlobalExceptionFilter : IAsyncExceptionFilter
        {
            private readonly IWebHostEnvironment _webHostEnvironment;

            private readonly IStringLocalizer<Exceptions> _localizer;
            public GlobalExceptionFilter(IWebHostEnvironment webHostEnvironment, IStringLocalizer<Exceptions> localizer)
            {
                _webHostEnvironment = webHostEnvironment;
                _localizer = localizer;
            }
            public Task OnExceptionAsync(ExceptionContext context)
            {

                var errorCode = "errorcode500"; // 假设这是从异常中提取的错误代码
                var errorMessage = _localizer[errorCode];

                context.Result = new ObjectResult(new { Error = errorMessage })
                {
                    StatusCode = (int)HttpStatusCode.InternalServerError
                };
                context.ExceptionHandled = true;
                return Task.CompletedTask;
            }
        }
    }
}

  1. DI
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");

builder.Services.AddControllersWithViews()
    .AddViewLocalization()
    .AddDataAnnotationsLocalization();

builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[] { "en-US", "zh-CN" };
    options.DefaultRequestCulture = new RequestCulture("en-US");
    options.SupportedCultures = supportedCultures.Select(c => new CultureInfo(c)).ToList();
    options.SupportedUICultures = supportedCultures.Select(c => new CultureInfo(c)).ToList();
});



builder.Services.Configure<MvcOptions>(opt =>
{
    opt.Filters.Add<GlobalExceptionFilter>();
});


.....

app.UseRequestLocalization();

app.UseMiddleware<CultureMiddleware>();


源码

相关文章:

  • ACWing:178. 第K短路 (A*算法)
  • 关于SR的一些基本认识
  • 华为OD机试 - 计算观看演唱会场次(Java 2023 B卷 200分)
  • SpringData Redis:RedisTemplate配置与数据操作
  • Linux中Tomcat、idea和MySQL的安装
  • 基于大模型的声带息肉预测及诊疗方案优化研究报告
  • Qt5.15.2实现Qt for WebAssembly与示例
  • WebAssembly 技术在逆向爬虫中的应用研究
  • Git 实战指南:本地客户端连接 Gitee 全流程
  • 算法基础 -- ARM 体系架构设计专家的算法提升目标
  • OpenCV计算摄影学(21)非真实感渲染之边缘保留滤波器edgePreservingFilter()
  • YOLOv11融合[CVPR2025]ARConv中的自适应矩阵卷积
  • 支持向量机SVM的MATLAB分类预测实现
  • 洛谷 P1115 最大子段和(前缀和详解)c++
  • mysql gtid 创建主从大量冲突解决办法
  • 单台openEuler24.03 LTS下的开源大数据环境搭建
  • ubuntu 24.04(linux)安装 jetbrains IntelliJ IDEA,设置图标
  • JDBC相关
  • 连续出现的字符(信息学奥赛一本通-1148)
  • docker配置国内镜像站链接
  • 车展之战:国产狂飙、外资反扑、智驾变辅助
  • 住房和城乡建设部办公厅主任李晓龙已任部总工程师
  • 建行一季度净利833.51亿同比下降3.99%,营收降5.4%
  • 金科股份:去年营收约275亿元,今年确保所有项目“零烂尾”
  • 新一届中国女排亮相,奥运冠军龚翔宇担任队长
  • 大家聊中国式现代化|陶希东:打造高水平安全韧性城市,给群众看得见的安全感