From: Zheng Zhu Date: Tue, 19 Oct 2004 18:02:44 +0000 (+0000) Subject: Added option wgDisableLangConversion to disable langauge variant conversion, mainly... X-Git-Tag: 1.5.0alpha1~1508 X-Git-Url: http://git.cyclocoop.org/data/Fool?a=commitdiff_plain;h=b6093aad4e851117598494a2f3b22bfd4ca9b2e6;p=lhc%2Fweb%2Fwiklou.git Added option wgDisableLangConversion to disable langauge variant conversion, mainly for debugging and testing purpose. --- diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index a6bb741e9c..1aa0139d94 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -313,6 +313,13 @@ $wgTranslateNumerals = true; # For Hindi and Arabic use local numerals instead $wgUseDatabaseMessages = true; $wgMsgCacheExpiry = 86400; $wgPartialMessageCache = false; + +# Whether to enable language variant conversion. Currently only zh +# supports this function, to convert between Traditional and Simplified +# Chinese. This flag is meant to isolate the (untested) conversion +# code, so that if it breaks, only zh will be affected +$wgDisableLangConversion = true; + # Miscellaneous configuration settings # diff --git a/includes/Parser.php b/includes/Parser.php index f97bffce75..0983b531ef 100644 --- a/includes/Parser.php +++ b/includes/Parser.php @@ -1093,6 +1093,7 @@ class Parser function replaceInternalLinks( $s ) { global $wgLang, $wgContLang, $wgLinkCache; + global $wgDisableLangConversion; static $fname = 'Parser::replaceInternalLinks' ; # use a counter to prevent too much unknown links from # being checked for different language variants. @@ -1204,31 +1205,32 @@ class Parser continue; } - //check other language variants of the link - //if the article does not exist - global $wgContLang; - $variants = $wgContLang->getVariants(); - - if(sizeof($variants) > 1 && $convertCount < 200) { - $varnt = false; - if($nt->getArticleID() == 0) { - foreach ( $variants as $v ) { - if($v == $wgContLang->getPreferredVariant()) - continue; - $convertCount ++; - $varlink = $wgContLang->autoConvert($link, $v); - $varnt = Title::newFromText($varlink); - if($varnt && $varnt->getArticleID()>0) { - break; + #check other language variants of the link + #if the article does not exist + if(!$wgDisableLangConversion) { + global $wgContLang; + $variants = $wgContLang->getVariants(); + + if(sizeof($variants) > 1 && $convertCount < 200) { + $varnt = false; + if($nt->getArticleID() == 0) { + foreach ( $variants as $v ) { + if($v == $wgContLang->getPreferredVariant()) + continue; + $convertCount ++; + $varlink = $wgContLang->autoConvert($link, $v); + $varnt = Title::newFromText($varlink); + if($varnt && $varnt->getArticleID()>0) { + break; + } } } - } - if($varnt && $varnt->getArticleID()>0) { - $nt = $varnt; - $link = $varlink; + if($varnt && $varnt->getArticleID()>0) { + $nt = $varnt; + $link = $varlink; + } } } - $ns = $nt->getNamespace(); $iw = $nt->getInterWiki(); diff --git a/includes/SpecialPreferences.php b/includes/SpecialPreferences.php index 893479304c..4e2fea7748 100644 --- a/includes/SpecialPreferences.php +++ b/includes/SpecialPreferences.php @@ -312,7 +312,7 @@ class PreferencesForm { function mainPrefsForm( $err ) { global $wgUser, $wgOut, $wgLang, $wgContLang, $wgUseDynamicDates, $wgValidSkinNames; global $wgAllowRealName, $wgImageLimits; - global $wgLanguageNames; + global $wgLanguageNames, $wgDisableLangConversion; $wgOut->setPageTitle( wfMsg( 'preferences' ) ); $wgOut->setArticleRelated( false ); @@ -406,28 +406,28 @@ class PreferencesForm { $wgOut->addHtml("\n" ); /* see if there are multiple language variants to choose from*/ - $variants = $wgContLang->getVariants(); - $size=sizeof($variants); + if(!$wgDisableLangConversion) { + $variants = $wgContLang->getVariants(); + $size=sizeof($variants); - $variantArray=array(); - foreach($variants as $v) { - $v = str_replace( '_', '-', strtolower($v)); - if($name=$wgLanguageNames[$v]) { - $variantArray[$v] = $name; + $variantArray=array(); + foreach($variants as $v) { + $v = str_replace( '_', '-', strtolower($v)); + if($name=$wgLanguageNames[$v]) { + $variantArray[$v] = $name; + } } - } - $size=sizeof($variantArray); + $size=sizeof($variantArray); - if(sizeof($variantArray) > 1) { + if(sizeof($variantArray) > 1) { $wgOut->addHtml("
\n"); } - # Fields for changing password # $this->mOldpass = htmlspecialchars( $this->mOldpass ); diff --git a/includes/SpecialSitesettings.php b/includes/SpecialSitesettings.php index a47751a835..51eeaeef0f 100644 --- a/includes/SpecialSitesettings.php +++ b/includes/SpecialSitesettings.php @@ -62,6 +62,7 @@ class SiteSettingsForm extends HTMLForm { $this->checkbox( 'wgUseDatabaseMessages' ) . $this->checkbox( 'wgUseCategoryMagic' ) . $this->checkbox( 'wgUseCategoryBrowser' ) . + $this->checkbox( 'wgDisableLangConversion' ). $this->textbox( 'wgHitcounterUpdateFreq' ) . $this->textbox( 'wgExtraSubtitle' ). $this->textbox( 'wgSiteSupportPage' ) . diff --git a/languages/Language.php b/languages/Language.php index 8b6ff6ff80..783e223709 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -2050,10 +2050,15 @@ class Language { # syntax of the markup: # -{code1:text1;code2:text2;...}- or # -{text}- in which case no conversion should take place for text - function convert( $text ) { - + function convert( $text , $isTitle=false) { + global $wgDisableLangConversion; + if($wgDisableLangConversion) + return $text; if(sizeof($this->getVariants())<2) return $text; + + if($isTitle) + return $this->convertTitle($text); // no conversion if redirecting if(substr($text,0,9) == "#REDIRECT") { @@ -2114,7 +2119,13 @@ class Language { function autoConvert($text, $toVariant=false) { return $text; } - + + /* hook for converting the title, which may needs special treatment + */ + function convertTitle($text) { + return $text; + } + # returns a list of language variants for conversion. # right now mainly used in the Chinese conversion function getVariants() { diff --git a/languages/LanguageLatin1.php b/languages/LanguageLatin1.php index ce4a4a3073..d66d2153dc 100644 --- a/languages/LanguageLatin1.php +++ b/languages/LanguageLatin1.php @@ -260,13 +260,20 @@ class LanguageLatin1 { return $this->lang->getPreferredVariant(); } - function convert( $text ) { - return utf8_decode( $this->lang->convert( utf8_encode( $text ) ) ); + function convert( $text, $isTitle=false ) { + return utf8_decode( $this->lang->convert( utf8_encode( $text ), $isTitle ) ); } function autoConvert($text, $toVariant=false) { return utf8_decode( $this->lang->autoConvert( utf8_encode( $text ), $toVariant ) ); } + + /* hook for converting the title, which may needs special treatment + */ + function convertTitle($text) { + return utf8_decode( $this->lang->convertTitle( utf8_encode( $text ) ) ); + } + function getVariants() { return $this->lang->getVariants(); diff --git a/languages/LanguageZh.php b/languages/LanguageZh.php index 738329d1da..a6392e5101 100644 --- a/languages/LanguageZh.php +++ b/languages/LanguageZh.php @@ -102,6 +102,18 @@ class LanguageZh extends LanguageZh_cn { 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"); }