博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AS3 中实现多语言替换的方法
阅读量:5102 次
发布时间:2019-06-13

本文共 4258 字,大约阅读时间需要 14 分钟。

一、项目需求

1 1、顺序替换--“您确定要花费{money}金币,来购买{amount}个红瓶吗?”2 2、全局替换--“{name},奖励所有人{money}人民币和{exp}美元。呵呵。”

二、函数的基本轮廓

1 public function printf( str:String, ... rest ):String2 {3     //... parse4     return string;5 }

三、顺序替换的实现

我们可以用正则来描述顺序替换中需要替换的关键词:\{[a-z0-9_]+\}
这个正则所表示的意思:所以形如{字母/数字/下划线}的内容,并且你可能需要忽略大小写,最终为:/\{[a-z0-9_]+\}/i
接着,我们只要用一个循环来遍历替换参数指定的值就行了。
扩展:我们不但可以将rest直接传入多个数据参数,也可以传入将这些数据参数整合成一个数组来只传入一个参数
四、全局替换的分析
由于字符串替换方法replace好像只能替换第一个匹配的项,因此我们还得借助正则表达式来实现。
实现方法:参数rest我们传入一个Object,例如{name:"天地会"},而这个Object的字段名与全局替换中的关键词{XXX}是相互对应的。如此就简单了,我们只要遍历这个Object,替换源字符串中所有相对应的关键词即可。
五、最终代码

1 package 2 { 3  4         /** 5          *  使用传入的各个参数替换指定的字符串内的 {n} 标记。 6          * 7          *  @param str  - 用来进行替换的源字符串。 8          *  @param rest  - 可在 str 参数中的每个 {n} 位置被替换的值。 9          *  如果第一个参数是一个数组,则该数组将用作参数列表。若第一个参数为数据对象,则会进行全局替换,否则为顺序替换。10          *11          *  

源字符串可包含 {n} 形式的特殊标记,其中 n 为任意标识符(由字母、数字、下划线组成),12 * 它将被替换成具体的值。

13 *

因为允许 rest 第一个参数为数组,因此允许在其它想要使用... rest 参数的方法中重复使用此例程。例如:14 *

15 * public function myTracer(str:String, ... rest):void
16 * {
17 * label.text += printf(str, rest) + "\n";
18 * }19 *

20 *21 * @return 使用指定的各个参数替换了所有 {n} 标记的新字符串。22 *23 *

24 * var str:String = "here is some info {number} and {boolean}";
25 * trace(printf(str, 15.4, true));
26 *
27 * // this will output the following string:
28 * // "here is some info 15.4 and true"
29 *
30 */31 public function printf( str:String, ... rest ):String32 {33 if( str == null || str == "" )34 return "";35 36 var lng:int; // 最终需要计算替换的次数37 var args:Array; // 最终需要替换的数据38 var i:int;39 40 switch( typeof( rest[ 0 ]))41 {42 case "number":43 case "boolean":44 case "string":45 {46 lng = rest.length;47 args = rest;48 49 for( i = 0; i < lng; i++ )50 {51 str = str.replace( PATTERN_PRINTF, args[ i ]);52 }53 break;54 }55 case "object":56 {57 if( rest[ 0 ] is Array )58 {59 args = rest[ 0 ] as Array;60 lng = args.length;61 62 for( i = 0; i < lng; i++ )63 {64 str = str.replace( PATTERN_PRINTF, args[ i ]);65 }66 }67 else68 {69 var reg:RegExp;70 71 for( var prop:String in rest[ 0 ])72 {73 reg = new RegExp( "\{" + prop + "\}", "ig" );74 str = str.replace( reg, rest[ 0 ][ prop ]);75 }76 }77 break;78 }79 }80 81 return str;82 }83 }84 85 const PATTERN_PRINTF:RegExp = /\{[a-z0-9_]+\}/i;

你可以直接将以上代码,保存为一个AS3文件,来放到你的项目中使用。

养成写注释的习惯,是你成功和成长的其中一步。
六、使用方法

1 trace( printf( "您确定要花费{money}金币,来购买{amount}个红瓶吗?", 100, 5 ));2 trace( printf( "{name},奖励所有人{money}人民币和{exp}美元。呵呵。", { name: "看完这篇文章", money: 100, exp: 2000 }));

输出结果:

1 您确定要花费100金币,来购买5个红瓶吗?2 看完这篇文章,奖励所有人100人民币和2000美元。呵呵。

 

转载于:https://www.cnblogs.com/atong/archive/2013/05/25/3098339.html

你可能感兴趣的文章
对数器的使用
查看>>
OracleOraDb11g_home1TNSListener服务启动后停止,某些服务在未由其他服务或程序使用时将自己主动停止...
查看>>
Redis用户添加、分页、登录、注册、加关注案例
查看>>
练习2
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
08-【jsp重点】
查看>>
小记:xml画一个爱心。
查看>>
MySQL表的四种分区类型
查看>>
7.26
查看>>
dll--二进制层面的复用
查看>>
linux 压缩/解压缩/打包命令
查看>>
守护进程
查看>>
CLR 关于强命名程序集 .
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
idea 导入eclipse play1.2.7项目
查看>>
如何制作并更改项目icon文件
查看>>
设计模式:迭代器模式(Iterator)
查看>>
cmd批处理常用符号详解
查看>>