flash与游戏笔记:国际化 (3)

来源:互联网 发布:mac ps中的3d功能在哪 编辑:程序博客网 时间:2024/06/07 01:19

          在过年的时候,在工作为了抽出中文替换就使用正则,方便一下自己的工作。在同事的指导下,遇到一些比较特殊的情况,例如一个as类里面含有相同的中文,而之前所写的会出现重复,所以在显示的时候,也可以加入一些判断。而后续,同事又有一些比较强烈的要求就是把替换好的中文对应的常量 也顺便替换到as类文件当中。这个做法是可以的,过去一些比较牛b的同事做法更加暴力,遇到大量中文文件的时候,把整个项目的含有中文的as类文件全部替换成对应的自定义的常量。过去在做国际版本的时候,会遇到这些情况,虽然还没正式参与到那时候的开发当中,不过在他们的工作中,也了解了不少和学到一些简单的做法。而下面这个则是自己用来帮助自己的一种小工具。纯粹自娱自乐。

 

import flash.text.TextField;import flash.display.Sprite;import flash.events.MouseEvent;import flash.filters.GlowFilter;import flash.text.TextFieldType;import fl.controls.*;import flash.utils.Dictionary;var regExp:RegExp = /\".*?\"/ig; //匹配双引号内容var myPattern:RegExp=/[\\u4e00-\\u9fa5]+/; //匹配中文//输入文本var inputTxt:TextField=new TextField();inputTxt.border = true;inputTxt.width = 980;inputTxt.height = 250;inputTxt.type = TextFieldType.INPUT;inputTxt.x = 10;inputTxt.y = 50;inputTxt.multiline = true;inputTxt.wordWrap = true;addChild(inputTxt); var msgTxt:TextField=new TextField();msgTxt.border = true;msgTxt.width = 300;msgTxt.height = 250;msgTxt.type = TextFieldType.DYNAMIC;msgTxt.x = 10;msgTxt.y=320;msgTxt.multiline = true;msgTxt.wordWrap = true;addChild(msgTxt); var codeTxt:TextField=new TextField();codeTxt.border = true;codeTxt.width = 670;codeTxt.height = 250;codeTxt.type = TextFieldType.DYNAMIC;codeTxt.x = 320;codeTxt.y=320;codeTxt.multiline = true;codeTxt.wordWrap = true;addChild(codeTxt); var tipTxt:TextField=new TextField();tipTxt.border = true;tipTxt.width = 100;tipTxt.height = 20;tipTxt.type = TextFieldType.INPUT;tipTxt.x = 50;tipTxt.y=600;tipTxt.text="TIPS";addChild(tipTxt);//创建按钮var btn:Button=new Button();btn.label="创建";btn.addEventListener(MouseEvent.CLICK,onCover);btn.x = 300;btn.y = 600;btn.buttonMode = true;btn.filters = [new GlowFilter(0xcccccc)];addChild(btn);var checkBox:CheckBox=new CheckBox();checkBox.x=160;checkBox.y=600;checkBox.label="是否添加注释";addChild(checkBox);function onCover(event:MouseEvent):void{if (inputTxt.text){selectChinese(inputTxt.text);}}//抽出双引号字符function selectChinese(str:String):void{var tempStr:String=str;var strArray:Array = str.split(";");var codeStr:String = "";var n:int = 0;var temp:Array=[];var myValue:Array=[];var data:Array=[];for each (var str:String in strArray){var result:Object = regExp.exec(str);while (result != null){var  chineseStr:String=result.toString();if (result && myPattern.test(chineseStr)){// 检测中文 //trace(result);var index:int=temp.indexOf(chineseStr);if(index==-1){ temp.push(chineseStr); myValue.push("LangModules."+tipTxt.text + n); if(checkBox.selected)  {  var tipStr:String="/**"+ result.toString()+"*/"+"\n\n";  codeStr+=tipStr;  }   codeStr +=  "public static const"+ tipTxt.text + n + ":String=" + result.toString() + ";\n";     data.push({key:chineseStr,value:"LangModules."+tipTxt.text + n});     n++;}else{  data.push({key:chineseStr,value:myValue[index]});}}result = regExp.exec(str);}}msgTxt.text=codeStr;//替换对应的中文for each(var tips:Object in data){tempStr=tempStr.replace(tips.key,tips.value);}codeTxt.text=tempStr;}