<?
+#--------------------------------------------------------------------------
+# Constants
+#--------------------------------------------------------------------------
+
+# Namespaces
+define("NS_SPECIAL", -1);
+define("NS_MAIN", 0);
+define("NS_TALK", 1);
+define("NS_USER", 2);
+define("NS_USER_TALK", 3);
+define("NS_WP", 4);
+define("NS_WP_TALK", 5);
+define("NS_IMAGE", 6);
+define("NS_IMAGE_TALK", 7);
+define("NS_MEDIAWIKI", 8);
+define("NS_MEDIAWIKI_TALK", 9);
+
+# Magic words
+define("MAG_REDIRECT", 0);
+define("MAG_NOTOC", 1);
+define("MAG_START", 2);
+define("MAG_CURRENTMONTH", 3);
+define("MAG_CURRENTMONTHNAME", 4);
+define("MAG_CURRENTDAY", 5);
+define("MAG_CURRENTDAYNAME", 6);
+define("MAG_CURRENTYEAR", 7);
+define("MAG_CURRENTTIME", 8);
+define("MAG_NUMBEROFARTICLES", 9);
+define("MAG_CURRENTMONTHNAMEGEN", 10);
+define("MAG_MSG", 11);
+define("MAG_SUBST", 12);
+define("MAG_MSGNW", 13);
+
+#--------------------------------------------------------------------------
+# Language-specific text
+#--------------------------------------------------------------------------
+
# NOTE: To turn off "Current Events" in the sidebar,
# set "currentevents" => "-"
4 => "Wikipedia",
5 => "Wikipedia_talk",
6 => "Image",
- 7 => "Image_talk"
+ 7 => "Image_talk",
+ 8 => "MediaWiki",
+ 9 => "MediaWiki_talk"
);
/* private */ $wgDefaultUserOptionsEn = array(
"contextlines" => 5, "contextchars" => 50,
"skin" => 0, "math" => 1, "rcdays" => 7, "rclimit" => 50,
"highlightbroken" => 1, "stubthreshold" => 0,
- "previewontop" => 1, "editsection"=>1, "showtoc"=>1
+ "previewontop" => 1, "editsection"=>1,"editsectiononrightclick"=>0, "showtoc"=>1,
+ "date" => 0
);
/* private */ $wgQuickbarSettingsEn = array(
);
/* private */ $wgSkinNamesEn = array(
- "Standard", "Nostalgia", "Cologne Blue"
+ "Standard", "Nostalgia", "Cologne Blue", "Paddington", "Montparnasse"
);
/* private */ $wgMathNamesEn = array(
/* private */ $wgDateFormatsEn = array(
"No preference",
"January 15, 2001",
- "15 January, 2001",
+ "15 January 2001",
"2001 January 15"
);
"hideminor" => "Hide minor edits in recent changes",
"usenewrc" => "Enhanced recent changes (not for all browsers)",
"numberheadings" => "Auto-number headings",
- "editsection"=>"Show links for editing individual sections",
- "showtoc"=>"Show table of contents for articles with more than 3 headings",
+ "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 articles with more than 3 headings)",
"rememberpassword" => "Remember password across sessions",
"editwidth" => "Edit box has full width",
- "editondblclick" => "Edit pages on double click (JavaScript)",
- "watchdefault" => "Watch new and modified articles",
+ "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"
"sr" => "Srpski",
"ss" => "Siswati",
"st" => "Sesotho",
- "su" => "Sudanese",
+ "su" => "Sundanese",
"sv" => "Svenska",
"sw" => "Kiswahili",
"ta" => "Tamil",
"Sep", "Oct", "Nov", "Dec"
);
+/* private */ $wgMagicWordsEn = array(
+# ID CASE SYNONYMS
+ MAG_REDIRECT => array( 0, "#redirect" ),
+ MAG_NOTOC => array( 0, "__NOTOC__" ),
+ MAG_START => array( 0, "__START__" ),
+ MAG_CURRENTMONTH => array( 1, "{{CURRENTMONTH}}" ),
+ MAG_CURRENTMONTHNAME => array( 1, "{{CURRENTMONTHNAME}}" ),
+ MAG_CURRENTDAY => array( 1, "{{CURRENTDAY}}" ),
+ MAG_CURRENTDAYNAME => array( 1, "{{CURRENTDAYNAME}}" ),
+ MAG_CURRENTYEAR => array( 1, "{{CURRENTYEAR}}" ),
+ MAG_CURRENTTIME => array( 1, "{{CURRENTTIME}}" ),
+ MAG_NUMBEROFARTICLES => array( 1, "{{NUMBEROFARTICLES}}" ),
+ MAG_CURRENTMONTHNAMEGEN => array( 1, "{{CURRENTMONTHNAMEGEN}}"),
+ MAG_MSG => array( 1, "{{MSG:$1}}" ),
+ MAG_SUBST => array( 1, "{{SUBST:$1}}" ),
+ MAG_MSGNW => array( 1, "{{MSGNW:$1}}" )
+);
+
# All special pages have to be listed here: a description of ""
# will make them not show up on the "Special Pages" page, which
# is the right thing for some of them (such as the "targeted" ones).
"Intl" => "Interlanguage links",
"Allpages" => "All pages by title",
- "Ipblocklist" => "Blocked IP addresses",
+ "Ipblocklist" => "Blocked users/IP addresses",
"Maintenance" => "Maintenance page",
"Specialpages" => "",
"Contributions" => "",
"Whatlinkshere" => "",
"Recentchangeslinked" => "",
"Movepage" => "",
- "Booksources" => "External book sources"
+ "Booksources" => "External book sources",
+"Categories" => "Page categories",
+"Export" => ""
);
/* private */ $wgSysopSpecialPagesEn = array(
- "Blockip" => "Block an IP address",
+ "Blockip" => "Block a user/IP address",
"Asksql" => "Query the database",
"Undelete" => "Restore deleted pages"
);
# Bits of text used by many pages:
#
+"categories" => "Page categories",
+"category" => "category",
+"category_header" => "Articles in category \"$1\"",
+"subcategories" => "Subcategories",
+
"linktrail" => "/^([a-z]+)(.*)\$/sD",
"mainpage" => "Main Page",
"mainpagetext" => "Wiki software successfully installed.",
"unprotectthispage" => "Unprotect this page",
"newpage" => "New page",
"talkpage" => "Discuss this page",
+"postcomment" => "Post a comment",
"articlepage" => "View article",
"subjectpage" => "View subject", # For compatibility
"userpage" => "View user page",
"newmessageslink" => "new messages",
"editsection"=>"edit",
"toc" => "Table of contents",
+"showtoc" => "show",
+"hidetoc" => "hide",
+"thisisdeleted" => "View or restore $1?",
+"restorelink" => "$1 deleted edits",
# Main script and global functions
#
\"$1\"
from within function \"$2\".
MySQL returned error \"$3: $4\".\n",
-"noconnect" => "Could not connect to DB on $1",
+"noconnect" => "Sorry! The wiki is experiencing some technical difficulties, and cannot contact the database server.",
"nodb" => "Could not select database $1",
+"cachederror" => "The following is a cached copy of the requested page, and may not be up to date.",
"readonly" => "Database locked",
"enterlockreason" => "Enter a reason for the lock, including an estimate
of when the lock will be released",
# Login and logout pages
#
"logouttitle" => "User logout",
-"logouttext" => "You are now logged out.
+"logouttext" => "You are now logged out.
You can continue to use Wikipedia anonymously, or you can log in
-again as the same or as a different user.\n",
+again as the same or as a different user. Note that some pages may
+continue to be displayed as if you were still logged in, until you clear
+your browser cache\n",
"welcomecreation" => "<h2>Welcome, $1!</h2><p>Your account has been created.
Don't forget to personalize your wikipedia preferences.",
"userlogout" => "Log out",
"notloggedin" => "Not logged in",
"createaccount" => "Create new account",
+"createaccountmail" => "by eMail",
"badretype" => "The passwords you entered do not match.",
"userexists" => "The user name you entered is already in use. Please choose a different name.",
"youremail" => "Your e-mail*",
# Edit pages
#
"summary" => "Summary",
+"subject" => "Subject/headline",
"minoredit" => "This is a minor edit",
"watchthis" => "Watch this article",
"savearticle" => "Save page",
"blockedtext" => "Your user name or IP address has been blocked by $1.
The reason given is this:<br>''$2''<p>You may contact $1 or one of the other
[[Wikipedia:administrators|administrators]] to discuss the block.",
+"whitelistedittitle" => "Login required to edit",
+"whitelistedittext" => "You have to [[Special:Userlogin|login]] to edit articles.",
+"whitelistreadtitle" => "Login required to read",
+"whitelistreadtext" => "You have to [[Special:Userlogin|login]] to read articles.",
+"whitelistacctitle" => "You are not allowed to create an account",
+"whitelistacctext" => "To be allowed to create accounts in this Wiki you have to [[Special:Userlogin|log]] in and have the appropriate permissions.",
+"accmailtitle" => "Password sent.",
+"accmailtext" => "The Password for '$1' has been sent to $2.",
"newarticle" => "(New)",
"newarticletext" =>
"You've followed a link to a page that doesn't exist yet.
text editing area as it will appear if you choose to save.",
"editing" => "Editing $1",
"sectionedit" => " (section)",
+"commentedit" => " (comment)",
"editconflict" => "Edit conflict: $1",
"explainconflict" => "Someone else has changed this page since you
started editing it.
Search in namespaces :<br>
$1<br>
$2 List redirects Search for $3 $9",
-
+"searchdisabled" => "<p>Sorry! Full text search has been disabled temporarily, for performance reasons. In the meantime, you can use the Google search below, which may be out of date.</p>
+
+<!-- SiteSearch Google -->
+<FORM method=GET action=\"http://www.google.com/search\">
+<TABLE bgcolor=\"#FFFFFF\"><tr><td>
+<A HREF=\"http://www.google.com/\">
+<IMG SRC=\"http://www.google.com/logos/Logo_40wht.gif\"
+border=\"0\" ALT=\"Google\"></A>
+</td>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value=\"\">
+<INPUT type=submit name=btnG VALUE=\"Google Search\">
+<font size=-1>
+<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"{$wgServer}\" checked> {$wgServer} <br>
+<input type='hidden' name='ie' value='$2'>
+<input type='hidden' name='oe' value='$2'>
+</font>
+</td></tr></TABLE>
+</FORM>
+<!-- SiteSearch Google -->",
+"blanknamespace" => "(Main)",
# Preferences page
#
wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
to set user preferences.",
"prefslogintext" => "You are logged in as \"$1\".
-Your internal ID number is $2.",
+Your internal ID number is $2.
+
+See [[Wikipedia:User preferences help]] for help deciphering the options.",
"prefsreset" => "Preferences have been reset from storage.",
"qbsettings" => "Quickbar settings",
"changepassword" => "Change password",
#
"changes" => "changes",
"recentchanges" => "Recent changes",
-"recentchangestext" => "Track the most recent changes to Wikipedia on this page.
+"recentchangestext" =>
+"Track the most recent changes to Wikipedia on this page.
[[Wikipedia:Welcome,_newcomers|Welcome, newcomers]]!
Please have a look at these pages: [[wikipedia:FAQ|Wikipedia FAQ]],
[[Wikipedia:Policies and guidelines|Wikipedia policy]]
"uploadnologintext" => "You must be <a href=\"" .
wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
to upload files.",
-"uploadfile" => "Upload file",
+"uploadfile" => "Upload images, sounds, documents etc.",
"uploaderror" => "Upload error",
"uploadtext" => "<strong>STOP!</strong> Before you upload here,
make sure to read and follow Wikipedia's <a href=\"" .
",
"filename" => "Filename",
"filedesc" => "Summary",
+"filestatus" => "Copyright status",
+"filesource" => "Source",
"affirmation" => "I affirm that the copyright holder of this file
agrees to license it under the terms of the $1.",
"copyrightpage" => "Wikipedia:Copyrights",
"longpages" => "Long pages",
"listusers" => "User list",
"specialpages" => "Special pages",
-"spheading" => "Special pages",
-"sysopspheading" => "Special pages for sysop use",
-"developerspheading" => "Special pages for developer use",
+"spheading" => "Special pages for all users",
+"sysopspheading" => "For sysop use only",
+"developerspheading" => "For developer use only",
"protectpage" => "Protect page",
"recentchangeslinked" => "Related changes",
"rclsub" => "(to pages linked from \"$1\")",
"watchthispage" => "Watch this page",
"unwatchthispage" => "Stop watching",
"notanarticle" => "Not an article",
+"watchnochange" => "None of your watched items were edited in the time period displayed.",
+"watchdetails" => "($1 pages watched not counting talk pages;
+$2 total pages edited since cutoff;
+$3...
+<a href='$4'>show and edit complete list</a>.)",
+"watchmethod-recent" => "checking recent edits for watched pages",
+"watchmethod-list" => "checking watched pages for recent edits",
+"removechecked" => "Remove checked items from watchlist",
+"watchlistcontains" => "Your watchlist contains $1 pages.",
+"watcheditlist" => "Here's an alphabetical list of your
+watched pages. Check the boxes of pages you want to remove
+from your watchlist and click the 'remove checked' button
+at the bottom of the screen.",
+"removingchecked" => "Removing requested items from watchlist...",
+"couldntremove" => "Couldn't remove item '$1'...",
+"iteminvalidname" => "Problem with item '$1', invalid name...",
+"wlnote" => "Below are the last $1 changes in the last <b>$2</b> hours.",
+"wlshowlast" => "Show last ",
+"wlhours" => " hours",
+"wldays" => " days",
+
# Delete/protect/revert
#
# Block/unblock IP
#
-"blockip" => "Block IP address",
+"blockip" => "Block user",
"blockiptext" => "Use the form below to block write access
-from a specific IP address.
+from a specific IP address or username.
This should be done only only to prevent vandalism, and in
accordance with [[Wikipedia:Policy|Wikipedia policy]].
Fill in a specific reason below (for example, citing particular
pages that were vandalized).",
-"ipaddress" => "IP Address",
+"ipaddress" => "IP Address/username",
"ipbreason" => "Reason",
-"ipbsubmit" => "Block this address",
-"badipaddress" => "The IP address is badly formed.",
+"ipbsubmit" => "Block this user",
+"badipaddress" => "No user exists by that name",
"noblockreason" => "You must supply a reason for the block.",
"blockipsuccesssub" => "Block succeeded",
-"blockipsuccesstext" => "The IP address \"$1\" has been blocked.
+"blockipsuccesstext" => "\"$1\" has been blocked.
<br>See [[Special:Ipblocklist|IP block list]] to review blocks.",
-"unblockip" => "Unblock IP address",
+"unblockip" => "Unblock user",
"unblockiptext" => "Use the form below to restore write access
-to a previously blocked IP address.",
+to a previously blocked IP address or username.",
"ipusubmit" => "Unblock this address",
-"ipusuccess" => "IP address \"$1\" unblocked",
-"ipblocklist" => "List of blocked IP addresses",
+"ipusuccess" => "\"$1\" unblocked",
+"ipblocklist" => "List of blocked IP addresses and usernames",
"blocklistline" => "$1, $2 blocked $3",
"blocklink" => "block",
"unblocklink" => "unblock",
"contribslink" => "contribs",
+"autoblocker" => "Autoblocked because you share an IP address with \"$1\". Reason \"$2\".",
# Developer tools
#
"talkpagemoved" => "The corresponding talk page was also moved.",
"talkpagenotmoved" => "The corresponding talk page was <strong>not</strong> moved.",
+"export" => "Export pages",
+"exporttext" => "You can export the text and editing history of a particular
+page or set of pages wrapped in some XML; this can then be imported into another
+wiki running MediaWiki software, transformed, or just kept for your private
+amusement.",
+"exportcuronly" => "Include only the current revision, not the full history",
+
+# Namespace 8 related
+
+"allmessages" => "All_messages",
+"allmessagestext" => "This is a list of all messages available in the MediaWiki: namespace"
);
+#--------------------------------------------------------------------------
+# Internationalisation code
+#--------------------------------------------------------------------------
+
class Language {
function getDefaultUserOptions () {
function date( $ts, $adj = false )
{
- global $wgAmericanDates, $wgUser;
+ global $wgAmericanDates, $wgUser, $wgUseDynamicDates;
if ( $adj ) { $ts = $this->userAdjust( $ts ); }
-
- $datePreference = $wgUser->getOption('date');
- if ( $datePrefernce == 0 ) {
+
+ if ( $wgUseDynamicDates ) {
+ $datePreference = $wgUser->getOption( 'date' );
+ if ( $datePreference == 0 ) {
+ $datePreference = $wgAmericanDates ? 1 : 2;
+ }
+ } else {
$datePreference = $wgAmericanDates ? 1 : 2;
}
function timeanddate( $ts, $adj = false )
{
- return $this->time( $ts, $adj ) . " " . $this->date( $ts, $adj );
+ return $this->time( $ts, $adj ) . ", " . $this->date( $ts, $adj );
}
function rfc1123( $ts )
return $wgAllMessagesEn[$key];
}
+ function getAllMessages()
+ {
+ global $wgAllMessagesEn;
+ return $wgAllMessagesEn;
+ }
+
function iconv( $in, $out, $string ) {
# For most languages, this is a wrapper for iconv
return iconv( $in, $out, $string );
function replaceDates( $text )
{
- global $wgUser;
+ global $wgUser, $wgInputEncoding, $wgUseDynamicDates;
+ # Feature can be disabled
+ if ( !$wgUseDynamicDates ) {
+ return;
+ }
+
# Setup
- $datePreference = $wgUser->getOption('date');
- static $monthNames = "", $rxDM, $rxMD, $rxY, $rxDMY, $rxYMD, $rxMDY, $rxYMD;
+ $datePreference = $wgUser->getOption( 'date' );
+
+ static $monthNames = "", $rxDM, $rxMD, $rxY, $rxDMY, $rxYDM, $rxMDY, $rxYMD;
if ( $monthNames == "" ) {
$monthNames = $this->getMonthRegex();
- $rxDM = '\[\[(\d{1,2})[ _](' . $monthNames . ')]](?![a-z])';
- $rxMD = '\[\[(' . $monthNames . ')[ _](\d{1,2})]](?![a-z])';
- $rxY = '\[\[(\d{1,4}([ _]BC|))]](?![a-z])';
- $rxDMY = "/{$rxDM} *, *{$rxY}/i";
- $rxYDM = "/{$rxY} *, *{$rxDM}/i";
- $rxMDY = "/{$rxMD} *, *{$rxY}/i";
- $rxYMD = "/{$rxY} *, *{$rxMD}/i";
+ # Attempt at UTF-8 support, untested at the moment
+ if ( $wgInputEncoding == 'UTF-8' ) {
+ $regexTrail = '(?![a-z])/iu';
+ } else {
+ $regexTrail = '(?![a-z])/i';
+ }
+
+ # Partial regular expressions
+ $prxDM = '\[\[(\d{1,2})[ _](' . $monthNames . ')]]';
+ $prxMD = '\[\[(' . $monthNames . ')[ _](\d{1,2})]]';
+ $prxY = '\[\[(\d{1,4}([ _]BC|))]]';
+
+ # Real regular expressions
+ $rxDMY = "/{$prxDM} *,? *{$prxY}{$regexTrail}";
+ $rxYDM = "/{$prxY} *,? *{$prxDM}{$regexTrail}";
+ $rxMDY = "/{$prxMD} *,? *{$prxY}{$regexTrail}";
+ $rxYMD = "/{$prxY} *,? *{$prxMD}{$regexTrail}";
+ $rxDM = "/{$prxDM}{$regexTrail}";
+ $rxMD = "/{$prxMD}{$regexTrail}";
+ $rxY = "/{$prxY}{$regexTrail}";
}
# Do replacements
# TODO: month capitalisation?
if ( $datePreference == 0 ) {
# no preference
- $text = preg_replace( $rxDMY, '[[$2 $1|$1 $2]], [[$3]]', $text);
+ $text = preg_replace( $rxDMY, '[[$2 $1|$1 $2]] [[$3]]', $text);
$text = preg_replace( $rxYDM, '[[$1]] [[$4 $3]]', $text);
$text = preg_replace( $rxMDY, '[[$1 $2]], [[$3]]', $text);
$text = preg_replace( $rxYMD, '[[$1]] [[$3 $4]]', $text);
- $text = preg_replace ( "/$rxDM/i", '[[$2 $1|$1 $2]]', $text);
+ $text = preg_replace ( $rxDM, '[[$2 $1|$1 $2]]', $text);
} else if ( $datePreference == 1 ) {
# MDY preferred
$text = preg_replace( $rxDMY, '[[$2 $1]], [[$3]]', $text);
$text = preg_replace( $rxYDM, '[[$4 $3]], [[$1]]', $text);
$text = preg_replace( $rxMDY, '[[$1 $2]], [[$3]]', $text);
$text = preg_replace( $rxYMD, '[[$3 $4]], [[$1]]', $text);
- $text = preg_replace ( "/$rxDM/i", '[[$2 $1]]', $text);
+ $text = preg_replace ( $rxDM, '[[$2 $1]]', $text);
} else if ( $datePreference == 2 ) {
# DMY preferred
- $text = preg_replace( $rxDMY, '[[$2 $1|$1 $2]], [[$3]]', $text);
- $text = preg_replace( $rxYDM, '[[$4 $3|$3 $4]], [[$1]]', $text);
- $text = preg_replace( $rxMDY, '[[$1 $2|$2 $1]], [[$3]]', $text);
- $text = preg_replace( $rxYMD, '[[$3 $4|$4 $3]], [[$1]]', $text);
- $text = preg_replace ( "/$rxDM/i", '[[$2 $1|$1 $2]]', $text);
- $text = preg_replace ( "/$rxMD/i", '[[$1 $2|$2 $1]]', $text);
+ $text = preg_replace( $rxDMY, '[[$2 $1|$1 $2]] [[$3]]', $text);
+ $text = preg_replace( $rxYDM, '[[$4 $3|$3 $4]] [[$1]]', $text);
+ $text = preg_replace( $rxMDY, '[[$1 $2|$2 $1]] [[$3]]', $text);
+ $text = preg_replace( $rxYMD, '[[$3 $4|$4 $3]] [[$1]]', $text);
+ $text = preg_replace ( $rxDM, '[[$2 $1|$1 $2]]', $text);
+ $text = preg_replace ( $rxMD, '[[$1 $2|$2 $1]]', $text);
} else if ( $datePreference == 3 ) {
# YMD preferred
$text = preg_replace( $rxDMY, '[[$3]] [[$2 $1]]', $text);
$text = preg_replace( $rxYDM, '[[$1]] [[$4 $3]]', $text);
$text = preg_replace( $rxMDY, '[[$3]] [[$1 $2]]', $text);
$text = preg_replace( $rxYMD, '[[$1]] [[$3 $4]]', $text);
- $text = preg_replace ( "/$rxDM/i", '[[$2 $1]]', $text);
+ $text = preg_replace ( $rxDM, '[[$2 $1]]', $text);
}
return $text;
}
+
+ # For right-to-left language support
+ function isRTL() { return false; }
+
+ function getMagicWords()
+ {
+ global $wgMagicWordsEn;
+ return $wgMagicWordsEn;
+ }
+
+ # Fill a MagicWord object with data from here
+ function getMagic( &$mw )
+ {
+ $raw = $this->getMagicWords(); # don't worry, it's reference counted not deep copy
+ $rawEntry = $raw[$mw->mId];
+ $mw->mCaseSensitive = $rawEntry[0];
+ $mw->mSynonyms = array_slice( $rawEntry, 1 );
+ }
}
global $IP;