Localisation updates for core messages from translatewiki.net (2009-06-02 20:45 UTC)
[lhc/web/wiklou.git] / languages / Language.php
index 9828383..418afa7 100644 (file)
@@ -35,6 +35,7 @@ if( function_exists( 'mb_strtoupper' ) ) {
 class FakeConverter {
        var $mLang;
        function FakeConverter($langobj) {$this->mLang = $langobj;}
+       function autoConvertToAllVariants($text) {return $text;}
        function convert($t, $i) {return $t;}
        function parserConvert($t, $p) {return $t;}
        function getVariants() { return array( $this->mLang->getCode() ); }
@@ -46,6 +47,7 @@ class FakeConverter {
        function convertCategoryKey( $key ) {return $key; }
        function convertLinkToAllVariants($text){ return array( $this->mLang->getCode() => $text); }
        function armourMath($text){ return $text; }
+       function groupConvert($group) {return '';}
 }
 
 /**
@@ -63,7 +65,7 @@ class Language {
                'defaultUserOptionOverrides', 'linkTrail', 'namespaceAliases',
                'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
                'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
-               'imageFiles', 'genderAliases'
+               'imageFiles'
        );
 
        static public $mMergeableMapKeys = array( 'messages', 'namespaceNames', 'mathNames',
@@ -265,18 +267,6 @@ class Language {
                return isset( $ns[$index] ) ? $ns[$index] : false;
        }
 
-       /**
-        * Like getNsText, but looks first if there is custom alias for given gender
-        */
-       function getGenderNsText( $index, $gender ) {
-               $this->load();
-               if ( isset( $this->genderAliases[$index][$gender] ) ) {
-                       return $this->genderAliases[$index][$gender];
-               } else {
-                       return $this->getNsText( $index );
-               }
-       }
-
        /**
         * A convenience function that returns the same thing as
         * getNsText() except with '_' changed to ' ', useful for
@@ -578,6 +568,11 @@ class Language {
         *
         *    xkY  Y (full year) in Thai solar calendar. Months and days are
         *                       identical to the Gregorian calendar
+        *    xoY  Y (full year) in Minguo calendar or Juche year.
+        *                       Months and days are identical to the
+        *                       Gregorian calendar
+        *    xtY  Y (full year) in Japanese nengo. Months and days are
+        *                       identical to the Gregorian calendar
         *
         * Characters enclosed in double quotes will be considered literal (with
         * the quotes themselves removed). Unmatched quotes will be considered
@@ -609,6 +604,8 @@ class Language {
                $hebrew = false;
                $hijri = false;
                $thai = false;
+               $minguo = false;
+               $tenno = false;
                for ( $p = 0; $p < strlen( $format ); $p++ ) {
                        $num = false;
                        $code = $format[$p];
@@ -616,7 +613,7 @@ class Language {
                                $code .= $format[++$p];
                        }
 
-                       if ( ( $code === 'xi' || $code == 'xj' || $code == 'xk' || $code == 'xm' ) && $p < strlen( $format ) - 1 ) {
+                       if ( ( $code === 'xi' || $code == 'xj' || $code == 'xk' || $code == 'xm' || $code == 'xo' || $code == 'xt' ) && $p < strlen( $format ) - 1 ) {
                                $code .= $format[++$p];
                        }
 
@@ -760,9 +757,17 @@ class Language {
                                        $num = $hebrew[0];
                                        break;
                                case 'xkY':
-                                       if ( !$thai ) $thai = self::tsToThai( $ts );
+                                       if ( !$thai ) $thai = self::tsToYear( $ts, 'thai' );
                                        $num = $thai[0];
                                        break;
+                               case 'xoY':
+                                       if ( !$minguo ) $minguo = self::tsToYear( $ts, 'minguo' );
+                                       $num = $minguo[0];
+                                       break;
+                               case 'xtY':
+                                       if ( !$tenno ) $tenno = self::tsToYear( $ts, 'tenno' );
+                                       $num = $tenno[0];
+                                       break;
                                case 'y':
                                        $num = substr( $ts, 2, 2 );
                                        break;
@@ -1124,26 +1129,72 @@ class Language {
        }
 
        /**
-        * Algorithm to convert Gregorian dates to Thai solar dates.
+        * Algorithm to convert Gregorian dates to Thai solar dates,
+        * Minguo dates or Minguo dates.
         *
         * Link: http://en.wikipedia.org/wiki/Thai_solar_calendar
+        *       http://en.wikipedia.org/wiki/Minguo_calendar
+        *       http://en.wikipedia.org/wiki/Japanese_era_name
         *
-        * @param $ts String: 14-character timestamp
+        * @param $ts String: 14-character timestamp, calender name
         * @return array converted year, month, day
         */
-       private static function tsToThai( $ts ) {
+       private static function tsToYear( $ts, $cName ) {
                $gy = substr( $ts, 0, 4 );
                $gm = substr( $ts, 4, 2 );
                $gd = substr( $ts, 6, 2 );
 
-               # Add 543 years to the Gregorian calendar
-               # Months and days are identical
-               $gy_thai = $gy + 543;
+               if (!strcmp($cName,'thai')) {
+                       # Thai solar dates
+                       # Add 543 years to the Gregorian calendar
+                       # Months and days are identical
+                       $gy_offset = $gy + 543;
+               } else if ((!strcmp($cName,'minguo')) || !strcmp($cName,'juche')) {
+                       # Minguo dates
+                       # Deduct 1911 years from the Gregorian calendar
+                       # Months and days are identical
+                       $gy_offset = $gy - 1911;
+               } else if (!strcmp($cName,'tenno')) {
+                       # Nengō dates up to Meiji period
+                       # Deduct years from the Gregorian calendar
+                       # depending on the nengo periods
+                       # Months and days are identical
+                       if (($gy < 1912) || (($gy == 1912) && ($gm < 7)) || (($gy == 1912) && ($gm == 7) && ($gd < 31))) {
+                               # Meiji period
+                               $gy_gannen = $gy - 1868 + 1;
+                               $gy_offset = $gy_gannen;
+                               if ($gy_gannen == 1)
+                                       $gy_offset = '元';
+                               $gy_offset = '明治'.$gy_offset;
+                       } else if ((($gy == 1912) && ($gm == 7) && ($gd == 31)) || (($gy == 1912) && ($gm >= 8)) || (($gy > 1912) && ($gy < 1926)) || (($gy == 1926) && ($gm < 12)) || (($gy == 1926) && ($gm == 12) && ($gd < 26))) {
+                               # Taishō period
+                               $gy_gannen = $gy - 1912 + 1;
+                               $gy_offset = $gy_gannen;
+                               if ($gy_gannen == 1)
+                                       $gy_offset = '元';
+                               $gy_offset = '大正'.$gy_offset;
+                       } else if ((($gy == 1926) && ($gm == 12) && ($gd >= 26)) || (($gy > 1926) && ($gy < 1989)) || (($gy == 1989) && ($gm == 1) && ($gd < 8))) {
+                               # Shōwa period
+                               $gy_gannen = $gy - 1926 + 1;
+                               $gy_offset = $gy_gannen;
+                               if ($gy_gannen == 1)
+                                       $gy_offset = '元';
+                               $gy_offset = '昭和'.$gy_offset;
+                       } else {
+                               # Heisei period
+                               $gy_gannen = $gy - 1989 + 1;
+                               $gy_offset = $gy_gannen;
+                               if ($gy_gannen == 1)
+                                       $gy_offset = '元';
+                               $gy_offset = '平成'.$gy_offset;
+                       }
+               } else {
+                       $gy_offset = $gy;
+               }
 
-               return array( $gy_thai, $gm, $gd );
+               return array( $gy_offset, $gm, $gd );
        }
 
-
        /**
         * Roman number formatting up to 3000
         */
@@ -1999,9 +2050,21 @@ class Language {
        function commaList( $list ) {
                return implode(
                        $list,
-                       wfMsgExt( 'comma-separator', array( 'escapenoentities', 'language' => $this ) ) );
+                       wfMsgExt( 'comma-separator', array( 'parsemag', 'escapenoentities', 'language' => $this ) ) );
        }
-       
+
+       /**
+        * Take a list of strings and build a locale-friendly semicolon-separated
+        * list, using the local semicolon-separator message.
+        * @param $list array of strings to put in a semicolon list
+        * @return string
+        */
+       function semicolonList( $list ) {
+               return implode(
+                       $list,
+                       wfMsgExt( 'semicolon-separator', array( 'parsemag', 'escapenoentities', 'language' => $this ) ) );
+       }
+
        /**
         * Same as commaList, but separate it with the pipe instead.
         * @param $list array of strings to put in a pipe list
@@ -2028,7 +2091,12 @@ class Language {
         * @param $ellipsis String to append to the truncated text
         * @return string
         */
-       function truncate( $string, $length, $ellipsis = "" ) {
+       function truncate( $string, $length, $ellipsis = '...' ) {
+               # Use the localized ellipsis character
+               if( $ellipsis == '...' ) {
+                       $ellipsis = wfMsgExt( 'ellipsis', array( 'escapenoentities', 'language' => $this ) );
+               }
+
                if( $length == 0 ) {
                        return $ellipsis;
                }
@@ -2045,7 +2113,7 @@ class Language {
                        } elseif( $char >= 0x80 &&
                                  preg_match( '/^(.*)(?:[\xe0-\xef][\x80-\xbf]|' .
                                              '[\xf0-\xf7][\x80-\xbf]{1,2})$/', $string, $m ) ) {
-                           # We chopped in the middle of a character; remove it
+                               # We chopped in the middle of a character; remove it
                                $string = $m[1];
                        }
                        return $string . $ellipsis;
@@ -2176,6 +2244,11 @@ class Language {
                return $text;
        }
 
+       # convert text to all supported variants
+       function autoConvertToAllVariants($text) {
+               return $this->mConverter->autoConvertToAllVariants($text);
+       }
+
        # convert text to different variants of a language.
        function convert( $text, $isTitle = false) {
                return $this->mConverter->convert($text, $isTitle);
@@ -2285,6 +2358,16 @@ class Language {
        function markNoConversion( $text, $noParse=false ) {
                return $this->mConverter->markNoConversion( $text, $noParse );
        }
+       
+       /**
+        * Callback function for magicword 'groupconvert'
+        *
+        * @param string $group: the group name called for
+        * @return blank string
+        */
+       function groupConvert( $group ) {
+               return $this->mConverter->groupConvert( $group );
+       }
 
        /**
         * A regular expression to match legal word-trailing characters
@@ -2336,7 +2419,7 @@ class Language {
         *
         * @return array Dependencies, map of filenames to mtimes
         */
-       static function loadLocalisation( $code, $disableCache = true ) {
+       static function loadLocalisation( $code, $disableCache = false ) {
                static $recursionGuard = array();
                global $wgMemc, $wgEnableSerializedMessages, $wgCheckSerialized;
 
@@ -2366,6 +2449,8 @@ class Language {
                                                return self::$mLocalisationCache[$code]['deps'];
                                        }
                                }
+                       } else {
+                               $cache = false;
                        }
 
                        # Try the global cache
@@ -2604,12 +2689,6 @@ class Language {
                foreach ( $this->namespaceNames as $index => $name ) {
                        $this->mNamespaceIds[$this->lc($name)] = $index;
                }
-               # Add gender aliases to the normal aliases table automatically
-               foreach ( $this->genderAliases as $index => $aliases ) {
-                       foreach ( $aliases as $alias ) {
-                               $this->namespaceAliases[$alias] = $index;
-                       }
-               }
                if ( $this->namespaceAliases ) {
                        foreach ( $this->namespaceAliases as $name => $index ) {
                                if ( $index === NS_PROJECT_TALK ) {