温馨提示×

在Linux环境下Swagger如何支持多语言

小樊
58
2025-09-18 07:00:35
栏目: 智能运维

在Linux环境下实现Swagger多语言支持的核心路径
Swagger(OpenAPI)本身不直接提供内置的多语言功能,但可通过资源文件配置框架集成UI定制等方式实现API文档与界面的国际化。以下是具体实施方案:

1. 准备多语言资源文件

首先创建不同语言的资源文件,用于存储Swagger UI和文档的翻译文本。常见命名规则为messages_<语言代码>.properties(如messages_en.propertiesmessages_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文档。
    
  • 注意事项
    确保资源文件放置在项目资源目录下(如Spring Boot的src/main/resources),并保持键名一致以便动态切换。

2. 集成框架国际化配置(以Spring Boot为例)

若使用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
    
  • 创建Swagger配置类:通过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();
        }
    }
    
  • 动态切换Locale:通过拦截器或过滤器获取用户浏览器语言偏好(Accept-Language头),并设置到LocaleContextHolder中,实现自动语言切换。

3. 定制Swagger UI多语言支持

若需进一步定制Swagger UI的界面语言(如按钮、提示语),可通过以下方式实现:

  • 加载本地化资源文件:下载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版本匹配,避免翻译缺失或格式错乱。

4. 测试与验证

启动应用后,访问Swagger UI(如Spring Boot的http://localhost:8080/swagger-ui.html),通过以下方式验证:

  • 自动切换:修改浏览器语言偏好(如Chrome设置为中文),刷新页面应显示中文界面。
  • 手动切换:通过UI上的语言下拉菜单选择不同语言,确认文本(标题、描述、按钮等)正确翻译。
  • 边界测试:检查特殊字符(如中文标点、emoji)的显示效果,确保无乱码。

5. 常见问题解决

  • 问题1:翻译不完整:检查资源文件中的键名是否与Swagger配置中的占位符一致,补充缺失的翻译内容。
  • 问题2:界面翻译未生效:确认Swagger UI初始化配置中的locales路径正确,且资源文件已加载。
  • 问题3:格式错乱:对资源文件中的特殊字符(如Markdown中的**加粗**)进行转义,避免解析错误。

通过以上步骤,可在Linux环境下为Swagger实现完整的多语言支持,满足全球化团队的文档需求。

0