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

JSP项目国际化词条统计

国际化字条匹配并导出为excel格式

需求

将jsp页面里的key值,就是<spring:message code="gsyezer_Single_crystal"/>里的gsyezer_Single_crystal。和对应的字条对应上,并以excel表格形式输出。

  • jsp页面key值示例
<label for=""><spring:message code="xhb_comp_type"/><!-- 组件类型--></label>
<select name="" class="sys_select one_key_moduleType"><option value="1"><spring:message code="gsyezer_Single_crystal"/><!-- 单晶--></option><option value="2"><spring:message code="gsyezer_Polycrystalline"/><!-- 多晶--></option><option value="3"><spring:message code="gsyezer_film"/><!-- 薄膜--></option>
</select>
  • 对应字条文件示例

    xhb_comp_type=组件类型
    gsyezer_Single_crystal=单晶
    gsyezer_Polycrystalline=多晶
    gsyezer_film=薄膜
    gsyezer_Material_name=物料名称
    gsyezer_Product_specification=产品规格
    gsyezer_Material_type=物料类型
    gsyezer_Brand=品牌
    ......
    
  • 输出excel表格示例

在这里插入图片描述

python实现

import re
import pandas as pd
# 读取 
with open('D:\\desktop\\workSpace\\index.txt', 'r', encoding = 'UTF-8') as f:content = f.read()
# 匹配
pattern = r'spring:message code=\"(.*?)\"'
matches = re.findall(pattern, content)# 读取lang文件
with open("D:\\desktop\\workSpace\\lang.txt", "r", encoding = "UTF-8") as f:content1 = f.readlines()
# 匹配
pattern1 = re.compile(r"(\w+)=(.*)")
matches1 = []
for line in content1:match1 = pattern1.search(line)if match1:for i in matches:if i == match1.group(1):key, value = i, match1.group(2)matches1.append((value, key))
# 去重
df = pd.DataFrame(matches1, columns=["字条", "对应国际化key"])
df = df.drop_duplicates()
# 输出
df.to_excel("D:\\desktop\\workSpace\\index.xlsx", index=False)
#需要两个包:pandas、openpyxl
#pip install pandas 
#pip install openpyxl    

代码解释

打开名为 “C:\Users\yxj\Desktop\workSpace\index.txt” 的文件,并读取文件内容到变量 content 中。

with open('D:\\desktop\\workSpace\\index.txt', 'r', encoding = 'UTF-8') as f:content = f.read()

使用正则表达式 r’spring:message code=“(.*?)”’ 在 content 中查找匹配的字符串。匹配结果保存在列表 matches 中。

pattern = r'spring:message code=\"(.*?)\"'
matches = re.findall(pattern, content)

打开名为 “C:\Users\yxj\Desktop\workSpace\lang.txt” 的文件,并逐行读取文件内容到列表 content1 中。

with open("D:\\desktop\\workSpace\\lang.txt", "r", encoding = "UTF-8") as f:content1 = f.readlines()

使用正则表达式 r"(\w+)=(.*)" 对 content1 中的每一行进行匹配。匹配的结果保存在列表 matches1 中。

pattern1 = re.compile(r"(\w+)=(.*)")
matches1 = []

对于每个 matches 中的元素,遍历 matches1 中的每一行。如果匹配成功,将匹配的结果以 (value, key) 的形式添加到 matches1 中。

for line in content1:match1 = pattern1.search(line)if match1:for i in matches:if i == match1.group(1):key, value = i, match1.group(2)matches1.append((value, key))

使用 pandas 库将 matches1 转换为数据框 df,并设置列名为 “字条” 和 “对应国际化key”。

df = pd.DataFrame(matches1, columns=["字条", "对应国际化key"])

去除数据框中的重复行。

df = df.drop_duplicates()

将数据框保存为名为 “C:\Users\yxj\Desktop\workSpace\index.xlsx” 的 Excel 文件,其中不包含索引列。

df.to_excel("D:\\desktop\\workSpace\\index.xlsx", index=False)

在js中嵌套引入的国际化字条

import re
import pandas as pdwith open('D:\\desktop\\workSpace\\mainjs.txt', 'r', encoding = 'UTF-8') as f:content = f.read()
# 待匹配的字符串
text = " spring_lang.oss_Analysis_installationTime,"a = '(?<=spring_lang.).*?(?=,|\s|\'|\"|\)|;)'# pattern = r"quick\s+brown\s+(\w+)\s+jumps"matches = re.findall(a, content)
# print(matches)pattern1 = re.compile(r"(\w+)=(.*)")with open('D:\\desktop\\workSpace\\langjsp.txt', 'r', encoding = 'UTF-8') as f:# 以数组的形式读入 数组2lines = f.readlines()
result = []
for key in matches:for line in lines:if re.search(key, line):result.append(re.findall(r'code="(.+?)"', line)[0])
# result就是key值
# print(result)
# 读取真正的lang包
with open("D:\\desktop\\workSpace\\lang.txt", "r", encoding = "UTF-8") as f:content1 = f.readlines()
# print(content1)
pattern1 = re.compile(r"(.*)=(.*)")matches1 = []
for line in content1:match = pattern1.search(line)if match:# print(match)for i in result:if i == match.group(1):key, value = i, match.group(2)matches1.append((value, key))print(result)
df = pd.DataFrame(matches1, columns=["字条", "对应国际化key"])
df = df.drop_duplicates()# 将 DataFrame 输出到 Excel 文件中
df.to_excel("D:\\desktop\\workSpace\\index.xlsx", index=False)

使用时需要创建以下几个目录
在这里插入图片描述

  • index.txt为jsp页面
  • index.xlsx为输出字条与对应的key值
  • lang.txt为语言包
  • langjsp.txt为存储封装过的lang的jsp文件
  • mainjs.txt为有引用国际化字条的js文件

格式

  • index.txt

    <div><div class="sys_tab_box mb_15"><ul class="sys_tab_list flex_center"><li authport="2-2-1"><a href="<%=request.getContextPath()%>/plantbC/plantDevice/getInvPage" class="fs_18"><i class="iconfont mr_5">&#xe6b8;</i><spring:message code="update_common_inv_sn"/><!-- 逆变器--></a></li><li authport="2-2-2"><a href="<%=request.getContextPath()%>/plantbC/plantDevice/getDatalogPage" class="fs_18"><i class="iconfont mr_5">&#xe6a5;</i><spring:message code="device_datalog"/><!-- 数据采集器--></a></li><li class="curr" authport="2-2-3"><a href="<%=request.getContextPath()%>/plantbC/plantDevice/getMeterPage" class="fs_18"><i class="iconfont mr_5">&#xe6b6;</i><spring:message code="work_meter"/><!-- 智能电表--></a></li><li authport="2-2-4"><a href="<%=request.getContextPath()%>/plantbC/plantDevice/getEnvPage" class="fs_18"><i class="iconfont mr_5">&#xe6a8;</i><spring:message code="work_env"/><!-- 环境监测仪--></a></li></ul></div>
  • lang.txt

    #################################      汉语: 2014-11-12     ########################################
    login_login=监控/运维OSS登录
    login_loginOld=旧版
    login_down=下载
    login_help=帮助
    login_nameOrPassError=用户名或密码错误
    login_valiCodeWrong=验证码错误
    login_singIn=登 录
    login_newUser=注 册
    login_forgetPass=忘记密码?
    
  • langjsp.txt

    NO:"<spring:message code="service_question_xuhao"/>",//序号
    devSer:"<spring:message code="service_question_deviceOrder"/>",//设备序列号
    subArrayName:"<spring:message code="asd_Subarray_name"/>",//子阵名称
    faultStrNum:"<spring:message code="sdf_Fault_string"/>",//故障组串数
    strNum:"<spring:message code="sdf_Total_number_strings"/>",//组串总数
    DiagnosisTime:"<spring:message code="new_Diagnosis_time"/>",//诊断时间
    new_mission_name:"<spring:message code="new_mission_name"/>",//任务名称
    xhb_notice:"<spring:message code="new_prompt"/>",//提示
    xhb_details:"<spring:message code="tigo_details"/>",//详情
    
  • mainjs.txt

    var b = compareTime2(minMaxtimeList,minMaxtimeList2);//true为交集
    if(b){oComFn.sysAlert(spring_lang.there_is_a_conflict_in_the_time_interval_selected_by_Fengguping);//峰谷平所选时间区间有冲突,请重选!return false;
    }else{return true;
    }
    

不会python
ctrl C+V手已抽筋

相关文章:

JSP项目国际化词条统计

国际化字条匹配并导出为excel格式 需求 将jsp页面里的key值&#xff0c;就是<spring:message code"gsyezer_Single_crystal"/>里的gsyezer_Single_crystal。和对应的字条对应上&#xff0c;并以excel表格形式输出。 jsp页面key值示例 <label for"&…...

Java课题笔记~ MyBatis缓存

为了减少重复查询给数据库带来的压力&#xff0c;MyBatis提供了缓存机制&#xff0c;这种机制能够缓存查询的结果&#xff0c;避免重复的查询。 MyBatis提供了两种缓存方式&#xff1a; 一种为针对于SqlSession的缓存【默认开启】 另一种为针对于全局的缓存【手动开启】 一…...

数据结构--循环队列、链队

基础知识 //循环队列数据结构 typedef struct { QElemType data[MaxQSize];//数据域 int front,rear; //队头队尾指针 }SqQueue; //链队结点数据结构 typedef struct QNode { int data;//数据域 struct QNode* next;//指针域 }QNode, * QueuePtr; typedef struct { struct Q…...

hbuilderx主题色分享-github风格

效果 步骤 hbuilderx总共有三种主题&#xff0c;绿柔主题Default,酷黑主题Monokai,雅黑主题Atom One Dark,修改主题色是基于三种主题之一的&#xff0c;不能直接创建一个新主题&#xff0c;比如下方配置是基于Atom One Dark(对象名为[Atom One Dark])&#xff0c;则当前hbuild…...

【C++】类与对象(1)

文章目录 前言一、什么是类1.类的定义2.类的访问限定符3.类的作用域 二、类的实例化三、类对象的存储方式四、this指针总结 前言 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。C是基于面向对象的&#x…...

Java课题笔记~ MyBatis核心配置

一、核心配置文件概览 MyBatis配置文件中有MyBatis框架的核心配置&#xff0c;负责对MyBatis进行全局管理。它包含许多控制MyBatis功能的重要元素。 <configuration><!--设置配置文件--><properties><property name"" value""/>…...

从0开始自学网络安全(黑客)

前言 黑客技能是一项非常复杂和专业的技能&#xff0c;需要广泛的计算机知识和网络安全知识。你可以参考下面一些学习步骤&#xff0c;系统自学网络安全。 在学习之前&#xff0c;要给自己定一个目标或者思考一下要达到一个什么样的水平&#xff0c;是学完找工作&#xff08;…...

kotlin 编写一个简单的天气预报app(四)增加界面显示

编写界面来显示返回的数据 用户友好性&#xff1a;通过界面设计和用户体验优化&#xff0c;可以使天气信息更易读、易理解和易操作。有效的界面设计可以提高用户满意度并提供更好的交互体验。 增加城市名字的TextView <TextViewandroid:id"id/textViewCityName"…...

英语不好能学好Python吗?Python常用英文单词汇总

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 有些小可爱对英语好不好对学习python有没有什么影响有着很深的疑惑。 其实python学习&#xff0c;主要靠多敲多练&#xff0c;主打一个熟能生巧 那今天我就给大家带来Python常用英文单词汇总&#xff0c; 新手期小可…...

Counting Stars 2023“钉耙编程”中国大学生算法设计超级联赛(5)hdu7335

Problem - 7335 题目大意&#xff1a;如果一个点连接着k个点&#xff0c;就称这k1个点构成k星图&#xff0c;现给出一个大小为n的图&#xff0c;问2星图的数量^3星图的数量^...^n星图的数量是多少 3<n<1e6;1<m<1e6 思路&#xff1a;因为边数总共不超过1e6&#…...

浅谈document.write()输出样式

浅谈document.write()输出样式 js中的最基本的命令之一&#xff1a;document.write&#xff08;&#xff09;&#xff0c;用于简单的打印内容到页面上&#xff0c;可以逐字打印你需要的内容——document.write("content"),这里content就是需要输出的内容&#xff1b;…...

AIGC(Artificial Intelligence and Graph Computing)职业发展路径和前景如何?

目录 一、AIGC 基本概念二、AIGC 市场规模三、AIGC 未来发展前景四、AIGC 职业发展路径五、AIGC 技能要求六、AIGC 相关公司 AIGC&#xff08;Artificial Intelligence and Graph Computing&#xff09;是人工智能和图计算的结合&#xff0c;它是一种用于处理大规模复杂数据的计…...

MySql006——基本的SELECT查询语句

在《MySql003——结构化查询语言SQL基础知识》中&#xff0c;我们学习了有关SQL的基础知识&#xff0c;也知道SQL中查询语句SELECT使用最为频繁 接下来我们将学习一些基本的SELECT查询语句 一、SELECT语句的通用语法 在MySQL数据库中&#xff0c;使用SELECT语句可以查询数据…...

【啥都生】分类项目中的模型搭建代码解析

def build_model(cfg):if isinstance(cfg, list):modules [eval(cfg_.pop("type"))(**cfg_) for cfg_ in cfg]return Sequential(*modules)else:return eval(cfg.pop("type"))(**cfg)b站up啥都生维护的分类项目 这段代码的功能是完成模型搭建&#xff0c;…...

Ubuntu出现了内部错误

使用的Ubuntu版本是18.04&#xff0c;使用的时候弹出对话框说出现了内部错误&#xff0c;好奇是哪里出现了错误&#xff0c;查找了一下解决的办法&#xff0c;记录一下。 参考解决方案&#xff1a;ubantu出现了内部错误 一旦程序崩溃过一次&#xff0c;就会生成一个.crash文件…...

Stable Diffusion AI绘画初学者指南【概述、云端环境搭建】

概述、云端环境搭建 Stable Diffusion 是什么、能干啥&#xff1f; 是一种基于深度学习的图像处理技术&#xff0c;可以生成高质量的图像。它可以在不需要真实图像的情况下&#xff0c;通过文字描述来生成逼真的图像。 可以对图像进行修复、超分辨率转换&#xff0c;将低分辨…...

小程序动态隐藏分享按钮

// 禁用分享 wx.hideShareMenu({menus: [shareAppMessage, shareTimeline] })// 显示分享 wx.showShareMenu({withShareTicket: true,menus: [shareAppMessage, shareTimeline] })//私密消息 wx.updateShareMenu({isPrivateMessage: true, })...

语音合成是什么?如何进行语音合成TTS数据采集?

我们在上一篇讲到语音数据采集分为常见的两种语音数据采集类型&#xff0c;一个是语音识别数据&#xff08;ASR&#xff09;&#xff0c;另一个是语音合成&#xff08;TTS&#xff09;。这一期中&#xff0c;我们将介绍语音合成技术是什么&#xff0c;如何采集语音合成数据和制…...

实用干货!一文读懂Salesforce中6种数据关系类型!

Salesforce中对象之间的数据关系可能是一个棘手的话题。对于创建自定义对象的业务场景&#xff0c;需要决定使用哪些关系类型来扩展Salesforce数据模型。 01 查找关系 查找关系&#xff08;Lookup Relationships&#xff09;是一种松散耦合&#xff08;loosely coupled&…...

Spring引入外部数据源

spring-dataSource.xml 数据源配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"h…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...