static $fname = 'Parser::replaceInternalLinks' ;
# use a counter to prevent too much unknown links from
# being checked for different language variants.
- static $convertCount;
wfProfileIn( $fname );
wfProfileIn( $fname.'-setup' );
wfProfileOut( $fname.'-setup' );
+ $checkVariantLink = sizeof($wgContLang->getVariants())>1;
# Loop for each link
for ($k = 0; isset( $a[$k] ); $k++) {
$line = $a[$k];
#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( $nt->getArticleID() == 0
+ && $checkVariantLink ) {
+ $wgContLang->findVariantLink($link, $nt);
}
+
$ns = $nt->getNamespace();
$iw = $nt->getInterWiki();
$lang = strtolower(substr(get_class($this), 8));
return $lang;
}
+
+ /* if a language supports multiple variants, it is
+ possible that non-existing link in one variant
+ actually exists in another variant. this function
+ tries to find it.
+
+ */
+ function findVariantLink(&$link, &$nt) {
+ static $count=0; //used to limit this operation
+ global $wgDisableLangConversion, $wgContLang;
+ if($wgDisableLangConversion)
+ 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;
+ }
+ }
+ }
+ }
+ }
+
+
}
# This should fail gracefully if there's not a localization available