diff options
Diffstat (limited to 'languages/LanguageConverter.php')
-rw-r--r-- | languages/LanguageConverter.php | 129 |
1 files changed, 78 insertions, 51 deletions
diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index 8b7d6cbe..43afe653 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -47,28 +47,28 @@ class LanguageConverter { 'zh', ); - var $mMainLanguageCode; - var $mVariants, $mVariantFallbacks, $mVariantNames; - var $mTablesLoaded = false; - var $mTables; + public $mMainLanguageCode; + public $mVariants, $mVariantFallbacks, $mVariantNames; + public $mTablesLoaded = false; + public $mTables; // 'bidirectional' 'unidirectional' 'disable' for each variant - var $mManualLevel; + public $mManualLevel; /** * @var String: memcached key name */ - var $mCacheKey; - - var $mLangObj; - var $mFlags; - var $mDescCodeSep = ':', $mDescVarSep = ';'; - var $mUcfirst = false; - var $mConvRuleTitle = false; - var $mURLVariant; - var $mUserVariant; - var $mHeaderVariant; - var $mMaxDepth = 10; - var $mVarSeparatorPattern; + public $mCacheKey; + + public $mLangObj; + public $mFlags; + public $mDescCodeSep = ':', $mDescVarSep = ';'; + public $mUcfirst = false; + public $mConvRuleTitle = false; + public $mURLVariant; + public $mUserVariant; + public $mHeaderVariant; + public $mMaxDepth = 10; + public $mVarSeparatorPattern; const CACHE_VERSION_KEY = 'VERSION 6'; @@ -184,7 +184,7 @@ class LanguageConverter { /** * Get default variant. - * This function would not be affected by user's settings or headers + * This function would not be affected by user's settings * @return String: the default variant code */ public function getDefaultVariant() { @@ -192,6 +192,10 @@ class LanguageConverter { $req = $this->getURLVariant(); + if ( !$req ) { + $req = $this->getHeaderVariant(); + } + if ( $wgDefaultLanguageVariant && !$req ) { $req = $this->validateVariant( $wgDefaultLanguageVariant ); } @@ -406,7 +410,7 @@ class LanguageConverter { $attr = $attrs[$attrName]; // Don't convert URLs if ( !strpos( $attr, '://' ) ) { - $attr = $this->translate( $attr, $toVariant ); + $attr = $this->recursiveConvertTopLevel( $attr, $toVariant ); } // Remove HTML tags to avoid disrupting the layout @@ -546,24 +550,41 @@ class LanguageConverter { public function convertTitle( $title ) { $variant = $this->getPreferredVariant(); $index = $title->getNamespace(); - if ( $index === NS_MAIN ) { + if ( $index !== NS_MAIN ) { + $text = $this->convertNamespace( $index ) . ':'; + } else { $text = ''; + } + $text .= $this->translate( $title->getText(), $variant ); + return $text; + } + + /** + * Get the namespace display name in the preferred variant. + * + * @param $index int namespace id + * @return String: namespace name for display + */ + public function convertNamespace( $index ) { + $variant = $this->getPreferredVariant(); + if ( $index === NS_MAIN ) { + return ''; } else { - // first let's check if a message has given us a converted name + // First check if a message gives a converted name in the target variant. + $nsConvMsg = wfMessage( 'conversion-ns' . $index )->inLanguage( $variant ); + if ( $nsConvMsg->exists() ) { + return $nsConvMsg->plain(); + } + // Then check if a message gives a converted name in content language + // which needs extra translation to the target variant. $nsConvMsg = wfMessage( 'conversion-ns' . $index )->inContentLanguage(); if ( $nsConvMsg->exists() ) { - $text = $nsConvMsg->plain(); - } else { - // the message does not exist, try retrieve it from the current - // variant's namespace names. - $langObj = $this->mLangObj->factory( $variant ); - $text = $langObj->getFormattedNsText( $index ); + return $this->translate( $nsConvMsg->plain(), $variant ); } - $text .= ':'; + // No message exists, retrieve it from the target variant's namespace names. + $langObj = $this->mLangObj->factory( $variant ); + return $langObj->getFormattedNsText( $index ); } - $text .= $title->getText(); - $text = $this->translate( $text, $variant ); - return $text; } /** @@ -597,6 +618,8 @@ class LanguageConverter { if ( $wgDisableLangConversion ) { return $text; } + // Reset converter state for a new converter run. + $this->mConvRuleTitle = false; return $this->recursiveConvertTopLevel( $text, $variant ); } @@ -803,9 +826,9 @@ class LanguageConverter { /** * Guess if a text is written in a variant. This should be implemented in subclasses. * - * @param string $text the text to be checked - * @param string $variant language code of the variant to be checked for - * @return bool true if $text appears to be written in $variant, false if not + * @param string $text the text to be checked + * @param string $variant language code of the variant to be checked for + * @return bool true if $text appears to be written in $variant, false if not * * @author Nikola Smolenski <smolensk@eunet.rs> * @since 1.19 @@ -925,7 +948,11 @@ class LanguageConverter { if ( $title && $title->exists() ) { $revision = Revision::newFromTitle( $title ); if ( $revision ) { - $txt = $revision->getRawText(); + if ( $revision->getContentModel() == CONTENT_MODEL_WIKITEXT ) { + $txt = $revision->getContent( Revision::RAW )->getNativeData(); + } + + //@todo: in the future, use a specialized content model, perhaps based on json! } } } @@ -1035,9 +1062,9 @@ class LanguageConverter { * MediaWiki:Conversiontable* is updated. * @private * - * @param $article Article object + * @param $page WikiPage object * @param $user Object: User object for the current user - * @param $text String: article text (?) + * @param $content Content: new page content * @param $summary String: edit summary of the edit * @param $isMinor Boolean: was the edit marked as minor? * @param $isWatch Boolean: did the user watch this page or not? @@ -1046,9 +1073,9 @@ class LanguageConverter { * @param $revision Object: new Revision object or null * @return Boolean: true */ - function OnArticleSaveComplete( $article, $user, $text, $summary, $isMinor, + function OnPageContentSaveComplete( $page, $user, $content, $summary, $isMinor, $isWatch, $section, $flags, $revision ) { - $titleobj = $article->getTitle(); + $titleobj = $page->getTitle(); if ( $titleobj->getNamespace() == NS_MEDIAWIKI ) { $title = $titleobj->getDBkey(); $t = explode( '/', $title, 3 ); @@ -1113,17 +1140,17 @@ class LanguageConverter { * @author fdcn <fdcn64@gmail.com>, PhiLiP <philip.npc@gmail.com> */ class ConverterRule { - var $mText; // original text in -{text}- - var $mConverter; // LanguageConverter object - var $mRuleDisplay = ''; - var $mRuleTitle = false; - var $mRules = '';// string : the text of the rules - var $mRulesAction = 'none'; - var $mFlags = array(); - var $mVariantFlags = array(); - var $mConvTable = array(); - var $mBidtable = array();// array of the translation in each variant - var $mUnidtable = array();// array of the translation in each variant + public $mText; // original text in -{text}- + public $mConverter; // LanguageConverter object + public $mRuleDisplay = ''; + public $mRuleTitle = false; + public $mRules = '';// string : the text of the rules + public $mRulesAction = 'none'; + public $mFlags = array(); + public $mVariantFlags = array(); + public $mConvTable = array(); + public $mBidtable = array();// array of the translation in each variant + public $mUnidtable = array();// array of the translation in each variant /** * Constructor @@ -1245,7 +1272,7 @@ class ConverterRule { $bidtable[$v] = $to; } elseif ( count( $u ) == 2 ) { $from = trim( $u[0] ); - $v = trim( $u[1] ); + $v = trim( $u[1] ); if ( array_key_exists( $v, $unidtable ) && !is_array( $unidtable[$v] ) && $to |