2 require_once( "includes/ZhClient.php" );
3 require_once( "LanguageZh_cn.php");
4 require_once( "LanguageZh_tw.php");
5 require_once( "LanguageZh_sg.php");
6 require_once( "LanguageZh_hk.php");
8 /* class that handles both Traditional and Simplified Chinese
9 right now it only distinguish zh_cn and zh_tw (actuall, zh_cn and
10 non-zh_cn), will add support for zh_sg, zh_hk, etc, later.
12 class LanguageZh
extends LanguageZh_cn
{
14 var $mZhLanguageCode=false;
16 function LanguageZh() {
17 global $wgUseZhdaemon, $wgZhdaemonHost, $wgZhdaemonPort;
18 global $wgDisableLangConversion;
20 $this->mZhLanguageCode
= $this->getPreferredVariant();
22 $this->mZhClient
=new ZhClient($wgZhdaemonHost, $wgZhdaemonPort);
23 if(!$this->mZhClient
->isconnected())
24 $this->mZhClient
= false;
26 // fallback to fake client
27 if($this->mZhClient
== false)
28 $this->mZhClient
=new ZhClientFake();
32 get preferred language variants. eventually this will check the
33 user's preference setting as well, once the language option in
34 the setting pages is finalized.
36 function getPreferredVariant() {
39 if($this->mZhLanguageCode
)
40 return $this->mZhLanguageCode
;
42 // get language variant preference for logged in users
43 if($wgUser->getID()!=0) {
44 $this->mZhLanguageCode
= $wgUser->getOption('variant');
47 // see if some zh- variant is set in the http header,
48 $this->mZhLanguageCode
="zh-cn";
49 $header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
50 $zh = strstr($header, 'zh-');
52 $this->mZhLanguageCode
= substr($zh,0,5);
55 return $this->mZhLanguageCode
;
60 function autoConvert($text, $toVariant=false) {
62 $toVariant = $this->getPreferredVariant();
63 $fname="zhautoConvert";
64 wfProfileIn( $fname );
65 $t = $this->mZhClient
->convert($text, $toVariant);
66 wfProfileOut( $fname );
70 function autoConvertToAllVariants($text) {
71 $fname="zhautoConvertToAll";
72 wfProfileIn( $fname );
73 $ret = $this->mZhClient
->convertToAllVariants($text);
74 if($ret == false) {//fall back...
75 $ret = Language
::autoConvertToAllVariants($text);
77 wfProfileOut( $fname );
81 # only convert titles having more than one character
82 function convertTitle($text) {
84 if( function_exists( 'mb_strlen' ) )
85 $len = mb_strlen($text);
87 $len = strlen($text)/3;
89 return $this->autoConvert( $text);
93 function getVariants() {
94 return array("zh-cn", "zh-tw", "zh-sg", "zh-hk");
97 function getVariantFallback($v) {
99 case 'zh-cn': return 'zh-sg'; break;
100 case 'zh-sg': return 'zh-cn'; break;
101 case 'zh-tw': return 'zh-hk'; break;
102 case 'zh-hk': return 'zh-tw'; break;
107 // word segmentation through ZhClient
108 function stripForSearch( $string ) {
110 wfProfileIn( $fname );
111 //always convert to zh-cn before indexing. it should be
112 //better to use zh-cn for search, since conversion from
113 //Traditional to Simplified is less ambiguous than the
115 $string = $this->autoConvert($string, 'zh-cn');
116 $t = $this->mZhClient
->segment($string);
117 $t = LanguageUtf8
::stripForSearch( $t );
118 wfProfileOut( $fname );