php 中英文語言轉(zhuǎn)換類代碼
更新時(shí)間:2011年08月11日 00:00:30 作者:
突然想做個(gè)中英文的功能試一下,只是把一些常用且有規(guī)律的詞匯比如 ‘評(píng)論’ ,時(shí)間單位(幾秒幾小時(shí)前這些)可以自由的轉(zhuǎn)化。
起初想到制成XML文檔形式,這樣操作也起來很容易。只是看到說XML效率不怎樣
再者就是不同的模板,可這樣也有個(gè)小問題,有些詞匯比如時(shí)間提示是不確定,與可能是minute ,day。也有可能復(fù)數(shù)加 s
那好吧,做成數(shù)組,可數(shù)組就得做成在php文件的變量,很難做些擴(kuò)展(我所知道所認(rèn)為的是這樣)
最后做成txt文本文件的形式,同樣也為這樣的效率擔(dān)心,打開文件,搜索字符串,截取字符串這些,所幸最后運(yùn)行了一下,一般機(jī)子大概0.0004秒,這讓我很驚奇原以為會(huì)很慢,畢竟要調(diào)用多次。
好吧,上代碼
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(); 是找到字符串第一次出現(xiàn)的位置 比如 ‘wo' 在 ‘hello world' 中,返回值為 6
substr();是截取字符串的一部分
接下來是調(diào)試時(shí)加上的代碼
$la = language::getObject();
$la->type = 'unit';
$la->lto('min');
echo '<br/>';
$la->lto('hello');
lto(這里面要翻譯的英文);
unit.txt 文件的內(nèi)容格式是
hello-你好 min-小 minute-分鐘 minutes-分鐘
$special設(shè)計(jì)為全局也是想到不止一次會(huì)調(diào)用lto() ,如果反復(fù)加載文件太浪費(fèi)性能了。
$type設(shè)計(jì)為公有是考慮到加載的文件的效率問題,有的時(shí)候并不需要顯示幾天前這些,所以不如把這些按使用類型分開,比如有專門負(fù)責(zé)菜單翻譯的menu.txt ,也有專門為操作,比如刪除,收藏 翻譯的txt文本。這樣可以自由設(shè)定要加載的文本
語言也可以自由設(shè)定。
好吧,程序還可以改進(jìn),我沒有按http請(qǐng)求中的客戶端語言來設(shè)置$lan
再者就是不同的模板,可這樣也有個(gè)小問題,有些詞匯比如時(shí)間提示是不確定,與可能是minute ,day。也有可能復(fù)數(shù)加 s
那好吧,做成數(shù)組,可數(shù)組就得做成在php文件的變量,很難做些擴(kuò)展(我所知道所認(rèn)為的是這樣)
最后做成txt文本文件的形式,同樣也為這樣的效率擔(dān)心,打開文件,搜索字符串,截取字符串這些,所幸最后運(yùn)行了一下,一般機(jī)子大概0.0004秒,這讓我很驚奇原以為會(huì)很慢,畢竟要調(diào)用多次。
好吧,上代碼
復(fù)制代碼 代碼如下:
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(); 是找到字符串第一次出現(xiàn)的位置 比如 ‘wo' 在 ‘hello world' 中,返回值為 6
substr();是截取字符串的一部分
接下來是調(diào)試時(shí)加上的代碼
復(fù)制代碼 代碼如下:
$la = language::getObject();
$la->type = 'unit';
$la->lto('min');
echo '<br/>';
$la->lto('hello');
lto(這里面要翻譯的英文);
unit.txt 文件的內(nèi)容格式是
hello-你好 min-小 minute-分鐘 minutes-分鐘
$special設(shè)計(jì)為全局也是想到不止一次會(huì)調(diào)用lto() ,如果反復(fù)加載文件太浪費(fèi)性能了。
$type設(shè)計(jì)為公有是考慮到加載的文件的效率問題,有的時(shí)候并不需要顯示幾天前這些,所以不如把這些按使用類型分開,比如有專門負(fù)責(zé)菜單翻譯的menu.txt ,也有專門為操作,比如刪除,收藏 翻譯的txt文本。這樣可以自由設(shè)定要加載的文本
語言也可以自由設(shè)定。
好吧,程序還可以改進(jìn),我沒有按http請(qǐng)求中的客戶端語言來設(shè)置$lan
您可能感興趣的文章:
- 基于jQuery實(shí)現(xiàn)中英文切換導(dǎo)航條效果
- asp.net實(shí)現(xiàn)中英文多域名檢測(cè)的方法
- C++統(tǒng)計(jì)中英文大小寫字母、數(shù)字、空格及其他字符個(gè)數(shù)的方法
- js判斷字符長(zhǎng)度及中英文數(shù)字等
- java實(shí)現(xiàn)十六進(jìn)制字符unicode與中英文轉(zhuǎn)換示例
- js判斷字符長(zhǎng)度以及中英文數(shù)字等
- js截取固定長(zhǎng)度的中英文字符的簡(jiǎn)單實(shí)例
- php 中英文語言轉(zhuǎn)換類
- php自動(dòng)跳轉(zhuǎn)中英文頁面
- jquery結(jié)合html實(shí)現(xiàn)中英文頁面切換
相關(guān)文章
php使用Cookie實(shí)現(xiàn)和用戶會(huì)話的方法
這篇文章主要介紹了php使用Cookie實(shí)現(xiàn)和用戶會(huì)話的方法,分析了Cookie的原理、設(shè)置與使用技巧,需要的朋友可以參考下2015-01-01PHP工廠模式、單例模式與注冊(cè)樹模式實(shí)例詳解
這篇文章主要介紹了PHP工廠模式、單例模式與注冊(cè)樹模式,結(jié)合實(shí)例形式工廠模式、單例模式與注冊(cè)樹模式的基本概念、原理、實(shí)現(xiàn)方法及使用技巧,需要的朋友可以參考下2019-06-06php allow_url_include的應(yīng)用和解釋
PHP常常因?yàn)樗赡茉试SURLS被導(dǎo)入和執(zhí)行語句被人們指責(zé)。事實(shí)上,這件事情并不是很讓人感到驚奇,因?yàn)檫@是導(dǎo)致稱為Remote URL Include vulnerabilities的php應(yīng)用程序漏洞的最重要的原因之一。2010-04-04PHP實(shí)現(xiàn)的DES加密解密封裝類完整實(shí)例
這篇文章主要介紹了PHP實(shí)現(xiàn)的DES加密解密封裝類,結(jié)合完整實(shí)例形式分析了php DES加密解密封裝類的定義與使用技巧,需要的朋友可以參考下2017-04-04php中使用exec,system等函數(shù)調(diào)用系統(tǒng)命令的方法(不建議使用,可導(dǎo)致安全問題)
PHP作為一種服務(wù)器端的腳本語言,像編寫簡(jiǎn)單,或者是復(fù)雜的動(dòng)態(tài)網(wǎng)頁這樣的任務(wù),它完全能夠勝任。但事情不總是如此,有時(shí)為了實(shí)現(xiàn)某個(gè)功能,必須借助于操作系統(tǒng)的外部程序(或者稱之為命令),這樣可以做到事半功倍2012-09-09利用Dockerfile文件部署php項(xiàng)目的全過程
環(huán)境部署一直是一個(gè)很大的問題,無論是開發(fā)環(huán)境還是生產(chǎn)環(huán)境,但是Docker將開發(fā)環(huán)境和生產(chǎn)環(huán)境以輕量級(jí)方式打包,提供了一致的環(huán)境,下面這篇文章主要給大家介紹了關(guān)于利用Dockerfile文件部署php項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2022-07-07PHP使用PDO訪問oracle數(shù)據(jù)庫(kù)的步驟詳解
POD擴(kuò)展是在PHP5中加入,該擴(kuò)展提供PHP內(nèi)置類 PDO來對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問,不同數(shù)據(jù)庫(kù)使用相同的方法名,解決數(shù)據(jù)庫(kù)連接不統(tǒng)一的問題。下面這篇文章主要給大家介紹了關(guān)于PHP使用PDO訪問oracle數(shù)據(jù)庫(kù)的步驟,需要的朋友可以參考下。2017-09-09