在Linux环境下实现Swagger多语言支持的核心路径
Swagger(OpenAPI)本身不直接提供内置的多语言功能,但可通过资源文件配置、框架集成、UI定制等方式实现API文档与界面的国际化。以下是具体实施方案:
首先创建不同语言的资源文件,用于存储Swagger UI和文档的翻译文本。常见命名规则为messages_<语言代码>.properties(如messages_en.properties、messages_zh_CN.properties),也可使用.yaml或.json格式。
messages_en.properties(英文):swagger.title=API Documentation
swagger.description=This is the API documentation for our application.
messages_zh_CN.properties(简体中文):swagger.title=API文档
swagger.description=这是我们应用程序的API文档。
src/main/resources),并保持键名一致以便动态切换。若使用Spring Boot,需通过配置将资源文件与Swagger关联:
pom.xml中引入Swagger和国际化依赖:<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
application.properties中指定资源文件的基础路径:spring.messages.basename=i18n/messages
Docket Bean配置Swagger,并动态获取当前语言的文本:@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
Locale locale = LocaleContextHolder.getLocale(); // 获取当前语言环境
ResourceBundle messages = ResourceBundle.getBundle("messages/messages", locale);
String title = messages.getString("swagger.title");
String description = messages.getString("swagger.description");
return new ApiInfoBuilder()
.title(title)
.description(description)
.version("1.0.0")
.build();
}
}
Accept-Language头),并设置到LocaleContextHolder中,实现自动语言切换。若需进一步定制Swagger UI的界面语言(如按钮、提示语),可通过以下方式实现:
swagger-ui-dist/translations/zh.js),并在初始化时配置:const ui = SwaggerUIBundle({
url: "your-api-spec.yaml",
dom_id: '#swagger-ui',
presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset],
configs: {
i18n: {
locale: 'zh', // 设置默认语言
locales: {
zh: require('swagger-ui-dist/translations/zh') // 加载中文翻译
}
}
}
});
locale:<select id="language-selector">
<option value="en">English</option>
<option value="zh">中文</option>
</select>
<script>
document.getElementById('language-selector').addEventListener('change', (event) => {
const selectedLang = event.target.value;
ui.lang(selectedLang); // 调用Swagger UI的lang方法切换语言
});
</script>
启动应用后,访问Swagger UI(如Spring Boot的http://localhost:8080/swagger-ui.html),通过以下方式验证:
locales路径正确,且资源文件已加载。**加粗**)进行转义,避免解析错误。通过以上步骤,可在Linux环境下为Swagger实现完整的多语言支持,满足全球化团队的文档需求。