bug fixes from REL1_3
[lhc/web/wiklou.git] / languages / Language.php
index 46b22f9..5145cd2 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+if( defined( "MEDIAWIKI" ) ) {
+
 #
 # In general you should not make customizations in these language files
 # directly, but should use the MediaWiki: special namespace to customize
@@ -76,15 +78,30 @@ define( "MW_MATH_SOURCE", 3 );
 define( "MW_MATH_MODERN", 4 );
 define( "MW_MATH_MATHML", 5 );
 
+# Validation types
+$wgValidationTypesEn = array (
+               "0" => "Style|Awful|Awesome|5",
+               "1" => "Legal|Illegal|Legal|5",
+               "2" => "Completeness|Stub|Extensive|5",
+               "3" => "Facts|Wild guesses|Solid as a rock|5",
+               "4" => "Suitable for 1.0 (paper)|No|Yes|2",
+               "5" => "Suitable for 1.0 (CD)|No|Yes|2"
+               ) ;
+
+
 /* private */ $wgMathNamesEn = array(
-       MW_MATH_PNG => 'Always render PNG',
-       MW_MATH_SIMPLE => 'HTML if very simple or else PNG',
-       MW_MATH_HTML => 'HTML if possible or else PNG',
-       MW_MATH_SOURCE => 'Leave it as TeX (for text browsers)',
-       MW_MATH_MODERN => 'Recommended for modern browsers',
-       MW_MATH_MATHML => 'MathML if possible (experimental)',
+       MW_MATH_PNG => 'mw_math_png',
+       MW_MATH_SIMPLE => 'mw_math_simple',
+       MW_MATH_HTML => 'mw_math_html',
+       MW_MATH_SOURCE => 'mw_math_source',
+       MW_MATH_MODERN => 'mw_math_modern',
+       MW_MATH_MATHML => 'mw_math_mathml'
 );
 
+# Whether to use user or default setting in Language::date()
+define( "MW_DATE_DEFAULT", false );
+define( "MW_DATE_USER_FORMAT", true );
+
 /* private */ $wgDateFormatsEn = array(
        'No preference',
        'January 15, 2001',
@@ -94,25 +111,24 @@ define( "MW_MATH_MATHML", 5 );
 );
 
 /* private */ $wgUserTogglesEn = array(
-       'hover'         => 'Show hoverbox over wiki links',
-       'underline' => 'Underline links',
-       'highlightbroken' => 'Format broken links <a href="" class="new">like
-this</a> (alternative: like this<a href="" class="internal">?</a>).',
-       'justify'       => 'Justify paragraphs',
-       'hideminor' => 'Hide minor edits in recent changes',
-       'usenewrc' => 'Enhanced recent changes (not for all browsers)',
-       'numberheadings' => 'Auto-number headings',
-       'showtoolbar'=>'Show edit toolbar',
-       'editondblclick' => 'Edit pages on double click (JavaScript)',
-       'editsection'=>'Enable section editing via [edit] links',
-       'editsectiononrightclick'=>'Enable section editing by right clicking<br /> on section titles (JavaScript)',
-       'showtoc'=>'Show table of contents<br />(for pages with more than 3 headings)',
-       'rememberpassword' => 'Remember password across sessions',
-       'editwidth' => 'Edit box has full width',
-       'watchdefault' => 'Add pages you edit to your watchlist',
-       'minordefault' => 'Mark all edits minor by default',
-       'previewontop' => 'Show preview before edit box and not after it',
-       'nocache' => 'Disable page caching'
+       'hover',
+       'underline',
+       'highlightbroken',
+       'justify',
+       'hideminor',
+       'usenewrc',
+       'numberheadings',
+       'showtoolbar',
+       'editondblclick',
+       'editsection',
+       'editsectiononrightclick',
+       'showtoc',
+       'rememberpassword',
+       'editwidth',
+       'watchdefault',
+       'minordefault',
+       'previewontop',
+       'nocache',
 );
 
 /* private */ $wgBookstoreListEn = array(
@@ -130,19 +146,25 @@ $wgLanguageNamesEn =& $wgLanguageNames;
 
 
 /* private */ $wgWeekdayNamesEn = array(
-       'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
-       'Friday', 'Saturday'
+       'sunday', 'monday', 'tuesday', 'wednesday', 'thursday',
+       'friday', 'saturday'
 );
 
+
 /* private */ $wgMonthNamesEn = array(
-       'January', 'February', 'March', 'April', 'May', 'June',
-       'July', 'August', 'September', 'October', 'November',
-       'December'
+       'january', 'february', 'march', 'april', 'may_long', 'june',
+       'july', 'august', 'september', 'october', 'november',
+       'december'
+);
+/* private */ $wgMonthNamesGenEn = array(
+       'january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+       'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen',
+       'december-gen'
 );
 
 /* private */ $wgMonthAbbreviationsEn = array(
-       'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
-       'Sep', 'Oct', 'Nov', 'Dec'
+       'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
+       'sep', 'oct', 'nov', 'dec'
 );
 
 # Note to translators:
@@ -204,7 +226,60 @@ $wgLanguageNamesEn =& $wgLanguageNames;
 
 
 /* private */ $wgAllMessagesEn = array(
-
+'special_version_prefix' => '',
+'special_version_postfix' => '',
+# User preference toggles
+'tog-hover'            => 'Show hoverbox over wiki links',
+'tog-underline' => 'Underline links',
+'tog-highlightbroken' => 'Format broken links <a href="" class="new">like this</a> (alternative: like this<a href="" class="internal">?</a>).',
+'tog-justify'  => 'Justify paragraphs',
+'tog-hideminor' => 'Hide minor edits in recent changes',
+'tog-usenewrc' => 'Enhanced recent changes (not for all browsers)',
+'tog-numberheadings' => 'Auto-number headings',
+'tog-showtoolbar'=>'Show edit toolbar',
+'tog-editondblclick' => 'Edit pages on double click (JavaScript)',
+'tog-editsection'=>'Enable section editing via [edit] links',
+'tog-editsectiononrightclick'=>'Enable section editing by right clicking<br /> on section titles (JavaScript)',
+'tog-showtoc'=>'Show table of contents<br />(for pages with more than 3 headings)',
+'tog-rememberpassword' => 'Remember password across sessions',
+'tog-editwidth' => 'Edit box has full width',
+'tog-watchdefault' => 'Add pages you edit to your watchlist',
+'tog-minordefault' => 'Mark all edits minor by default',
+'tog-previewontop' => 'Show preview before edit box and not after it',
+'tog-nocache' => 'Disable page caching',
+
+# dates
+'sunday' => 'Sunday',
+'monday' => 'Monday',
+'tuesday' => 'Tuesday',
+'wednesday' => 'Wednesday',
+'thursday' => 'Thursday',
+'friday' => 'Friday',
+'saturday' => 'Saturday',
+'january' => 'January',
+'february' => 'February',
+'march' => 'March',
+'april' => 'April',
+'may_long' => 'May',
+'june' => 'June',
+'july' => 'July',
+'august' => 'August',
+'september' => 'September',
+'october' => 'October',
+'november' => 'November',
+'december' => 'December',
+'jan' => 'Jan',
+'feb' => 'Feb',
+'mar' => 'Mar',
+'apr' => 'Apr',
+'may' => 'May',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Aug',
+'sep' => 'Sep',
+'oct' => 'Oct',
+'nov' => 'Nov',
+'dec' => 'Dec',
 # Bits of text used by many pages:
 #
 'categories' => 'Categories',
@@ -321,6 +396,7 @@ performed by sysops with  \"bureaucrat\" status.",
 'thisisdeleted' => "View or restore $1?",
 'restorelink' => "$1 deleted edits",
 'feedlinks' => 'Feed:',
+'sitenotice'   => '', # the equivalent to wgSiteNotice
 
 # Short words for each namespace, by default used in the 'article' tab in monobook
 'nstab-main' => 'Article',
@@ -431,7 +507,7 @@ Don't forget to change your {{SITENAME}} preferences.",
 
 'login'                        => 'Log in',
 'loginprompt'           => "You must have cookies enabled to log in to {{SITENAME}}.",
-'userlogin'            => 'Log in',
+'userlogin'            => 'Create an account or log in',
 'logout'               => 'Log out',
 'userlogout'   => 'Log out',
 'notloggedin'  => 'Not logged in',
@@ -532,10 +608,10 @@ If you are here by mistake, just click your browser's '''back''' button.",
 'talkpagetext' => '<!-- MediaWiki:talkpagetext -->',
 'anontalkpagetext' => "----''This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical [[IP address]] to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:Userlogin|create an account or log in]] to avoid future confusion with other anonymous users.'' ",
 'noarticletext' => '(There is currently no text in this page)',
-'clearyourcache' => "'''Note:''' After saving, you have to clear your browser cache to see the changes: '''Mozilla:''' click ''reload''(or ''ctrl-r''), '''IE / Opera:''' ''ctrl-f5'', '''Safari:''' ''cmd-r'', '''Konqueror''' ''ctrl-r''.",
-'usercssjsyoucanpreview' => "<strong>Tip:</strong> Use the 'Show preview' button to test your new css/js before saving.",
-'usercsspreview' => "'''Remember that you are only previewing your user css, it has not yet been saved!'''",
-'userjspreview' => "'''Remember that you are only testing/previewing your user javascript, it has not yet been saved!'''",
+'clearyourcache' => "'''Note:''' After saving, you have to clear your browser cache to see the changes: '''Mozilla:''' click ''Reload'' (or ''Ctrl-R''), '''IE / Opera:''' ''Ctrl-F5'', '''Safari:''' ''Cmd-R'', '''Konqueror''' ''Ctrl-R''.",
+'usercssjsyoucanpreview' => "<strong>Tip:</strong> Use the 'Show preview' button to test your new CSS/JS before saving.",
+'usercsspreview' => "'''Remember that you are only previewing your user CSS, it has not yet been saved!'''",
+'userjspreview' => "'''Remember that you are only testing/previewing your user JavaScript, it has not yet been saved!'''",
 'updated'              => '(Updated)',
 'note'                 => '<strong>Note:</strong> ',
 'previewnote'  => 'Remember that this is only a preview, and has not yet been saved!',
@@ -727,9 +803,7 @@ from server time (UTC).',
 'rcnote'               => "Below are the last <strong>$1</strong> changes in last <strong>$2</strong> days.",
 'rcnotefrom'   => "Below are the changes since <b>$2</b> (up to <b>$1</b> shown).",
 'rclistfrom'   => "Show new changes starting from $1",
-# "rclinks"            => "Show last $1 changes in last $2 hours / last $3 days",
-# "rclinks"            => "Show last $1 changes in last $2 days.",
-'showhideminor' => "$1 minor edits | $2 bots | $3 logged in users ",
+'showhideminor' => "$1 minor edits | $2 bots | $3 logged in users | $4 patrolled edits ",
 'rclinks'              => "Show last $1 changes in last $2 days<br />$3",
 'rchide'               => "in $4 form; $1 minor edits; $2 secondary namespaces; $3 multiple edits.",
 'rcliu'                        => "; $1 edits from logged in users",
@@ -740,7 +814,7 @@ from server time (UTC).',
 'tableform'            => 'table',
 'listform'             => 'list',
 'nchanges'             => "$1 changes",
-'minoreditletter' => 'M',
+'minoreditletter' => 'm',
 'newpageletter' => 'N',
 
 # Upload
@@ -804,9 +878,11 @@ agrees to license it under the terms of the $1.",
 'noaffirmation' => 'You must affirm that your upload does not violate any copyrights.',
 'ignorewarning'        => 'Ignore warning and save file anyway.',
 'minlength'            => 'Image names must be at least three letters.',
+'illegalfilename'      => 'The filename "$1" contains characters that are not allowed in page titles. Please rename the file and try uploading it again.',
 'badfilename'  => "Image name has been changed to \"$1\".",
 'badfiletype'  => "\".$1\" is not a recommended image file format.",
 'largefile'            => 'It is recommended that images not exceed 100k in size.',
+'emptyfile'            => 'The file you uploaded seems to be empty. This might be due to a typo in the file name. Please check whether you really want to upload this file.',
 'fileexists'           => 'A file with this name exists already, please check $1 if you are not sure if you want to change it.',
 'successfulupload' => 'Successful upload',
 'fileuploaded' => "File uploaded successfully.
@@ -885,7 +961,10 @@ That comes to '''$5''' average edits per page, and '''$6''' views per edit.",
 # Miscellaneous special pages
 #
 'orphans'              => 'Orphaned pages',
+'geo'          => 'GEO coordinates',
+'validate'             => 'Validate page',
 'lonelypages'  => 'Orphaned pages',
+'uncategorizedpages'   => 'Uncategorized pages',
 'unusedimages' => 'Unused images',
 'popularpages' => 'Popular pages',
 'nviews'               => '$1 views',
@@ -1072,13 +1151,14 @@ See [[{{ns:4}}:Deletion_log]] for a record of recent deletions and restorations.
 
 # Contributions
 #
-'contributions'        => 'User contributions',
-'mycontris' => 'My contributions',
-'contribsub'   => "For $1",
-'nocontribs'   => 'No changes were found matching these criteria.',
-'ucnote'               => "Below are this user's last <b>$1</b> changes in the last <b>$2</b> days.",
-'uclinks'              => "View the last $1 changes; view the last $2 days.",
-'uctop'                => ' (top)' ,
+'contributions' => 'User contributions',
+'mycontris'     => 'My contributions',
+'contribsub'    => "For $1",
+'nocontribs'    => 'No changes were found matching these criteria.',
+'ucnote'        => "Below are this user's last <b>$1</b> changes in the last <b>$2</b> days.",
+'uclinks'       => "View the last $1 changes; view the last $2 days.",
+'uctop'         => ' (top)' ,
+'newbies'       => 'newbies',
 
 # What links here
 #
@@ -1188,6 +1268,35 @@ Type the name of the user in the box and press the button to make the user an ad
 'set_rights_fail'      => "<b>User rights for \"$1\" could not be set. (Did you enter the name correctly?)</b>",
 'makesysop'         => 'Make a user into a sysop',
 
+# Validation
+'val_clear_old' => 'Clear my other validation data for $1',
+'val_merge_old' => 'Use my previous assessment where selected \'No opinion\'',
+'val_form_note' => '<b>Hint:</b> Merging your data means that for the article
+revision you select, all options where you have specified <i>no opinion</i>
+will be set to the value and comment of the most recent revision for which you
+have expressed an opinion. For example, if you want to change a single option
+for a newer revision, but also keep your other settings for this article in
+this revision, just select which option you intend to <i>change</i>, and
+merging will fill in the other options with your previous settings.',
+'val_noop' => 'No opinion',
+'val_percent' => '<b>$1%</b><br>($2 of $3 points<br>by $4 users)',
+'val_percent_single' => '<b>$1%</b><br>($2 of $3 points<br>by one user)',
+'val_total' => 'Total',
+'val_version' => 'Version',
+'val_tab' => 'Validate',
+'val_this_is_current_version' => 'this is the latest version',
+'val_version_of' => "Version of $1" ,
+'val_table_header' => "<tr><th>Class</th>$1<th colspan=4>Opinion</th>$1<th>Comment</th></tr>\n",
+'val_stat_link_text' => 'Validation statistics for this article',
+'val_view_version' => 'View this version',
+'val_validate_version' => 'Validate this version',
+'val_user_validations' => 'This user has validated $1 pages.',
+'val_no_anon_validation' => 'You have to be logged in to validate an article.',
+'val_validate_article_namespace_only' => 'Only articles can be validated. This page is <i>not</i> in the article namespace.',
+'val_validated' => 'Validation done.',
+'val_article_lists' => 'List of validated articles',
+'val_page_validation_statistics' => 'Page validation statistics for $1',
+
 # Move page
 #
 'movepage'             => 'Move page',
@@ -1311,11 +1420,28 @@ You might want to check the following regular expression for patterns that are c
 
 # Info page
 "infosubtitle" => "Information for page",
-"numedits" => "Number of edits (article): ",
-"numtalkedits" => "Number of edits (discussion page): ",
-"numwatchers" => "Number of watchers: ",
-"numauthors" => "Number of distinct authors (article): ",
-"numtalkauthors" => "Number of distinct authors (discussion page): ",
+"numedits" => "Number of edits (article): $1",
+"numtalkedits" => "Number of edits (discussion page): $1",
+"numwatchers" => "Number of watchers: $1",
+"numauthors" => "Number of distinct authors (article): $1",
+"numtalkauthors" => "Number of distinct authors (discussion page): $1",
+
+# Math options
+'mw_math_png' => 'Always render PNG',
+'mw_math_simple' => 'HTML if very simple or else PNG',
+'mw_math_html' => 'HTML if possible or else PNG',
+'mw_math_source' => 'Leave it as TeX (for text browsers)',
+'mw_math_modern' => 'Recommended for modern browsers',
+'mw_math_mathml' => 'MathML if possible (experimental)',
+
+# Patrolling
+'markaspatrolleddiff'   => "Mark as patrolled",
+'markaspatrolledlink'   => "<div class='patrollink'>[$1]</div>",
+'markaspatrolledtext'   => "Mark this article as patrolled",
+'markedaspatrolled'     => "Marked as patrolled",
+'markedaspatrolledtext' => "The selected revision has been marked as patrolled.",
+'rcpatroldisabled'      => "Recent Changes Patrol disabled",
+'rcpatroldisabledtext'  => "The Recent Changes Patrol feature is currently disabled.",
 
 # Monobook.js: tooltips and access keys for monobook
 'Monobook.js' => '/* tooltips and access keys */
@@ -1451,6 +1577,11 @@ class Language {
                return $wgDateFormatsEn;
        }
 
+       function getValidationTypes() {
+               global $wgValidationTypesEn;
+               return $wgValidationTypesEn;
+       }
+
        function getUserToggles() {
                global $wgUserTogglesEn;
                return $wgUserTogglesEn;
@@ -1458,7 +1589,7 @@ class Language {
 
        function getUserToggle( $tog ) {
                $togs =& $this->getUserToggles();
-               return $togs[$tog];
+               return wfMsg("tog-".$tog);
        }
 
        function getLanguageNames() {
@@ -1477,7 +1608,7 @@ class Language {
        function getMonthName( $key )
        {
                global $wgMonthNamesEn;
-               return $wgMonthNamesEn[$key-1];
+               return wfMsg($wgMonthNamesEn[$key-1]);
        }
 
        /* by default we just return base form */
@@ -1489,13 +1620,13 @@ class Language {
        function getMonthAbbreviation( $key )
        {
                global $wgMonthAbbreviationsEn;
-               return @$wgMonthAbbreviationsEn[$key-1];
+               return wfMsg(@$wgMonthAbbreviationsEn[$key-1]);
        }
 
        function getWeekdayName( $key )
        {
                global $wgWeekdayNamesEn;
-               return $wgWeekdayNamesEn[$key-1];
+               return wfMsg($wgWeekdayNamesEn[$key-1]);
        }
 
        function userAdjust( $ts )
@@ -1525,14 +1656,18 @@ class Language {
                return date( 'YmdHis', $t );
        }
 
-       function date( $ts, $adj = false )
+       function date( $ts, $adj = false, $format = MW_DATE_USER_FORMAT )
        {
                global $wgAmericanDates, $wgUser, $wgUseDynamicDates;
 
                if ( $adj ) { $ts = $this->userAdjust( $ts ); }
-
                if ( $wgUseDynamicDates ) {
-                       $datePreference = $wgUser->getOption( 'date' );
+                       if ( $format == MW_DATE_USER_FORMAT ) {
+                               $datePreference = $wgUser->getOption( 'date' );
+                       } else {
+                               $options = $this->getDefaultUserOptions();
+                               $datePreference = $options['date'];
+                       }
                        if ( $datePreference == 0 ) {
                                $datePreference = $wgAmericanDates ? 1 : 2;
                        }
@@ -1562,9 +1697,9 @@ class Language {
                return $this->formatNum( $t );
        }
 
-       function timeanddate( $ts, $adj = false )
+       function timeanddate( $ts, $adj = false, $format = MW_DATE_USER_FORMAT )
        {
-               return $this->time( $ts, $adj ) . ', ' . $this->date( $ts, $adj );
+               return $this->time( $ts, $adj ) . ', ' . $this->date( $ts, $adj, $format );
        }
 
        function rfc1123( $ts )
@@ -1640,7 +1775,7 @@ class Language {
                # Some languages have special punctuation to strip out
                # or characters which need to be converted for MySQL's
                # indexing to grok it correctly. Make such changes here.
-               return $in;
+               return strtolower( $in );
        }
 
        function firstChar( $s ) {
@@ -1729,22 +1864,47 @@ class Language {
                return $number;
        }
 
-        function listToText( $l ) {
-               $s = '';
-               $m = count($l) - 1;
-               for ($i = $m; $i >= 0; $i--) {
-                   if ($i == $m) {
-                       $s = $l[$i];
-                   } else if ($i == $m - 1) {
-                       $s = $l[$i] . ' ' . $this->getMessage('and') . ' ' . $s;
-                   } else {
-                       $s = $l[$i] . ', ' . $s;
-                   }
+       function listToText( $l ) {
+               $s = '';
+               $m = count($l) - 1;
+               for ($i = $m; $i >= 0; $i--) {
+                       if ($i == $m) {
+                               $s = $l[$i];
+                       } else if ($i == $m - 1) {
+                               $s = $l[$i] . ' ' . $this->getMessage('and') . ' ' . $s;
+                       } else {
+                               $s = $l[$i] . ', ' . $s;
+                       }
+               }
+               return $s;
+       }
+
+       # Crop a string from the beginning or end to a certain number of bytes.
+       # (Bytes are used because our storage has limited byte lengths for some
+       # columns in the database.) Multibyte charsets will need to make sure that
+       # only whole characters are included!
+       #
+       # $length does not include the optional ellipsis.
+       # If $length is negative, snip from the beginning
+       function truncate( $string, $length, $ellipsis = "" ) {
+               if( $length == 0 ) {
+                       return $ellipsis;
+               }
+               if ( strlen( $string ) <= abs( $length ) ) {
+                       return $string;
+               }
+               if( $length > 0 ) {
+                       $string = substr( $string, 0, $length );
+                       return $string . $ellipsis;
+               } else {
+                       $string = substr( $string, $length );
+                       return $ellipsis . $string;
                }
-               return $s;
        }
 }
 
 # This should fail gracefully if there's not a localization available
 @include_once( 'Language' . ucfirst( $wgLanguageCode ) . '.php' );
+
+}
 ?>