API文档国际化是指让API文档能够以多种语言呈现,满足不同地区开发者的需求。Swagger(OpenAPI)本身不直接提供内置的国际化功能,但可以通过多种方式实现。
实现方式: - 在代码注释中使用特定格式标记多语言内容 - 使用工具提取并生成不同语言的文档
示例(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) {
// 实现代码
}
步骤: 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')
}
}
}
})
架构:
客户端请求 → API网关(根据Accept-Language头) → 路由到对应语言版本的文档服务
实现技术: - Nginx配置多语言路由 - Kubernetes Ingress基于header的路由
推荐工具: 1. Swagger2Markup + Asciidoctor:生成多语言文档 2. Redocly:支持多语言模板 3. OpenAPI Generator:生成多语言客户端文档
配置示例:
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;
}
}
}
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"
CI/CD集成:
多语言文档生成脚本示例:
#!/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
问题1:Swagger UI界面翻译不完整 - 解决方案:补充自定义翻译文件或使用完整翻译版本
问题2:文档描述中的参数说明未翻译 - 解决方案:确保在Swagger注解/定义中使用多语言支持的结构
问题3:翻译后的文档格式错乱 - 解决方案:检查特殊字符转义,特别是Markdown格式内容
通过以上方案,您可以在Linux环境中有效实现Swagger API文档的国际化支持,满足全球化产品的文档需求。