温馨提示×

Linux中Swagger的API文档如何进行国际化

小樊
35
2025-12-02 04:52:42
栏目: 智能运维

在Linux环境下,为Swagger API文档实现国际化(i18n)通常涉及以下几个步骤:

1. 准备多语言资源文件

首先,你需要准备不同语言的资源文件。这些文件通常是键值对的形式,键是相同的,值是对应语言的翻译。

例如,你可以创建以下文件:

  • messages_en.properties (英文)
  • messages_zh.properties (中文)
# messages_en.properties
greeting=Hello
farewell=Goodbye

# messages_zh.properties
greeting=你好
farewell=再见

2. 配置Swagger以支持国际化

Swagger本身并不直接支持国际化,但你可以通过自定义注解和拦截器来实现。

自定义注解

你可以创建自定义注解来标记需要国际化的字段或方法。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface I18n {
    String key();
}

使用自定义注解

在你的API模型或控制器方法中使用这个注解。

public class User {
    @I18n(key = "greeting")
    private String greetingMessage;

    // getters and setters
}

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        User user = new User();
        user.setGreetingMessage("Hello"); // 这里会被国际化处理
        return user;
    }
}

拦截器实现国际化

创建一个拦截器来解析注解并替换为相应的翻译。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Field;

@Component
public class I18nInterceptor implements HandlerInterceptor {

    @Autowired
    private MessageSource messageSource;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (handler instanceof HandlerMethod) {
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            Class<?> controllerClass = handlerMethod.getBeanType();
            for (Field field : controllerClass.getDeclaredFields()) {
                if (field.isAnnotationPresent(I18n.class)) {
                    I18n i18n = field.getAnnotation(I18n.class);
                    String key = i18n.key();
                    String message = messageSource.getMessage(key, null, request.getLocale());
                    field.setAccessible(true);
                    field.set(handlerMethod.getBean(), message);
                }
            }
        }
        return true;
    }
}

3. 配置Spring Boot以使用拦截器

在Spring Boot配置类中注册拦截器。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private I18nInterceptor i18nInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(i18nInterceptor);
    }
}

4. 配置MessageSource

在Spring Boot配置文件中配置MessageSource

spring:
  messages:
    basename: i18n/messages

5. 测试国际化

启动你的Spring Boot应用,并测试不同语言环境下的API响应,确保国际化生效。

通过以上步骤,你可以在Linux环境下为Swagger API文档实现国际化。这样,你的API文档将能够根据用户的语言偏好显示相应的翻译。

0