$wgDispLangNeedChanges = array ( 'zh', 'zh-yue', 'zh-min-nan' ); $wgDispLangChanges = array ( 'zh-cn' => 'zh-cn', //zh-hans, for compatibility 'zh-tw' => 'zh-hant', 'zh-hk' => 'zh-hant', 'zh-mo' => 'zh-hant', 'zh-sg' => 'zh-sg', //zh-hans, for compatibility 'zh-min-nan' => 'zh-hant', 'zh-yue' => 'zh-hant' ); function getDisplayLangCode() { global $wgContLanguageCode, $wgDispLangNeedChange, $wgDispLangChanges; global $wgDispLangNeedChanges, $wgUser; $mNeeds2ChangeLangCode = 0; // Check is that on the change list //(for example while using zh interface in en sites would not affected.) foreach($wgDispLangNeedChanges as $i => $LanguageCode) { if ($wgDispLangNeedChanges[$i] == $wgContLanguageCode) $mNeeds2ChangeLangCode = 1; } // when a change is required do the stuffs below if ($mNeeds2ChangeLangCode == 1) { // get language interface perference from logged in users if ((is_object($wgUser)) && ($wgUser->isLoggedin())) { $getLanguageCode = $wgUser->getOption('language'); } // get the HTTP_ACCEPT_LANGUAGE value for anonymous users else if (array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) { $getLanguageCode = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"])); $getLanguageCode = strtok($getLanguageCode,',;'); } // if both two methods above failed, get the $wgContLanguageCode directly else { $getLanguageCode = $wgContLanguageCode; } // ----------------------------------------------------------- // check if the language is in the change list // if found in the substitude list, change into that value if (array_key_exists($getLanguageCode, $wgDispLangChanges)) { $mDisplayLanguageCode = $wgDispLangChanges[$getLanguageCode]; } // return the wgContLanguageCode in other cases else { $mDisplayLanguageCode = $getLanguageCode; } } // when changes is not required (e.g. in en, de, fr, ja, ko, etc... sites) else { $mDisplayLanguageCode = $wgContLanguageCode; } return $mDisplayLanguageCode; }