Fleshed out file
[lhc/web/wiklou.git] / languages / LanguageConverter.php
index 387622e..223336a 100644 (file)
@@ -67,12 +67,12 @@ class LanguageConverter {
        public function __construct( $langobj, $maincode, $variants = array(),
                                                                $variantfallbacks = array(), $flags = array(),
                                                                $manualLevel = array() ) {
-               global $wgDisabledVariants, $wgLanguageNames;
+               global $wgDisabledVariants;
                $this->mLangObj = $langobj;
                $this->mMainLanguageCode = $maincode;
                $this->mVariants = array_diff( $variants, $wgDisabledVariants );
                $this->mVariantFallbacks = $variantfallbacks;
-               $this->mVariantNames = $wgLanguageNames;
+               $this->mVariantNames = Language::getLanguageNames();
                $this->mCacheKey = wfMemcKey( 'conversiontables', $maincode );
                $defaultflags = array(
                        // 'S' show converted text
@@ -288,7 +288,7 @@ class LanguageConverter {
                if ( !$this->mHeaderVariant ) {
                        // process fallback languages now
                        $fallback_languages = array_unique( $fallbackLanguages );
-                       foreach ( $fallbackLanguages as $language ) {
+                       foreach ( $fallback_languages as $language ) {
                                $this->mHeaderVariant = $this->validateVariant( $language );
                                if ( $this->mHeaderVariant ) {
                                        break;
@@ -322,6 +322,10 @@ class LanguageConverter {
                        }
                }
 
+               if( $this->guessVariant( $text, $toVariant ) ) {
+                       return $text;
+               }
+
                /* we convert everything except:
                   1. HTML markups (anything between < and >)
                   2. HTML entities
@@ -468,7 +472,7 @@ class LanguageConverter {
         *
         * @param $text String: the text to be converted
         * @return Array: variant => converted text
-        * @deprecated Use autoConvertToAllVariants() instead
+        * @deprecated since 1.17 Use autoConvertToAllVariants() instead
         */
        public function convertLinkToAllVariants( $text ) {
                return $this->autoConvertToAllVariants( $text );
@@ -527,9 +531,9 @@ class LanguageConverter {
                        $text = '';
                } else {
                        // first let's check if a message has given us a converted name
-                       $nsConvKey = 'conversion-ns' . $index;
-                       if ( !wfEmptyMsg( $nsConvKey ) ) {
-                               $text = wfMsgForContentNoTrans( $nsConvKey );
+                       $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.
@@ -571,7 +575,7 @@ class LanguageConverter {
         */
        public function convertTo( $text, $variant ) {
                global $wgDisableLangConversion;
-               if ( $wgDisableLangConversion ) {
+               if ( $wgDisableLangConversion || $this->guessVariant( $text, $variant ) ) {
                        return $text;
                }
                return $this->recursiveConvertTopLevel( $text, $variant );
@@ -768,6 +772,20 @@ class LanguageConverter {
                return '!' . $variant;
        }
 
+       /**
+        * 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
+        *
+        * @author Nikola Smolenski <smolensk@eunet.rs>
+        * @since 1.18
+        */
+       public function guessVariant($text, $variant) {
+               return false;
+       }
+
        /**
         * Load default conversion tables.
         * This method must be implemented in derived class.
@@ -776,7 +794,7 @@ class LanguageConverter {
         */
        function loadDefaultTables() {
                $name = get_class( $this );
-               wfDie( "Must implement loadDefaultTables() method in class $name" );
+               throw new MWException( "Must implement loadDefaultTables() method in class $name" );
        }
 
        /**
@@ -867,7 +885,7 @@ class LanguageConverter {
                if ( strpos( $code, '/' ) === false ) {
                        $txt = MessageCache::singleton()->get( 'Conversiontable', true, $code );
                        if ( $txt === false ) {
-                               # FIXME: this method doesn't seem to be expecting
+                               # @todo FIXME: This method doesn't seem to be expecting
                                # this possible outcome...
                                $txt = '&lt;Conversiontable&gt;';
                        }