php 中英文语言转换类


Posted in PHP onSeptember 07, 2011

起初想到制成XML文档形式,这样操作也起来很容易。只是看到说XML效率不怎样
再者就是不同的模板,可这样也有个小问题,有些词汇比如时间提示是不确定,与可能是minute ,day。也有可能复数加 s
那好吧,做成数组,可数组就得做成在php文件的变量,很难做些扩展(我所知道所认为的是这样)
最后做成txt文本文件的形式,同样也为这样的效率担心,打开文件,搜索字符串,截取字符串这些,所幸最后运行了一下,一般机子大概0.0004秒,这让我很惊奇原以为会很慢,毕竟要调用多次。
好吧,上代码

class language 
{ 
static $lanObject; 
public $type; // unit , dashboard , menu ,other 
public $lan; // language 
private $special; // The common in the file 
private function __construct() 
{ 
if( isset($_GET['hl']) || isset($_POST['hl']) ) 
{ 
switch( isset($_GET['hl'])?$_GET['hl']:$_POST['hl'] ) 
{ 
case 'en': 
$this->lan = 'en'; 
case 'zh': 
$this->lan = 'zh'; 
case 'all': 
$this->lan = 'all'; 
default: 
$this->error(); 
} 
} 
else 
$this->lan = isset($_COOKIE['hl']) ? $_COOKIE['hl']:'zh'; 
} 
public static function getObject() 
{ 
if( !(self::$lanObject instanceof self) ) 
self::$lanObject = new language(); 
return self::$lanObject; 
} 
public function lto($key) //$key is English 
{ 
if( $this->lan !== 'zh' ) 
return $key; 
if( empty($this->special) ) // if the $special is null 
{ 
if( isset($this->type) ) 
$this->special = file_get_contents($this->type.'.txt'); 
else 
return $key; 
} 
echo $this->search($key); 
} 
private function search($searchTozh) // PHP String 
{ 
$key_start = strpos($this->special,$searchTozh); 
$key_end = strpos($this->special,' ',$key_start); 
$len_str = strlen($searchTozh); 
$for_sub = $key_start + $len_str + 1; 
return substr($this->special, $for_sub, $key_end - $for_sub); 
} 
}

strpos(); 是找到字符串第一次出现的位置 比如 ‘wo' 在 ‘hello world' 中,返回值为 6
substr();是截取字符串的一部分


接下来是调试时加上的代码

$la = language::getObject(); 
$la->type = 'unit'; 
$la->lto('min'); 
echo '<br/>'; 
$la->lto('hello');

lto(这里面要翻译的英文); 
unit.txt 文件的内容格式是
hello-你好 min-小 minute-分钟 minutes-分钟
 
$special设计为全局也是想到不止一次会调用lto() ,如果反复加载文件太浪费性能了。
$type设计为公有是考虑到加载的文件的效率问题,有的时候并不需要显示几天前这些,所以不如把这些按使用类型分开,比如有专门负责菜单翻译的menu.txt ,也有专门为操作,比如删除,收藏 翻译的txt文本。这样可以自由设定要加载的文本
语言也可以自由设定。
好吧,程序还可以改进,我没有按http请求中的客户端语言来设置$lan,
PHP 相关文章推荐
PHP中的超全局变量
Oct 09 PHP
php生成随机密码的几种方法
Jan 17 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
php生成数组的使用示例 php全组合算法
Jan 16 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
PHP7新功能总结
Apr 14 PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 PHP
Laravel框架创建路由的方法详解
Sep 04 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
php继承的一个应用
Sep 06 #PHP
php 抽象类的简单应用
Sep 06 #PHP
PHP中PDO基础教程 入门级
Sep 04 #PHP
PHP中PDO的错误处理
Sep 04 #PHP
php中将网址转换为超链接的函数
Sep 02 #PHP
php ajax 静态分页过程形式
Sep 02 #PHP
php中防止伪造跨站请求的小招式
Sep 02 #PHP
You might like
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Django卸载之后重新安装的方法
2017/03/15 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
环保建议书300字
2014/05/14 职场文书
庆七一活动总结
2014/08/27 职场文书
2014年工人工作总结
2014/11/25 职场文书
店面出租协议书范本
2014/11/28 职场文书
解除处分决定书
2015/06/25 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android