1、使用注解
@LanguageControl
2、自定义注解
package forum.utils.annotation;
import java.lang.annotation.*;
/**
* 返回语言控制
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LanguageControl {
}
3、aop
/**
* 语言控制AOP
*/
@Aspect
@Order(3)//执行顺序,数值最大,最后执行
@Component
public class LanguageControlAspect {
@Autowired
private PublicMethodController publicMethodController;
@Pointcut("@annotation(forum.utils.annotation.LanguageControl)")
public void logPointCut() {
}
@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
Result result = new Result();
HttpServletRequest request = HttpSessionUtil.getRequest();
//执行方法
result = (Result) point.proceed();
result = publicMethodController.transResultMessage(request,result);
return result;
}
}
4、公共方法
public Result transResultMessage(HttpServletRequest request,Result result){
if(request != null && StringUtils.equals(request.getHeader(PublicPreEnum.REQUEST_USER_LANGUAGE.value),"EN") && result != null && !StringUtils.isEmpty(result.getMessage())){
String en = redisService.get(PublicPreEnum.REDIS_DATABASE_TWO,PublicPreEnum.REDIS_ZH_EN.value+result.getMessage());
if(StringUtils.isEmpty(en)){
ForumZhEn forumZhEn = forumZhEnService.selectOne(new EntityWrapper<ForumZhEn>().eq("zh",result.getMessage()));
if(forumZhEn!=null){
en = forumZhEn.getEn();
redisService.set(PublicPreEnum.REDIS_DATABASE_TWO,PublicPreEnum.REDIS_ZH_EN.value+result.getMessage(),en);
}else{
en = TransApi.ZH_to_EN(result.getMessage());
if(!StringUtils.isEmpty(en)){
forumZhEn = new ForumZhEn();
forumZhEn.setZh(result.getMessage());
forumZhEn.setEn(en);
forumZhEnService.insert(forumZhEn);
redisService.set(PublicPreEnum.REDIS_DATABASE_TWO,PublicPreEnum.REDIS_ZH_EN.value+result.getMessage(),en);
}else{
en = result.getMessage();
}
}
}
result.setMessage(en);
}
return result;
}