最近做个项目 字段 超级多 但是 大多数功能有很多相同的字段,比如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 显示,上班看片小工具
开启虚拟化桌面后,自动生成10个电脑桌面。使用ctrl+alt+0、ctrl+alt+1-9,快速切换到不同虚拟桌面。提供成品和源码。
不跳转页面分页工具,依赖于jQuery,默认样式依赖于bootstrap3.0,通过最大行数和显示 行数计算出分页总数,通过设置的样式结构决定前台展示出现的样式,目前存在两种展出模式,可通过定义扩展方式,增加展出样式。
“偷懒”的技术:打造财务Excel达人 pdf
想偷懒从网上下载同类工具,却都有毒,真TMD不厚道,被逼自行开发,使用C#。 文件说明: ServerAutoShutDown.exe---服务程序 SRVINSTW.EXE--服务安装工具,使用方法请网上查 Config.ini--配置文件 IP---要检查的IP...
封U盘的注册表文件,只封大容量的U盘,usb键盘鼠标不会被封 想偷懒的人可以下下
就是“注册机偷懒写法”四篇博客的源码,发出来赚点积分,以前赞的积分都被清掉了
喜欢偷懒,对于一个码农来说,能够偷懒,并且在不影响项目质量的情况下,是不容易的。 这个叫不上框架,只能说是一个工具类。 框架大小在400KB 包括源码在600KB 里面分为两个架包一个是有源码的 这样就直接可以查看...
做一个会偷懒的程序员
很好用的子网掩码计算器,呵呵 针对一些网络工程师偷懒使用!
桌签生成工具是我们生活中经常会使用到的一个小软件,事务繁多或者...于是,想“偷懒”的人打算编写一个小工具来代替人工。 使用方法 1、首先将与会人员的名字整理成文档 2、采用一行一个的方式导入到工具中 3、点击
超级单片机工具,本程序是作者在自己工作需要的基础上,为了方便使用,提高工作效率(实际上是为了偷懒:)),将一些经常不经常使用的功能做成工具,最后集成到一块儿组成的。 放到网上本来是想让那些跟自己一样小米...
好吧,没事对压缩包分析了下,嗯,原来把一些后缀隐藏掉了,这样偷懒的?!!研究了皮毛的bat脚本,写了一个方便的工具。运行一下,问题解决! 此工具Bgk编码,可txt编写,下载后修改一下功能大大的,就看你会不会...
另外就是设置一下[自动化配置] : 看个人需要设置吧; 这些功能相信不用详细介绍了, 一看大家都懂了. PS: 程序里增加了一个自动隐藏自身程序的功能,所以会被一些杀软拦截, 使用注意一下,信任通过就行了,绝对无毒...
附赠Database.asp程序 该程序是我以前做的一个只适合ASP数据库操作的自动生成代码的偷懒工具 http://***/TableList.asp 通过该页面演示添加 修改 删除 程序免费开源 任意使用 修改请注明原作者 数据库表结构管理...
简易计算器,windows制作,c#编程,仅供参考,不要偷懒哦!!!
mybatis代码自动生成工具,偷懒的利器。
自动循环打印kernel的log,方便偷懒操作,提高效率。 平常在研发的时候,需要打印log,重启机器,再打印log,纯手工操作略显麻烦,所以专门写了一个脚本
易语言偷懒实现md5加密源码,偷懒实现md5加密,md5