【转载】粤语翻译工具
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
/**
* 粤语转换工具
* @author tiger
* @date 2011-04-13
*
* 选中上面框中的词语,可同步在下框中显示出翻译出的词语。
*/
public class Yueyu {
private static List<String> putongs = new ArrayList<String>();
private static List<String> yues = new ArrayList<String>();
static{
add("了", "左");
add("不", "唔");
add("是", "系");
add("说", "话");
add("想念", "挂住");
add("不是", "唔系");
add("说话", "讲野");
String yueyu_putonghua = "我(我) 你(你) 佢(他) 我哋(我们) 你哋(你们) 佢哋(他们) 人哋(人家) " +
"呢度(这里) 嗰度(那里) 边度(哪里) 呢(这) 嗰(那) 咁样(这样、那样)点解(为什么) 第日(改天) " +
"第次(下次)乜嘢(什么) 乜(什么) 几多(多少) 边(哪) 咁好(这么好)阿爸(爸爸) 阿妈(妈妈) 阿哥(哥哥) " +
"阿嫂(嫂嫂) 阿爷(爷爷) 阿嫲(奶奶) 阿公(外公) 阿婆(外婆、老婆婆) 阿叔(叔叔) 老豆(爸爸)! 老妈子(妈妈) " +
"家姐(姐姐)大佬(哥哥) 细佬(弟弟) 心抱(媳妇) 舅父(舅舅) 孙(孙子) 仔仔(儿子) 女女(女儿) 契爷(干爹) 契仔(干儿子) 寡佬(单身汉) " +
"仔(儿子) 女(女儿) 后底乸(继母) 太子爷(少东家) 契弟(王八蛋) 老坑(老头) 老嘢(老东西,老家伙) 老姑婆(老处女) 基老(男同性恋者) 老细(老板) " +
"老千(骗子) 后生仔(年轻小伙子) 后生女(年轻姑娘) 靓仔(漂亮的小伙子) 靓女(漂亮的姑娘) 细路(小孩) 细蚊仔(小孩) " +
"臊虾(婴儿) 马仔(打手) 事头婆(老板娘)返工(上班) 收工(下班) 揾食(谋生) 人工(工钱) 出粮(发工资) 搞掂(搞妥当) 搞弯(弄糟糕) " +
"就手(顺利) 捱夜(熬夜) 空姐(飞机女服务员) 钟点工(计时工) 揾工(找工作) 做嘢(干活) 捞边行(搞什么行业) 一脚踢(一人承担) 轮更(轮班) " +
"看更(看门) 起屋(盖房子) 抓车(驾驶汽车)熟手(老练) 车衫(缝衣服) 夹手夹脚(一起动手) 执头执尾(收拾零碎的东西) 搏命(拼命) 癐(累) " +
"差池(差错) 撞板(碰钉子) 松人(溜走) 走人(溜走) 炒鱿鱼(解雇) 开OT(加班) 秘捞(兼职) 手信(小礼物) 人客(客人) 生埗(陌生、生疏) " +
"老友记(老朋友) 仇口(仇人) 托大脚(拍马屁) 危(求) 畀面(给面子) 制(肯) 得闲(有空) 冇几何(不常) 冇相干(没关系) 唔觉意(不留心) " +
"唔话得(没说的) 倾(谈) 倾偈(聊天) 早晨(早上好) 早唞(晚安) 揾人(找人) 拍拖(谈恋爱) 挂住(想念) 隔篱(隔壁) 掟煲(恋人分手) " +
"好夹(很合得来) 探(拜访) 讲笑(开玩笑) 羞家(丢脸) 起身(起床) 着(穿) 除(脱) 浪口(漱口) 飞发(理发) 电发(烫发) " +
"洗面(洗脸) 屙屎(大便) 屙尿(小便)闩门(关门) 熄灯(关灯) 水喉(水龙头) 瞓觉(睡觉) 食(吃) 食晏(吃午餐) 食烟(抽烟) " +
"滚水(开水) 煲(煮) 焗(焖) 饮胜(干杯) 颈渴(口渴) 餸(下饭的菜) 腍(软) 霄夜(夜宵) 饮(渴) 台(桌子) 梳化(沙发) 雪柜(冰箱) " +
"傢俬(家具) 皮箧(皮箱) 夹万(保险箱) 刀仔(小刀) 花樽(花瓶) 香枧(香皂) 镬(锅) 咪(麦克风) 插苏(插座) 火水(煤油) 遮(伞) 地拖(拖把) " +
"电心(电池) 洋烛(蜡烛) 花洒(莲蓬头) 壳(勺子) 番枧(肥皂) 扫把(扫帚) 匙羹(小勺子) 褛(外套) 大褛(大衣) 衫(衣服) " +
"T恤(针织或棉质上衣) 裤(裤子) 鞋(鞋子) 底衫(内衣) 底裤(内裤) 高争鞋(高跟鞋) 领太(领带) 荷包(钱包) 唇膏(口红)" +
"头壳(脑袋) 头皮(头屑) 面珠墩(脸蛋儿) 酒凹(酒窝) 下爬(下巴) 眼(眼睛) 眼眉(眉毛) 眼核(眼珠) 耳仔(耳朵) 耳屎(耳垢) 大牙(槽牙) " +
"鼻哥(鼻子) 鼻哥窿(鼻孔)身子(身体) 心口(胸口) 膊头(肩膀) 毛管(毛孔)罗柚(屁股) 手板(手掌) 手瓜(胳膊) 脚(脚、腿) 背脊(脊背) " +
"尾龙骨(尾骨) 肚腩(小肚子) 睇医生(看病) 驳骨(接骨头) 联针(缝针) " +
"埋口(合口) 执药(抓药) 燥火(上火) 好翻(好了) 唔精神(不舒服) 冻亲(着凉) 头赤(头痛) 打冷震(发抖) 打噎(打嗝) 呕血(吐血) 浊亲(被水呛着)";
String yueyu_putonghua_2 =
"岳高头(仰起头)拧头(摇头) 目及 geb6(盯)眯méi1埋眼(闭眼)瞌heb3(闭)啜(嘬,吻)噍(嚼) 唞气(呼吸) 渺嘴(撇嘴) 擘大口(张大口)" +
"喐手(动手)笃(戳) 笠(套) 弗fit1(鞭打)抰yêng2(抖)揞(蒙,捂)搣mit1(掰)摱man1(攀,扳)掹meng1(拔)豆(碰,摸)掟déng3(扔)抠(掺杂)" +
"抠乱(搞混了) 抄cao3(搜,翻)挤(放)搦(拿) 捽(揉) 掴(用掌打) 省(擦) 吉(扎,刺)批(削)濑(洒) 枳zed1入去(塞进去)走(跑)走夹唔唞(拼命走) " +
"标(冲)坎头埋墙(把头撞在墙上,形容人自讨苦吃)企(站) 嗌(叫,喊)嗌交(吵架) 撩(逗)单单打打(说风凉话,含沙射影,讽刺攻击)诈假ga1意yi1(假装)诈娇(撒娇)" +
"扭拧(扭捏) 睇衰(看不起,看扁) 索气(吸气)揩油、索油(占便宜)攞嚟衰(自讨苦吃) 储储埋埋(攒起来)打交(打架) 打横(横着)打掂(竖着) 打底(垫底)打赤脚(赤着脚)" +
" 打大赤肋(赤着上身)折堕(做孽,遭遇悲惨)惊géng1(害怕)发姣(卖弄风骚)锡(疼爱)孭(背) 得人惊(令人害怕) 得个吉(一场空) 厄水(骗钱) 邓(替) " +
"抵(值得) " +
"翻嚟(回来) 打个冷(转一回) 骑呢(古怪) 揾笨(占人便宜) 典地(撒赖) 碌(滚动) 睇水(把风) 大洗(花钱过度)";
String yueyu_putonghua_3 = "钟意(喜欢) 爱锡(疼爱)快活(快乐)得戚(得意洋洋) 嬲nao1(生气)发嬲(生气)笑骑骑(笑哈哈) 笑口噬噬(张开嘴笑)" +
"笑口吟吟(笑容满面)莲子蓉面口(比喻笑容满面)偷笑(暗笑)熠熟狗头(形容人张开嘴笑,像煮熟的狗头一样)火起(发火)火滚(恼火) 一把火(一肚子火)" +
"嬲爆爆(气冲冲)眼崛崛(瞪大眼睛,表示不满或生气) 崛(瞪)吹胀(1气坏,2无可奈何)肉赤(心疼)忧心(担心) 心淡(心灰意冷) 唔忿气(不服气)闭翳(发愁) " +
"喊(哭)喊苦喊忽(哭哭啼啼)苦瓜咁嘅面(像苦瓜那样拉长着脸,比喻愁眉苦脸)谷气(憋气)欢喜(喜欢) 乞人憎(令人讨厌)心思思(老惦念着)心挂挂(牵肠挂肚)" +
" 心水(心意) 愿(愿意)情愿(宁愿)心多多(三心两意)心喐喐(指动了心想做某事,但还没有行动)特登(故意) 爱(要)激气(心里有气) 专登(特意)失魂(慌张,精神恍惚)" +
"失魂鱼(形容人惊慌失措如受惊的鱼)心息(死心) 想话(打算)谂住(打算,预计) 心罨(心里悲伤难受)" +
"心甘(甘心) 乍乍帝(装模作样) 拾下拾下(傻乎乎) 戆居(呆,傻,笨) 凼(哄) 蕉积(嚣张,气焰高涨) 个心嗱住(心里酸溜溜) ";
String yueyu_putonghua_4 = "乜(什么) 嘅(的) 嬲(生气)咁(如此) 哋(们) 睇(看) 啲(那些) 冇(没有) 惗(想) 嘎(啊) 咩(什么) 冧(陶醉) 波(球) 雪条(冰棒)" +
"啱啱(刚刚,刚好) 啱先(刚才) 正话(刚才) 凑啱(恰好) 不溜(一向) 先至(才) 就嚟(就要) 经已(已经) 卒之(终于) 终归(终究) " +
"终须(终究) 仲(还) 鬼咁(那么) 十分之(十分) 极之(极) 相当之(相当) 非常之(非常) 稍为(稍微) 净(光,只有) 净喺(只是,光是) " +
"差唔多(差不多) 连气(一连) 亦(也) 又试(又) 但凡(凡是) 逢喺(凡是) 咪mei2(别) 咪住(! 先别) 唔使(不用) 唔好(不好) 唔通(难道) 实(一定)" +
" 奉旨(肯定) 查实(其实) 是必(必定) 梗(肯定) 一于(就,表示下定决心去做某事) 千祈(千万) 专登(专门,故意) 特登(特地) 好在(幸亏) 直头(直接) " +
"直情(简直,根本) 同埋(和,同) 一喺(要么) 事关(因为) 固然之(固然) 固之然(固然) " +
"之不过(不过) 即管(尽管) 唔单只(不但) 不特止(不仅仅) 定(还是) 抑或(或者) 于是乎(于是) 然之后(然后) " +
"同(和) 为咗(为了) 啫(罢了) 之嘛(罢了) 啩(吧) " ;
add(yueyu_putonghua);
add(yueyu_putonghua_2);
add(yueyu_putonghua_3);
add(yueyu_putonghua_4);
}
/**
* 添加字库
* @param putonghua
* @param yueyu
*/
private static void add(String putonghua, String yueyu) {
putongs.add(putonghua);
yues.add(yueyu);
}
/**
* 添加字库
* @param str
*/
private static void add(String str) {
String temp;
String putonghua = "", yueyu = "";
boolean isPutong = false;
for (int i = 0; i < str.length(); i++) {
temp = str.substring(i, i + 1);
if(temp.equals(" "))
{
continue;
}
if(temp.equals("("))
{
isPutong = true;
}
else if(temp.equals(")"))
{
isPutong = false;
putongs.add(putonghua);
yues.add(yueyu);
System.out.println(putonghua + " , " + yueyu);
putonghua = "";
yueyu = "";
}
else{
if(isPutong)
{
putonghua += temp;
}else{
yueyu += temp;
}
}
}
}
/**
* 根据粤语词得到对应普通话
* @param yueyu
* @return
*/
private static String getPutonghua(String yueyu)
{
String result = yueyu;
for (int i = 0; i < yues.size(); i++) {
if(yues.get(i).equals(yueyu))
{
result = putongs.get(i);
}
}
return result;
}
/**
* 根据普通话词语得到对应粤语
* @param putonghua
* @return
*/
private static String getYueyu(String putonghua)
{
String result = putonghua;
for (int i = 0; i < putongs.size(); i++) {
if(putongs.get(i).equals(putonghua))
{
result = yues.get(i);
}
}
return result;
}
/**
* 普通话翻译为粤语
*
* 先判断两个字,尽量翻译之。如果翻译没有变化,再判断一个字。
*
* @param str
*/
private static String translate(String str) {
StringBuffer result = new StringBuffer();
String temp , yueyu;
int j;
int length = str.length();
for (int i = 0; i < length; i++) {
temp = str.substring(i, Math.min(i + 2, length));
yueyu = getYueyu(temp);
j = 1;
if(yueyu.equals(temp))
{
temp = str.substring(i, i + 1);
yueyu = getYueyu(temp);
j = 0;
}
i += j;
result.append(yueyu);
}
return result.toString();
}
/**
* 粤语翻译为普通话
*
* 先判断两个字,尽量翻译之。如果翻译没有变化,再判断一个字。
*
* @param str
*/
private static String translate2(String str) {
StringBuffer result = new StringBuffer();
String temp , putong;
int j;
int length = str.length();
for (int i = 0; i < length; i++) {
temp = str.substring(i, Math.min(i + 2, length));
putong = getPutonghua(temp);
j = 1;
if(putong.equals(temp))
{
temp = str.substring(i, i + 1);
putong = getPutonghua(temp);
j = 0;
}
i += j;
result.append(putong);
}
return result.toString();
}
class transToPutong implements ActionListener{
JTextArea area1, area2;
public transToPutong(JTextArea area1, JTextArea area2) {
this.area1 = area1;
this.area2 = area2;
}
@Override
public void actionPerformed(ActionEvent e) {
String text = area1.getText();
area2.setText(translate2(text));
isTranslateYueyu = false;
}
}
class transToYueyu implements ActionListener{
JTextArea area1, area2;
public transToYueyu(JTextArea area1, JTextArea area2) {
this.area1 = area1;
this.area2 = area2;
}
@Override
public void actionPerformed(ActionEvent e) {
String text = area1.getText();
area2.setText(translate(text));
isTranslateYueyu = true;
}
}
boolean isTranslateYueyu ;
class areaAction1 extends MouseAdapter{
JTextArea area1, area2;
public areaAction1(JTextArea area1, JTextArea area2) {
this.area1 = area1;
this.area2 = area2;
}
@Override
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
String text = area1.getSelectedText();
String text2 = area2.getText();
if(text == null || text.trim().equals("") || text2 == null || text2.trim().equals(""))
{
return;
}
String transText = "";
if(isTranslateYueyu)
{
transText = getYueyu(text);
}else{
transText = getPutonghua(text);
}
int index = text2.indexOf(transText);
if(index != -1)
{
area2.requestFocus();
area2.setSelectionColor(Color.black);
area2.setSelectedTextColor(Color.GREEN);
area2.setSelectionStart(index);
area2.setSelectionEnd(index + transText.length());
area2.repaint();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
Yueyu y = new Yueyu();
JFrame frame = new JFrame("粤语翻译");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JPanel textPanel = new JPanel();
textPanel.setLayout(new GridLayout(2, 1));
JTextArea area1 = new JTextArea(6, 36);
area1.setFont(new Font("Serif",Font.PLAIN,20));
area1.setBorder(new TitledBorder("输入要翻译的文字:"));
textPanel.add(area1);
JTextArea area2 = new JTextArea(6, 36);
area2.setFont(new Font("Serif",Font.PLAIN,20));
area2.setBorder(new TitledBorder("翻译后的文字:"));
textPanel.add(area2);
panel.add(textPanel, BorderLayout.CENTER);
area1.addMouseListener(y.new areaAction1(area1, area2));
JPanel ctrlPanel = new JPanel();
ctrlPanel.setLayout(new GridLayout(2, 1, 0, 6));
JButton btn1 = new JButton("转为粤语");
ctrlPanel.add(btn1);
JButton btn2 = new JButton("转为普通话");
ctrlPanel.add(btn2);
panel.add(ctrlPanel, BorderLayout.EAST);
btn1.addActionListener(y. new transToYueyu(area1, area2));
btn2.addActionListener(y. new transToPutong(area1, area2));
frame.getContentPane().add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
转载地址:http://www.cnblogs.com/chaohi/archive/2011/05/31/2064099.html
编辑器加载中...