wiki.techinc.nl/languages/LanguageZh.php
2004-10-20 02:18:42 +00:00

131 lines
3.2 KiB
PHP

<?php
require_once( "LanguageZh_cn.php");
require_once( "LanguageZh_tw.php");
require_once( "LanguageZh_sg.php");
require_once( "LanguageZh_hk.php");
/* caching the conversion tables */
$zh2TW = $wgMemc->get($key1 = "$wgDBname:zhConvert:tw");
$zh2CN = $wgMemc->get($key2 = "$wgDBname:zhConvert:cn");
$zh2SG = $wgMemc->get($key3 = "$wgDBname:zhConvert:sg");
$zh2HK = $wgMemc->get($key4 = "$wgDBname:zhConvert:hk");
if(empty($zh2TW) || empty($zh2CN) || empty($zh2SG) || empty($zh2HK)) {
require_once("includes/ZhConversion.php");
$wgMemc->set($key1, $zh2TW);
$wgMemc->set($key2, $zh2CN);
$wgMemc->set($key3, $zh2SG);
$wgMemc->set($key4, $zh2HK);
}
/* class that handles both Traditional and Simplified Chinese
right now it only distinguish zh_cn and zh_tw (actuall, zh_cn and
non-zh_cn), will add support for zh_sg, zh_hk, etc, later.
*/
class LanguageZh extends LanguageZh_cn {
var $mZhLanguageCode=false;
function LanguageZh() {
$this->mZhLanguageCode = $this->getPreferredVariant();
}
/*
get preferred language variants. eventually this will check the
user's preference setting as well, once the language option in
the setting pages is finalized.
*/
function getPreferredVariant() {
global $wgUser;
if($this->mZhLanguageCode)
return $this->mZhLanguageCode;
// get language variant preference for logged in users
if($wgUser->getID()!=0) {
$this->mZhLanguageCode = $wgUser->getOption('variant');
}
else {
// see if some zh- variant is set in the http header,
$this->mZhLanguageCode="zh-cn";
$header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
$zh = strstr($header, 'zh-');
if($zh) {
$this->mZhLanguageCode = substr($zh,0,5);
}
}
return $this->mZhLanguageCode;
}
/* the Simplified/Traditional conversion stuff */
function zh2tw($text) {
global $zh2TW;
return strtr($text, $zh2TW);
}
function zh2cn($text) {
global $zh2CN;
return strtr($text, $zh2CN);
}
function zh2sg($text) {
global $zh2SG, $zh2CN;
return strtr(strtr($text, $zh2CN), $zh2SG);
}
function zh2hk($text) {
global $zh2HK, $zh2TW;
return strtr(strtr($text, $zh2TW), $zh2HK);
}
function autoConvert($text, $toVariant=false) {
if(!$toVariant)
$toVariant = $this->getPreferredVariant();
$fname="zhconvert";
wfProfileIn( $fname );
$t = $text;
switch($toVariant) {
case 'zh-cn':
$t = $this->zh2cn($text);
break;
case 'zh-tw':
$t = $this->zh2tw($text);
break;
case 'zh-sg':
$t = $this->zh2sg($text);
break;
case 'zh-hk':
$t = $this->zh2hk($text);
break;
}
wfProfileOut( $fname );
return $t;
}
# only convert titles having more than one character
function convertTitle($text) {
$len=0;
if( function_exists( 'mb_strlen' ) )
$len = mb_strlen($text);
else
$len = strlen($text)/3;
if($len>1)
return $this->autoConvert( $text);
return $text;
}
function getVariants() {
return array("zh-cn", "zh-tw", "zh-sg", "zh-hk");
}
function getVariantFallback($v) {
switch ($v) {
case 'zh-cn': return 'zh-sg'; break;
case 'zh-sg': return 'zh-cn'; break;
case 'zh-tw': return 'zh-hk'; break;
case 'zh-hk': return 'zh-tw'; break;
}
return false;
}
}
?>