最近做个项目 字段 超级多 但是 大多数功能有很多相同的字段,比如a.jsp 里面有 名字 性别 等等,b.jsp也有相同字段需国际化 ,页面又很多
而我做功能又没有国际化,但是发现同事又做了部分国际化了,我就想能不能拿过来用 但是 字段太多 一个个copy 真是要累死人。于是 我就想到了写个小程序来 比对国际化文件和jsp文件相同的中文字段,然后用国际化中的标签进行替换。于是花了点时间做了这个小工具(其实我还在想是否能做到全自动国际化,想过利用拼音做标签,首先搜索jsp中所有中文,然后替换到国际化文件中nihao=你好,这样 但是貌似一般都不用拼音,似乎不太好。所以作罢,如果考虑翻译成英文,就必须找google翻译api或者其他了 需要在线翻译,有兴趣的朋友可以试试。也算创新吧 哈哈)。(有部分代码参考网上的资料 ,如有知识产权问题,请联系我 将删除)
public class i18nJspConvert {
public static void main(String[] args) throws Exception {
String msg_zh_cn = "F:\\workspace\\proj\\i18n\\msg_zh_CN.properties";
File ff = new File("F:\\workspace\\proj\\web\\WEB-INF\\jsp\\invoice\\add");
List<String> l = new ArrayList<String>();
l = printAllFile(ff, l);
System.out.println(l);
for (int i = 0; i < l.size(); i++) {
runConvert(msg_zh_cn, l.get(i));
}
}
public static void runConvert(String msg_zh_cn, String con_jsp) throws Exception {
File conJ = new File(con_jsp);
File f = new File(msg_zh_cn);
//第一步打开国际化文件如msg_zh_cn.properties
StringBuffer sb = new StringBuffer();
if (f.exists() && conJ.exists()) {
// System.out.print(stringInMsg("新增", f));
FileReader fr = new FileReader(conJ);
List<String> msgList = new ArrayList<String>();
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
while (line != null)
{
System.out.println(line);
String tempx = replaceToI18nLine(line, f);
sb.append(tempx + "\n");
line = br.readLine();
}
br.close();
fr.close();
}
System.out.println(sb.toString());
//String s = "Java语言";
writeToOldFile(sb.toString(), conJ);
}
public static List<String> printAllFile(File f, List<String> l) {
//打印当前文件名
if (f.getName().endsWith(".jsp")) {
System.out.println(f.getAbsolutePath());
l.add(f.getAbsolutePath());
}
//是否是文件夹
if (f.isDirectory()) {
//获得该文件夹下所有子文件和子文件夹
File[] f1 = f.listFiles();
//循环处理每个对象
int len = f1.length;
for (int i = 0; i < len; i++) {
//递归调用,处理每个文件对象
printAllFile(f1[i], l);
}
}
return l;
}
public static void writeToOldFile(String sb, File conJ) {
//声明流对象
FileOutputStream fos = null;
try {
//创建流对象
fos = new FileOutputStream(conJ);
//转换为byte数组
byte[] b1 = sb.toString().getBytes();
fos.write(b1);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (Exception e) {
}
}
}
/**
* param str line String每一行的字符串
* param f 国际化文件
*/
public static String replaceToI18nLine(String str, File f) throws Exception {
// String str = "23423432423>新增<23423432423>新增<23423432423>你號你好<";
String regex = ">[\u4e00-\u9fa5]*<";
System.out.println(str.matches(regex));
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
List<String> listMacher = new ArrayList<String>();
while (m.find()) {
System.out.print(m.group(0));
listMacher.add(m.group(0));
}
for (int i = 0; i < listMacher.size(); i++) {
String temp = listMacher.get(i);
temp = temp.replace(">", "");
temp = temp.replace("<", "");
String r = stringInMsg(temp, f);
if (r != null && !r.trim().equals("")) {
System.out.println("这些文字在国际化文件中的表示式:" + r);
str = str.replaceAll(temp, "<s:text name=\"" + r.trim() + "\" />");
}
}
System.out.print("str:" + str);
return str;
}
public static String stringInMsg(String chinese, File f) throws Exception {
FileReader fr = new FileReader(f);
List<String> msgList = new ArrayList<String>();
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
String returns = "";
while (line != null)
{
//System.out.println(decodeUnicode(line));
String temp = decodeUnicode(line);
String[] teA = temp.split("=");
for (int i = 0; teA.length == 2 && i < teA.length; i++) {
if (teA[1].trim().equals(chinese)) {
returns = teA[0];
}
}
//msgList.add(decodeUnicode(line));
line = br.readLine();
}
br.close();
fr.close();
return returns;
}
/**
* 一行行读取文件
*/
public void readLineFile(String filePath, String fileName) throws IOException
{
FileReader fr = new FileReader(filePath + fileName);
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
while (line != null)
{
System.out.println(decodeUnicode(line));
line = br.readLine();
}
br.close();
fr.close();
}
public static String decodeUnicode(String theString) {
char aChar;
int len = theString.length();
StringBuffer outBuffer = new StringBuffer(len);
for (int x = 0; x < len; ) {
aChar = theString.charAt(x++);
if (aChar == '\\') {
aChar = theString.charAt(x++);
if (aChar == 'u') {
int value = 0;
for (int i = 0; i < 4; i++) {
aChar = theString.charAt(x++);
switch (aChar) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value << 4) + aChar - '0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value << 4) + 10 + aChar - 'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value << 4) + 10 + aChar - 'A';
break;
default:
throw new IllegalArgumentException(
"Malformed encoding.");
}
}
outBuffer.append((char) value);
} else {
if (aChar == 't') {
aChar = '\t';
} else if (aChar == 'r') {
aChar = '\r';
} else if (aChar == 'n') {
aChar = '\n';
} else if (aChar == 'f') {
aChar = '\f';
}
outBuffer.append(aChar);
}
} else {
outBuffer.append(aChar);
}
}
return outBuffer.toString();
}
}
相关推荐
窗口置顶快捷隐藏小工具(偷懒神器),把视频或网页缩小后放到桌面一角,ctrl + Q 隐藏,Ctrl + E 显示,上班看片小工具
总的来说,这款虚拟化多桌面软件工具展示了C++在系统级编程中的强大能力,同时也体现了虚拟化技术在提升用户体验和工作效率方面的价值。无论是对初级开发者还是经验丰富的程序员,这个工具及其源代码都能提供宝贵的...
- **持续集成与持续部署(CI/CD)**:通过设置CI/CD管道来自动化测试和部署过程,确保每次提交代码后都能及时发现并解决问题。 - **数据库管理**:利用SQL查询优化、索引策略等技术提升数据处理效率,减轻数据库维护...
Excel的宏和VBA编程可以帮助我们创建自定义函数和工具,实现重复任务的自动化。例如,通过录制宏,我们可以将一套操作步骤转化为可执行的代码,以后只需一键即可完成整个过程。示例文档可能包含一些基础的宏编写和...
不跳转页面分页工具,依赖于jQuery,默认样式依赖于bootstrap3.0,通过最大行数和显示 行数计算出分页总数,通过设置的样式结构决定前台展示出现的样式,目前存在两种展出模式,可通过定义扩展方式,增加展出样式。
“机械设计制造及自动化导论论文” 机械设计制造及其自动化专业导论,机械发展与专业方向。 机械发展史:机械是机器与机构的总称,是能帮人降低工作难度或省力的工具装置。机械被发明和存在的意义就是解放人的生产...
Office自动化是指利用软件工具和编程技术,对办公软件中的任务进行自动化处理,以提高工作效率,减少重复劳动。通常,自动化操作包括数据处理、格式化、分析、报告生成、数据导入导出等功能。在办公自动化领域,微软...
想偷懒从网上下载同类工具,却都有毒,真TMD不厚道,被逼自行开发,使用C#。 文件说明: ServerAutoShutDown.exe---服务程序 SRVINSTW.EXE--服务安装工具,使用方法请网上查 Config.ini--配置文件 IP---要检查的IP...
在财务管理中,Excel是一款不可或缺的工具,其强大的计算能力、数据管理和分析功能使得它成为财务专业人士的首选。《偷懒的技术:打造财务Excel达人》示例文档提供了许多实用的Excel技巧,帮助财务人员提高工作效率...
封U盘的注册表文件,只封大容量的U盘,usb键盘鼠标不会被封 想偷懒的人可以下下
就是“注册机偷懒写法”四篇博客的源码,发出来赚点积分,以前赞的积分都被清掉了
喜欢偷懒,对于一个码农来说,能够偷懒,并且在不影响项目质量的情况下,是不容易的。 这个叫不上框架,只能说是一个工具类。 框架大小在400KB 包括源码在600KB 里面分为两个架包一个是有源码的 这样就直接可以查看...
很好用的子网掩码计算器,呵呵 针对一些网络工程师偷懒使用!
自动化撰写渗透报告PT报告自动化撰写渗透报告很久以前偷懒写的东西,曾经想了各种方案最后还是用了php+copy。python版本基本不怎么能用,先迁到小分支埋坑。 原生php写的,安全性很低,只建议在本地或者内网使用。...
桌签生成工具是我们生活中经常会使用到的一个小软件,事务繁多或者...于是,想“偷懒”的人打算编写一个小工具来代替人工。 使用方法 1、首先将与会人员的名字整理成文档 2、采用一行一个的方式导入到工具中 3、点击
超级单片机工具,本程序是作者在自己工作需要的基础上,为了方便使用,提高工作效率(实际上是为了偷懒:)),将一些经常不经常使用的功能做成工具,最后集成到一块儿组成的。 放到网上本来是想让那些跟自己一样小米...
好吧,没事对压缩包分析了下,嗯,原来把一些后缀隐藏掉了,这样偷懒的?!!研究了皮毛的bat脚本,写了一个方便的工具。运行一下,问题解决! 此工具Bgk编码,可txt编写,下载后修改一下功能大大的,就看你会不会...
另外就是设置一下[自动化配置] : 看个人需要设置吧; 这些功能相信不用详细介绍了, 一看大家都懂了. PS: 程序里增加了一个自动隐藏自身程序的功能,所以会被一些杀软拦截, 使用注意一下,信任通过就行了,绝对无毒...
这个实验是关于在Linux环境下使用C语言编写和编译一个简单的程序,该程序包含了两个工具函数库mytool1和mytool2。这个实验的核心知识点包括: 1. **头文件和预处理器指令**:在`mytool1.h`和`mytool2.h`中,可以...