源码在底下下载:
system_msg.txt文件:
#道具购买成功
props.buyCode.0000=购买成功,花费{0}{1}!
#道具购买失败,金币不足
props.buyCode.0001=购买失败,您的金币不足!
#道具购买失败,元宝不足
props.buyCode.0002=购买失败,您的元宝不足!
测试文档类:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
/**
* ...
* @author ongsh
*/
public class Main extends Sprite
{
private var urlLoader:URLLoader;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
urlLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE, loadComplete);
urlLoader.load(new URLRequest("system_msg.txt"));
}
private function loadComplete(e:Event):void
{
MessageManager.load("system",urlLoader.data);
trace(MessageManager.parseMessage("system",'props.buyCode.0000',[100,'金币']));
trace(MessageManager.parseMessage("system", 'props.buyCode.0001'));
}
}
}
消息管理器:
package
{
import flash.utils.Dictionary;
/**
* ...
* @author ongsh
*/
public class MessageManager
{
public static var isDebug:Boolean = false;
private static var messages:Dictionary = new Dictionary();
/**
* 加载消息文档
*
* @param contentName 文档名称
* @param content 文档内容
*/
public static function load(contentName:String,content:String):void
{
var lines:Array = content.split("\n");
for(var i:int=0; i< lines.length ; i ++)
{
var line:String = lines[i];
line = StringUtil.trim(line);
if(line == "")
{
//debugTrace(contentName,"的第"+(i+1)+"行是空行!");
continue;
}
if(isAnnotation(line))
{
//debugTrace(contentName,"的第"+(i+1)+"行是注释行!");
continue;
}
var key:String;
var value:String;
var sep:String = "=";
var firstSepIndex:int = line.indexOf(sep);
if(firstSepIndex!=-1)
{
key = line.substring(0,firstSepIndex);
value = line.substring(firstSepIndex+1);
if(messages[contentName]==null)
{
messages[contentName] = new Dictionary();
}
messages[contentName][key] = value;
}else{
debugTrace(contentName,"的第"+(i+1)+"行格式不正确!");
}
}
}
/**
* 卸载消息文档
*
* @param contentNam 文档名称
*/
public static function unload(contentName:String):void
{
if(messages[contentName]!=null)
{
messages[contentName] = null;
}
}
/**
*
* @param contentName 文档名称
* @param key 键值
* @param argsArray 替换占位符({0},{1}...)的参数
* @return
*/
public static function parseMessage(contentName:String,key:String,argsArray:Array=null):String
{
if(messages[contentName])
{
var value:String = messages[contentName][key];
if(value==null)
{
debugTrace(contentName,key,"不存在");
return null;
}else{
var str:String = StringUtil.replacePlaceholder(value,argsArray);
return str;
}
}else{
debugTrace(contentName,"不存在");
return null;
}
}
/**
* 是否是注释
*
* @param str 字符串
* @return
*/
private static function isAnnotation(str:String):Boolean
{
if(str.charAt(0) == "#")
{
return true;
}else{
return false;
}
}
private static function debugTrace(...args):void
{
if(isDebug)
{
trace.apply(null,args);
}
}
}
}
字符串工具类:
package
{
/**
* ...
* @author ongsh
*/
public class StringUtil
{
/**
* 把字符串中的占位符 {0} {1} 用数组中的字符串替换
* @param source 源字符串
* @param args 待替换字符串数组
* @return 替换后的字符串
*/
public static function replacePlaceholder(source:String, args:Array):String
{
var pattern:RegExp = /{(\d)}/g;
source = source.replace(pattern, function():String {
return args[arguments[1]];
});
return source;
}
/**
* 替换空白字符分割符
* @param source 源字符串
* @param sep 分隔符
* @return 结果字符串
*/
public static function replaceBlankSep(source:String,sep:String):String
{
//剔除前后空格
source = trim(source);
return source.replace(/\s+/g,sep);;
}
/**
* 剔除字符串前后空白
* @param str 源字符串
* @return 结果字符串
*/
public static function trim(str:String):String
{
return str.replace(/(^\s+)|(\s+$)/g,"");
}
}
}