插件窝 干货文章 Linux上Swagger API文档国际化支持

Linux上Swagger API文档国际化支持

Swagger 文档 语言 翻译 988    来源:    2025-05-08

Linux上Swagger API文档国际化支持方案

1. 理解Swagger API文档国际化需求

API文档国际化是指让API文档能够以多种语言呈现,满足不同地区开发者的需求。Swagger(OpenAPI)本身不直接提供内置的国际化功能,但可以通过多种方式实现。

2. 主要实现方案

2.1 使用多语言注释方案

实现方式: - 在代码注释中使用特定格式标记多语言内容 - 使用工具提取并生成不同语言的文档

示例(Java Spring Boot)

/**
 * @ApiOperation(
 *   value = "获取用户信息",
 *   notes = "根据用户ID获取详细信息",
 *   i18n = {
 *     @I18n(lang = "en", value = "Get user info", notes = "Get details by user ID"),
 *     @I18n(lang = "ja", value = "ユーザー情報を取得", notes = "ユーザーIDで詳細を取得")
 *   }
 * )
 */
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
    // 实现代码
}

2.2 使用Swagger UI的翻译功能

步骤: 1. 下载Swagger UI的多语言包 2. 配置Swagger UI使用特定语言

示例配置

const ui = SwaggerUIBundle({
  url: "https://petstore.swagger.io/v2/swagger.json",
  dom_id: '#swagger-ui',
  presets: [
    SwaggerUIBundle.presets.apis,
    SwaggerUIStandalonePreset
  ],
  plugins: [
    SwaggerUIBundle.plugins.DownloadUrl
  ],
  layout: "StandaloneLayout",
  // 设置语言为中文
  configs: {
    i18n: {
      locale: 'zh',
      locales: {
        zh: require('swagger-ui-dist/translations/zh')
      }
    }
  }
})

2.3 使用API网关处理国际化

架构

客户端请求 → API网关(根据Accept-Language头) → 路由到对应语言版本的文档服务

实现技术: - Nginx配置多语言路由 - Kubernetes Ingress基于header的路由

2.4 使用文档生成工具链

推荐工具: 1. Swagger2Markup + Asciidoctor:生成多语言文档 2. Redocly:支持多语言模板 3. OpenAPI Generator:生成多语言客户端文档

3. Linux环境下的具体实施

3.1 基于Nginx的多语言Swagger UI部署

配置示例

http {
    map $http_accept_language $lang {
        default en;
        ~zh zh;
        ~ja ja;
    }

    server {
        listen 80;

        location /docs/ {
            root /var/www/swagger-ui;
            try_files /$lang/index.html /en/index.html;
        }
    }
}

3.2 使用Docker部署多语言Swagger UI

docker-compose.yml示例

version: '3'
services:
  swagger-en:
    image: swaggerapi/swagger-ui
    environment:
      - SWAGGER_JSON=/foo/swagger-en.json
    volumes:
      - ./docs/en:/foo
    ports:
      - "8080:8080"

  swagger-zh:
    image: swaggerapi/swagger-ui
    environment:
      - SWAGGER_JSON=/foo/swagger-zh.json
      - LANG=zh
    volumes:
      - ./docs/zh:/foo
    ports:
      - "8081:8080"

4. 自动化流程建议

  1. CI/CD集成

    • 在构建流程中添加文档翻译步骤
    • 使用如Crowdin、Transifex等翻译平台API
  2. 多语言文档生成脚本示例

#!/bin/bash
# 生成英文文档
swagger-cli bundle api.yaml -o dist/en/api.json --type json
# 生成中文文档(假设有翻译文件)
jq -s '.[0] * .[1]' api.yaml translations/zh.json | swagger-cli bundle - -o dist/zh/api.json

5. 最佳实践

  1. 键值分离:将文档中的文本内容提取为键值对,便于翻译
  2. 上下文保留:确保翻译人员能理解API参数的上下文
  3. 版本控制:文档版本应与API版本同步
  4. 自动化测试:对生成的多语言文档进行验证测试

6. 常见问题解决

问题1:Swagger UI界面翻译不完整 - 解决方案:补充自定义翻译文件或使用完整翻译版本

问题2:文档描述中的参数说明未翻译 - 解决方案:确保在Swagger注解/定义中使用多语言支持的结构

问题3:翻译后的文档格式错乱 - 解决方案:检查特殊字符转义,特别是Markdown格式内容

通过以上方案,您可以在Linux环境中有效实现Swagger API文档的国际化支持,满足全球化产品的文档需求。