You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Web API能否实现Swagger UI的多语言本地化?

ASP.NET Core Web API Swagger UI本地化实现方案

可以实现完整的Swagger UI本地化,同时解决你提到的「仅接口摘要本地化」和「切换语言无法重新生成swagger.json」两个问题,具体实现步骤如下:

1. 动态生成多语言版本swagger.json

  • 先配置ASP.NET Core本地化中间件,支持通过Query参数、请求头或路由段传递语言标识,同时创建对应语言的资源文件存储接口、参数、返回值的多语言描述
  • 自定义实现IDocumentFilter接口,将接口描述的翻译逻辑写入过滤器的Apply方法中,运行时实时读取当前请求的上下文文化,拉取对应语言的文本写入swagger节点,不要在启动阶段就生成固定的swagger描述
  • 修改Swagger路由规则,在swagger.json的访问路径中加入语言标识,例如/swagger/{culture}/v1/swagger.json,同时关闭Swagger生成缓存,确保不同语言请求对应独立的json文件,避免浏览器缓存导致的内容不更新

核心示例代码:

// 自定义文档过滤器
public class MultiLanguageDocumentFilter : IDocumentFilter
{
    private readonly IStringLocalizer<MultiLanguageDocumentFilter> _localizer;
    private readonly IHttpContextAccessor _httpContextAccessor;

    public MultiLanguageDocumentFilter(IStringLocalizer<MultiLanguageDocumentFilter> localizer, IHttpContextAccessor httpContextAccessor)
    {
        _localizer = localizer;
        _httpContextAccessor = httpContextAccessor;
    }

    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        // 实时读取当前请求的文化
        var currentCulture = _httpContextAccessor.HttpContext?.Request.RouteValues["culture"]?.ToString() ?? "zh-CN";
        Thread.CurrentThread.CurrentCulture = new CultureInfo(currentCulture);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(currentCulture);

        // 翻译接口标题、描述
        swaggerDoc.Info.Title = _localizer[swaggerDoc.Info.Title];
        swaggerDoc.Info.Description = _localizer[swaggerDoc.Info.Description];

        // 遍历所有接口翻译路径和参数描述
        foreach (var path in swaggerDoc.Paths)
        {
            foreach (var operation in path.Value.Operations)
            {
                operation.Value.Summary = _localizer[operation.Value.Summary];
                operation.Value.Description = _localizer[operation.Value.Description];
                foreach (var parameter in operation.Value.Parameters)
                {
                    parameter.Description = _localizer[parameter.Description];
                }
            }
        }
    }
}

2. Swagger UI原生界面本地化

  • 下载Swagger UI官方提供的对应语言翻译包,将语言JS文件存入项目wwwroot目录下
  • 在Program.cs配置Swagger UI时,注入本地化脚本,覆盖默认的英文界面文本,同时可配置多个语言的swagger.json入口,方便用户手动切换语言
  • 如果需要自动适配浏览器语言,可在自定义脚本中读取navigator.language值,自动加载对应语言的翻译并跳转对应语言的swagger.json入口

配置示例代码:

// Program.cs 中Swagger UI配置
app.UseSwaggerUI(options =>
{
    // 配置多语言swagger.json入口
    options.SwaggerEndpoint("/swagger/zh-CN/v1/swagger.json", "接口文档 V1(中文)");
    options.SwaggerEndpoint("/swagger/en-US/v1/swagger.json", "API Docs V1(English)");
    // 注入翻译脚本
    options.InjectJavascript("/swagger/translations/zh-cn.js");
    options.InjectJavascript("/swagger/custom-locale-init.js");
    // 配置默认展示的语言版本
    options.DefaultModelsExpandDepth = -1;
});

内容的提问来源于stack exchange,提问作者Andris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:54:03