当前位置: 首页 > news >正文

阿里 EasyExcel 表头国际化

实体类字段使用EasyExcel提供的注解@ExcelProperty,value 值写成占位符形式 ,匹配 i18n 文件里面的编码。
如:

/*** 仓库名称*/
@ExcelProperty("{warehouse.record.warehouseName}")
private String warehouseName;

占位符解析器

@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class PlaceholderResolver {/*** 默认前缀占位符*/public static final String DEFAULT_PLACEHOLDER_PREFIX = "{";/*** 默认后缀占位符*/public static final String DEFAULT_PLACEHOLDER_SUFFIX = "}";/*** 默认单例占位符解析器,即占位符前缀为"{", 后缀为"}"*/@Getterprivate static final PlaceholderResolver defaultResolver = new PlaceholderResolver();/*** 占位符前缀*/private String placeholderPrefix = DEFAULT_PLACEHOLDER_PREFIX;/*** 占位符后缀*/private String placeholderSuffix = DEFAULT_PLACEHOLDER_SUFFIX;/*** 根据替换规则来替换指定模板中的占位符值** @param content 要解析的字符串* @param rule    解析规则回调*/public String resolveByRule(String content, Function<String, String> rule) {int start = content.indexOf(this.placeholderPrefix);if (start == -1) {return content;}StringBuilder result = new StringBuilder(content);while (start != -1) {int end = result.indexOf(this.placeholderSuffix, start);//获取占位符属性值,如{id}, 即获取idString placeholder = result.substring(start + this.placeholderPrefix.length(), end);//替换整个占位符内容,即将{id}值替换为替换规则回调中的内容String replaceContent = placeholder.trim().isEmpty() ? "" : rule.apply(placeholder);result.replace(start, end + this.placeholderSuffix.length(), replaceContent);start = result.indexOf(this.placeholderPrefix, start + replaceContent.length());}return result.toString();}
}

自定义拦截器

@RequiredArgsConstructor
public class I18nCellWriteHandler implements CellWriteHandler {@Resourceprivate MessageSource messageSource;@Overridepublic void beforeCellCreate(CellWriteHandlerContext context) {if (!context.getHead()) {return;}final List<String> originHeadNames = context.getHeadData().getHeadNameList();if (CollectionUtils.isEmpty(originHeadNames)) {return;}List<String> newHeadNames = originHeadNames.stream().map(headName -> PlaceholderResolver.getDefaultResolver().resolveByRule(headName, this::getMessage)).collect(Collectors.toList());context.getHeadData().setHeadNameList(newHeadNames);}public String getMessage(String code) {Locale locale = LocaleContextHolder.getLocale();return messageSource.getMessage(code, null, locale);}
}
http://www.lryc.cn/news/296161.html

相关文章:

  • 跨境电商新风潮:充分发挥海外云手机的威力
  • Kubernetes实战(二十七)-HPA实战
  • IDEA 配置以及一些技巧
  • Android 11 访问 Android/data/或者getExternalCacheDir() 非root方式
  • Eclipse安装配置、卸载教程(Windows版)
  • 正点原子--STM32基本定时器学习笔记(2)
  • 学习笔记:正则表达式
  • 03-抓包_封包_协议_APP_小程序_PC应用_WEB应用
  • C语言笔试题之实现C库函数 strstr()(设置标志位)
  • 什么是IDE,新手用哪个IDE比较好
  • Flask 入门6:模板继承
  • 欢迎来到操作系统的世界
  • 寒假作业-day5
  • 互联网加竞赛 基于深度学的图像修复 图像补全
  • 用于制作耳机壳的UV树脂耳机壳UV胶价格高不高?
  • 【开源】JAVA+Vue+SpringBoot实现房屋出售出租系统
  • Golang 并发 生产者消费者模式
  • Win32 SDK Gui编程系列之--ListView自绘OwnerDraw
  • 深度学习本科课程 实验5 循环神经网络
  • Redis篇之过期淘汰策略
  • 【Kubernetes】kubectl top pod 异常?
  • 前后端分离项目:前端的文件夹应该叫什么名字,后端呢
  • 2024.2.6
  • 如何在 Microsoft Azure 上部署和管理 Elastic Stack
  • 在Visual Studio中引用和链接OpenSceneGraph (OSG) 库
  • [缓存] - Redis
  • spring boot和spring cloud项目中配置文件application和bootstrap加载顺序
  • AdaBoost算法
  • 基于 elasticsearch v8 的 CRUD 操作及测试用例
  • 深度学习的新进展:解析技术演进与应用前景