summaryrefslogtreecommitdiff
path: root/languages/LanguageConverter.php
diff options
context:
space:
mode:
Diffstat (limited to 'languages/LanguageConverter.php')
-rw-r--r--languages/LanguageConverter.php129
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