JSP项目国际化词条统计

news/2025/2/11 20:47:30/

国际化字条匹配并导出为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手已抽筋


http://www.ppmy.cn/news/997618.html

相关文章

【100天精通python】Day23:正则表达式,基本语法与re模块详解示例

目录 专栏导读 1 正则表达式概述 2 正则表达式语法 2.1 正则表达式语法元素 2.2 正则表达式的分组操作 3 re 模块详解与示例 4 正则表达式修饰符 专栏导读 专栏订阅地址&#xff1a;https://blog.csdn.net/qq_35831906/category_12375510.html 1 正则表达式概述 python 的…

CGAL 点云Alpha-Shape曲面重建算法

文章目录 一、简介二、相关参数三、实现代码四、实现效果参考资料一、简介 在数学上, a l p h a − s h a p e alpha-shape a

高并发与性能优化的神奇之旅

作为公司的架构师或者程序员&#xff0c;你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢&#xff1f;笔者在出道那会为此是吃尽了苦头的&#xff0c;不过也得感谢这段苦&#xff0c;让笔者从头到尾去探索&#xff0c;找寻解决之法。 目录 第一站&…

Metric3D:Towards Zero-shot Metric 3D Prediction from A Single Image

参考代码&#xff1a;Metric3D 介绍 在如MiDas、LeReS这些文章中对于来源不同的深度数据集使用归一化深度作为学习目标&#xff0c;则在网络学习的过程中就天然失去了对真实深度和物体尺寸的度量能力。而这篇文章比较明确地指出了影响深度估计尺度变化大的因素就是焦距 f f f…

JavaScript 简单实现观察者模式和发布-订阅模式

JavaScript 简单实现观察者模式和发布-订阅模式 1. 观察者模式1.1 什么是观察者模式1.2 代码实现 2. 发布-订阅模式2.1 什么是发布-订阅模式2.2 代码实现2.2.1 基础版2.2.2 取消订阅2.2.3 订阅一次 1. 观察者模式 1.1 什么是观察者模式 概念&#xff1a;观察者模式定义对象间…

使用css和js给按钮添加微交互的几种方式

使用css和js给按钮添加微交互的几种方式 在现实世界中&#xff0c;当我们轻弹或按下某些东西时&#xff0c;它们会发出咔嗒声&#xff0c;例如电灯开关。有些东西会亮起或发出蜂鸣声&#xff0c;这些响应都是“微交互”&#xff0c;让我们知道我们何时成功完成了某件事。在本文…

使用Vue.js和Rust构建高性能的物联网应用

物联网(IoT)应用是现代技术的重要组成部分&#xff0c;它们可以在各种场景中&#xff08;例如智能家居&#xff0c;工业自动化等&#xff09;提供无缝的自动化解决方案。在这篇文章中&#xff0c;我们将探讨如何使用Vue.js和Rust构建高性能的物联网应用。 1. 为什么选择Vue.js…

想写几个上位机,是选择学c#还是 c++ qt呢?

C#基本也就上位机开发开发&#xff0c;另外做做日常用的小工具很方便。 结合PLC&#xff0c;以太网做上位机&#xff0c;这个基本上控制这块都比较有需求。 另外我们用C#也做一些工具的二次开发&#xff0c;感觉还行。 C用qt框架其实学习起来可能稍微复杂些&#xff0c;但是…