Introduce Language::getMessageKeysFor() and use it in ApiQueryAllmessages
authorRoan Kattouw <catrope@users.mediawiki.org>
Wed, 14 Sep 2011 16:48:29 +0000 (16:48 +0000)
committerRoan Kattouw <catrope@users.mediawiki.org>
Wed, 14 Sep 2011 16:48:29 +0000 (16:48 +0000)
includes/api/ApiQueryAllmessages.php
includes/specials/SpecialAllmessages.php
languages/Language.php

index bf11370..d900d54 100644 (file)
@@ -65,7 +65,7 @@ class ApiQueryAllmessages extends ApiQueryBase {
 
                // Determine which messages should we print
                if ( in_array( '*', $params['messages'] ) ) {
-                       $message_names = array_keys( Language::getMessagesFor( 'en' ) );
+                       $message_names = Language::getMessageKeysFor( $langObj->getCode() );
                        sort( $message_names );
                        $messages_target = $message_names;
                } else {
index 4a8db66..7b7ed42 100644 (file)
@@ -249,6 +249,7 @@ class AllmessagesTablePager extends TablePager {
         * @param bool $foreign Whether the $langcode is not the content language
         */
        public static function getCustomisedStatuses( $messageNames, $langcode = 'en', $foreign = false ) {
+               // FIXME: This function should be moved to Language:: or something.
                wfProfileIn( __METHOD__ . '-db' );
 
                $dbr = wfGetDB( DB_SLAVE );
index 15f3329..8723a97 100644 (file)
@@ -3371,7 +3371,8 @@ class Language {
 
        /**
         * Get all messages for a given language
-        * WARNING: this may take a long time
+        * WARNING: this may take a long time. If you just need all message *keys*
+        * but need the *contents* of only a few messages, consider using getMessageKeysFor().
         *
         * @param $code string
         *
@@ -3392,6 +3393,16 @@ class Language {
        static function getMessageFor( $key, $code ) {
                return self::getLocalisationCache()->getSubitem( $code, 'messages', $key );
        }
+       
+       /**
+        * Get all message keys for a given language. This is a faster alternative to
+        * array_keys( Language::getMessagesFor( $code ) )
+        * @param $code string Language code
+        * @return array of message keys (strings)
+        */
+       static function getMessageKeysFor( $code ) {
+               return self::getLocalisationCache()->getSubItemList( $code, 'messages' );
+       }
 
        /**
         * @param $talk