From 8d8ffdd8d846602c57762f6b700036fccc150252 Mon Sep 17 00:00:00 2001 From: Zheng Zhu Date: Mon, 22 Nov 2004 21:14:38 +0000 Subject: [PATCH] Convert a link to all variants before checking for existence. The reduce the number of connections made to zhdaemon. --- languages/Language.php | 53 ++++++++++++++++++++++++++-------------- languages/LanguageZh.php | 15 ++++++++++-- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/languages/Language.php b/languages/Language.php index 9f0c9373cb..2089c1b9a3 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -2106,6 +2106,25 @@ class Language { return $text; } + /* returns all possible variants of the given text + + normally we will just call autoConvert() for each variant, but + in case of zh where the conversion is performed by zhdaemon, + possibily over the network, we want to + cut down the number of connections to save time. + */ + function autoConvertToAllVariants($text) { + $ret = array(); + $variants = $this->getVariants(); + if(sizeof($variants)==1) { + return $false; + } + foreach( $variants as $lang=>$v ) { + $ret[$v] = $this->autoConvert( $text, $v ); + } + return $ret; + } + /* hook for converting the title, which may needs special treatment */ function convertTitle( $text ) { @@ -2155,28 +2174,26 @@ class Language { */ function findVariantLink( &$link, &$nt ) { static $count=0; //used to limit this operation - global $wgDisableLangConversion, $wgContLang; - if( $wgDisableLangConversion ) + static $cache=array(); + global $wgDisableLangConversion; + $count++; + if( $wgDisableLangConversion || $count > 50) return; - $variants = $wgContLang->getVariants(); - if( sizeof( $variants ) > 1 && $count++ < 200 ) { - if( $nt->getArticleID() == 0 ) { - foreach( $variants as $v ) { - if( $v == $wgContLang->getPreferredVariant() ) - continue; - $varlink = $wgContLang->autoConvert( $link, $v ); - $varnt = Title::newFromText( $varlink ); - if( $varnt && $varnt->getArticleID() > 0 ) { - $nt = $varnt; - $link = $varlink; - break; - } - } + $variants = $this->autoConvertToAllVariants($link); + if($variants == false) //give up + return; + foreach( $variants as $v ) { + if(isset($cache[$v])) + continue; + $cache[$v] = 1; + $varnt = Title::newFromText( $v ); + if( $varnt && $varnt->getArticleID() > 0 ) { + $nt = $varnt; + $link = $varlink; + break; } } } - - } # This should fail gracefully if there's not a localization available diff --git a/languages/LanguageZh.php b/languages/LanguageZh.php index c80a4afa56..c81a21e566 100644 --- a/languages/LanguageZh.php +++ b/languages/LanguageZh.php @@ -60,13 +60,24 @@ class LanguageZh extends LanguageZh_cn { function autoConvert($text, $toVariant=false) { if(!$toVariant) $toVariant = $this->getPreferredVariant(); - $fname="zhconvert"; + $fname="zhautoConvert"; wfProfileIn( $fname ); $t = $this->mZhClient->convert($text, $toVariant); wfProfileOut( $fname ); return $t; } - + + function autoConvertToAllVariants($text) { + $fname="zhautoConvertToAll"; + wfProfileIn( $fname ); + $ret = $this->mZhClient->convertToAllVariants($text); + if($ret == false) {//fall back... + $ret = Language::autoConvertToAllVariants($text); + } + wfProfileOut( $fname ); + return $ret; + } + # only convert titles having more than one character function convertTitle($text) { $len=0; -- 2.20.1