想做个中英文的功能试一下, 只是把一些常用且有规律的词汇比如评论, 时间单位 (几秒几小时前这些) 可以自由的转化
起初想到制成 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 '
- ';
- $la->lto('hello');
- lto(这里面要翻译的英文);
unit.txt 文件的内容格式是
hello - 你好 min - 小 minute - 分钟 minutes - 分钟
$special 设计为全局也是想到不止一次会调用 lto() , 如果反复加载文件太浪费性能了
$type 设计为公有是考虑到加载的文件的效率问题, 有的时候并不需要显示几天前这些, 所以不如把这些按使用类型分开, 比如有专门负责菜单翻译的 menu.txt , 也有专门为操作, 比如删除, 收藏 翻译的 txt 文本这样可以自由设定要加载的文本
语言也可以自由设定
好吧, 程序还可以改进, 我没有按 http 请求中的客户端语言来设置 $lan,
来源: https://www.php1.cn/detail/php-1b1dc346bb.html