initial support for zh-hk and zh-sg
[lhc/web/wiklou.git] / languages / LanguageZh.php
1 <?php
2 require_once( "LanguageZh_cn.php");
3 require_once( "LanguageZh_tw.php");
4
5 /* caching the conversion tables */
6 $zh2TW = $wgMemc->get($key1 = "$wgDBname:zhConvert:tw");
7 $zh2CN = $wgMemc->get($key2 = "$wgDBname:zhConvert:cn");
8 $zh2SG = $wgMemc->get($key3 = "$wgDBname:zhConvert:sg");
9 $zh2HK = $wgMemc->get($key4 = "$wgDBname:zhConvert:hk");
10 if(empty($zhSimp2Trad) || empty($zhTrad2Simp)) {
11 require_once("includes/ZhConversion.php");
12 $wgMemc->set($key1, $zh2TW);
13 $wgMemc->set($key2, $zh2CN);
14 $wgMemc->set($key3, $zh2SG);
15 $wgMemc->set($key4, $zh2HK);
16 }
17
18 /* class that handles both Traditional and Simplified Chinese
19 right now it only distinguish zh_cn and zh_tw (actuall, zh_cn and
20 non-zh_cn), will add support for zh_sg, zh_hk, etc, later.
21 */
22 class LanguageZh extends LanguageZh_cn {
23
24 var $mZhLanguageCode=false;
25
26 function LanguageZh() {
27 $this->mZhLanguageCode = $this->getPreferredVariant();
28 }
29
30 /*
31 get preferred language variants. eventually this will check the
32 user's preference setting as well, once the language option in
33 the setting pages is finalized.
34 */
35 function getPreferredVariant() {
36 global $wgUser;
37
38 if($this->mZhLanguageCode)
39 return $this->mZhLanguageCode;
40
41 // get language variant preference for logged in users
42 if($wgUser->getID()!=0) {
43 $this->mZhLanguageCode = $wgUser->getOption('variant');
44 }
45 else {
46 // see if some zh- variant is set in the http header,
47 $this->mZhLanguageCode="zh-cn";
48 $header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
49 $zh = strstr($header, 'zh-');
50 if($zh) {
51 $this->mZhLanguageCode = substr($zh,0,5);
52 }
53 }
54 return $this->mZhLanguageCode;
55 }
56
57
58 /* the Simplified/Traditional conversion stuff */
59
60 function zh2tw($text) {
61 global $zh2TW;
62 return strtr($text, $zh2TW);
63 }
64
65 function zh2cn($text) {
66 global $zh2CN;
67 return strtr($text, $zh2CN);
68 }
69
70 function zh2sg($text) {
71 global $zh2SG, $zh2CN;
72 return strtr(strtr($text, $zh2CN), $zh2SG);
73 }
74
75 function zh2hk($text) {
76 global $zh2HK, $zh2TW;
77 return strtr(strtr($text, $zh2TW), $zh2HK);
78 }
79
80 function autoConvert($text, $toVariant=false) {
81 if(!$toVariant)
82 $toVariant = $this->getPreferredVariant();
83 $fname="zhconvert";
84 wfProfileIn( $fname );
85 $t = $text;
86 switch($toVariant) {
87 case 'zh-cn':
88 $t = $this->zh2cn($text);
89 break;
90 case 'zh-tw':
91 $t = $this->zh2tw($text);
92 break;
93 case 'zh-sg':
94 $t = $this->zh2sg($text);
95 break;
96 case 'zh-hk':
97 $t = $this->zh2hk($text);
98 break;
99 }
100 wfProfileOut( $fname );
101 return $t;
102 }
103
104 function getVariants() {
105 return array("zh-cn", "zh-tw", "zh-sg", "zh-hk");
106 }
107 }
108 ?>