http://www.mediawiki.org/wiki/Special:Code/MediaWiki/73773

Revision: 73773
Author:   nikerabbit
Date:     2010-09-26 13:29:41 +0000 (Sun, 26 Sep 2010)

Log Message:
-----------
Allow translation of titles of translatable pages

Added some encapsulation of getting message group for a translatable page

Modified Paths:
--------------
    trunk/extensions/Translate/tag/PageTranslationHooks.php
    trunk/extensions/Translate/tag/TPParse.php
    trunk/extensions/Translate/tag/TranslatablePage.php

Modified: trunk/extensions/Translate/tag/PageTranslationHooks.php
===================================================================
--- trunk/extensions/Translate/tag/PageTranslationHooks.php     2010-09-26 
13:03:16 UTC (rev 73772)
+++ trunk/extensions/Translate/tag/PageTranslationHooks.php     2010-09-26 
13:29:41 UTC (rev 73773)
@@ -34,6 +34,10 @@
                if ( $page = TranslatablePage::isTranslationPage( $title ) ) {
                        list( , $code ) = TranslateUtils::figureMessage( 
$title->getText() );
                        $parser->getOptions()->setTargetLanguage( 
Language::factory( $code ) );
+                       $name = $page->getPageDisplayTitle( $code );
+                       if ( $name ) {
+                               $parser->getOutput()->setDisplayTitle( $name );
+                       }
                }
 
                return true;
@@ -394,7 +398,7 @@
 
                if ( $marked && $wgUser->isAllowed( 'translate' ) ) {
                        $par = array(
-                               'group' => 'page|' . $title->getPrefixedText(),
+                               'group' => $page->getMessageGroupId(),
                                'language' => $wgLang->getCode(),
                                'task' => 'view'
                        );
@@ -462,7 +466,7 @@
                $wgOut->wrapWikiMsg( $wrap, array( 'tpt-translation-intro', 
$url, $titleText, $per ) );
 
                if ( ((int) $per) < 100 ) {
-                       $group = MessageGroups::getGroup( 'page|' . 
$page->getTitle()->getPrefixedText() );
+                       $group = $page->getMessageGroup();
                        $collection = $group->initCollection( $code );
                        $collection->filter( 'fuzzy', false );
                        if ( count( $collection ) ) {

Modified: trunk/extensions/Translate/tag/TPParse.php
===================================================================
--- trunk/extensions/Translate/tag/TPParse.php  2010-09-26 13:03:16 UTC (rev 
73772)
+++ trunk/extensions/Translate/tag/TPParse.php  2010-09-26 13:29:41 UTC (rev 
73773)
@@ -76,10 +76,12 @@
                $sections = $this->sections;
                $highest = 0;
                foreach ( array_keys( $this->dbSections ) as $key ) {
+                       if ( !is_int( $key ) ) continue;
                        $highest = max( $highest, $key );
                }
 
                foreach ( $sections as $_ ) {
+                       if ( !is_int( $_->id ) ) continue;
                        $highest = max( $_->id, $highest );
                }
 

Modified: trunk/extensions/Translate/tag/TranslatablePage.php
===================================================================
--- trunk/extensions/Translate/tag/TranslatablePage.php 2010-09-26 13:03:16 UTC 
(rev 73772)
+++ trunk/extensions/Translate/tag/TranslatablePage.php 2010-09-26 13:29:41 UTC 
(rev 73773)
@@ -39,6 +39,8 @@
         */
        protected $init = false;
 
+       protected $displayTitle = 'Page display title';
+
        /**
         * @param title Title object for the page
         */
@@ -146,6 +148,34 @@
        // Public functions //
 
        /**
+        * Returns MessageGroup id (to be) used for translating this page.
+        * @return \string
+        */
+       public function getMessageGroupId() {
+               return 'page|' . $this->getTitle()->getPrefixedText();
+       }
+
+       /**
+        * Returns MessageGroup used for translating this page. It may still be 
empty
+        * if the page has not been ever marked.
+        * @return \type{WikiPageMessageGroup}
+        */
+       public function getMessageGroup() {
+               return MessageGroups::getGroup( $this->getMessageGroupId() );
+       }
+
+       /**
+        * Get translated page title.
+        * @param $code \string Language code.
+        * @return \string or null
+        */
+       public function getPageDisplayTitle( $code ) {
+               $section = str_replace( ' ', '_', $this->displayTitle );
+               $page = $this->getTitle()->getPrefixedDBKey();
+               return $this->getMessageGroup()->getMessage( "$page/$section", 
$code );
+       }
+
+       /**
         * Returns a TPParse object which represents the parsed page.
         * Throws TPExcetion if the page is malformed as a translatable
         * page.
@@ -161,6 +191,13 @@
                $text = self::armourNowiki( $nowiki, $text );
 
                $sections = array();
+
+               // Add section to allow translating the page name
+               $displaytitle = new TPSection;
+               $displaytitle->id = $this->displayTitle
+               $displaytitle->text = $this->getTitle()->getPrefixedText();
+               $sections[self::getUniq()] = $displaytitle;
+
                $tagPlaceHolders = array();
 
                while ( true ) {
@@ -500,7 +537,7 @@
                $titles = $this->getTranslationPages();
 
                // Calculate percentages for the available translations
-               $group = MessageGroups::getGroup( 'page|' . 
$this->getTitle()->getPrefixedText() );
+               $group = $this->getMessageGroup();
                if ( !$group instanceof WikiPageMessageGroup ) {
                        return null;
                }
@@ -629,7 +666,6 @@
                $codes = Language::getLanguageNames( false );
                global $wgTranslateDocumentationLanguageCode, $wgContLang;
                unset( $codes[$wgTranslateDocumentationLanguageCode] );
-               unset( $codes[$wgContLang->getCode()] );
 
                if ( !isset( $codes[$code] ) ) {
                        return false;



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to