summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <nobody@localhost>2004-06-17 08:43:19 +0000
committernobody <nobody@localhost>2004-06-17 08:43:19 +0000
commita99758e2bb061136fe96b93b08434eedaad55623 (patch)
tree757ebda48605ce385aca93a2e81c79c6a02e1777
parentd5c8171a3157337557bc54ecb730d7dd35778ca3 (diff)
parent5e8b510fe2506c474a6992e9652c8728b9937ae0 (diff)
This commit was manufactured by cvs2svn to create tag1.3.0beta4
'REL1_3_0beta4'.
-rw-r--r--.cvsignore1
-rw-r--r--PHPTAL-NP-0.7.0/libs/PHPTAL/OutputControl.php4
-rw-r--r--RELEASE-NOTES18
-rw-r--r--config/index.php122
-rw-r--r--img_auth.php173
-rw-r--r--includes/Article.php798
-rw-r--r--includes/Block.php42
-rw-r--r--includes/BlockCache.php12
-rw-r--r--includes/CacheManager.php30
-rw-r--r--includes/Database.php59
-rw-r--r--includes/DatabaseFunctions.php132
-rw-r--r--includes/DatabasePostgreSQL.php547
-rwxr-xr-xincludes/DateFormatter.php52
-rw-r--r--includes/DefaultSettings.php125
-rw-r--r--includes/DifferenceEngine.php44
-rw-r--r--includes/EditPage.php72
-rw-r--r--includes/Feed.php28
-rw-r--r--includes/GlobalFunctions.php306
-rw-r--r--includes/HistoryBlob.php64
-rw-r--r--includes/Image.php21
-rw-r--r--includes/ImagePage.php6
-rw-r--r--includes/LinkCache.php51
-rw-r--r--includes/LoadBalancer.php76
-rw-r--r--includes/MagicWord.php2
-rw-r--r--includes/Math.php4
-rwxr-xr-xincludes/MessageCache.php2
-rw-r--r--includes/ObjectCache.php56
-rw-r--r--includes/OutputPage.php65
-rw-r--r--includes/PageHistory.php28
-rw-r--r--includes/Parser.php1592
-rw-r--r--includes/ParserCache.php89
-rwxr-xr-xincludes/Profiling.php2
-rw-r--r--includes/QueryPage.php2
-rw-r--r--includes/RawPage.php56
-rw-r--r--includes/RecentChange.php68
-rw-r--r--includes/SearchEngine.php11
-rw-r--r--includes/SearchUpdate.php6
-rw-r--r--includes/Setup.php144
-rw-r--r--includes/SiteConfiguration.php65
-rw-r--r--includes/SiteStatsUpdate.php6
-rw-r--r--includes/Skin.php1166
-rw-r--r--includes/SkinCologneBlue.php11
-rw-r--r--includes/SkinNostalgia.php6
-rw-r--r--includes/SkinPHPTal.php287
-rw-r--r--includes/SkinStandard.php4
-rw-r--r--includes/SpecialAllpages.php4
-rw-r--r--includes/SpecialAncientpages.php4
-rw-r--r--includes/SpecialCategories.php75
-rw-r--r--includes/SpecialContributions.php7
-rw-r--r--includes/SpecialDeadendpages.php30
-rw-r--r--includes/SpecialListadmins.php34
-rw-r--r--includes/SpecialListusers.php58
-rw-r--r--includes/SpecialLonelypages.php40
-rw-r--r--includes/SpecialPage.php12
-rw-r--r--includes/SpecialPreferences.php27
-rw-r--r--includes/SpecialRandompage.php6
-rw-r--r--includes/SpecialRecentchanges.php4
-rw-r--r--includes/SpecialShortpages.php7
-rw-r--r--includes/SpecialStatistics.php7
-rw-r--r--includes/SpecialUnusedimages.php2
-rw-r--r--includes/SpecialUpload.php5
-rw-r--r--includes/SpecialUserlogin.php41
-rw-r--r--includes/SpecialWatchlist.php18
-rw-r--r--includes/SpecialWhatlinkshere.php2
-rw-r--r--includes/Title.php197
-rw-r--r--includes/User.php14
-rw-r--r--includes/UserTalkUpdate.php1
-rw-r--r--includes/ViewCountUpdate.php9
-rw-r--r--includes/WatchedItem.php18
-rw-r--r--includes/memcached-client.php10
-rw-r--r--index.php8
-rw-r--r--install-utils.inc16
-rw-r--r--irc/rc2irc.php2
-rw-r--r--irc/rcdumper.php16
-rw-r--r--languages/Language.php1955
-rw-r--r--languages/LanguageAf.php3
-rw-r--r--languages/LanguageAr.php2
-rw-r--r--languages/LanguageBg.php1871
-rw-r--r--languages/LanguageBn.php3
-rw-r--r--languages/LanguageCa.php36
-rw-r--r--languages/LanguageCs.php3
-rw-r--r--languages/LanguageCy.php22
-rw-r--r--languages/LanguageDa.php861
-rw-r--r--languages/LanguageDe.php726
-rw-r--r--languages/LanguageEl.php37
-rw-r--r--languages/LanguageEo.php6
-rw-r--r--languages/LanguageEs.php932
-rw-r--r--languages/LanguageEt.php3
-rw-r--r--languages/LanguageFa.php3
-rw-r--r--languages/LanguageFi.php3
-rw-r--r--languages/LanguageFr.php30
-rw-r--r--languages/LanguageFy.php3
-rwxr-xr-xlanguages/LanguageGa.php3
-rw-r--r--languages/LanguageHe.php3
-rw-r--r--languages/LanguageHu.php3
-rw-r--r--languages/LanguageIa.php3
-rw-r--r--languages/LanguageId.php2
-rw-r--r--languages/LanguageIt.php35
-rw-r--r--languages/LanguageJa.php117
-rw-r--r--languages/LanguageKo.php3
-rw-r--r--languages/LanguageLa.php3
-rw-r--r--languages/LanguageLatin1.php252
-rw-r--r--languages/LanguageMs.php3
-rw-r--r--languages/LanguageNl.php437
-rw-r--r--languages/LanguageNo.php44
-rw-r--r--languages/LanguageOc.php3
-rw-r--r--languages/LanguagePl.php97
-rw-r--r--languages/LanguagePt.php34
-rw-r--r--languages/LanguageRo.php3
-rw-r--r--languages/LanguageRu.php3
-rw-r--r--languages/LanguageSk.php3
-rw-r--r--languages/LanguageSl.php3
-rw-r--r--languages/LanguageSq.php3
-rw-r--r--languages/LanguageSv.php1317
-rw-r--r--languages/LanguageTa.php3
-rw-r--r--languages/LanguageTh.php3
-rw-r--r--languages/LanguageTlh.php56
-rwxr-xr-xlanguages/LanguageUk.php2
-rw-r--r--languages/LanguageUr.php2
-rw-r--r--languages/LanguageUtf8.php11
-rw-r--r--languages/LanguageWa.php1321
-rw-r--r--languages/LanguageYi.php2
-rw-r--r--languages/LanguageZh.php35
-rw-r--r--languages/Names.php204
-rw-r--r--maintenance/DiffLanguage.php18
-rwxr-xr-xmaintenance/InitialiseMessages.inc76
-rw-r--r--maintenance/archives/moveCustomMessages.inc149
-rw-r--r--maintenance/archives/moveCustomMessages.php128
-rw-r--r--maintenance/archives/patch-linkscc-1.3.sql6
-rw-r--r--maintenance/archives/patch-profiling.sql10
-rw-r--r--maintenance/attribute.php31
-rw-r--r--maintenance/commandLine.inc119
-rw-r--r--maintenance/compressOld.inc2
-rw-r--r--maintenance/compressOld.php26
-rw-r--r--maintenance/convertLinks.inc202
-rw-r--r--maintenance/convertLinks.php192
-rw-r--r--maintenance/dumpMessages.php9
-rwxr-xr-xmaintenance/eval.php16
-rw-r--r--maintenance/indexes.sql3
-rw-r--r--maintenance/liveCmdLine.inc53
-rwxr-xr-xmaintenance/mcc.php31
-rwxr-xr-xmaintenance/rebuildMessages.php53
-rw-r--r--maintenance/rebuildall.php32
-rw-r--r--maintenance/rebuildlinks.php20
-rw-r--r--maintenance/rebuildrecentchanges.php17
-rw-r--r--maintenance/rebuildtextindex.php18
-rw-r--r--maintenance/refreshLinks.inc46
-rw-r--r--maintenance/refreshLinks.php41
-rw-r--r--maintenance/remove-brokenlinks.php18
-rw-r--r--maintenance/tables.sql10
-rw-r--r--maintenance/trivialCmdLine.php11
-rw-r--r--maintenance/update2.php43
-rw-r--r--maintenance/updaters.inc21
-rw-r--r--maintenance/wikipedia-interwiki.sql1
-rw-r--r--maintenance/wiktionary-interwiki.sql1
-rw-r--r--stylesheets/cologneblue.css4
-rw-r--r--stylesheets/common.css81
-rw-r--r--stylesheets/commonPrint.css53
-rw-r--r--stylesheets/monobook/IE55Fixes.css27
-rw-r--r--stylesheets/monobook/IE60Fixes.css22
-rw-r--r--stylesheets/monobook/main.css177
-rw-r--r--stylesheets/monobook/null0
-rw-r--r--stylesheets/monobook/rtl.css23
-rw-r--r--stylesheets/wikibits.js53
-rw-r--r--stylesheets/wikiprintable.css2
-rw-r--r--stylesheets/wikistandard.css15
-rw-r--r--templates/xhtml_slim.pt81
-rw-r--r--update.php1
168 files changed, 11996 insertions, 7587 deletions
diff --git a/.cvsignore b/.cvsignore
index c2bf726ed9af..2bd1d29b8672 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -1,2 +1,3 @@
LocalSettings.php
AdminSettings.php
+*~
diff --git a/PHPTAL-NP-0.7.0/libs/PHPTAL/OutputControl.php b/PHPTAL-NP-0.7.0/libs/PHPTAL/OutputControl.php
index ce3c3403d629..a62bf9244f45 100644
--- a/PHPTAL-NP-0.7.0/libs/PHPTAL/OutputControl.php
+++ b/PHPTAL-NP-0.7.0/libs/PHPTAL/OutputControl.php
@@ -65,7 +65,9 @@ class PHPTAL_OutputControl
} else {
// $this->_buffer .= htmlentities($str);
// support for cyrillic strings thanks to Igor E. Poteryaev
- $this->_buffer .= htmlentities($str, $this->_quoteStyle, $this->_encoding);
+ // **** hacked to htmlspecialchars() to avoid messing with text.
+ // **** PHP prior to 4.3.7 contains bugs that mess up Greek.
+ $this->_buffer .= htmlspecialchars($str, $this->_quoteStyle, $this->_encoding);
}
}
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 8ad826ba9d1a..599214d0c89e 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,6 +1,6 @@
= MediaWiki release notes =
-== Version 1.3.0beta1, 2004-05-21 ==
+== Version 1.3.0beta3, 2004-06-12 ==
**** THIS IS A BETA AND MAY STUNT YOUR GROWTH OR KILL YOUR PETS ****
@@ -17,6 +17,7 @@ Wiki features:
* Templates have been expanded with parameters, and separated from
the MediaWiki: localization scheme.
* Categories more or less work
+* added a special page for listing users with sysop rights.
Editing:
* Automatic merging of edit conflicts that don't directly interfere
@@ -24,7 +25,7 @@ Editing:
Metadata and output:
* Linked Creative Commons copyright metadata (optional)
-* RSS 2.0 feeds for Recent Changes, New Pages
+* RSS 2.0 & Atom 0.3 feeds for Recent Changes, New Pages
Optional modules:
* WikiHiero hieroglyphic module can be added (separate download)
@@ -50,6 +51,8 @@ Code and compatibility:
* Most image-related code moved to Image.php
* More fixes for PHP 4.1.2 (thanks to Asheesh Laroia)
* URL encoding fix for anchors
+* All languages now available in UTF-8 mode
+* Various other fixes
=== Caveats ===
@@ -60,6 +63,17 @@ cases, but this is not recommended on live sites. (This must be set for
MathML to display properly in Mozilla.)
+== Version 1.2.6, 2004-05-24 ==
+* Spam blocker ($wgSpamRegex - refuses to save edits that match)
+* Updated documentation about $wgWhitelistRead
+* Ensure that searchindex table is created as MyISAM
+* Interwiki cache timeout (memcached)
+* Fix uploads on Windows with magic_quotes_gpc
+* Some config fixes for Windows (slashes etc)
+* Local interwiki URL redirects
+* Fixed obscure deletion problem in squid mode on corrupt entries
+* Language files updated to remove more hard-coded "Wikipedia" strings
+
== Version 1.2.5, 2004-05-01 ==
* Fixed install problem with blank root password
* Fixed Special:Emailuser/Username links
diff --git a/config/index.php b/config/index.php
index 16d17a2f716f..0d1381d4a684 100644
--- a/config/index.php
+++ b/config/index.php
@@ -18,7 +18,9 @@
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# http://www.gnu.org/copyleft/gpl.html
+error_reporting( E_ALL );
header( "Content-type: text/html; charset=utf-8" );
+@ini_set( "display_errors", true );
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
@@ -109,6 +111,8 @@ $IP = ".."; # Just to suppress notices, not for anything useful
define( "MEDIAWIKI", true );
define( "MEDIAWIKI_INSTALL", true );
require( "../includes/DefaultSettings.php" );
+require( "../includes/MagicWord.php" );
+require( "../includes/Namespace.php" );
?>
<h1>MediaWiki <?php print $wgVersion ?> installation</h1>
@@ -153,14 +157,17 @@ if( !is_writable( "." ) ) {
require( "../install-utils.inc" );
require( "../maintenance/updaters.inc" );
+require( "../maintenance/convertLinks.inc" );
+require( "../maintenance/archives/moveCustomMessages.inc" );
+
class ConfigData {
function getEncoded( $data ) {
# Hackish
- global $wgInputEncoding;
- if( strcasecmp( $wgInputEncoding, "utf-8" ) == 0 ) {
- return $data;
- } else {
+ global $wgUseLatin1;
+ if( $wgUseLatin1 ) {
return utf8_decode( $data ); /* to latin1 wikis */
+ } else {
+ return $data;
}
}
function getSitename() { return $this->getEncoded( $this->Sitename ); }
@@ -201,6 +208,35 @@ default:
}
print "</li>\n";
+$conf->xml = function_exists( "utf8_encode" );
+if( $conf->xml ) {
+ print "<li>Have XML / Latin1-UTF-8 conversion support.</li>\n";
+} else {
+ print "<li><b>XML / Latin1-UTF-8 conversion is missing! Wiki will probably not work.</b></li>\n";
+}
+
+$memlimit = ini_get( "memory_limit" );
+$conf->raiseMemory = false;
+if( empty( $memlimit ) ) {
+ print "<li>PHP is configured with no <tt>memory_limit</tt>.</li>\n";
+} else {
+ print "<li>PHP's <tt>memory_limit</tt> is " . htmlspecialchars( $memlimit ) . ". <b>If this is too low, installation may fail!</b> ";
+ $n = IntVal( $memlimit );
+ if( preg_match( '/^([0-9]+)[Mm]$/', trim( $memlimit ), $m ) ) {
+ $n = IntVal( $m[1] * (1024*1024) );
+ }
+ if( $n < 20*1024*1024 ) {
+ print "Attempting to raise limit to 20M... ";
+ if( false === ini_set( "memory_limit", "20M" ) ) {
+ print "failed.";
+ } else {
+ $conf->raiseMemory = true;
+ print "ok.";
+ }
+ }
+ print "</li>\n";
+}
+
$conf->zlib = function_exists( "gzencode" );
if( $conf->zlib ) {
print "<li>Have zlib support; enabling output compression.</li>\n";
@@ -251,7 +287,7 @@ print "<li>Script URI path: <tt>" . htmlspecialchars( $conf->ScriptPath ) . "</t
$conf->DBpassword = importPost( "DBpassword" );
$conf->DBpassword2 = importPost( "DBpassword2" );
$conf->RootPW = importPost( "RootPW" );
- $conf->LanguageCode = importPost( "LanguageCode", "en-utf8" );
+ $conf->LanguageCode = importPost( "LanguageCode", "en" );
$conf->SysopName = importPost( "SysopName", "WikiSysop" );
$conf->SysopPass = importPost( "SysopPass" );
$conf->SysopPass2 = importPost( "SysopPass2" );
@@ -397,13 +433,23 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
do_interwiki_update(); flush();
do_index_update(); flush();
do_linkscc_update(); flush();
+ do_linkscc_1_3_update(); flush();
do_hitcounter_update(); flush();
do_recentchanges_update(); flush();
- echo "FIXME: need the link table change here\n";
+ convertLinks(); flush();
do_user_real_name_update(); flush();
do_querycache_update(); flush();
do_objectcache_update(); flush();
do_categorylinks_update(); flush();
+
+ if ( isTemplateInitialised() ) {
+ print "Template namespace already initialised\n";
+ } else {
+ moveCustomMessages( 1 ); flush();
+ moveCustomMessages( 2 ); flush();
+ moveCustomMessages( 3 ); flush();
+ }
+
initialiseMessages(); flush();
chdir( "config" );
@@ -676,9 +722,11 @@ function writeLocalSettings( $conf ) {
$conf->DBmysql4 = @$conf->DBmysql4 ? 'true' : 'false';
$conf->UseImageResize = $conf->UseImageResize ? 'true' : 'false';
$conf->PasswordSender = $conf->EmergencyContact;
- if( $conf->LanguageCode == "en-utf8" ) {
- $conf->LanguageCode = "en";
- $conf->Encoding = "UTF-8";
+ if( preg_match( '/^([a-z]+)-latin1$/', $conf->LanguageCode, $m ) ) {
+ $conf->LanguageCode = $m[1];
+ $conf->Latin1 = true;
+ } else {
+ $conf->Latin1 = false;
}
$zlib = ($conf->zlib ? "" : "# ");
$magic = ($conf->ImageMagick ? "" : "# ");
@@ -686,8 +734,19 @@ function writeLocalSettings( $conf ) {
$pretty = ($conf->prettyURLs ? "" : "# ");
$ugly = ($conf->prettyURLs ? "# " : "");
$rights = ($conf->RightsUrl) ? "" : "# ";
+
+ $file = @fopen( "/dev/random", "r" );
+ if ( $file ) {
+ $proxyKey = bin2hex( fread( $file, 32 ) );
+ fclose( $file );
+ } else {
+ $proxyKey = "";
+ for ( $i=0; $i<8; $i++ ) {
+ $proxyKey .= dechex(mt_rand(0, 0x7fffffff));
+ }
+ print "Warning: \$wgProxyKey is insecure\n";
+ }
-# $proxyKey = Parser::getRandomString() . Parser::getRandomString();
# Add slashes to strings for double quoting
$slconf = array_map( "addslashes", get_object_vars( $conf ) );
@@ -698,10 +757,13 @@ function writeLocalSettings( $conf ) {
# If you make manual changes, please keep track in case you need to
# recreate them later.
-\$IP = \"{$slconf[IP]}\";
-ini_set( \"include_path\", \"\$IP/includes$sep\$IP/languages$sep\" . ini_get(\"include_path\") );
+\$IP = \"{$slconf['IP']}\";
+ini_set( \"include_path\", \".$sep\$IP$sep\$IP/includes$sep\$IP/languages\" );
include_once( \"DefaultSettings.php\" );
+# If PHP's memory limit is very low, some operations may fail.
+" . ($conf->raiseMemory ? '' : '# ' ) . "ini_set( 'memory_limit', '20M' );" . "
+
if ( \$wgCommandLineMode ) {
if ( isset( \$_SERVER ) && array_key_exists( 'REQUEST_METHOD', \$_SERVER ) ) {
die( \"This script must be run from the command line\\n\" );
@@ -711,9 +773,9 @@ if ( \$wgCommandLineMode ) {
{$zlib}if( !ini_get( 'zlib.output_compression' ) ) ob_start( 'ob_gzhandler' );
}
-\$wgSitename = \"{$slconf[Sitename]}\";
+\$wgSitename = \"{$slconf['Sitename']}\";
-\$wgScriptPath = \"{$slconf[ScriptPath]}\";
+\$wgScriptPath = \"{$slconf['ScriptPath']}\";
\$wgScript = \"\$wgScriptPath/index.php\";
\$wgRedirectScript = \"\$wgScriptPath/redirect.php\";
@@ -728,13 +790,13 @@ if ( \$wgCommandLineMode ) {
\$wgUploadPath = \"\$wgScriptPath/images\";
\$wgUploadDirectory = \"\$IP/images\";
-\$wgEmergencyContact = \"{$slconf[EmergencyContact]}\";
-\$wgPasswordSender = \"{$slconf[PasswordSender]}\";
+\$wgEmergencyContact = \"{$slconf['EmergencyContact']}\";
+\$wgPasswordSender = \"{$slconf['PasswordSender']}\";
-\$wgDBserver = \"{$slconf[DBserver]}\";
-\$wgDBname = \"{$slconf[DBname]}\";
-\$wgDBuser = \"{$slconf[DBuser]}\";
-\$wgDBpassword = \"{$slconf[DBpassword]}\";
+\$wgDBserver = \"{$slconf['DBserver']}\";
+\$wgDBname = \"{$slconf['DBname']}\";
+\$wgDBuser = \"{$slconf['DBuser']}\";
+\$wgDBpassword = \"{$slconf['DBpassword']}\";
## To allow SQL queries through the wiki's Special:Askaql page,
## uncomment the next lines. THIS IS VERY INSECURE. If you want
@@ -764,16 +826,15 @@ if ( \$wgCommandLineMode ) {
\$wgLocalInterwiki = \$wgSitename;
-\$wgLanguageCode = \"{$slconf[LanguageCode]}\";
-" . ($conf->Encoding ? "\$wgInputEncoding = \$wgOutputEncoding = \"{$slconf[Encoding]}\";" : "" ) . "
+\$wgLanguageCode = \"{$slconf['LanguageCode']}\";
+\$wgUseLatin1 = " . ($conf->Latin1 ? 'true' : 'false') . ";\n
+
+\$wgProxyKey = \"$proxyKey\";
## Default skin: you can change the default skin. Use the internal symbolic
## names, ie 'standard', 'nostalgia', 'cologneblue', 'monobook':
# \$wgDefaultSkin = 'monobook';
-## This is incomplete, ignore it:
-#\$wgProxyKey = $proxyKey;
-
## For attaching licensing metadata to pages, and displaying an
## appropriate copyright notice / icon. GNU Free Documentation
## License and Creative Commons licenses are supported so far.
@@ -843,23 +904,24 @@ function getLanguageList() {
$wgLanguageCode = "xxx";
function wfLocalUrl( $x ) { return $x; }
function wfLocalUrlE( $x ) { return $x; }
- require( "../languages/Language.php" );
+ require( "../languages/Names.php" );
}
$codes = array();
- $latin1 = array( "da", "de", "en", "es", "nl", "sv" );
+ $latin1 = array( "da", "de", "en", "es", "fr", "nl", "sv" );
$d = opendir( "../languages" );
while( false !== ($f = readdir( $d ) ) ) {
if( preg_match( '/Language([A-Z][a-z]+)\.php$/', $f, $m ) ) {
$code = strtolower( $m[1] );
- $codes[$code] = "$code - " . $wgLanguageNames[$code];
if( in_array( $code, $latin1 ) ) {
- $codes[$code] .= " - Latin-1";
+ $codes[$code] = "$code - " . $wgLanguageNames[$code] . " - Unicode";
+ $codes[$code.'-latin1'] = "$code - " . $wgLanguageNames[$code] . " - Latin-1";
+ } else {
+ $codes[$code] = "$code - " . $wgLanguageNames[$code];
}
}
}
- $codes["en-utf8"] = "en - English - Unicode";
closedir( $d );
ksort( $codes );
return $codes;
diff --git a/img_auth.php b/img_auth.php
new file mode 100644
index 000000000000..02240ceea9e1
--- /dev/null
+++ b/img_auth.php
@@ -0,0 +1,173 @@
+<?php
+# Image download authorisation script
+# To use, in LocalSettings.php set $wgUploadDirectory to point to a non-public directory, and
+# $wgUploadPath to point to this file. Also set $wgWhitelistRead to an array of pages you want
+# everyone to be able to access. Your server must support PATH_INFO, CGI-based configurations
+# generally don't.
+
+define( "MEDIAWIKI", true );
+require_once( "./LocalSettings.php" );
+require_once( "includes/Setup.php" );
+
+# Get filenames/directories
+$filename = realpath( $wgUploadDirectory . $_SERVER['PATH_INFO'] );
+$realUploadDirectory = realpath( $wgUploadDirectory );
+$imageName = $wgLang->getNsText( NS_IMAGE ) . ":" . basename( $_SERVER['PATH_INFO'] );
+
+# Check if the filename is in the correct directory
+if ( substr( $filename, 0, strlen( $realUploadDirectory ) ) != $realUploadDirectory ) {
+ wfForbidden();
+}
+
+if ( is_array( $wgWhitelistRead ) && !in_array( $imageName, $wgWhitelistRead ) && !$wgUser->getID() ) {
+ wfForbidden();
+}
+
+# Write file
+$type = wfGetType( $filename );
+if ( $type ) {
+ header("Content-type: $type");
+}
+
+readfile( $filename );
+
+function wfGetType( $filename ) {
+ # There's probably a better way to do this
+ $types = <<<END_STRING
+application/andrew-inset ez
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+application/mathml+xml mathml
+application/msword doc
+application/octet-stream bin dms lha lzh exe class so dll
+application/oda oda
+application/ogg ogg
+application/pdf pdf
+application/postscript ai eps ps
+application/rdf+xml rdf
+application/smil smi smil
+application/srgs gram
+application/srgs+xml grxml
+application/vnd.mif mif
+application/vnd.ms-excel xls
+application/vnd.ms-powerpoint ppt
+application/vnd.wap.wbxml wbxml
+application/vnd.wap.wmlc wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/voicexml+xml vxml
+application/x-bcpio bcpio
+application/x-cdlink vcd
+application/x-chess-pgn pgn
+application/x-cpio cpio
+application/x-csh csh
+application/x-director dcr dir dxr
+application/x-dvi dvi
+application/x-futuresplash spl
+application/x-gtar gtar
+application/x-hdf hdf
+application/x-javascript js
+application/x-koan skp skd skt skm
+application/x-latex latex
+application/x-netcdf nc cdf
+application/x-sh sh
+application/x-shar shar
+application/x-shockwave-flash swf
+application/x-stuffit sit
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex tex
+application/x-texinfo texinfo texi
+application/x-troff t tr roff
+application/x-troff-man man
+application/x-troff-me me
+application/x-troff-ms ms
+application/x-ustar ustar
+application/x-wais-source src
+application/xhtml+xml xhtml xht
+application/xslt+xml xslt
+application/xml xml xsl
+application/xml-dtd dtd
+application/zip zip
+audio/basic au snd
+audio/midi mid midi kar
+audio/mpeg mpga mp2 mp3
+audio/x-aiff aif aiff aifc
+audio/x-mpegurl m3u
+audio/x-pn-realaudio ram rm
+audio/x-pn-realaudio-plugin rpm
+audio/x-realaudio ra
+audio/x-wav wav
+chemical/x-pdb pdb
+chemical/x-xyz xyz
+image/bmp bmp
+image/cgm cgm
+image/gif gif
+image/ief ief
+image/jpeg jpeg jpg jpe
+image/png png
+image/svg+xml svg
+image/tiff tiff tif
+image/vnd.djvu djvu djv
+image/vnd.wap.wbmp wbmp
+image/x-cmu-raster ras
+image/x-icon ico
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-xbitmap xbm
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+model/iges igs iges
+model/mesh msh mesh silo
+model/vrml wrl vrml
+text/calendar ics ifb
+text/css css
+text/html html htm
+text/plain asc txt
+text/richtext rtx
+text/rtf rtf
+text/sgml sgml sgm
+text/tab-separated-values tsv
+text/vnd.wap.wml wml
+text/vnd.wap.wmlscript wmls
+text/x-setext etx
+video/mpeg mpeg mpg mpe
+video/quicktime qt mov
+video/vnd.mpegurl mxu
+video/x-msvideo avi
+video/x-sgi-movie movie
+x-conference/x-cooltalk ice";
+END_STRING;
+ $endl = "
+";
+ $types = explode( $endl, $types );
+ if ( !preg_match( "/\.(.*?)$/", $filename, $matches ) ) {
+ return false;
+ }
+
+ foreach( $types as $type ) {
+ $extensions = explode( " ", $type );
+ for ( $i=1; $i<count( $extensions ); $i++ ) {
+ if ( $extensions[$i] == $matches[1] ) {
+ return $extensions[0];
+ }
+ }
+ }
+ return false;
+}
+
+function wfForbidden() {
+ header( "HTTP/1.0 403 Forbidden" );
+ print
+"<html><body>
+<h1>Access denied</h1>
+<p>You need to log in to access files on this server</p>
+</body></html>";
+ exit;
+}
+
+?>
diff --git a/includes/Article.php b/includes/Article.php
index 6ccdb7bb2a40..b1c1cd154f6e 100644
--- a/includes/Article.php
+++ b/includes/Article.php
@@ -1,11 +1,13 @@
<?php
+# $Id$
+#
# Class representing a Wikipedia article and history.
# See design.doc for an overview.
# Note: edit user interface and cache support functions have been
# moved to separate EditPage and CacheManager classes.
-require_once( "CacheManager.php" );
+require_once( 'CacheManager.php' );
class Article {
/* private */ var $mContent, $mContentLoaded;
@@ -25,39 +27,169 @@ class Article {
$this->mContentLoaded = false;
$this->mCurID = $this->mUser = $this->mCounter = -1; # Not loaded
$this->mRedirectedFrom = $this->mUserText =
- $this->mTimestamp = $this->mComment = $this->mFileCache = "";
+ $this->mTimestamp = $this->mComment = $this->mFileCache = '';
$this->mCountAdjustment = 0;
- $this->mTouched = "19700101000000";
+ $this->mTouched = '19700101000000';
}
- /* static */ function getRevisionText( $row, $prefix = "old_" ) {
- # Deal with optional compression of archived pages.
- # This can be done periodically via maintenance/compressOld.php, and
- # as pages are saved if $wgCompressRevisions is set.
- $text = $prefix . "text";
- $flags = $prefix . "flags";
- if( isset( $row->$flags ) && (false !== strpos( $row->$flags, "gzip" ) ) ) {
- return gzinflate( $row->$text );
+ # Get revision text associated with an old or archive row
+ # $row is usually an object from wfFetchRow(), both the flags and the text field must be included
+ /* static */ function getRevisionText( $row, $prefix = 'old_' ) {
+ # Get data
+ $textField = $prefix . 'text';
+ $flagsField = $prefix . 'flags';
+
+ if ( isset( $row->$flagsField ) ) {
+ $flags = explode( ",", $row->$flagsField );
+ } else {
+ $flags = array();
+ }
+
+ if ( isset( $row->$textField ) ) {
+ $text = $row->$textField;
+ } else {
+ return false;
}
- if( isset( $row->$text ) ) {
- return $row->$text;
+
+ if ( in_array( 'link', $flags ) ) {
+ # Handle link type
+ $text = Article::followLink( $text );
+ } elseif ( in_array( 'gzip', $flags ) ) {
+ # Deal with optional compression of archived pages.
+ # This can be done periodically via maintenance/compressOld.php, and
+ # as pages are saved if $wgCompressRevisions is set.
+ return gzinflate( $text );
}
- return false;
+ return $text;
}
/* static */ function compressRevisionText( &$text ) {
global $wgCompressRevisions;
if( !$wgCompressRevisions ) {
- return "";
+ return '';
}
- if( !function_exists( "gzdeflate" ) ) {
+ if( !function_exists( 'gzdeflate' ) ) {
wfDebug( "Article::compressRevisionText() -- no zlib support, not compressing\n" );
- return "";
+ return '';
}
$text = gzdeflate( $text );
- return "gzip";
+ return 'gzip';
}
+ # Returns the text associated with a "link" type old table row
+ /* static */ function followLink( $link ) {
+ # Split the link into fields and values
+ $lines = explode( '\n', $link );
+ $hash = '';
+ $locations = array();
+ foreach ( $lines as $line ) {
+ # Comments
+ if ( $line{0} == '#' ) {
+ continue;
+ }
+ # Field/value pairs
+ if ( preg_match( '/^(.*?)\s*:\s*(.*)$/', $line, $matches ) ) {
+ $field = strtolower($matches[1]);
+ $value = $matches[2];
+ if ( $field == 'hash' ) {
+ $hash = $value;
+ } elseif ( $field == 'location' ) {
+ $locations[] = $value;
+ }
+ }
+ }
+
+ if ( $hash === '' ) {
+ return false;
+ }
+
+ # Look in each specified location for the text
+ $text = false;
+ foreach ( $locations as $location ) {
+ $text = Article::fetchFromLocation( $location, $hash );
+ if ( $text !== false ) {
+ break;
+ }
+ }
+
+ return $text;
+ }
+
+ /* static */ function fetchFromLocation( $location, $hash ) {
+ global $wgDatabase, $wgKnownDBServers;
+ $fname = 'fetchFromLocation';
+ wfProfileIn( $fname );
+
+ $p = strpos( $location, ':' );
+ if ( $p === false ) {
+ wfProfileOut( $fname );
+ return false;
+ }
+
+ $type = substr( $location, 0, $p );
+ $text = false;
+ switch ( $type ) {
+ case 'mysql':
+ # MySQL locations are specified by mysql://<machineID>/<dbname>/<tblname>/<index>
+ # Machine ID 0 is the current connection
+ if ( preg_match( '/^mysql:\/\/(\d+)\/([A-Za-z_]+)\/([A-Za-z_]+)\/([A-Za-z_]+)$/',
+ $location, $matches ) ) {
+ $machineID = $matches[1];
+ $dbName = $matches[2];
+ $tblName = $matches[3];
+ $index = $matches[4];
+ if ( $machineID == 0 ) {
+ # Current connection
+ $db =& wfGetDB();
+ } else {
+ # Alternate connection
+ $db =& $wgLoadBalancer->getConnection( $machineID );
+
+ if ( array_key_exists( $machineId, $wgKnownMysqlServers ) ) {
+ # Try to open, return false on failure
+ $params = $wgKnownDBServers[$machineId];
+ $db = Database::newFromParams( $params['server'], $params['user'], $params['password'],
+ $dbName, 1, false, true, true );
+ }
+ }
+ if ( $db->isOpen() ) {
+ $index = wfStrencode( $index );
+ $res = $db->query( "SELECT blob_data FROM $dbName.$tblName WHERE blob_index='$index'", $fname );
+ $row = $db->fetchObject( $res );
+ $text = $row->text_data;
+ }
+ }
+ break;
+ case 'file':
+ # File locations are of the form file://<filename>, relative to the current directory
+ if ( preg_match( '/^file:\/\/(.*)$', $location, $matches ) )
+ $filename = strstr( $location, 'file://' );
+ $text = @file_get_contents( $matches[1] );
+ }
+ if ( $text !== false ) {
+ # Got text, now we need to interpret it
+ # The first line contains information about how to do this
+ $p = strpos( $text, '\n' );
+ $type = substr( $text, 0, $p );
+ $text = substr( $text, $p + 1 );
+ switch ( $type ) {
+ case 'plain':
+ break;
+ case 'gzip':
+ $text = gzinflate( $text );
+ break;
+ case 'object':
+ $object = unserialize( $text );
+ $text = $object->getItem( $hash );
+ break;
+ default:
+ $text = false;
+ }
+ }
+ wfProfileOut( $fname );
+ return $text;
+ }
+
# Note that getContent/loadContent may follow redirects if
# not told otherwise, and so may cause a change to mTitle.
@@ -70,34 +202,34 @@ class Article {
$action = $wgRequest->getText( 'action', 'view' );
$section = $wgRequest->getText( 'section' );
- $fname = "Article::getContent";
+ $fname = 'Article::getContent';
wfProfileIn( $fname );
if ( 0 == $this->getID() ) {
- if ( "edit" == $action ) {
+ if ( 'edit' == $action ) {
wfProfileOut( $fname );
- return ""; # was "newarticletext", now moved above the box)
+ return ''; # was "newarticletext", now moved above the box)
}
wfProfileOut( $fname );
- return wfMsg( "noarticletext" );
+ return wfMsg( 'noarticletext' );
} else {
$this->loadContent( $noredir );
if(
# check if we're displaying a [[User talk:x.x.x.x]] anonymous talk page
( $this->mTitle->getNamespace() == Namespace::getTalk( Namespace::getUser()) ) &&
- preg_match("/^\d{1,3}\.\d{1,3}.\d{1,3}\.\d{1,3}$/",$this->mTitle->getText()) &&
- $action=="view"
+ preg_match('/^\d{1,3}\.\d{1,3}.\d{1,3}\.\d{1,3}$/',$this->mTitle->getText()) &&
+ $action=='view'
)
{
wfProfileOut( $fname );
- return $this->mContent . "\n" .wfMsg("anontalkpagetext"); }
+ return $this->mContent . "\n" .wfMsg('anontalkpagetext'); }
else {
- if($action=="edit") {
- if($section!="") {
- if($section=="new") {
+ if($action=='edit') {
+ if($section!='') {
+ if($section=='new') {
wfProfileOut( $fname );
- return "";
+ return '';
}
# strip NOWIKI etc. to avoid confusion (true-parameter causes HTML
@@ -132,18 +264,18 @@ class Article {
# split it up by section
$secs =
preg_split(
- "/(^=+.*?=+|^<h[1-6].*?" . ">.*?<\/h[1-6].*?" . ">)/mi",
+ '/(^=+.*?=+|^<h[1-6].*?' . '>.*?<\/h[1-6].*?' . '>)/mi',
$striptext, -1,
PREG_SPLIT_DELIM_CAPTURE);
if($section==0) {
$rv=$secs[0];
} else {
$headline=$secs[$section*2-1];
- preg_match( "/^(=+).*?=+|^<h([1-6]).*?>.*?<\/h[1-6].*?>/mi",$headline,$matches);
+ preg_match( '/^(=+).*?=+|^<h([1-6]).*?' . '>.*?<\/h[1-6].*?' . '>/mi',$headline,$matches);
$hlevel=$matches[1];
# translate wiki heading into level
- if(strpos($hlevel,"=")!==false) {
+ if(strpos($hlevel,'=')!==false) {
$hlevel=strlen($hlevel);
}
@@ -154,9 +286,9 @@ class Article {
while(!empty($secs[$count*2-1]) && !$break) {
$subheadline=$secs[$count*2-1];
- preg_match( "/^(=+).*?=+|^<h([1-6]).*?>.*?<\/h[1-6].*?>/mi",$subheadline,$matches);
+ preg_match( '/^(=+).*?=+|^<h([1-6]).*?' . '>.*?<\/h[1-6].*?' . '>/mi',$subheadline,$matches);
$subhlevel=$matches[1];
- if(strpos($subhlevel,"=")!==false) {
+ if(strpos($subhlevel,'=')!==false) {
$subhlevel=strlen($subhlevel);
}
if($subhlevel > $hlevel) {
@@ -171,6 +303,7 @@ class Article {
}
# reinsert stripped tags
$rv=$parser->unstrip($rv,$striparray);
+ $rv=$parser->unstripNoWiki($rv,$striparray);
$rv=trim($rv);
return $rv;
@@ -180,14 +313,14 @@ class Article {
# Load the revision (including cur_text) into this object
function loadContent( $noredir = false )
{
- global $wgOut, $wgMwRedir, $wgRequest;
+ global $wgOut, $wgMwRedir, $wgRequest, $wgIsPg;
# Query variables :P
$oldid = $wgRequest->getVal( 'oldid' );
$redirect = $wgRequest->getVal( 'redirect' );
if ( $this->mContentLoaded ) return;
- $fname = "Article::loadContent";
+ $fname = 'Article::loadContent';
# Pre-fill content with error message so that if something
# fails we'll have something telling us what we intended.
@@ -198,17 +331,17 @@ class Article {
$t .= ",oldid={$oldid}";
}
if ( isset( $redirect ) ) {
- $redirect = ($redirect == "no") ? "no" : "yes";
+ $redirect = ($redirect == 'no') ? 'no' : 'yes';
$t .= ",redirect={$redirect}";
}
- $this->mContent = wfMsg( "missingarticle", $t );
+ $this->mContent = wfMsg( 'missingarticle', $t );
if ( ! $oldid ) { # Retrieve current version
$id = $this->getID();
if ( 0 == $id ) return;
- $sql = "SELECT " .
- "cur_text,cur_timestamp,cur_user,cur_counter,cur_restrictions,cur_touched " .
+ $sql = 'SELECT ' .
+ 'cur_text,cur_timestamp,cur_user,cur_user_text,cur_comment,cur_counter,cur_restrictions,cur_touched ' .
"FROM cur WHERE cur_id={$id}";
wfDebug( "$sql\n" );
$res = wfQuery( $sql, DB_READ, $fname );
@@ -219,9 +352,9 @@ class Article {
$s = wfFetchObject( $res );
# If we got a redirect, follow it (unless we've been told
# not to by either the function parameter or the query
- if ( ( "no" != $redirect ) && ( false == $noredir ) &&
+ if ( ( 'no' != $redirect ) && ( false == $noredir ) &&
( $wgMwRedir->matchStart( $s->cur_text ) ) ) {
- if ( preg_match( "/\\[\\[([^\\]\\|]+)[\\]\\|]/",
+ if ( preg_match( '/\\[\\[([^\\]\\|]+)[\\]\\|]/',
$s->cur_text, $m ) ) {
$rt = Title::newFromText( $m[1] );
if( $rt ) {
@@ -229,7 +362,7 @@ class Article {
# Fill the HTTP response "Location" header and ignore
# the rest of the page we're on.
- if ( $rt->getInterwiki() != "" ) {
+ if ( $rt->getInterwiki() != '' ) {
$wgOut->redirect( $rt->getFullURL() ) ;
return;
}
@@ -239,7 +372,7 @@ class Article {
}
$rid = $rt->getArticleID();
if ( 0 != $rid ) {
- $sql = "SELECT cur_text,cur_timestamp,cur_user," .
+ $sql = 'SELECT cur_text,cur_timestamp,cur_user,cur_user_text,cur_comment,' .
"cur_counter,cur_restrictions,cur_touched FROM cur WHERE cur_id={$rid}";
$res = wfQuery( $sql, DB_READ, $fname );
@@ -255,15 +388,19 @@ class Article {
$this->mContent = $s->cur_text;
$this->mUser = $s->cur_user;
+ $this->mUserText = $s->cur_user_text;
+ $this->mComment = $s->cur_comment;
$this->mCounter = $s->cur_counter;
$this->mTimestamp = $s->cur_timestamp;
$this->mTouched = $s->cur_touched;
- $this->mTitle->mRestrictions = explode( ",", trim( $s->cur_restrictions ) );
+ $this->mTitle->mRestrictions = explode( ',', trim( $s->cur_restrictions ) );
$this->mTitle->mRestrictionsLoaded = true;
wfFreeResult( $res );
} else { # oldid set, retrieve historical version
- $sql = "SELECT old_namespace,old_title,old_text,old_timestamp,old_user,old_flags FROM old " .
- "WHERE old_id={$oldid}";
+ $oldtable=$wgIsPg?'"old"':'old';
+ $sql = "SELECT old_namespace,old_title,old_text,old_timestamp,".
+ "old_user,old_user_text,old_comment,old_flags FROM old ".
+ "WHERE old_id={$oldid}";
$res = wfQuery( $sql, DB_READ, $fname );
if ( 0 == wfNumRows( $res ) ) {
return;
@@ -278,6 +415,8 @@ class Article {
}
$this->mContent = Article::getRevisionText( $s );
$this->mUser = $s->old_user;
+ $this->mUserText = $s->old_user_text;
+ $this->mComment = $s->old_comment;
$this->mCounter = 0;
$this->mTimestamp = $s->old_timestamp;
wfFreeResult( $res );
@@ -289,14 +428,14 @@ class Article {
# Gets the article text without using so many damn globals
# Returns false on error
function getContentWithoutUsingSoManyDamnGlobals( $oldid = 0, $noredir = false ) {
- global $wgMwRedir;
+ global $wgMwRedir, $wgIsPg;
if ( $this->mContentLoaded ) {
return $this->mContent;
}
$this->mContent = false;
- $fname = "Article::loadContent";
+ $fname = 'Article::loadContent';
if ( ! $oldid ) { # Retrieve current version
$id = $this->getID();
@@ -304,8 +443,8 @@ class Article {
return false;
}
- $sql = "SELECT " .
- "cur_text,cur_timestamp,cur_user,cur_counter,cur_restrictions,cur_touched " .
+ $sql = 'SELECT ' .
+ 'cur_text,cur_timestamp,cur_user,cur_counter,cur_restrictions,cur_touched ' .
"FROM cur WHERE cur_id={$id}";
$res = wfQuery( $sql, DB_READ, $fname );
if ( 0 == wfNumRows( $res ) ) {
@@ -316,13 +455,13 @@ class Article {
# If we got a redirect, follow it (unless we've been told
# not to by either the function parameter or the query
if ( !$noredir && $wgMwRedir->matchStart( $s->cur_text ) ) {
- if ( preg_match( "/\\[\\[([^\\]\\|]+)[\\]\\|]/",
+ if ( preg_match( '/\\[\\[([^\\]\\|]+)[\\]\\|]/',
$s->cur_text, $m ) ) {
$rt = Title::newFromText( $m[1] );
- if( $rt && $rt->getInterwiki() == "" && $rt->getNamespace() != Namespace::getSpecial() ) {
+ if( $rt && $rt->getInterwiki() == '' && $rt->getNamespace() != Namespace::getSpecial() ) {
$rid = $rt->getArticleID();
if ( 0 != $rid ) {
- $sql = "SELECT cur_text,cur_timestamp,cur_user," .
+ $sql = 'SELECT cur_text,cur_timestamp,cur_user,' .
"cur_counter,cur_restrictions,cur_touched FROM cur WHERE cur_id={$rid}";
$res = wfQuery( $sql, DB_READ, $fname );
@@ -345,7 +484,8 @@ class Article {
$this->mTitle->mRestrictionsLoaded = true;
wfFreeResult( $res );
} else { # oldid set, retrieve historical version
- $sql = "SELECT old_text,old_timestamp,old_user,old_flags FROM old " .
+ $oldtable=$wgIsPg?'"old"':'old';
+ $sql = "SELECT old_text,old_timestamp,old_user,old_flags FROM $oldtable " .
"WHERE old_id={$oldid}";
$res = wfQuery( $sql, DB_READ, $fname );
if ( 0 == wfNumRows( $res ) ) {
@@ -375,7 +515,7 @@ class Article {
{
if ( -1 == $this->mCounter ) {
$id = $this->getID();
- $this->mCounter = wfGetSQL( "cur", "cur_counter", "cur_id={$id}" );
+ $this->mCounter = wfGetSQL( 'cur', 'cur_counter', "cur_id={$id}" );
}
return $this->mCounter;
}
@@ -389,7 +529,7 @@ class Article {
if ( 0 != $this->mTitle->getNamespace() ) { return 0; }
if ( $wgMwRedir->matchStart( $text ) ) { return 0; }
- $token = ($wgUseCommaCount ? "," : "[[" );
+ $token = ($wgUseCommaCount ? ',' : '[[' );
if ( false === strstr( $text, $token ) ) { return 0; }
return 1;
}
@@ -402,10 +542,10 @@ class Article {
global $wgOut;
if ( -1 != $this->mUser ) return;
- $sql = "SELECT cur_user,cur_user_text,cur_timestamp," .
- "cur_comment,cur_minor_edit FROM cur WHERE " .
- "cur_id=" . $this->getID();
- $res = wfQuery( $sql, DB_READ, "Article::loadLastEdit" );
+ $sql = 'SELECT cur_user,cur_user_text,cur_timestamp,' .
+ 'cur_comment,cur_minor_edit FROM cur WHERE ' .
+ 'cur_id=' . $this->getID();
+ $res = wfQuery( $sql, DB_READ, 'Article::loadLastEdit' );
if ( wfNumRows( $res ) > 0 ) {
$s = wfFetchObject( $res );
@@ -449,7 +589,7 @@ class Article {
function getContributors($limit = 0, $offset = 0)
{
- $fname = "Article::getContributors";
+ $fname = 'Article::getContributors';
# XXX: this is expensive; cache this info somewhere.
@@ -457,19 +597,19 @@ class Article {
$contribs = array();
- $sql = "SELECT old.old_user, old.old_user_text, " .
- " user.user_real_name, MAX(old.old_timestamp) as timestamp" .
- " FROM old, user " .
- " WHERE old.old_user = user.user_id " .
- " AND old.old_namespace = " . $title->getNamespace() .
- " AND old.old_title = \"" . $title->getDBkey() . "\"" .
- " AND old.old_user != 0 " .
- " AND old.old_user != " . $this->getUser() .
- " GROUP BY old.old_user " .
- " ORDER BY timestamp DESC ";
+ $sql = 'SELECT old.old_user, old.old_user_text, ' .
+ ' user.user_real_name, MAX(old.old_timestamp) as timestamp' .
+ ' FROM old, user ' .
+ ' WHERE old.old_user = user.user_id ' .
+ ' AND old.old_namespace = ' . $title->getNamespace() .
+ ' AND old.old_title = "' . $title->getDBkey() . '"' .
+ ' AND old.old_user != 0 ' .
+ ' AND old.old_user != ' . $this->getUser() .
+ ' GROUP BY old.old_user ' .
+ ' ORDER BY timestamp DESC ';
if ($limit > 0) {
- $sql .= " LIMIT $limit";
+ $sql .= ' LIMIT '.$limit;
}
$res = wfQuery($sql, DB_READ, $fname);
@@ -481,11 +621,11 @@ class Article {
# Count anonymous users
- $res = wfQuery("SELECT COUNT(*) AS cnt " .
- " FROM old " .
- " WHERE old_namespace = " . $title->getNamespace() .
+ $res = wfQuery('SELECT COUNT(*) AS cnt ' .
+ ' FROM old ' .
+ ' WHERE old_namespace = ' . $title->getNamespace() .
" AND old_title = '" . $title->getDBkey() . "'" .
- " AND old_user = 0 ", DB_READ, $fname);
+ ' AND old_user = 0 ', DB_READ, $fname);
while ( $line = wfFetchObject( $res ) ) {
$contribs[0] = array($line->cnt, 'Anonymous');
@@ -502,7 +642,7 @@ class Article {
global $wgUser, $wgOut, $wgLang, $wgRequest;
global $wgLinkCache, $IP, $wgEnableParserCache;
- $fname = "Article::view";
+ $fname = 'Article::view';
wfProfileIn( $fname );
# Get variables from query string :P
@@ -510,7 +650,7 @@ class Article {
$diff = $wgRequest->getVal( 'diff' );
$wgOut->setArticleFlag( true );
- $wgOut->setRobotpolicy( "index,follow" );
+ $wgOut->setRobotpolicy( 'index,follow' );
# If we got diff and oldid in the query, we want to see a
# diff page instead of the article.
@@ -533,48 +673,67 @@ class Article {
return;
}
}
-
- $text = $this->getContent( false ); # May change mTitle by following a redirect
- # Another whitelist check in case oldid or redirects are altering the title
- if ( !$this->mTitle->userCanRead() ) {
- $wgOut->loginToUse();
- $wgOut->output();
- exit;
+ # Should the parser cache be used?
+ if ( $wgEnableParserCache && intval($wgUser->getOption( 'stubthreshold' )) == 0 && empty( $oldid ) ) {
+ $pcache = true;
+ } else {
+ $pcache = false;
}
- $wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
+ $outputDone = false;
+ if ( $pcache ) {
+ if ( $wgOut->tryParserCache( $this, $wgUser ) ) {
+ $outputDone = true;
+ }
+ }
- # We're looking at an old revision
+ if ( !$outputDone ) {
+ $text = $this->getContent( false ); # May change mTitle by following a redirect
+
+ # Another whitelist check in case oldid or redirects are altering the title
+ if ( !$this->mTitle->userCanRead() ) {
+ $wgOut->loginToUse();
+ $wgOut->output();
+ exit;
+ }
+
- if ( !empty( $oldid ) ) {
- $this->setOldSubtitle();
- $wgOut->setRobotpolicy( "noindex,follow" );
- }
- if ( "" != $this->mRedirectedFrom ) {
- $sk = $wgUser->getSkin();
- $redir = $sk->makeKnownLink( $this->mRedirectedFrom, "",
- "redirect=no" );
- $s = wfMsg( "redirectedfrom", $redir );
- $wgOut->setSubtitle( $s );
- }
+ # We're looking at an old revision
- $wgLinkCache->preFill( $this->mTitle );
+ if ( !empty( $oldid ) ) {
+ $this->setOldSubtitle();
+ $wgOut->setRobotpolicy( 'noindex,follow' );
+ }
+ if ( '' != $this->mRedirectedFrom ) {
+ $sk = $wgUser->getSkin();
+ $redir = $sk->makeKnownLink( $this->mRedirectedFrom, '',
+ 'redirect=no' );
+ $s = wfMsg( 'redirectedfrom', $redir );
+ $wgOut->setSubtitle( $s );
+
+ # Can't cache redirects
+ $pcache = false;
+ }
- # wrap user css and user js in pre and don't parse
- # XXX: use $this->mTitle->usCssJsSubpage() when php is fixed/ a workaround is found
- if (
- $this->mTitle->getNamespace() == Namespace::getUser() &&
- preg_match("/\\/[\\w]+\\.(css|js)$/", $this->mTitle->getDBkey())
- ) {
- $wgOut->addWikiText( wfMsg('usercssjs'));
- $wgOut->addHTML( '<pre>'.htmlspecialchars($this->mContent)."\n</pre>" );
- } else if( $wgEnableParserCache && intval($wgUser->getOption( "stubthreshold" )) == 0 ){
- $wgOut->addWikiText( $text, true, $this );
- } else {
- $wgOut->addWikiText( $text );
+ $wgLinkCache->preFill( $this->mTitle );
+
+ # wrap user css and user js in pre and don't parse
+ # XXX: use $this->mTitle->usCssJsSubpage() when php is fixed/ a workaround is found
+ if (
+ $this->mTitle->getNamespace() == Namespace::getUser() &&
+ preg_match('/\\/[\\w]+\\.(css|js)$/', $this->mTitle->getDBkey())
+ ) {
+ $wgOut->addWikiText( wfMsg('clearyourcache'));
+ $wgOut->addHTML( '<pre>'.htmlspecialchars($this->mContent)."\n</pre>" );
+ } else if ( $pcache ) {
+ $wgOut->addWikiText( $text, true, $this );
+ } else {
+ $wgOut->addWikiText( $text );
+ }
}
-
+ $wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
+
# Add link titles as META keywords
$wgOut->addMetaTags() ;
@@ -590,9 +749,9 @@ class Article {
/* private */ function insertNewArticle( $text, $summary, $isminor, $watchthis )
{
global $wgOut, $wgUser, $wgLinkCache, $wgMwRedir;
- global $wgUseSquid, $wgDeferredUpdateList, $wgInternalServer;
+ global $wgUseSquid, $wgDeferredUpdateList, $wgInternalServer, $wgIsPg, $wgIsMySQL;
- $fname = "Article::insertNewArticle";
+ $fname = 'Article::insertNewArticle';
$this->mCountAdjustment = $this->isCountable( $text );
@@ -605,12 +764,23 @@ class Article {
$now = wfTimestampNow();
$won = wfInvertTimestamp( $now );
wfSeedRandom();
- $rand = number_format( mt_rand() / mt_getrandmax(), 12, ".", "" );
+ $rand = number_format( mt_rand() / mt_getrandmax(), 12, '.', '' );
+
+ if ($wgIsPg) {
+ $cur_id_column="cur_id,";
+ $cur_id=wfGetSQL(""," nextval('cur_cur_id_seq')");
+ $cur_id_value="{$cur_id},";
+ } else {
+ $cur_id_column="";
+ $cur_id="";
+ $cur_id_value="";
+ }
+
$isminor = ( $isminor && $wgUser->getID() ) ? 1 : 0;
- $sql = "INSERT INTO cur (cur_namespace,cur_title,cur_text," .
- "cur_comment,cur_user,cur_timestamp,cur_minor_edit,cur_counter," .
- "cur_restrictions,cur_user_text,cur_is_redirect," .
- "cur_is_new,cur_random,cur_touched,inverse_timestamp) VALUES ({$ns},'" . wfStrencode( $ttl ) . "', '" .
+ $sql = "INSERT INTO cur ({$cur_id_column}cur_namespace,cur_title,cur_text," .
+ 'cur_comment,cur_user,cur_timestamp,cur_minor_edit,cur_counter,' .
+ 'cur_restrictions,cur_user_text,cur_is_redirect,' .
+ "cur_is_new,cur_random,cur_touched,inverse_timestamp) VALUES ({$cur_id_value}{$ns},'" . wfStrencode( $ttl ) . "', '" .
wfStrencode( $text ) . "', '" .
wfStrencode( $summary ) . "', '" .
$wgUser->getID() . "', '{$now}', " .
@@ -618,7 +788,7 @@ class Article {
wfStrencode( $wgUser->getName() ) . "', $redir, 1, $rand, '{$now}', '{$won}')";
$res = wfQuery( $sql, DB_WRITE, $fname );
- $newid = wfInsertId();
+ $newid = $wgIsPg?$cur_id:wfInsertId();
$this->mTitle->resetArticleID( $newid );
Article::onArticleCreate( $this->mTitle );
@@ -640,16 +810,16 @@ class Article {
# standard deferred updates
$this->editUpdates( $text );
- $this->showArticle( $text, wfMsg( "newarticle" ) );
+ $this->showArticle( $text, wfMsg( 'newarticle' ) );
}
/* Side effects: loads last edit */
- function getTextOfLastEditWithSectionReplacedOrAdded($section, $text, $summary = ""){
+ function getTextOfLastEditWithSectionReplacedOrAdded($section, $text, $summary = ''){
$this->loadLastEdit();
$oldtext = $this->getContent( true );
- if ($section != "") {
- if($section=="new") {
+ if ($section != '') {
+ if($section=='new') {
if($summary) $subject="== {$summary} ==\n\n";
$text=$oldtext."\n\n".$subject.$text;
} else {
@@ -665,7 +835,7 @@ class Article {
# split it up
# Unfortunately we can't simply do a preg_replace because that might
# replace the wrong section, so we have to use the section counter instead
- $secs=preg_split("/(^=+.*?=+|^<h[1-6].*?" . ">.*?<\/h[1-6].*?" . ">)/mi",
+ $secs=preg_split('/(^=+.*?=+|^<h[1-6].*?' . '>.*?<\/h[1-6].*?' . '>)/mi',
$oldtext,-1,PREG_SPLIT_DELIM_CAPTURE);
$secs[$section*2]=$text."\n\n"; // replace with edited
@@ -677,30 +847,30 @@ class Article {
# be erased, as the mother section has been replaced with
# the text of all subsections.
$headline=$secs[$section*2-1];
- preg_match( "/^(=+).*?=+|^<h([1-6]).*?>.*?<\/h[1-6].*?>/mi",$headline,$matches);
+ preg_match( '/^(=+).*?=+|^<h([1-6]).*?' . '>.*?<\/h[1-6].*?' . '>/mi',$headline,$matches);
$hlevel=$matches[1];
# determine headline level for wikimarkup headings
- if(strpos($hlevel,"=")!==false) {
+ if(strpos($hlevel,'=')!==false) {
$hlevel=strlen($hlevel);
}
- $secs[$section*2-1]=""; // erase old headline
+ $secs[$section*2-1]=''; // erase old headline
$count=$section+1;
$break=false;
while(!empty($secs[$count*2-1]) && !$break) {
$subheadline=$secs[$count*2-1];
preg_match(
- "/^(=+).*?=+|^<h([1-6]).*?>.*?<\/h[1-6].*?>/mi",$subheadline,$matches);
+ '/^(=+).*?=+|^<h([1-6]).*?' . '>.*?<\/h[1-6].*?' . '>/mi',$subheadline,$matches);
$subhlevel=$matches[1];
- if(strpos($subhlevel,"=")!==false) {
+ if(strpos($subhlevel,'=')!==false) {
$subhlevel=strlen($subhlevel);
}
if($subhlevel > $hlevel) {
// erase old subsections
- $secs[$count*2-1]="";
- $secs[$count*2]="";
+ $secs[$count*2-1]='';
+ $secs[$count*2]='';
}
if($subhlevel <= $hlevel) {
$break=true;
@@ -710,25 +880,27 @@ class Article {
}
}
- $text=join("",$secs);
+ $text=join('',$secs);
# reinsert the stuff that we stripped out earlier
$text=$parser->unstrip($text,$striparray);
+ $text=$parser->unstripNoWiki($text,$striparray);
}
}
return $text;
}
- function updateArticle( $text, $summary, $minor, $watchthis, $forceBot = false, $sectionanchor = "" )
+ function updateArticle( $text, $summary, $minor, $watchthis, $forceBot = false, $sectionanchor = '' )
{
global $wgOut, $wgUser, $wgLinkCache;
global $wgDBtransactions, $wgMwRedir;
global $wgUseSquid, $wgInternalServer;
- $fname = "Article::updateArticle";
+ global $wgIsPg;
+ $fname = 'Article::updateArticle';
if ( $this->mMinorEdit ) { $me1 = 1; } else { $me1 = 0; }
if ( $minor && $wgUser->getID() ) { $me2 = 1; } else { $me2 = 0; }
- if ( preg_match( "/^((" . $wgMwRedir->getBaseRegex() . ")[^\\n]+)/i", $text, $m ) ) {
+ if ( preg_match( "/^((" . $wgMwRedir->getBaseRegex() . ')[^\\n]+)/i', $text, $m ) ) {
$redir = 1;
$text = $m[1] . "\n"; # Remove all content but redirect
}
@@ -739,7 +911,7 @@ class Article {
# Update article, but only if changed.
if( $wgDBtransactions ) {
- $sql = "BEGIN";
+ $sql = 'BEGIN';
wfQuery( $sql, DB_WRITE );
}
$oldtext = $this->getContent( true );
@@ -768,9 +940,22 @@ class Article {
# This overwrites $oldtext if revision compression is on
$flags = Article::compressRevisionText( $oldtext );
- $sql = "INSERT INTO old (old_namespace,old_title,old_text," .
- "old_comment,old_user,old_user_text,old_timestamp," .
- "old_minor_edit,inverse_timestamp,old_flags) VALUES (" .
+ $oldtable=$wgIsPg?'"old"':'old';
+ if ($wgIsPg) {
+ $oldtable='"old"';
+ $old_id_column='old_id,';
+ $old_id=wfGetSQL(""," nextval('old_old_id_seq')");
+ $old_id_value=$old_id.',';
+ } else {
+ $oldtable='old';
+ $old_id_column='';
+ $old_id_value='';
+ }
+
+ $sql = "INSERT INTO $oldtable ({$old_id_column}old_namespace,old_title,old_text," .
+ 'old_comment,old_user,old_user_text,old_timestamp,' .
+ 'old_minor_edit,inverse_timestamp,old_flags) VALUES (' .
+ $old_id_value.
$this->mTitle->getNamespace() . ", '" .
wfStrencode( $this->mTitle->getDBkey() ) . "', '" .
wfStrencode( $oldtext ) . "', '" .
@@ -780,7 +965,8 @@ class Article {
$this->getTimestamp() . "', " . $me1 . ", '" .
wfInvertTimestamp( $this->getTimestamp() ) . "','$flags')";
$res = wfQuery( $sql, DB_WRITE, $fname );
- $oldid = wfInsertID( $res );
+
+ $oldid = $wgIsPg?$old_id:wfInsertId( $res );
$bot = (int)($wgUser->isBot() || $forceBot);
RecentChange::notifyEdit( $now, $this->mTitle, $me2, $wgUser, $summary,
@@ -789,7 +975,7 @@ class Article {
}
if( $wgDBtransactions ) {
- $sql = "COMMIT";
+ $sql = 'COMMIT';
wfQuery( $sql, DB_WRITE );
}
@@ -824,7 +1010,7 @@ class Article {
$u->doUpdate();
}
- $this->showArticle( $text, wfMsg( "updated" ), $sectionanchor );
+ $this->showArticle( $text, wfMsg( 'updated' ), $sectionanchor );
return true;
}
@@ -847,9 +1033,9 @@ class Article {
$wgOut->addWikiText( $text );
if( $wgMwRedir->matchStart( $text ) )
- $r = "redirect=no";
+ $r = 'redirect=no';
else
- $r = "";
+ $r = '';
$wgOut->redirect( $this->mTitle->getFullURL( $r ).$sectionanchor );
}
@@ -861,7 +1047,7 @@ class Article {
global $wgDeferredUpdateList;
if ( 0 == $wgUser->getID() ) {
- $wgOut->errorpage( "watchnologin", "watchnologintext" );
+ $wgOut->errorpage( 'watchnologin', 'watchnologintext' );
return;
}
if ( wfReadOnly() ) {
@@ -873,16 +1059,16 @@ class Article {
else
$wgUser->removeWatch( $this->mTitle );
- $wgOut->setPagetitle( wfMsg( $add ? "addedwatch" : "removedwatch" ) );
- $wgOut->setRobotpolicy( "noindex,follow" );
+ $wgOut->setPagetitle( wfMsg( $add ? 'addedwatch' : 'removedwatch' ) );
+ $wgOut->setRobotpolicy( 'noindex,follow' );
$sk = $wgUser->getSkin() ;
$link = $this->mTitle->getPrefixedText();
if($add)
- $text = wfMsg( "addedwatchtext", $link );
+ $text = wfMsg( 'addedwatchtext', $link );
else
- $text = wfMsg( "removedwatchtext", $link );
+ $text = wfMsg( 'removedwatchtext', $link );
$wgOut->addWikiText( $text );
$up = new UserUpdate();
@@ -896,7 +1082,7 @@ class Article {
$this->watch( false );
}
- function protect( $limit = "sysop" )
+ function protect( $limit = 'sysop' )
{
global $wgUser, $wgOut, $wgRequest;
@@ -910,7 +1096,7 @@ class Article {
}
$id = $this->mTitle->getArticleID();
if ( 0 == $id ) {
- $wgOut->fatalError( wfMsg( "badarticleerror" ) );
+ $wgOut->fatalError( wfMsg( 'badarticleerror' ) );
return;
}
@@ -921,50 +1107,50 @@ class Article {
$sql = "UPDATE cur SET cur_touched='" . wfTimestampNow() . "'," .
"cur_restrictions='{$limit}' WHERE cur_id={$id}";
- wfQuery( $sql, DB_WRITE, "Article::protect" );
+ wfQuery( $sql, DB_WRITE, 'Article::protect' );
- $log = new LogPage( wfMsg( "protectlogpage" ), wfMsg( "protectlogtext" ) );
+ $log = new LogPage( wfMsg( 'protectlogpage' ), wfMsg( 'protectlogtext' ) );
if ( $limit === "" ) {
- $log->addEntry( wfMsg( "unprotectedarticle", $this->mTitle->getPrefixedText() ), $reason );
+ $log->addEntry( wfMsg( 'unprotectedarticle', $this->mTitle->getPrefixedText() ), $reason );
} else {
- $log->addEntry( wfMsg( "protectedarticle", $this->mTitle->getPrefixedText() ), $reason );
+ $log->addEntry( wfMsg( 'protectedarticle', $this->mTitle->getPrefixedText() ), $reason );
}
$wgOut->redirect( $this->mTitle->getFullURL() );
return;
} else {
- $reason = htmlspecialchars( wfMsg( "protectreason" ) );
- return $this->confirmProtect( "", $reason, $limit );
+ $reason = htmlspecialchars( wfMsg( 'protectreason' ) );
+ return $this->confirmProtect( '', $reason, $limit );
}
}
# Output protection confirmation dialog
- function confirmProtect( $par, $reason, $limit = "sysop" )
+ function confirmProtect( $par, $reason, $limit = 'sysop' )
{
global $wgOut;
wfDebug( "Article::confirmProtect\n" );
$sub = htmlspecialchars( $this->mTitle->getPrefixedText() );
- $wgOut->setRobotpolicy( "noindex,nofollow" );
+ $wgOut->setRobotpolicy( 'noindex,nofollow' );
- $check = "";
- $protcom = "";
+ $check = '';
+ $protcom = '';
- if ( $limit === "" ) {
- $wgOut->setSubtitle( wfMsg( "unprotectsub", $sub ) );
- $wgOut->addWikiText( wfMsg( "confirmunprotecttext" ) );
- $check = htmlspecialchars( wfMsg( "confirmunprotect" ) );
- $protcom = htmlspecialchars( wfMsg( "unprotectcomment" ) );
- $formaction = $this->mTitle->escapeLocalURL( "action=unprotect" . $par );
+ if ( $limit === '' ) {
+ $wgOut->setSubtitle( wfMsg( 'unprotectsub', $sub ) );
+ $wgOut->addWikiText( wfMsg( 'confirmunprotecttext' ) );
+ $check = htmlspecialchars( wfMsg( 'confirmunprotect' ) );
+ $protcom = htmlspecialchars( wfMsg( 'unprotectcomment' ) );
+ $formaction = $this->mTitle->escapeLocalURL( 'action=unprotect' . $par );
} else {
- $wgOut->setSubtitle( wfMsg( "protectsub", $sub ) );
- $wgOut->addWikiText( wfMsg( "confirmprotecttext" ) );
- $check = htmlspecialchars( wfMsg( "confirmprotect" ) );
- $protcom = htmlspecialchars( wfMsg( "protectcomment" ) );
- $formaction = $this->mTitle->escapeLocalURL( "action=protect" . $par );
+ $wgOut->setSubtitle( wfMsg( 'protectsub', $sub ) );
+ $wgOut->addWikiText( wfMsg( 'confirmprotecttext' ) );
+ $check = htmlspecialchars( wfMsg( 'confirmprotect' ) );
+ $protcom = htmlspecialchars( wfMsg( 'protectcomment' ) );
+ $formaction = $this->mTitle->escapeLocalURL( 'action=protect' . $par );
}
- $confirm = htmlspecialchars( wfMsg( "confirm" ) );
+ $confirm = htmlspecialchars( wfMsg( 'confirm' ) );
$wgOut->addHTML( "
<form id='protectconfirm' method='post' action=\"{$formaction}\">
@@ -1002,14 +1188,14 @@ class Article {
function unprotect()
{
- return $this->protect( "" );
+ return $this->protect( '' );
}
# UI entry point for page deletion
function delete()
{
- global $wgUser, $wgOut, $wgMessageCache, $wgRequest;
- $fname = "Article::delete";
+ global $wgUser, $wgOut, $wgMessageCache, $wgRequest, $wgIsPg;
+ $fname = 'Article::delete';
$confirm = $wgRequest->getBool( 'wpConfirm' ) && $wgRequest->wasPosted();
$reason = $wgRequest->getText( 'wpReason' );
@@ -1026,10 +1212,10 @@ class Article {
}
# Better double-check that it hasn't been deleted yet!
- $wgOut->setPagetitle( wfMsg( "confirmdelete" ) );
- if ( ( "" == trim( $this->mTitle->getText() ) )
+ $wgOut->setPagetitle( wfMsg( 'confirmdelete' ) );
+ if ( ( '' == trim( $this->mTitle->getText() ) )
or ( $this->mTitle->getArticleId() == 0 ) ) {
- $wgOut->fatalError( wfMsg( "cannotdelete" ) );
+ $wgOut->fatalError( wfMsg( 'cannotdelete' ) );
return;
}
@@ -1044,12 +1230,13 @@ class Article {
$ns = $this->mTitle->getNamespace();
$title = $this->mTitle->getDBkey();
$etitle = wfStrencode( $title );
- $sql = "SELECT old_text,old_flags FROM old WHERE old_namespace=$ns and old_title='$etitle' ORDER BY inverse_timestamp LIMIT 1";
+ $oldtable=$wgIsPg?'"old"':'old';
+ $sql = "SELECT old_text,old_flags FROM $oldtable WHERE old_namespace=$ns and old_title='$etitle' ORDER BY inverse_timestamp LIMIT 1";
$res = wfQuery( $sql, DB_READ, $fname );
if( ($old=wfFetchObject($res)) && !$confirm ) {
$skin=$wgUser->getSkin();
- $wgOut->addHTML("<b>".wfMsg("historywarning"));
- $wgOut->addHTML( $skin->historyLink() ."</b>");
+ $wgOut->addHTML('<b>'.wfMsg('historywarning'));
+ $wgOut->addHTML( $skin->historyLink() .'</b>');
}
$sql="SELECT cur_text FROM cur WHERE cur_namespace=$ns and cur_title='$etitle'";
@@ -1074,31 +1261,31 @@ class Article {
# this should not happen, since it is not possible to store an empty, new
# page. Let's insert a standard text in case it does, though
- if($length == 0 && $reason === "") {
- $reason = wfMsg("exblank");
+ if($length == 0 && $reason === '') {
+ $reason = wfMsg('exblank');
}
- if($length < 500 && $reason === "") {
+ if($length < 500 && $reason === '') {
# comment field=255, let's grep the first 150 to have some user
# space left
$text=substr($text,0,150);
# let's strip out newlines and HTML tags
- $text=preg_replace("/\"/","'",$text);
- $text=preg_replace("/\</","&lt;",$text);
- $text=preg_replace("/\>/","&gt;",$text);
- $text=preg_replace("/[\n\r]/","",$text);
+ $text=preg_replace('/\"/',"'",$text);
+ $text=preg_replace('/\</','&lt;',$text);
+ $text=preg_replace('/\>/','&gt;',$text);
+ $text=preg_replace("/[\n\r]/",'',$text);
if(!$blanked) {
- $reason=wfMsg("excontent"). " '".$text;
+ $reason=wfMsg('excontent'). " '".$text;
} else {
- $reason=wfMsg("exbeforeblank") . " '".$text;
+ $reason=wfMsg('exbeforeblank') . " '".$text;
}
- if($length>150) { $reason .= "..."; } # we've only pasted part of the text
+ if($length>150) { $reason .= '...'; } # we've only pasted part of the text
$reason.="'";
}
}
- return $this->confirmDelete( "", $reason );
+ return $this->confirmDelete( '', $reason );
}
# Output deletion confirmation dialog
@@ -1109,15 +1296,15 @@ class Article {
wfDebug( "Article::confirmDelete\n" );
$sub = htmlspecialchars( $this->mTitle->getPrefixedText() );
- $wgOut->setSubtitle( wfMsg( "deletesub", $sub ) );
- $wgOut->setRobotpolicy( "noindex,nofollow" );
- $wgOut->addWikiText( wfMsg( "confirmdeletetext" ) );
+ $wgOut->setSubtitle( wfMsg( 'deletesub', $sub ) );
+ $wgOut->setRobotpolicy( 'noindex,nofollow' );
+ $wgOut->addWikiText( wfMsg( 'confirmdeletetext' ) );
- $formaction = $this->mTitle->escapeLocalURL( "action=delete" . $par );
+ $formaction = $this->mTitle->escapeLocalURL( 'action=delete' . $par );
- $confirm = htmlspecialchars( wfMsg( "confirm" ) );
- $check = htmlspecialchars( wfMsg( "confirmcheck" ) );
- $delcom = htmlspecialchars( wfMsg( "deletecomment" ) );
+ $confirm = htmlspecialchars( wfMsg( 'confirm' ) );
+ $check = htmlspecialchars( wfMsg( 'confirmcheck' ) );
+ $delcom = htmlspecialchars( wfMsg( 'deletecomment' ) );
$wgOut->addHTML( "
<form id='deleteconfirm' method='post' action=\"{$formaction}\">
@@ -1157,26 +1344,26 @@ class Article {
function doDelete( $reason )
{
global $wgOut, $wgUser, $wgLang;
- $fname = "Article::doDelete";
+ $fname = 'Article::doDelete';
wfDebug( "$fname\n" );
if ( $this->doDeleteArticle( $reason ) ) {
$deleted = $this->mTitle->getPrefixedText();
- $wgOut->setPagetitle( wfMsg( "actioncomplete" ) );
- $wgOut->setRobotpolicy( "noindex,nofollow" );
+ $wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
+ $wgOut->setRobotpolicy( 'noindex,nofollow' );
$sk = $wgUser->getSkin();
$loglink = $sk->makeKnownLink( $wgLang->getNsText(
Namespace::getWikipedia() ) .
- ":" . wfMsg( "dellogpage" ), wfMsg( "deletionlog" ) );
+ ':' . wfMsg( 'dellogpage' ), wfMsg( 'deletionlog' ) );
$text = wfMsg( "deletedtext", $deleted, $loglink );
- $wgOut->addHTML( "<p>" . $text . "</p>\n" );
+ $wgOut->addHTML( '<p>' . $text . "</p>\n" );
$wgOut->returnToMain( false );
} else {
- $wgOut->fatalError( wfMsg( "cannotdelete" ) );
+ $wgOut->fatalError( wfMsg( 'cannotdelete' ) );
}
}
@@ -1188,14 +1375,14 @@ class Article {
global $wgUser, $wgLang;
global $wgUseSquid, $wgDeferredUpdateList, $wgInternalServer;
- $fname = "Article::doDeleteArticle";
- wfDebug( "$fname\n" );
+ $fname = 'Article::doDeleteArticle';
+ wfDebug( $fname."\n" );
$ns = $this->mTitle->getNamespace();
$t = wfStrencode( $this->mTitle->getDBkey() );
$id = $this->mTitle->getArticleID();
- if ( "" == $t || $id == 0 ) {
+ if ( '' == $t || $id == 0 ) {
return false;
}
@@ -1208,7 +1395,7 @@ class Article {
if ( $wgUseSquid ) {
$urls = array(
$this->mTitle->getInternalURL(),
- $this->mTitle->getInternalURL( "history" )
+ $this->mTitle->getInternalURL( 'history' )
);
foreach ( $linksTo as $linkTo ) {
$urls[] = $linkTo->getInternalURL();
@@ -1223,17 +1410,17 @@ class Article {
Title::touchArray( $linksTo );
# Move article and history to the "archive" table
- $sql = "INSERT INTO archive (ar_namespace,ar_title,ar_text," .
- "ar_comment,ar_user,ar_user_text,ar_timestamp,ar_minor_edit," .
- "ar_flags) SELECT cur_namespace,cur_title,cur_text,cur_comment," .
- "cur_user,cur_user_text,cur_timestamp,cur_minor_edit,0 FROM cur " .
+ $sql = 'INSERT INTO archive (ar_namespace,ar_title,ar_text,' .
+ 'ar_comment,ar_user,ar_user_text,ar_timestamp,ar_minor_edit,' .
+ 'ar_flags) SELECT cur_namespace,cur_title,cur_text,cur_comment,' .
+ 'cur_user,cur_user_text,cur_timestamp,cur_minor_edit,0 FROM cur ' .
"WHERE cur_namespace={$ns} AND cur_title='{$t}'";
wfQuery( $sql, DB_WRITE, $fname );
- $sql = "INSERT INTO archive (ar_namespace,ar_title,ar_text," .
- "ar_comment,ar_user,ar_user_text,ar_timestamp,ar_minor_edit," .
- "ar_flags) SELECT old_namespace,old_title,old_text,old_comment," .
- "old_user,old_user_text,old_timestamp,old_minor_edit,old_flags " .
+ $sql = 'INSERT INTO archive (ar_namespace,ar_title,ar_text,' .
+ 'ar_comment,ar_user,ar_user_text,ar_timestamp,ar_minor_edit,' .
+ 'ar_flags) SELECT old_namespace,old_title,old_text,old_comment,' .
+ 'old_user,old_user_text,old_timestamp,old_minor_edit,old_flags ' .
"FROM old WHERE old_namespace={$ns} AND old_title='{$t}'";
wfQuery( $sql, DB_WRITE, $fname );
@@ -1256,11 +1443,11 @@ class Article {
Article::onArticleDelete( $this->mTitle );
- $sql = "INSERT INTO brokenlinks (bl_from,bl_to) VALUES ";
+ $sql = 'INSERT INTO brokenlinks (bl_from,bl_to) VALUES ';
$first = true;
foreach ( $linksTo as $titleObj ) {
- if ( ! $first ) { $sql .= ","; }
+ if ( ! $first ) { $sql .= ','; }
$first = false;
# Get article ID. Efficient because it was loaded into the cache by getLinksTo().
$linkID = $titleObj->getArticleID();
@@ -1285,9 +1472,9 @@ class Article {
$sql = "DELETE FROM categorylinks WHERE cl_from={$id}";
wfQuery( $sql, DB_WRITE, $fname );
- $log = new LogPage( wfMsg( "dellogpage" ), wfMsg( "dellogpagetext" ) );
+ $log = new LogPage( wfMsg( 'dellogpage' ), wfMsg( 'dellogpagetext' ) );
$art = $this->mTitle->getPrefixedText();
- $log->addEntry( wfMsg( "deletedarticle", $art ), $reason );
+ $log->addEntry( wfMsg( 'deletedarticle', $art ), $reason );
# Clear the cached article id so the interface doesn't act like we exist
$this->mTitle->resetArticleID( 0 );
@@ -1297,7 +1484,7 @@ class Article {
function rollback()
{
- global $wgUser, $wgLang, $wgOut, $wgRequest;
+ global $wgUser, $wgLang, $wgOut, $wgRequest, $wgIsMySQL, $wgIsPg;
if ( ! $wgUser->isSysop() ) {
$wgOut->sysopRequired();
@@ -1316,11 +1503,12 @@ class Article {
$n = $this->mTitle->getNamespace();
# Get the last editor
- $sql = "SELECT cur_id,cur_user,cur_user_text,cur_comment FROM cur WHERE cur_title='{$tt}' AND cur_namespace={$n}";
+ $sql = 'SELECT cur_id,cur_user,cur_user_text,cur_comment ' .
+ "FROM cur WHERE cur_title='{$tt}' AND cur_namespace={$n}";
$res = wfQuery( $sql, DB_READ );
if( ($x = wfNumRows( $res )) != 1 ) {
# Something wrong
- $wgOut->addHTML( wfMsg( "notanarticle" ) );
+ $wgOut->addHTML( wfMsg( 'notanarticle' ) );
return;
}
$s = wfFetchObject( $res );
@@ -1328,48 +1516,51 @@ class Article {
$uid = $s->cur_user;
$pid = $s->cur_id;
- $from = str_replace( '_', ' ', $wgRequest->getVal( "from" ) );
+ $from = str_replace( '_', ' ', $wgRequest->getVal( 'from' ) );
if( $from != $s->cur_user_text ) {
- $wgOut->setPageTitle(wfmsg("rollbackfailed"));
- $wgOut->addWikiText( wfMsg( "alreadyrolled",
+ $wgOut->setPageTitle(wfmsg('rollbackfailed'));
+ $wgOut->addWikiText( wfMsg( 'alreadyrolled',
htmlspecialchars( $this->mTitle->getPrefixedText()),
htmlspecialchars( $from ),
htmlspecialchars( $s->cur_user_text ) ) );
- if($s->cur_comment != "") {
+ if($s->cur_comment != '') {
$wgOut->addHTML(
- wfMsg("editcomment",
+ wfMsg('editcomment',
htmlspecialchars( $s->cur_comment ) ) );
}
return;
}
# Get the last edit not by this guy
- $sql = "SELECT old_text,old_user,old_user_text,old_timestamp,old_flags
- FROM old USE INDEX (name_title_timestamp)
- WHERE old_namespace={$n} AND old_title='{$tt}'
- AND (old_user <> {$uid} OR old_user_text <> '{$ut}')
- ORDER BY inverse_timestamp LIMIT 1";
+
+ $use_index=$wgIsMySQL?"USE INDEX (name_title_timestamp)":"";
+ $oldtable=$wgIsPg?'"old"':'old';
+ $sql = 'SELECT old_text,old_user,old_user_text,old_timestamp,old_flags ' .
+ "FROM $oldtable {$use_index}" .
+ "WHERE old_namespace={$n} AND old_title='{$tt}'" .
+ "AND (old_user <> {$uid} OR old_user_text <> '{$ut}')" .
+ 'ORDER BY inverse_timestamp LIMIT 1';
$res = wfQuery( $sql, DB_READ );
if( wfNumRows( $res ) != 1 ) {
# Something wrong
- $wgOut->setPageTitle(wfMsg("rollbackfailed"));
- $wgOut->addHTML( wfMsg( "cantrollback" ) );
+ $wgOut->setPageTitle(wfMsg('rollbackfailed'));
+ $wgOut->addHTML( wfMsg( 'cantrollback' ) );
return;
}
$s = wfFetchObject( $res );
if ( $bot ) {
# Mark all reverted edits as bot
- $sql = "UPDATE recentchanges SET rc_bot=1 WHERE
- rc_cur_id=$pid AND rc_user=$uid AND rc_timestamp > '{$s->old_timestamp}'";
+ $sql = 'UPDATE recentchanges SET rc_bot=1 WHERE' .
+ "rc_cur_id=$pid AND rc_user=$uid AND rc_timestamp > '{$s->old_timestamp}'";
wfQuery( $sql, DB_WRITE, $fname );
}
# Save it!
- $newcomment = wfMsg( "revertpage", $s->old_user_text, $from );
- $wgOut->setPagetitle( wfMsg( "actioncomplete" ) );
- $wgOut->setRobotpolicy( "noindex,nofollow" );
- $wgOut->addHTML( "<h2>" . $newcomment . "</h2>\n<hr />\n" );
+ $newcomment = wfMsg( 'revertpage', $s->old_user_text, $from );
+ $wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
+ $wgOut->setRobotpolicy( 'noindex,nofollow' );
+ $wgOut->addHTML( '<h2>' . $newcomment . "</h2>\n<hr />\n" );
$this->updateArticle( Article::getRevisionText( $s ), $newcomment, 1, $this->mTitle->userIsWatching(), $bot );
Article::onArticleEdit( $this->mTitle );
$wgOut->returnToMain( false );
@@ -1436,7 +1627,7 @@ class Article {
global $wgLang, $wgOut;
$td = $wgLang->timeanddate( $this->mTimestamp, true );
- $r = wfMsg( "revisionasof", $td );
+ $r = wfMsg( 'revisionasof', $td );
$wgOut->setSubtitle( "({$r})" );
}
@@ -1463,7 +1654,7 @@ class Article {
$called = true;
if($this->isFileCacheable()) {
$touched = $this->mTouched;
- if( $this->mTitle->getPrefixedDBkey() == wfMsg( "mainpage" ) ) {
+ if( $this->mTitle->getPrefixedDBkey() == wfMsg( 'mainpage' ) ) {
# Expire the main page quicker
$expire = wfUnix2Timestamp( time() - 3600 );
$touched = max( $expire, $touched );
@@ -1493,7 +1684,7 @@ class Article {
and ($wgUser->getId() == 0)
and (!$wgUser->getNewtalk())
and ($this->mTitle->getNamespace() != Namespace::getSpecial())
- and ($action == "view")
+ and ($action == 'view')
and (!isset($oldid))
and (!isset($diff))
and (!isset($redirect))
@@ -1501,10 +1692,11 @@ class Article {
and (!$this->mRedirectedFrom);
}
+ # Loads cur_touched and returns a value indicating if it should be used
function checkTouched() {
$id = $this->getID();
- $sql = "SELECT cur_touched,cur_is_redirect FROM cur WHERE cur_id=$id";
- $res = wfQuery( $sql, DB_READ, "Article::checkTouched" );
+ $sql = 'SELECT cur_touched,cur_is_redirect FROM cur WHERE cur_id='.$id;
+ $res = wfQuery( $sql, DB_READ, 'Article::checkTouched' );
if( $s = wfFetchObject( $res ) ) {
$this->mTouched = $s->cur_touched;
return !$s->cur_is_redirect;
@@ -1512,15 +1704,64 @@ class Article {
return false;
}
}
-
+
+ # Edit an article without doing all that other stuff
+ function quickEdit( $text, $comment = '', $minor = 0 ) {
+ global $wgUser, $wgMwRedir, $wgIsPg;
+ $fname = 'Article::quickEdit';
+ wfProfileIn( $fname );
+
+ $ns = $this->mTitle->getNamespace();
+ $dbkey = $this->mTitle->getDBkey();
+ $encDbKey = wfStrencode( $dbkey );
+ $timestamp = wfTimestampNow();
+
+ # Save to history
+ $oldtable=$wgIsPg?'"old"':'old';
+ $sql = "INSERT INTO $oldtable (old_namespace,old_title,old_text,old_comment,old_user,old_user_text,old_timestamp,inverse_timestamp)
+ SELECT cur_namespace,cur_title,cur_text,cur_comment,cur_user,cur_user_text,cur_timestamp,99999999999999-cur_timestamp
+ FROM cur WHERE cur_namespace=$ns AND cur_title='$encDbKey'";
+ wfQuery( $sql, DB_WRITE );
+
+ # Use the affected row count to determine if the article is new
+ $numRows = wfAffectedRows();
+
+ # Make an array of fields to be inserted
+ $fields = array(
+ 'cur_text' => $text,
+ 'cur_timestamp' => $timestamp,
+ 'cur_user' => $wgUser->getID(),
+ 'cur_user_text' => $wgUser->getName(),
+ 'inverse_timestamp' => wfInvertTimestamp( $timestamp ),
+ 'cur_comment' => $comment,
+ 'cur_is_redirect' => $wgMwRedir->matchStart( $text ) ? 1 : 0,
+ 'cur_minor_edit' => intval($minor),
+ 'cur_touched' => $timestamp,
+ );
+
+ if ( $numRows ) {
+ # Update article
+ $fields['cur_is_new'] = 0;
+ wfUpdateArray( 'cur', $fields, array( 'cur_namespace' => $ns, 'cur_title' => $dbkey ), $fname );
+ } else {
+ # Insert new article
+ $fields['cur_is_new'] = 1;
+ $fields['cur_namespace'] = $ns;
+ $fields['cur_title'] = $dbkey;
+ $fields['cur_random'] = $rand = number_format( mt_rand() / mt_getrandmax(), 12, '.', '' );
+ wfInsertArray( 'cur', $fields, $fname );
+ }
+ wfProfileOut( $fname );
+ }
+
/* static */ function incViewCount( $id )
{
$id = intval( $id );
global $wgHitcounterUpdateFreq;
if( $wgHitcounterUpdateFreq <= 1 ){ //
- wfQuery("UPDATE cur SET cur_counter = cur_counter + 1 " .
- "WHERE cur_id = $id", DB_WRITE);
+ wfQuery('UPDATE cur SET cur_counter = cur_counter + 1 ' .
+ 'WHERE cur_id = '.$id, DB_WRITE);
return;
}
@@ -1536,25 +1777,25 @@ class Article {
return;
}
- $res = wfQuery("SELECT COUNT(*) as n FROM hitcounter", DB_WRITE);
+ $res = wfQuery('SELECT COUNT(*) as n FROM hitcounter', DB_WRITE);
$row = wfFetchObject( $res );
$rown = intval( $row->n );
if( $rown >= $wgHitcounterUpdateFreq ){
- wfProfileIn( "Article::incViewCount-collect" );
+ wfProfileIn( 'Article::incViewCount-collect' );
$old_user_abort = ignore_user_abort( true );
- wfQuery("LOCK TABLES hitcounter WRITE", DB_WRITE);
- wfQuery("CREATE TEMPORARY TABLE acchits TYPE=HEAP ".
- "SELECT hc_id,COUNT(*) AS hc_n FROM hitcounter ".
- "GROUP BY hc_id", DB_WRITE);
- wfQuery("DELETE FROM hitcounter", DB_WRITE);
- wfQuery("UNLOCK TABLES", DB_WRITE);
- wfQuery("UPDATE cur,acchits SET cur_counter=cur_counter + hc_n ".
- "WHERE cur_id = hc_id", DB_WRITE);
- wfQuery("DROP TABLE acchits", DB_WRITE);
+ wfQuery('LOCK TABLES hitcounter WRITE', DB_WRITE);
+ wfQuery('CREATE TEMPORARY TABLE acchits TYPE=HEAP '.
+ 'SELECT hc_id,COUNT(*) AS hc_n FROM hitcounter '.
+ 'GROUP BY hc_id', DB_WRITE);
+ wfQuery('DELETE FROM hitcounter', DB_WRITE);
+ wfQuery('UNLOCK TABLES', DB_WRITE);
+ wfQuery('UPDATE cur,acchits SET cur_counter=cur_counter + hc_n '.
+ 'WHERE cur_id = hc_id', DB_WRITE);
+ wfQuery('DROP TABLE acchits', DB_WRITE);
ignore_user_abort( $old_user_abort );
- wfProfileOut( "Article::incViewCount-collect" );
+ wfProfileOut( 'Article::incViewCount-collect' );
}
wfIgnoreSQLErrors( $oldignore );
}
@@ -1567,7 +1808,7 @@ class Article {
# This is called on page move and undelete, as well as edit
/* static */ function onArticleCreate($title_obj){
- global $wgEnablePersistentLC, $wgEnableParserCache, $wgUseSquid, $wgDeferredUpdateList;
+ global $wgUseSquid, $wgDeferredUpdateList;
$titles = $title_obj->getBrokenLinksTo();
@@ -1582,34 +1823,15 @@ class Article {
}
# Clear persistent link cache
- if ( $wgEnablePersistentLC ) {
- LinkCache::linksccClearBrokenLinksTo( $title_obj->getPrefixedDBkey() );
- }
-
- # Clear parser cache (not really used)
- if ( $wgEnableParserCache ) {
- OutputPage::parsercacheClearBrokenLinksTo( $title_obj->getPrefixedDBkey() );
- }
+ LinkCache::linksccClearBrokenLinksTo( $title_obj->getPrefixedDBkey() );
}
/* static */ function onArticleDelete($title_obj){
- global $wgEnablePersistentLC, $wgEnableParserCache;
- if ( $wgEnablePersistentLC ) {
- LinkCache::linksccClearLinksTo( $title_obj->getArticleID() );
- }
- if ( $wgEnableParserCache ) {
- OutputPage::parsercacheClearLinksTo( $title_obj->getArticleID() );
- }
+ LinkCache::linksccClearLinksTo( $title_obj->getArticleID() );
}
/* static */ function onArticleEdit($title_obj){
- global $wgEnablePersistentLC, $wgEnableParserCache;
- if ( $wgEnablePersistentLC ) {
- LinkCache::linksccClearPage( $title_obj->getArticleID() );
- }
- if ( $wgEnableParserCache ) {
- OutputPage::parsercacheClearPage( $title_obj->getArticleID(), $title_obj->getNamespace() );
- }
+ LinkCache::linksccClearPage( $title_obj->getArticleID() );
}
}
diff --git a/includes/Block.php b/includes/Block.php
index d98b07baebb7..e8a53e0efdd3 100644
--- a/includes/Block.php
+++ b/includes/Block.php
@@ -15,8 +15,8 @@ class Block
/* public*/ var $mAddress, $mUser, $mBy, $mReason, $mTimestamp, $mAuto, $mId, $mExpiry;
/* private */ var $mNetworkBits, $mIntegerAddr;
- function Block( $address = "", $user = "", $by = 0, $reason = "",
- $timestamp = "" , $auto = 0, $expiry = "" )
+ function Block( $address = '', $user = '', $by = 0, $reason = '',
+ $timestamp = '' , $auto = 0, $expiry = '' )
{
$this->mAddress = $address;
$this->mUser = $user;
@@ -38,18 +38,22 @@ class Block
function clear()
{
- $mAddress = $mReason = $mTimestamp = "";
+ $mAddress = $mReason = $mTimestamp = '';
$mUser = $mBy = 0;
}
# Get a ban from the DB, with either the given address or the given username
- function load( $address, $user = 0, $killExpired = true )
+ function load( $address = "", $user = 0, $killExpired = true )
{
- $fname = "Block::load";
+ $fname = 'Block::load';
$ret = false;
$killed = false;
- if ( 0 == $user ) {
+ if ( 0 == $user && $address=="" ) {
+ $sql = "SELECT * from ipblocks";
+ } elseif ($address=="") {
+ $sql = "SELECT * FROM ipblocks WHERE ipb_user={$user}";
+ } elseif ($user=="") {
$sql = "SELECT * FROM ipblocks WHERE ipb_address='" . wfStrencode( $address ) . "'";
} else {
$sql = "SELECT * FROM ipblocks WHERE (ipb_address='" . wfStrencode( $address ) .
@@ -109,7 +113,7 @@ class Block
function initialiseRange()
{
if ( $this->mUser == 0 ) {
- $rangeParts = explode( "/", $this->mAddress );
+ $rangeParts = explode( '/', $this->mAddress );
if ( count( $rangeParts ) == 2 ) {
$this->mNetworkBits = $rangeParts[1];
} else {
@@ -125,8 +129,8 @@ class Block
# Callback with a Block object for every block
/*static*/ function enumBlocks( $callback, $tag, $killExpired = true )
{
- $sql = "SELECT * FROM ipblocks ORDER BY ipb_timestamp DESC";
- $res = wfQuery( $sql, DB_READ, "Block::enumBans" );
+ $sql = 'SELECT * FROM ipblocks ORDER BY ipb_timestamp DESC';
+ $res = wfQuery( $sql, DB_READ, 'Block::enumBans' );
$block = new Block();
while ( $row = wfFetchObject( $res ) ) {
@@ -144,25 +148,25 @@ class Block
function delete()
{
- $fname = "Block::delete";
+ $fname = 'Block::delete';
if ( $this->mAddress == "" ) {
$sql = "DELETE FROM ipblocks WHERE ipb_id={$this->mId}";
} else {
$sql = "DELETE FROM ipblocks WHERE ipb_address='" .
wfStrencode( $this->mAddress ) . "'";
}
- wfQuery( $sql, DB_WRITE, "Block::delete" );
+ wfQuery( $sql, DB_WRITE, 'Block::delete' );
$this->clearCache();
}
function insert()
{
- $sql = "INSERT INTO ipblocks
- (ipb_address, ipb_user, ipb_by, ipb_reason, ipb_timestamp, ipb_auto, ipb_expiry )
- VALUES ('" . wfStrencode( $this->mAddress ) . "', {$this->mUser}, {$this->mBy}, '" .
+ $sql = 'INSERT INTO ipblocks ' .
+ '(ipb_address, ipb_user, ipb_by, ipb_reason, ipb_timestamp, ipb_auto, ipb_expiry )' .
+ "VALUES ('" . wfStrencode( $this->mAddress ) . "', {$this->mUser}, {$this->mBy}, '" .
wfStrencode( $this->mReason ) . "','{$this->mTimestamp}', {$this->mAuto}, '{$this->mExpiry}')";
- wfQuery( $sql, DB_WRITE, "Block::insert" );
+ wfQuery( $sql, DB_WRITE, 'Block::insert' );
$this->clearCache();
}
@@ -188,7 +192,7 @@ class Block
function isValid()
{
- return $this->mAddress != "";
+ return $this->mAddress != '';
}
function updateTimestamp()
@@ -197,10 +201,10 @@ class Block
$this->mTimestamp = wfTimestampNow();
$this->mExpiry = Block::getAutoblockExpiry( $this->mTimestamp );
- wfQuery( "UPDATE ipblocks SET " .
+ wfQuery( 'UPDATE ipblocks SET ' .
"ipb_timestamp='" . $this->mTimestamp . "', " .
"ipb_expiry='" . $this->mExpiry . "' " .
- "WHERE ipb_address='" . wfStrencode( $this->mAddress ) . "'", DB_WRITE, "Block::updateTimestamp" );
+ "WHERE ipb_address='" . wfStrencode( $this->mAddress ) . "'", DB_WRITE, 'Block::updateTimestamp' );
$this->clearCache();
}
@@ -232,7 +236,7 @@ class Block
/* static */ function normaliseRange( $range )
{
- $parts = explode( "/", $range );
+ $parts = explode( '/', $range );
if ( count( $parts ) == 2 ) {
$shift = 32 - $parts[1];
$ipint = ip2long( $parts[0] );
diff --git a/includes/BlockCache.php b/includes/BlockCache.php
index 5b65bdc20a56..8b49a0142c13 100644
--- a/includes/BlockCache.php
+++ b/includes/BlockCache.php
@@ -7,15 +7,15 @@ class BlockCache
{
var $mData = false, $mMemcKey;
- function BlockCache( $deferLoad = false, $dbName = "" )
+ function BlockCache( $deferLoad = false, $dbName = '' )
{
global $wgDBname;
- if ( $dbName == "" ) {
+ if ( $dbName == '' ) {
$dbName = $wgDBname;
}
- $this->mMemcKey = "$dbName:ipblocks";
+ $this->mMemcKey = $dbName.':ipblocks';
if ( !$deferLoad ) {
$this->load();
@@ -36,10 +36,10 @@ class BlockCache
}
}
- if ( $this->mData === false || is_null( $this->mData ) ) {
+ if ( !is_array( $this->mData ) ) {
# Load from DB
$this->mData = array();
- Block::enumBlocks( "wfBlockCacheInsert", "" ); # Calls $this->insert()
+ Block::enumBlocks( 'wfBlockCacheInsert', '' ); # Calls $this->insert()
}
if ( $saveMemc ) {
@@ -78,7 +78,7 @@ class BlockCache
if ( $blocked ) {
# Clear low order bits
if ( $networkBits != 32 ) {
- $ip .= "/$networkBits";
+ $ip .= '/'.$networkBits;
$ip = Block::normaliseRange( $ip );
}
$block = new Block();
diff --git a/includes/CacheManager.php b/includes/CacheManager.php
index 5ba6ec7318e4..e85f69d94bc7 100644
--- a/includes/CacheManager.php
+++ b/includes/CacheManager.php
@@ -11,14 +11,14 @@
# $wgFileCacheDirectory
# $wgUseGzip
-require_once( "Title.php" );
+require_once( 'Title.php' );
class CacheManager {
var $mTitle, $mFileCache;
function CacheManager( &$title ) {
$this->mTitle =& $title;
- $this->mFileCache = "";
+ $this->mFileCache = '';
}
function fileCacheName() {
@@ -27,14 +27,14 @@ class CacheManager {
$hash = md5( $key = $this->mTitle->getDbkey() );
if( $this->mTitle->getNamespace() )
$key = $wgLang->getNsText( $this->mTitle->getNamespace() ) . ":" . $key;
- $key = str_replace( ".", "%2E", urlencode( $key ) );
+ $key = str_replace( '.', '%2E', urlencode( $key ) );
$hash1 = substr( $hash, 0, 1 );
$hash2 = substr( $hash, 0, 2 );
$this->mFileCache = "{$wgFileCacheDirectory}/{$hash1}/{$hash2}/{$key}.html";
if($this->useGzip())
- $this->mFileCache .= ".gz";
+ $this->mFileCache .= '.gz';
wfDebug( " fileCacheName() - {$this->mFileCache}\n" );
}
@@ -75,7 +75,7 @@ class CacheManager {
function fetchPageText() {
if( $this->useGzip() ) {
/* Why is there no gzfile_get_contents() or gzdecode()? */
- return implode( "", gzfile( $this->fileCacheName() ) );
+ return implode( '', gzfile( $this->fileCacheName() ) );
} else {
return $this->fetchRawText();
}
@@ -91,7 +91,7 @@ class CacheManager {
if( $this->useGzip() ) {
if( wfClientAcceptsGzip() ) {
- header( "Content-Encoding: gzip" );
+ header( 'Content-Encoding: gzip' );
} else {
/* Send uncompressed */
readgzfile( $filename );
@@ -103,38 +103,38 @@ class CacheManager {
function checkCacheDirs() {
$filename = $this->fileCacheName();
- $mydir2=substr($filename,0,strrpos($filename,"/")); # subdirectory level 2
- $mydir1=substr($mydir2,0,strrpos($mydir2,"/")); # subdirectory level 1
+ $mydir2=substr($filename,0,strrpos($filename,'/')); # subdirectory level 2
+ $mydir1=substr($mydir2,0,strrpos($mydir2,'/')); # subdirectory level 1
if(!file_exists($mydir1)) { mkdir($mydir1,0775); } # create if necessary
if(!file_exists($mydir2)) { mkdir($mydir2,0775); }
}
function saveToFileCache( $text ) {
- if(strcmp($text,"") == 0) return "";
+ if(strcmp($text,'') == 0) return '';
wfDebug(" saveToFileCache()\n", false);
$this->checkCacheDirs();
- $f = fopen( $this->fileCacheName(), "w" );
+ $f = fopen( $this->fileCacheName(), 'w' );
if($f) {
$now = wfTimestampNow();
if( $this->useGzip() ) {
- $rawtext = str_replace( "</html>",
- "<!-- Cached/compressed $now -->\n</html>",
+ $rawtext = str_replace( '</html>',
+ '<!-- Cached/compressed '.$now." -->\n</html>",
$text );
$text = gzencode( $rawtext );
} else {
- $text = str_replace( "</html>",
- "<!-- Cached $now -->\n</html>",
+ $text = str_replace( '</html>',
+ '<!-- Cached '.$now." -->\n</html>",
$text );
}
fwrite( $f, $text );
fclose( $f );
if( $this->useGzip() ) {
if( wfClientAcceptsGzip() ) {
- header( "Content-Encoding: gzip" );
+ header( 'Content-Encoding: gzip' );
return $text;
} else {
return $rawtext;
diff --git a/includes/Database.php b/includes/Database.php
index d84625492f8e..0d48fe4431c1 100644
--- a/includes/Database.php
+++ b/includes/Database.php
@@ -1,11 +1,10 @@
<?php
-require_once( "FulltextStoplist.php" );
+# $Id$
+# This file deals with MySQL interface functions
+# and query specifics/optimisations
+#
require_once( "CacheManager.php" );
-define( "DB_READ", -1 );
-define( "DB_WRITE", -2 );
-define( "DB_LAST", -3 );
-
define( "LIST_COMMA", 0 );
define( "LIST_AND", 1 );
define( "LIST_SET", 2 );
@@ -36,7 +35,7 @@ class Database {
# Output page, used for reporting errors
# FALSE means discard output
- function &setOutputPage( &$out ) { return wfSetRef( $this->mOut, $out ); }
+ function &setOutputPage( &$out ) { $this->mOut =& $out; }
# Boolean, controls output of large amounts of debug information
function setDebug( $debug ) { return wfSetVar( $this->mDebug, $debug ); }
@@ -140,10 +139,11 @@ class Database {
{
if ( $this->mFailFunction ) {
if ( !is_int( $this->mFailFunction ) ) {
- $this->$mFailFunction( $this );
+ $ff = $this->mFailFunction;
+ $ff( $this, mysql_error() );
}
} else {
- wfEmergencyAbort( $this );
+ wfEmergencyAbort( $this, mysql_error() );
}
}
@@ -174,13 +174,15 @@ class Database {
}
if ( false === $ret ) {
+ $error = mysql_error( $this->mConn );
+ $errno = mysql_errno( $this->mConn );
if( $this->mIgnoreErrors ) {
- wfDebug("SQL ERROR (ignored): " . mysql_error( $this->mConn ) . "\n");
+ wfDebug("SQL ERROR (ignored): " . $error . "\n");
} else {
- wfDebug("SQL ERROR: " . mysql_error( $this->mConn ) . "\n");
+ wfDebug("SQL ERROR: " . $error . "\n");
if ( $this->mOut ) {
// this calls wfAbruptExit()
- $this->mOut->databaseError( $fname, $this );
+ $this->mOut->databaseError( $fname, $sql, $error, $errno );
}
}
}
@@ -204,6 +206,15 @@ class Database {
}
return $row;
}
+
+ function fetchRow( $res ) {
+ @$row = mysql_fetch_array( $res );
+ if (mysql_errno() ) {
+ wfDebugDieBacktrace( "SQL error: " . htmlspecialchars( mysql_error() ) );
+ }
+ return $row;
+ }
+
function numRows( $res ) {
@$n = mysql_num_rows( $res );
if( mysql_errno() ) {
@@ -314,7 +325,10 @@ class Database {
# If errors are explicitly ignored, returns NULL on failure
function indexExists( $table, $index, $fname = "Database::indexExists" )
{
- $sql = "SHOW INDEXES FROM $table";
+ # SHOW INDEX works in MySQL 3.23.58, but SHOW INDEXES does not.
+ # SHOW INDEX should work for 3.x and up:
+ # http://dev.mysql.com/doc/mysql/en/SHOW_INDEX.html
+ $sql = "SHOW INDEX FROM $table";
$res = $this->query( $sql, DB_READ, $fname );
if ( !$res ) {
return NULL;
@@ -334,6 +348,7 @@ class Database {
function tableExists( $table )
{
$old = $this->mIgnoreErrors;
+ $this->mIgnoreErrors = true;
$res = $this->query( "SELECT 1 FROM $table LIMIT 1" );
$this->mIgnoreErrors = $old;
if( $res ) {
@@ -441,12 +456,18 @@ class Database {
/* Standard fail function, called by default when a connection cannot be established
Displays the file cache if possible */
-function wfEmergencyAbort( &$conn ) {
+function wfEmergencyAbort( &$conn, $error ) {
global $wgTitle, $wgUseFileCache, $title, $wgInputEncoding, $wgSiteNotice, $wgOutputEncoding;
- header( "Content-type: text/html; charset=$wgOutputEncoding" );
+ if( !headers_sent() ) {
+ header( "HTTP/1.0 500 Internal Server Error" );
+ header( "Content-type: text/html; charset=$wgOutputEncoding" );
+ /* Don't cache error pages! They cause no end of trouble... */
+ header( "Cache-control: none" );
+ header( "Pragma: nocache" );
+ }
$msg = $wgSiteNotice;
- if($msg == "") $msg = wfMsgNoDB( "noconnect" );
+ if($msg == "") $msg = wfMsgNoDB( "noconnect", $error );
$text = $msg;
if($wgUseFileCache) {
@@ -478,9 +499,6 @@ function wfEmergencyAbort( &$conn ) {
}
}
- /* Don't cache error pages! They cause no end of trouble... */
- header( "Cache-control: none" );
- header( "Pragma: nocache" );
echo $text;
wfAbruptExit();
}
@@ -515,4 +533,9 @@ function wfInvertTimestamp( $ts ) {
"9876543210"
);
}
+
+function wfLimitResult( $limit, $offset ) {
+ return " LIMIT ".(is_numeric($offset)?"{$offset},":"")."{$limit} ";
+}
+
?>
diff --git a/includes/DatabaseFunctions.php b/includes/DatabaseFunctions.php
index 90bb40f19370..80e02beafe77 100644
--- a/includes/DatabaseFunctions.php
+++ b/includes/DatabaseFunctions.php
@@ -1,4 +1,5 @@
<?php
+# $Id$
# Backwards compatibility wrapper for Database.php
@@ -10,49 +11,46 @@
# NB: This file follows a connect on demand scheme. Do
# not access the $wgDatabase variable directly unless
# you intend to set it. Use wfGetDB().
+$wgDatabase = false;
+
+$wgIsMySQL=false;
+$wgIsPg=false;
+
+if ($wgDBtype=="mysql") {
+ require_once( "Database.php" );
+ $wgIsMySQL=true;
+} elseif ($wgDBtype=="pgsql") {
+ require_once( "DatabasePostgreSQL.php" );
+ $wgIsPg=true;
+}
-require_once( "Database.php" );
-# Query the database
-# $db: DB_READ = -1 read from slave (or only server)
-# DB_WRITE = -2 write to master (or only server)
-# 0,1,2,... query a database with a specific index
# Replication is not actually implemented just yet
# Usually aborts on failure
# If errors are explicitly ignored, returns success
function wfQuery( $sql, $db, $fname = "" )
{
- global $wgDatabase, $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname,
- $wgDebugDumpSql, $wgBufferSQLResults, $wgIgnoreSQLErrors;
-
if ( !is_numeric( $db ) ) {
# Someone has tried to call this the old way
$wgOut->fatalError( wfMsgNoDB( "wrong_wfQuery_params", $db, $sql ) );
}
-
- $db =& wfGetDB();
- return $db->query( $sql, $fname );
+ $c =& wfGetDB( $db );
+ return $c->query( $sql, $fname );
}
-# Connect on demand
-function &wfGetDB()
+function &wfGetDB( $db = DB_LAST )
{
- global $wgDatabase, $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname,
- $wgDebugDumpSql, $wgBufferSQLResults, $wgIgnoreSQLErrors;
- if ( !$wgDatabase ) {
- $wgDatabase = Database::newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword,
- $wgDBname, false, $wgDebugDumpSql, $wgBufferSQLResults, $wgIgnoreSQLErrors );
- }
- return $wgDatabase;
+ global $wgLoadBalancer;
+ return $wgLoadBalancer->getConnection( $db );
}
# Turns buffering of SQL result sets on (true) or off (false). Default is
# "on" and it should not be changed without good reasons.
# Returns the previous state.
-function wfBufferSQLResults( $newstate )
+function wfBufferSQLResults( $newstate, $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->setBufferResults( $newstate );
}
@@ -63,116 +61,122 @@ function wfBufferSQLResults( $newstate )
# situation as appropriate.
# Returns the previous state.
-function wfIgnoreSQLErrors( $newstate )
+function wfIgnoreSQLErrors( $newstate, $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->setIgnoreErrors( $newstate );
}
-function wfFreeResult( $res )
+function wfFreeResult( $res, $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
$db->freeResult( $res );
}
-function wfFetchObject( $res )
+function wfFetchObject( $res, $dbi = DB_LAST )
{
- $db =& wfGetDB();
- return $db->fetchObject( $res );
+ $db =& wfGetDB( $dbi );
+ return $db->fetchObject( $res, $dbi = DB_LAST );
+}
+
+function wfFetchRow( $res, $dbi = DB_LAST )
+{
+ $db =& wfGetDB( $dbi );
+ return $db->fetchRow ( $res, $dbi = DB_LAST );
}
-function wfNumRows( $res )
+function wfNumRows( $res, $dbi = DB_LAST )
{
- $db =& wfGetDB();
- return $db->numRows( $res );
+ $db =& wfGetDB( $dbi );
+ return $db->numRows( $res, $dbi = DB_LAST );
}
-function wfNumFields( $res )
+function wfNumFields( $res, $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->numFields( $res );
}
-function wfFieldName( $res, $n )
+function wfFieldName( $res, $n, $dbi = DB_LAST )
{
- $db =& wfGetDB();
- return $db->fieldName( $res, $n );
+ $db =& wfGetDB( $dbi );
+ return $db->fieldName( $res, $n, $dbi = DB_LAST );
}
-function wfInsertId()
+function wfInsertId( $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->insertId();
}
-function wfDataSeek( $res, $row )
+function wfDataSeek( $res, $row, $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->dataSeek( $res, $row );
}
-function wfLastErrno()
+function wfLastErrno( $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->lastErrno();
}
-function wfLastError()
+function wfLastError( $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->lastError();
}
-function wfAffectedRows()
+function wfAffectedRows( $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->affectedRows();
}
-function wfLastDBquery()
+function wfLastDBquery( $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->lastQuery();
}
-function wfSetSQL( $table, $var, $value, $cond )
+function wfSetSQL( $table, $var, $value, $cond, $dbi = DB_WRITE )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->set( $table, $var, $value, $cond );
}
-function wfGetSQL( $table, $var, $cond )
+function wfGetSQL( $table, $var, $cond="", $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->get( $table, $var, $cond );
}
-function wfFieldExists( $table, $field )
+function wfFieldExists( $table, $field, $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->fieldExists( $table, $field );
}
-function wfIndexExists( $table, $index )
+function wfIndexExists( $table, $index, $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->indexExists( $table, $index );
}
-function wfInsertArray( $table, $array )
+function wfInsertArray( $table, $array, $fname = "wfInsertArray", $dbi = DB_WRITE )
{
- $db =& wfGetDB();
- return $db->insertArray( $table, $array );
+ $db =& wfGetDB( $dbi );
+ return $db->insertArray( $table, $array, $fname );
}
-function wfGetArray( $table, $vars, $conds, $fname = "wfGetArray" )
+function wfGetArray( $table, $vars, $conds, $fname = "wfGetArray", $dbi = DB_LAST )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
return $db->getArray( $table, $vars, $conds, $fname );
}
-function wfUpdateArray( $table, $values, $conds, $fname = "wfUpdateArray" )
+function wfUpdateArray( $table, $values, $conds, $fname = "wfUpdateArray", $dbi = DB_WRITE )
{
- $db =& wfGetDB();
+ $db =& wfGetDB( $dbi );
$db->updateArray( $table, $values, $conds, $fname );
}
diff --git a/includes/DatabasePostgreSQL.php b/includes/DatabasePostgreSQL.php
new file mode 100644
index 000000000000..80c762ad3cb3
--- /dev/null
+++ b/includes/DatabasePostgreSQL.php
@@ -0,0 +1,547 @@
+<?php
+# $Id$
+#
+# DO NOT USE !!! Unless you want to help developping it.
+#
+# This file is an attempt to port the mysql database layer to postgreSQL. The
+# only thing done so far is s/mysql/pg/ and dieing if function haven't been
+# ported.
+#
+# As said brion 07/06/2004 :
+# "table definitions need to be changed. fulltext index needs to work differently
+# things that use the last insert id need to be changed. Probably other things
+# need to be changed. various semantics may be different."
+#
+# Hashar
+
+require_once( "FulltextStoplist.php" );
+require_once( "CacheManager.php" );
+
+define( "DB_READ", -1 );
+define( "DB_WRITE", -2 );
+define( "DB_LAST", -3 );
+
+define( "LIST_COMMA", 0 );
+define( "LIST_AND", 1 );
+define( "LIST_SET", 2 );
+
+class Database {
+
+#------------------------------------------------------------------------------
+# Variables
+#------------------------------------------------------------------------------
+ /* private */ var $mLastQuery = "";
+ /* private */ var $mBufferResults = true;
+ /* private */ var $mIgnoreErrors = false;
+
+ /* private */ var $mServer, $mUser, $mPassword, $mConn, $mDBname;
+ /* private */ var $mOut, $mDebug, $mOpened = false;
+
+ /* private */ var $mFailFunction;
+ /* private */ var $mLastResult;
+
+#------------------------------------------------------------------------------
+# Accessors
+#------------------------------------------------------------------------------
+ # Set functions
+ # These set a variable and return the previous state
+
+ # Fail function, takes a Database as a parameter
+ # Set to false for default, 1 for ignore errors
+ function setFailFunction( $function ) { return wfSetVar( $this->mFailFunction, $function ); }
+
+ # Output page, used for reporting errors
+ # FALSE means discard output
+ function &setOutputPage( &$out ) { $this->mOut =& $out; }
+
+ # Boolean, controls output of large amounts of debug information
+ function setDebug( $debug ) { return wfSetVar( $this->mDebug, $debug ); }
+
+ # Turns buffering of SQL result sets on (true) or off (false). Default is
+ # "on" and it should not be changed without good reasons.
+ function setBufferResults( $buffer ) { return wfSetVar( $this->mBufferResults, $buffer ); }
+
+ # Turns on (false) or off (true) the automatic generation and sending
+ # of a "we're sorry, but there has been a database error" page on
+ # database errors. Default is on (false). When turned off, the
+ # code should use wfLastErrno() and wfLastError() to handle the
+ # situation as appropriate.
+ function setIgnoreErrors( $ignoreErrors ) { return wfSetVar( $this->mIgnoreErrors, $ignoreErrors ); }
+
+ # Get functions
+
+ function lastQuery() { return $this->mLastQuery; }
+ function isOpen() { return $this->mOpened; }
+
+#------------------------------------------------------------------------------
+# Other functions
+#------------------------------------------------------------------------------
+
+ function Database()
+ {
+ global $wgOut;
+ # Can't get a reference if it hasn't been set yet
+ if ( !isset( $wgOut ) ) {
+ $wgOut = NULL;
+ }
+ $this->mOut =& $wgOut;
+
+ }
+
+ /* static */ function newFromParams( $server, $user, $password, $dbName,
+ $failFunction = false, $debug = false, $bufferResults = true, $ignoreErrors = false )
+ {
+ $db = new Database;
+ $db->mFailFunction = $failFunction;
+ $db->mIgnoreErrors = $ignoreErrors;
+ $db->mDebug = $debug;
+ $db->mBufferResults = $bufferResults;
+ $db->open( $server, $user, $password, $dbName );
+ return $db;
+ }
+
+ # Usually aborts on failure
+ # If the failFunction is set to a non-zero integer, returns success
+ function open( $server, $user, $password, $dbName )
+ {
+ global $wgEmergencyContact;
+
+ $this->close();
+ $this->mServer = $server;
+ $this->mUser = $user;
+ $this->mPassword = $password;
+ $this->mDBname = $dbName;
+
+ $success = false;
+
+
+ if ( "" != $dbName ) {
+ # start a database connection
+ @$this->mConn = pg_connect("host=$server dbname=$dbName user=$user password=$password");
+ if ( $this->mConn == false ) {
+ wfDebug( "DB connection error\n" );
+ wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
+ wfDebug( $this->lastError()."\n" );
+ }
+ }
+ return $this->mConn;
+ }
+
+ # Closes a database connection, if it is open
+ # Returns success, true if already closed
+ function close()
+ {
+ $this->mOpened = false;
+ if ( $this->mConn ) {
+ return pg_close( $this->mConn );
+ } else {
+ return true;
+ }
+ }
+
+ /* private */ function reportConnectionError( $msg = "")
+ {
+ if ( $this->mFailFunction ) {
+ if ( !is_int( $this->mFailFunction ) ) {
+ $this->$mFailFunction( $this );
+ }
+ } else {
+ wfEmergencyAbort( $this );
+ }
+ }
+
+ # Usually aborts on failure
+ # If errors are explicitly ignored, returns success
+ function query( $sql, $fname = "" )
+ {
+ global $wgProfiling;
+
+ if ( $wgProfiling ) {
+ # generalizeSQL will probably cut down the query to reasonable
+ # logging size most of the time. The substr is really just a sanity check.
+ $profName = "query: " . substr( Database::generalizeSQL( $sql ), 0, 255 );
+ wfProfileIn( $profName );
+ }
+
+ $this->mLastQuery = $sql;
+
+ if ( $this->mDebug ) {
+ $sqlx = substr( $sql, 0, 500 );
+ $sqlx = wordwrap(strtr($sqlx,"\t\n"," "));
+ wfDebug( "SQL: $sqlx\n" );
+ }
+
+ $ret = pg_query( $this->mConn , $sql);
+ $this->mLastResult = $ret;
+ if ( false == $ret ) {
+ $error = pg_last_error( $this->mConn );
+ // TODO FIXME : no error number function in postgre
+ // $errno = mysql_errno( $this->mConn );
+ if( $this->mIgnoreErrors ) {
+ wfDebug("SQL ERROR (ignored): " . $error . "\n");
+ } else {
+ wfDebug("SQL ERROR: " . $error . "\n");
+ if ( $this->mOut ) {
+ // this calls wfAbruptExit()
+ $this->mOut->databaseError( $fname, $sql, $error, 0 );
+ }
+ }
+ }
+
+ if ( $wgProfiling ) {
+ wfProfileOut( $profName );
+ }
+ return $ret;
+ }
+
+ function freeResult( $res ) {
+ if ( !@pg_free_result( $res ) ) {
+ wfDebugDieBacktrace( "Unable to free PostgreSQL result\n" );
+ }
+ }
+ function fetchObject( $res ) {
+ @$row = pg_fetch_object( $res );
+ # FIXME: HACK HACK HACK HACK debug
+
+ # TODO:
+ # hashar : not sure if the following test really trigger if the object
+ # fetching failled.
+ if( pg_last_error($this->mConn) ) {
+ wfDebugDieBacktrace( "SQL error: " . htmlspecialchars( pg_last_error($this->mConn) ) );
+ }
+ return $row;
+ }
+
+ function fetchRow( $res ) {
+ @$row = pg_fetch_array( $res );
+ if( pg_last_error($this->mConn) ) {
+ wfDebugDieBacktrace( "SQL error: " . htmlspecialchars( pg_last_error($this->mConn) ) );
+ }
+ return $row;
+ }
+
+ function numRows( $res ) {
+ @$n = pg_num_rows( $res );
+ if( pg_last_error($this->mConn) ) {
+ wfDebugDieBacktrace( "SQL error: " . htmlspecialchars( pg_last_error($this->mConn) ) );
+ }
+ return $n;
+ }
+ function numFields( $res ) { return pg_num_fields( $res ); }
+ function fieldName( $res, $n ) { return pg_field_name( $res, $n ); }
+ // TODO FIXME: need to implement something here
+ function insertId() {
+ //return mysql_insert_id( $this->mConn );
+ wfDebugDieBacktrace( "Database::insertId() error : not implemented for postgre, use sequences" );
+ }
+ function dataSeek( $res, $row ) { return pg_result_seek( $res, $row ); }
+ function lastErrno() { return $this->lastError(); }
+ function lastError() { return pg_last_error(); }
+ function affectedRows() {
+ return pg_affected_rows( $this->mLastResult );
+ }
+
+ # Simple UPDATE wrapper
+ # Usually aborts on failure
+ # If errors are explicitly ignored, returns success
+ function set( $table, $var, $value, $cond, $fname = "Database::set" )
+ {
+ $sql = "UPDATE \"$table\" SET \"$var\" = '" .
+ wfStrencode( $value ) . "' WHERE ($cond)";
+ return !!$this->query( $sql, DB_WRITE, $fname );
+ }
+
+ # Simple SELECT wrapper, returns a single field, input must be encoded
+ # Usually aborts on failure
+ # If errors are explicitly ignored, returns FALSE on failure
+ function get( $table, $var, $cond, $fname = "Database::get" )
+ {
+ $from=$table?" FROM \"$table\" ":"";
+ $where=$cond?" WHERE ($cond)":"";
+
+ $sql = "SELECT $var $from $where";
+
+ $result = $this->query( $sql, DB_READ, $fname );
+
+ $ret = "";
+ if ( pg_num_rows( $result ) > 0 ) {
+ $s = pg_fetch_array( $result );
+ $ret = $s[0];
+ pg_free_result( $result );
+ }
+ return $ret;
+ }
+
+ # More complex SELECT wrapper, single row only
+ # Aborts or returns FALSE on error
+ # Takes an array of selected variables, and a condition map, which is ANDed
+ # e.g. getArray( "cur", array( "cur_id" ), array( "cur_namespace" => 0, "cur_title" => "Astronomy" ) )
+ # would return an object where $obj->cur_id is the ID of the Astronomy article
+ function getArray( $table, $vars, $conds, $fname = "Database::getArray" )
+ {
+ $vars = implode( ",", $vars );
+ $where = Database::makeList( $conds, LIST_AND );
+ $sql = "SELECT \"$vars\" FROM \"$table\" WHERE $where LIMIT 1";
+ $res = $this->query( $sql, $fname );
+ if ( $res === false || !$this->numRows( $res ) ) {
+ return false;
+ }
+ $obj = $this->fetchObject( $res );
+ $this->freeResult( $res );
+ return $obj;
+ }
+
+ # Removes most variables from an SQL query and replaces them with X or N for numbers.
+ # It's only slightly flawed. Don't use for anything important.
+ /* static */ function generalizeSQL( $sql )
+ {
+ # This does the same as the regexp below would do, but in such a way
+ # as to avoid crashing php on some large strings.
+ # $sql = preg_replace ( "/'([^\\\\']|\\\\.)*'|\"([^\\\\\"]|\\\\.)*\"/", "'X'", $sql);
+
+ $sql = str_replace ( "\\\\", "", $sql);
+ $sql = str_replace ( "\\'", "", $sql);
+ $sql = str_replace ( "\\\"", "", $sql);
+ $sql = preg_replace ("/'.*'/s", "'X'", $sql);
+ $sql = preg_replace ('/".*"/s', "'X'", $sql);
+
+ # All newlines, tabs, etc replaced by single space
+ $sql = preg_replace ( "/\s+/", " ", $sql);
+
+ # All numbers => N
+ $sql = preg_replace ('/-?[0-9]+/s', "N", $sql);
+
+ return $sql;
+ }
+
+ # Determines whether a field exists in a table
+ # Usually aborts on failure
+ # If errors are explicitly ignored, returns NULL on failure
+ function fieldExists( $table, $field, $fname = "Database::fieldExists" )
+ {
+ $res = $this->query( "DESCRIBE '$table'", DB_READ, $fname );
+ if ( !$res ) {
+ return NULL;
+ }
+
+ $found = false;
+
+ while ( $row = $this->fetchObject( $res ) ) {
+ if ( $row->Field == $field ) {
+ $found = true;
+ break;
+ }
+ }
+ return $found;
+ }
+
+ # Determines whether an index exists
+ # Usually aborts on failure
+ # If errors are explicitly ignored, returns NULL on failure
+ function indexExists( $table, $index, $fname = "Database::indexExists" )
+ {
+ $sql = "SELECT indexname FROM pg_indexes WHERE tablename='$table'";
+ $res = $this->query( $sql, DB_READ, $fname );
+ if ( !$res ) {
+ return NULL;
+ }
+
+ $found = false;
+
+ while ( $row = $this->fetchObject( $res ) ) {
+ if ( $row->Key_name == $index ) {
+ $found = true;
+ break;
+ }
+ }
+ return $found;
+ }
+
+ function tableExists( $table )
+ {
+ $old = $this->mIgnoreErrors;
+ $this->mIgnoreErrors = true;
+ $res = $this->query( "SELECT 1 FROM '$table' LIMIT 1" );
+ $this->mIgnoreErrors = $old;
+ if( $res ) {
+ $this->freeResult( $res );
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function fieldInfo( $table, $field )
+ {
+ $res = $this->query( "SELECT * FROM '$table' LIMIT 1" );
+ $n = pg_num_fields( $res );
+ for( $i = 0; $i < $n; $i++ ) {
+ // FIXME
+ wfDebugDieBacktrace( "Database::fieldInfo() error : mysql_fetch_field() not implemented for postgre" );
+ $meta = mysql_fetch_field( $res, $i );
+ if( $field == $meta->name ) {
+ return $meta;
+ }
+ }
+ return false;
+ }
+
+ # INSERT wrapper, inserts an array into a table
+ # Keys are field names, values are values
+ # Usually aborts on failure
+ # If errors are explicitly ignored, returns success
+ function insertArray( $table, $a, $fname = "Database::insertArray" )
+ {
+ $sql1 = "INSERT INTO \"$table\" (";
+ $sql2 = "VALUES (" . Database::makeList( $a );
+ $first = true;
+ foreach ( $a as $field => $value ) {
+ if ( !$first ) {
+ $sql1 .= ",";
+ }
+ $first = false;
+ $sql1 .= $field;
+ }
+ $sql = "$sql1) $sql2)";
+ return !!$this->query( $sql, $fname );
+ }
+
+ # A cross between insertArray and getArray, takes a condition array and a SET array
+ function updateArray( $table, $values, $conds, $fname = "Database::updateArray" )
+ {
+ $sql = "UPDATE '$table' SET " . $this->makeList( $values, LIST_SET );
+ $sql .= " WHERE " . $this->makeList( $conds, LIST_AND );
+ $this->query( $sql, $fname );
+ }
+
+ # Makes a wfStrencoded list from an array
+ # $mode: LIST_COMMA - comma separated, no field names
+ # LIST_AND - ANDed WHERE clause (without the WHERE)
+ # LIST_SET - comma separated with field names, like a SET clause
+ /* static */ function makeList( $a, $mode = LIST_COMMA )
+ {
+ $first = true;
+ $list = "";
+ foreach ( $a as $field => $value ) {
+ if ( !$first ) {
+ if ( $mode == LIST_AND ) {
+ $list .= " AND ";
+ } else {
+ $list .= ",";
+ }
+ } else {
+ $first = false;
+ }
+ if ( $mode == LIST_AND || $mode == LIST_SET ) {
+ $list .= "$field=";
+ }
+ if ( !is_numeric( $value ) ) {
+ $list .= "'" . wfStrencode( $value ) . "'";
+ } else {
+ $list .= $value;
+ }
+ }
+ return $list;
+ }
+
+ function startTimer( $timeout )
+ {
+ global $IP;
+ wfDebugDieBacktrace( "Database::startTimer() error : mysql_thread_id() not implemented for postgre" );
+ $tid = mysql_thread_id( $this->mConn );
+ exec( "php $IP/killthread.php $timeout $tid &>/dev/null &" );
+ }
+
+ function stopTimer()
+ {
+ }
+
+}
+
+#------------------------------------------------------------------------------
+# Global functions
+#------------------------------------------------------------------------------
+
+/* Standard fail function, called by default when a connection cannot be established
+ Displays the file cache if possible */
+function wfEmergencyAbort( &$conn ) {
+ global $wgTitle, $wgUseFileCache, $title, $wgInputEncoding, $wgSiteNotice, $wgOutputEncoding;
+
+ header( "Content-type: text/html; charset=$wgOutputEncoding" );
+ $msg = $wgSiteNotice;
+ if($msg == "") $msg = wfMsgNoDB( "noconnect" );
+ $text = $msg;
+
+ if($wgUseFileCache) {
+ if($wgTitle) {
+ $t =& $wgTitle;
+ } else {
+ if($title) {
+ $t = Title::newFromURL( $title );
+ } elseif (@$_REQUEST['search']) {
+ $search = $_REQUEST['search'];
+ echo wfMsgNoDB( "searchdisabled" );
+ echo wfMsgNoDB( "googlesearch", htmlspecialchars( $search ), $wgInputEncoding );
+ wfAbruptExit();
+ } else {
+ $t = Title::newFromText( wfMsgNoDB( "mainpage" ) );
+ }
+ }
+
+ $cache = new CacheManager( $t );
+ if( $cache->isFileCached() ) {
+ $msg = "<p style='color: red'><b>$msg<br />\n" .
+ wfMsgNoDB( "cachederror" ) . "</b></p>\n";
+
+ $tag = "<div id='article'>";
+ $text = str_replace(
+ $tag,
+ $tag . $msg,
+ $cache->fetchPageText() );
+ }
+ }
+
+ /* Don't cache error pages! They cause no end of trouble... */
+ header( "Cache-control: none" );
+ header( "Pragma: nocache" );
+ echo $text;
+ wfAbruptExit();
+}
+
+function wfStrencode( $s )
+{
+ return pg_escape_string( $s );
+}
+
+# Use PostgreSQL timestamp without timezone data type
+function wfTimestamp2Unix( $ts ) {
+ return gmmktime( ( (int)substr( $ts, 11, 2) ),
+ (int)substr( $ts, 14, 2 ), (int)substr( $ts, 17, 2 ),
+ (int)substr( $ts, 5, 2 ), (int)substr( $ts, 8, 2 ),
+ (int)substr( $ts, 0, 4 ) );
+}
+
+function wfUnix2Timestamp( $unixtime ) {
+ return gmdate( "Y-m-d H:i:s", $unixtime );
+}
+
+function wfTimestampNow() {
+ # return NOW
+ return gmdate( "Y-m-d H:i:s" );
+}
+
+# Sorting hack for MySQL 3, which doesn't use index sorts for DESC
+function wfInvertTimestamp( $ts ) {
+ $ts=preg_replace("/\D/","",$ts);
+ return strtr(
+ $ts,
+ "0123456789",
+ "9876543210"
+ );
+}
+
+function wfLimitResult( $limit, $offset ) {
+ return " LIMIT $limit ".(is_numeric($offset)?" OFFSET {$offset} ":"");
+}
+
+?>
diff --git a/includes/DateFormatter.php b/includes/DateFormatter.php
index e903f53daa79..45196512f5fe 100755
--- a/includes/DateFormatter.php
+++ b/includes/DateFormatter.php
@@ -18,7 +18,7 @@ define("DF_LAST", 8);
class DateFormatter
{
var $mSource, $mTarget;
- var $monthNames = "", $rxDM, $rxMD, $rxDMY, $rxYDM, $rxMDY, $rxYMD;
+ var $monthNames = '', $rxDM, $rxMD, $rxDMY, $rxYDM, $rxMDY, $rxYMD;
var $regexes, $pDays, $pMonths, $pYears;
var $rules, $xMonths;
@@ -58,24 +58,24 @@ class DateFormatter
# Extraction keys
# See the comments in replace() for the meaning of the letters
- $this->keys[DF_DMY] = "jFY";
- $this->keys[DF_YDM] = "Y jF";
- $this->keys[DF_MDY] = "FjY";
- $this->keys[DF_YMD] = "Y Fj";
- $this->keys[DF_DM] = "jF";
- $this->keys[DF_MD] = "Fj";
- $this->keys[DF_ISO1] = "ymd"; # y means ISO year
- $this->keys[DF_ISO2] = "ymd";
+ $this->keys[DF_DMY] = 'jFY';
+ $this->keys[DF_YDM] = 'Y jF';
+ $this->keys[DF_MDY] = 'FjY';
+ $this->keys[DF_YMD] = 'Y Fj';
+ $this->keys[DF_DM] = 'jF';
+ $this->keys[DF_MD] = 'Fj';
+ $this->keys[DF_ISO1] = 'ymd'; # y means ISO year
+ $this->keys[DF_ISO2] = 'ymd';
# Target date formats
- $this->targets[DF_DMY] = "[[F j|j F]] [[Y]]";
- $this->targets[DF_YDM] = "[[Y]], [[F j|j F]]";
- $this->targets[DF_MDY] = "[[F j]], [[Y]]";
- $this->targets[DF_YMD] = "[[Y]] [[F j]]";
- $this->targets[DF_DM] = "[[F j|j F]]";
- $this->targets[DF_MD] = "[[F j]]";
- $this->targets[DF_ISO1] = "[[Y|y]]-[[F j|m-d]]";
- $this->targets[DF_ISO2] = "[[y-m-d]]";
+ $this->targets[DF_DMY] = '[[F j|j F]] [[Y]]';
+ $this->targets[DF_YDM] = '[[Y]], [[F j|j F]]';
+ $this->targets[DF_MDY] = '[[F j]], [[Y]]';
+ $this->targets[DF_YMD] = '[[Y]] [[F j]]';
+ $this->targets[DF_DM] = '[[F j|j F]]';
+ $this->targets[DF_MD] = '[[F j]]';
+ $this->targets[DF_ISO1] = '[[Y|y]]-[[F j|m-d]]';
+ $this->targets[DF_ISO2] = '[[y-m-d]]';
# Rules
# pref source target
@@ -103,7 +103,7 @@ class DateFormatter
# Default
$this->mTarget = $i;
}
- $text = preg_replace_callback( $this->regexes[$i], "wfMainDateReplace", $text );
+ $text = preg_replace_callback( $this->regexes[$i], 'wfMainDateReplace', $text );
}
return $text;
}
@@ -123,7 +123,7 @@ class DateFormatter
$format = $this->targets[$this->mTarget];
# Construct new date
- $text = "";
+ $text = '';
$fail = false;
for ( $p=0; $p < strlen( $format ); $p++ ) {
@@ -131,7 +131,7 @@ class DateFormatter
switch ( $char ) {
case 'd': # ISO day of month
if ( is_null($bits['d']) ) {
- $text .= sprintf( "%02d", $bits['j'] );
+ $text .= sprintf( '%02d', $bits['j'] );
} else {
$text .= $bits['d'];
}
@@ -139,7 +139,7 @@ class DateFormatter
case 'm': # ISO month
if ( is_null($bits['m']) ) {
$m = $this->makeIsoMonth( $bits['F'] );
- if ( !$m || $m == "00" ) {
+ if ( !$m || $m == '00' ) {
$fail = true;
} else {
$text .= $m;
@@ -194,14 +194,14 @@ class DateFormatter
function getMonthRegex()
{
global $wgMonthNamesEn;
- return implode( "|", $wgMonthNamesEn );
+ return implode( '|', $wgMonthNamesEn );
}
# Makes an ISO month, e.g. 02, from a month name
function makeIsoMonth( $monthName )
{
$n = $this->xMonths[strtolower( $monthName )];
- return sprintf( "%02d", $n );
+ return sprintf( '%02d', $n );
}
function makeIsoYear( $year )
@@ -210,10 +210,10 @@ class DateFormatter
if ( substr( $year, -2 ) == 'BC' ) {
$num = IntVal(substr( $year, 0, -3 )) - 1;
# PHP bug note: sprintf( "%04d", -1 ) fails poorly
- $text = sprintf( "-%04d", $num );
+ $text = sprintf( '-%04d', $num );
} else {
- $text = sprintf( "%04d", $year );
+ $text = sprintf( '%04d', $year );
}
return $text;
}
@@ -221,7 +221,7 @@ class DateFormatter
function makeNormalYear( $iso )
{
if ( $iso{0} == '-' ) {
- $text = (IntVal( substr( $iso, 1 ) ) - 1) . " BC";
+ $text = (IntVal( substr( $iso, 1 ) ) - 1) . ' BC';
} else {
$text = IntVal( $iso );
}
diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index 52eb0b1ef1d8..1e0e635f717e 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -1,4 +1,5 @@
<?php
+# $Id$
# DO NOT EDIT THIS FILE!
# To customize your installation, edit "LocalSettings.php".
# Note that since all these string interpolations are expanded
@@ -6,27 +7,27 @@
# like $wgScriptPath, you must also localize everything that
# depends on it.
-$wgVersion = "1.3.0beta1";
+$wgVersion = '1.3.0beta3';
-$wgSitename = "MediaWiki"; # Please customize!
+$wgSitename = 'MediaWiki'; # Please customize!
$wgMetaNamespace = FALSE; # will be same as you set $wgSitename
# check if server use https:
-$wgProto = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https" : "http";
+$wgProto = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
if ( @$wgCommandLineMode ) {
- $wgServer = $wgProto."://localhost";
+ $wgServer = $wgProto.'://localhost';
} else {
- $wgServer = $wgProto."://" . $_SERVER["SERVER_NAME"];
- if( $_SERVER["SERVER_PORT"] != 80 ) $wgServer .= ":" . $_SERVER["SERVER_PORT"];
+ $wgServer = $wgProto.'://' . $_SERVER['SERVER_NAME'];
+ if( $_SERVER['SERVER_PORT'] != 80 ) $wgServer .= ":" . $_SERVER['SERVER_PORT'];
}
unset($wgProto);
-$wgScriptPath = "/wiki";
+$wgScriptPath = '/wiki';
# Whether to support URLs like index.php/Page_title
-$wgUsePathInfo = ( strpos( php_sapi_name(), "cgi" ) === false );
+$wgUsePathInfo = ( strpos( php_sapi_name(), 'cgi' ) === false );
# ATTN: Old installations used wiki.phtml and redirect.phtml -
# make sure that LocalSettings.php is correctly set!
@@ -44,25 +45,30 @@ $wgLogo = "{$wgUploadPath}/wiki.png";
$wgMathPath = "{$wgUploadPath}/math";
$wgMathDirectory = "{$wgUploadDirectory}/math";
$wgTmpDirectory = "{$wgUploadDirectory}/tmp";
-$wgEmergencyContact = "wikiadmin@" . getenv( "SERVER_NAME" );
-$wgPasswordSender = "Wikipedia Mail <apache@" . getenv( "SERVER_NAME" ) . ">";
+$wgEmergencyContact = 'wikiadmin@' . getenv( 'SERVER_NAME' );
+$wgPasswordSender = 'Wikipedia Mail <apache@' . getenv( 'SERVER_NAME' ) . '>';
# For using a direct (authenticated) SMTP server connection.
# "host" => 'SMTP domain', "IDHost" => 'domain for MessageID', "port" => "25", "auth" => true/false, "username" => user, "password" => password
$wgSMTP = false;
-# MySQL settings
+# Database settings
#
-$wgDBserver = "localhost";
-$wgDBname = "wikidb";
-$wgDBconnection = "";
-$wgDBuser = "wikiuser";
+$wgDBserver = 'localhost';
+$wgDBname = 'wikidb';
+$wgDBconnection = '';
+$wgDBuser = 'wikiuser';
+$wgDBtype = "mysql"; # "mysql" for working code and "pgsql" for development/broken code
+
+# Database load balancer
+$wgDBservers = false; # e.g. array(0 => "larousse", 1 => "pliny")
+$wgDBloads = false; # e.g. array(0 => 0.6, 1 => 0.4);
# Sysop SQL queries
$wgAllowSysopQueries = false; # Dangerous if not configured properly.
-$wgDBsqluser = "sqluser";
-$wgDBsqlpassword = "sqlpass";
-$wgDBpassword = "userpass";
+$wgDBsqluser = 'sqluser';
+$wgDBsqlpassword = 'sqlpass';
+$wgDBpassword = 'userpass';
$wgSqlLogFile = "{$wgUploadDirectory}/sqllog_mFhyRe6";
$wgDBminWordLen = 4;
@@ -85,27 +91,28 @@ $wgDBloads = false; # e.g. array(0.6, 0.4);
#
$wgMemCachedDebug = false; # Will be set to false in Setup.php, if the server isn't working
$wgUseMemCached = false;
-$wgMemCachedServers = array( "127.0.0.1:11000" );
+$wgMemCachedServers = array( '127.0.0.1:11000' );
$wgMemCachedDebug = false;
$wgSessionsInMemcached = false;
$wgLinkCacheMemcached = false; # Not fully tested
# Language settings
#
-$wgLanguageCode = "en";
+$wgLanguageCode = 'en';
$wgLanguageFile = false; # Filename of a language file generated by dumpMessages.php
$wgInterwikiMagic = true; # Treat language links as magic connectors, not inline links
-$wgInputEncoding = "ISO-8859-1";
-$wgOutputEncoding = "ISO-8859-1";
-$wgEditEncoding = "";
-$wgMimeType = "text/html";
-$wgDocType = "-//W3C//DTD XHTML 1.0 Transitional//EN";
-$wgDTD = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
+$wgInputEncoding = 'ISO-8859-1'; # LanguageUtf8.php normally overrides this
+$wgOutputEncoding = 'ISO-8859-1'; # unless you set the next option to true:
+$wgUseLatin1 = false; # Enable ISO-8859-1 compatibility mode
+$wgEditEncoding = '';
+$wgMimeType = 'text/html';
+$wgDocType = '-//W3C//DTD XHTML 1.0 Transitional//EN';
+$wgDTD = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd';
$wgUseDynamicDates = false; # Enable to allow rewriting dates in page text
# DOES NOT FORMAT CORRECTLY FOR MOST LANGUAGES
$wgAmericanDates = false; # Enable for English module to print dates
# as eg 'May 12' instead of '12 May'
-$wgLocalInterwiki = "w";
+$wgLocalInterwiki = 'w';
$wgShowIPinHeader = true; # For non-logged in users
$wgMaxNameChars = 32; # Maximum number of bytes in username
$wgInterwikiExpiry = 10800; # Expiry time for cache of interwiki table
@@ -115,8 +122,8 @@ $wgInterwikiExpiry = 10800; # Expiry time for cache of interwiki table
$wgUseDatabaseMessages = true;
$wgMsgCacheExpiry = 86400;
-$wgExtraSubtitle = "";
-$wgSiteSupportPage = "";
+$wgExtraSubtitle = '';
+$wgSiteSupportPage = '';
# Miscellaneous configuration settings
#
@@ -124,7 +131,7 @@ $wgReadOnlyFile = "{$wgUploadDirectory}/lock_yBgMBwiR";
# The debug log file should be not be publicly accessible if it is
# used, as it may contain private data.
-$wgDebugLogFile = "";
+$wgDebugLogFile = '';
$wgDebugRedirects = false;
$wgDebugComments = false;
@@ -142,6 +149,11 @@ $wgIgnoreSQLErrors = false;
# all articles in the category)
$wgUseCategoryMagic = true;
+# disable experimental dmoz-like category browsing. Output things like:
+# Encyclopedia > Music > Style of Music > Jazz
+# FIXME: need fixing
+$wgUseCategoryBrowser = false;
+
$wgEnablePersistentLC = false; # Persistent link cache in linkscc table; FAILS on MySQL 3.x
$wgCompressedPersistentLC = true; # use gzcompressed blobs
@@ -158,24 +170,24 @@ $wgHitcounterUpdateFreq = 1;
# User rights
$wgWhitelistEdit = false; # true = user must login to edit.
$wgWhitelistRead = false; # Pages anonymous user may see, like: = array ( ":Main_Page", "Special:Userlogin", "Wikipedia:Help");
-$wgWhitelistAccount = array ( "user" => 1, "sysop" => 1, "developer" => 1 );
+$wgWhitelistAccount = array ( 'user' => 1, 'sysop' => 1, 'developer' => 1 );
$wgSysopUserBans = false; # Allow sysops to ban logged-in users
$wgSysopRangeBans = false; # Allow sysops to ban IP ranges
-$wgDefaultBlockExpiry = "24 hours"; # default expiry time
+$wgDefaultBlockExpiry = '24 hours'; # default expiry time
# strtotime format, or "infinite" for an infinite block
$wgAutoblockExpiry = 86400; # Number of seconds before autoblock entries expire
$wgBlockOpenProxies = false; # Automatic open proxy test on edit
$wgProxyPorts = array( 80, 81, 1080, 3128, 6588, 8000, 8080, 8888, 65506 );
$wgProxyScriptPath = "$IP/proxy_check.php";
$wgProxyMemcExpiry = 86400;
-$wgProxyKey = "W1svekXc5u6lZllTZOwnzEk1nbs";
+$wgProxyKey = 'W1svekXc5u6lZllTZOwnzEk1nbs';
# Client-side caching:
$wgCachePages = true; # Allow client-side caching of pages
# Set this to current time to invalidate all prior cached pages.
# Affects both client- and server-side caching.
-$wgCacheEpoch = "20030516000000";
+$wgCacheEpoch = '20030516000000';
# Server-side caching:
# This will cache static pages for non-logged-in users
@@ -205,8 +217,8 @@ $wgCookieExpiration = 2592000;
# Set to set an explicit domain on the login cookies
# eg, "justthis.domain.org" or ".any.subdomain.net"
-$wgCookieDomain = "";
-$wgCookiePath = "/";
+$wgCookieDomain = '';
+$wgCookiePath = '/';
$wgDisableCookieCheck = false;
$wgAllowExternalImages = true;
@@ -220,18 +232,7 @@ $wgWLCacheTimeout = 3600; # The hour or so mentioned above
# convert (ImageMagick) installed and available in the PATH.
# Please see math/README for more information.
$wgUseTeX = false;
-$wgTexvc = "./math/texvc"; # Location of the texvc binary
-
-# Support for inline hieroglyphs, see http://aoineko.free.fr/ The
-# WikiHiero php files must be present in the same directory as the
-# rest of the mediawiki code, and WikiHiero must have been configured
-# with the correct image locations.
-$wgUseWikiHiero = false;
-
-# Support for inline timelines, see http://members.chello.nl/epzachte/Wikipedia/EasyTimeline/Introduction.htm
-# The Timeline php files must be present in the extension directory and you must have the
-# ploticus tool available, see http://ploticus.sourceforge.net/
-$wgUseTimeline = false;
+$wgTexvc = './math/texvc'; # Location of the texvc binary
# Profiling / debugging
$wgProfiling = false; # Enable for more detailed by-function times in debug log
@@ -253,11 +254,11 @@ $wgDisableAnonTalk = false;
# We can serve pages compressed in order to save bandwidth,
# but this will increase CPU usage.
# Requires zlib support enabled in PHP.
-$wgUseGzip = function_exists( "gzencode" );
+$wgUseGzip = function_exists( 'gzencode' );
# Path to the GNU diff3 utility. If the file doesn't exist,
# edit conflicts will fall back to the old behaviour (no merging).
-$wgDiff3 = "/usr/bin/diff3";
+$wgDiff3 = '/usr/bin/diff3';
# We can also compress text in the old revisions table. If this is set on,
# old revisions will be compressed on page save if zlib support is available.
@@ -267,18 +268,18 @@ $wgCompressRevisions = false;
# This is the list of preferred extensions for uploading files. Uploading
# files with extensions not in this list will trigger a warning.
-$wgFileExtensions = array( "png", "jpg", "jpeg", "ogg" );
+$wgFileExtensions = array( 'png', 'jpg', 'jpeg', 'ogg' );
# Files with these extensions will never be allowed as uploads.
$wgFileBlacklist = array(
# HTML may contain cookie-stealing JavaScript and web bugs
- "html", "htm",
+ 'html', 'htm',
# PHP scripts may execute arbitrary code on the server
- "php", "phtml", "php3", "php4", "phps",
+ 'php', 'phtml', 'php3', 'php4', 'phps',
# Other types that may be interpreted by some servers
- "shtml", "jhtml", "pl", "py",
+ 'shtml', 'jhtml', 'pl', 'py',
# May contain harmful executables for Windows victims
- "exe", "scr", "dll", "msi", "vbs", "bat", "com", "pif", "cmd", "vxd", "cpl" );
+ 'exe', 'scr', 'dll', 'msi', 'vbs', 'bat', 'com', 'pif', 'cmd', 'vxd', 'cpl' );
# This is a flag to determine whether or not to check file extensions on
# upload.
@@ -288,6 +289,9 @@ $wgCheckFileExtensions = true;
# covered by $wgFileExtensions.
$wgStrictFileExtensions = true;
+# Warn if uploaded files are larger than this
+$wgUploadSizeWarning = 150000;
+
$wgPasswordSalt = true; # For compatibility with old installations set to false
# Which namespaces should support subpages?
@@ -318,7 +322,7 @@ $wgUseImageResize = false;
## of the builtin functions
#
$wgUseImageMagick = false;
-$wgImageMagickConvertCommand = "/usr/bin/convert";
+$wgImageMagickConvertCommand = '/usr/bin/convert';
# PHPTal is a library for page templates. MediaWiki includes
# a recent PHPTal distribution. It is required to use the
@@ -332,6 +336,9 @@ if( !isset( $wgCommandLineMode ) ) {
# Show seconds in Recent Changes
$wgRCSeconds = false;
+# Log IP addresses in the recentchanges table
+$wgPutIPinRC = false;
+
# RDF metadata toggles
$wgEnableDublinCoreRdf = false;
$wgEnableCreativeCommonsRdf = false;
@@ -388,8 +395,12 @@ $wgTidyConf = $IP.'/extensions/tidy/tidy.conf';
$wgTidyOpts = '';
# See list of skins and their symbolic names in language/Language.php
-$wgDefaultSkin = "monobook";
+$wgDefaultSkin = 'monobook';
+
+# Whether or not to allow real name fields. Defaults to true.
+$wgAllowRealName = true;
# Extensions
$wgExtensionFunctions = array();
+
?>
diff --git a/includes/DifferenceEngine.php b/includes/DifferenceEngine.php
index 4ba5b7713d8d..2e3937ee4802 100644
--- a/includes/DifferenceEngine.php
+++ b/includes/DifferenceEngine.php
@@ -18,7 +18,9 @@ class DifferenceEngine {
function showDiffPage()
{
global $wgUser, $wgTitle, $wgOut, $wgLang;
-
+ $fname = "DifferenceEngine::showDiffPage";
+ wfProfileIn( $fname );
+
$t = $wgTitle->getPrefixedText() . " (Diff: {$this->mOldid}, " .
"{$this->mNewid})";
$mtext = wfMsg( "missingarticle", $t );
@@ -27,6 +29,7 @@ class DifferenceEngine {
if ( ! $this->loadText() ) {
$wgOut->setPagetitle( wfMsg( "errorpagetitle" ) );
$wgOut->addHTML( $mtext );
+ wfProfileOut( $fname );
return;
}
$wgOut->suppressQuickbar();
@@ -44,6 +47,7 @@ class DifferenceEngine {
if ( !( $this->mOldPage->userCanRead() && $this->mNewPage->userCanRead() ) ) {
$wgOut->loginToUse();
$wgOut->output();
+ wfProfileOut( $fname );
exit;
}
@@ -80,6 +84,8 @@ class DifferenceEngine {
$oldHeader, $newHeader );
$wgOut->addHTML( "<hr /><h2>{$this->mNewtitle}</h2>\n" );
$wgOut->addWikiText( $this->mNewtext );
+
+ wfProfileOut( $fname );
}
function showDiff( $otext, $ntext, $otitle, $ntitle )
@@ -112,9 +118,10 @@ cellpadding='0' cellspacing='4px' class='diff'><tr>
#
function loadText()
{
- global $wgTitle, $wgOut, $wgLang;
+ global $wgTitle, $wgOut, $wgLang, $wgIsMySQL, $wgIsPg;
$fname = "DifferenceEngine::loadText";
+ $oldtable=$wgIsPg?'"old"':'old';
if ( 0 == $this->mNewid || 0 == $this->mOldid ) {
$wgOut->setArticleFlag( true );
$this->mNewtitle = wfMsg( "currentrev" );
@@ -130,7 +137,7 @@ cellpadding='0' cellspacing='4px' class='diff'><tr>
$this->mNewUser = $s->cur_user_text;
$this->mNewComment = $s->cur_comment;
} else {
- $sql = "SELECT old_namespace,old_title,old_timestamp,old_text,old_flags,old_user_text,old_comment FROM old WHERE " .
+ $sql = "SELECT old_namespace,old_title,old_timestamp,old_text,old_flags,old_user_text,old_comment FROM $oldtable WHERE " .
"old_id={$this->mNewid}";
$res = wfQuery( $sql, DB_READ, $fname );
@@ -146,14 +153,15 @@ cellpadding='0' cellspacing='4px' class='diff'><tr>
$this->mNewComment = $s->old_comment;
}
if ( 0 == $this->mOldid ) {
+ $use_index=$wgIsMySQL?"USE INDEX (name_title_timestamp)":"";
$sql = "SELECT old_namespace,old_title,old_timestamp,old_text,old_flags,old_user_text,old_comment " .
- "FROM old USE INDEX (name_title_timestamp) WHERE " .
+ "FROM $oldtable $use_index WHERE " .
"old_namespace=" . $this->mNewPage->getNamespace() . " AND " .
"old_title='" . wfStrencode( $this->mNewPage->getDBkey() ) .
"' ORDER BY inverse_timestamp LIMIT 1";
$res = wfQuery( $sql, DB_READ, $fname );
} else {
- $sql = "SELECT old_namespace,old_title,old_timestamp,old_text,old_flags,old_user_text,old_comment FROM old WHERE " .
+ $sql = "SELECT old_namespace,old_title,old_timestamp,old_text,old_flags,old_user_text,old_comment FROM $oldtable WHERE " .
"old_id={$this->mOldid}";
$res = wfQuery( $sql, DB_READ, $fname );
}
@@ -1015,7 +1023,7 @@ class _HWLDF_WordAccumulator {
function _flushGroup ($new_tag) {
if ($this->_group !== '') {
if ($this->_tag == 'mark')
- $this->_line .= "<font color=\"red\">$this->_group</font>";
+ $this->_line .= '<span class="diffchange">'.$this->_group.'</span>';
else
$this->_line .= $this->_group;
}
@@ -1116,8 +1124,8 @@ class TableDiffFormatter extends DiffFormatter
$l1 = wfMsg( "lineno", $xbeg );
$l2 = wfMsg( "lineno", $ybeg );
- $r = "<tr><td colspan='2' align='left'><strong>{$l1}</strong></td>\n" .
- "<td colspan='2' align='left'><strong>{$l2}</strong></td></tr>\n";
+ $r = '<tr><td colspan="2" align="left"><strong>'.$l1."</strong></td>\n" .
+ '<td colspan="2" align="left"><strong>'.$l2."</strong></td></tr>\n";
return $r;
}
@@ -1133,27 +1141,27 @@ class TableDiffFormatter extends DiffFormatter
}
function addedLine( $line ) {
- return "<td>+</td><td class='diff-addedline'>" .
- "<small>{$line}</small></td>";
+ return '<td>+</td><td class="diff-addedline">' .
+ $line.'</td>';
}
function deletedLine( $line ) {
- return "<td>-</td><td class='diff-deletedline'>" .
- "<small>{$line}</small></td>";
+ return '<td>-</td><td class="diff-deletedline">' .
+ $line.'</td>';
}
function emptyLine() {
- return "<td colspan='2'>&nbsp;</td>";
+ return '<td colspan="2">&nbsp;</td>';
}
function contextLine( $line ) {
- return "<td> </td><td class='diff-context'><small>{$line}</small></td>";
+ return '<td> </td><td class="diff-context">'.$line.'</td>';
}
function _added($lines) {
global $wgOut;
foreach ($lines as $line) {
- $wgOut->addHTML( "<tr>" . $this->emptyLine() .
+ $wgOut->addHTML( '<tr>' . $this->emptyLine() .
$this->addedLine( $line ) . "</tr>\n" );
}
}
@@ -1161,7 +1169,7 @@ class TableDiffFormatter extends DiffFormatter
function _deleted($lines) {
global $wgOut;
foreach ($lines as $line) {
- $wgOut->addHTML( "<tr>" . $this->deletedLine( $line ) .
+ $wgOut->addHTML( '<tr>' . $this->deletedLine( $line ) .
$this->emptyLine() . "</tr>\n" );
}
}
@@ -1169,7 +1177,7 @@ class TableDiffFormatter extends DiffFormatter
function _context( $lines ) {
global $wgOut;
foreach ($lines as $line) {
- $wgOut->addHTML( "<tr>" . $this->contextLine( $line ) .
+ $wgOut->addHTML( '<tr>' . $this->contextLine( $line ) .
$this->contextLine( $line ) . "</tr>\n" );
}
}
@@ -1182,7 +1190,7 @@ class TableDiffFormatter extends DiffFormatter
while ( $line = array_shift( $del ) ) {
$aline = array_shift( $add );
- $wgOut->addHTML( "<tr>" . $this->deletedLine( $line ) .
+ $wgOut->addHTML( '<tr>' . $this->deletedLine( $line ) .
$this->addedLine( $aline ) . "</tr>\n" );
}
$this->_added( $add ); # If any leftovers
diff --git a/includes/EditPage.php b/includes/EditPage.php
index d9959ae39f97..45c1262e8f3d 100644
--- a/includes/EditPage.php
+++ b/includes/EditPage.php
@@ -62,6 +62,7 @@ class EditPage {
}
function importFormData( &$request ) {
+ global $wgIsMySQL, $wgIsPg;
# These fields need to be checked for encoding.
# Also remove trailing whitespace, but don't remove _initial_
# whitespace from the text boxes. This may be significant formatting.
@@ -70,7 +71,12 @@ class EditPage {
$this->summary = trim( $request->getText( "wpSummary" ) );
$this->edittime = $request->getVal( 'wpEdittime' );
- if( !preg_match( '/^\d{14}$/', $this->edittime ) ) $this->edittime = "";
+ if ($wgIsMySQL)
+ if( !preg_match( '/^\d{14}$/', $this->edittime )) $this->edittime = "";
+ if ($wgIsPg)
+ if ( !preg_match( '/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d$/',
+ $this->edittime ))
+ $this->edittime = "";
$this->preview = $request->getCheck( 'wpPreview' );
$this->save = $request->wasPosted() && !$this->preview;
@@ -131,8 +137,12 @@ class EditPage {
if ( "save" == $formtype ) {
# Check for spam
if ( $wgSpamRegex && preg_match( $wgSpamRegex, $this->textbox1 ) ) {
- sleep(10);
- $wgOut->redirect( $this->mTitle->getFullURL() );
+ if ( $wgUser->isSysop() ) {
+ $this->spamPage();
+ } else {
+ sleep(10);
+ $wgOut->redirect( $this->mTitle->getFullURL() );
+ }
return;
}
if ( $wgUser->isBlocked() ) {
@@ -200,13 +210,19 @@ class EditPage {
$hasmatch = preg_match( "/^ *([=]{1,6})(.*?)(\\1) *\\n/i", $this->textbox1, $matches );
# we can't deal with anchors, includes, html etc in the header for now,
# headline would need to be parsed to improve this
- if($hasmatch and strlen($matches[2]) > 0 and !preg_match( "/[\\['{<>]/", $matches[2])) {
+ #if($hasmatch and strlen($matches[2]) > 0 and !preg_match( "/[\\['{<>]/", $matches[2])) {
+ if($hasmatch and strlen($matches[2]) > 0) {
global $wgInputEncoding;
$headline = do_html_entity_decode( $matches[2], ENT_COMPAT, $wgInputEncoding );
- # strip out HTML, will be useful when
- # $headline = preg_replace( "/<.*?" . ">/","",$headline );
+ # strip out HTML
+ $headline = preg_replace( "/<.*?" . ">/","",$headline );
$headline = trim( $headline );
- $sectionanchor = '#'.preg_replace("/[ \\?&\\/<>\\(\\)\\[\\]=,+']+/", '_', urlencode( $headline ) );
+ $sectionanchor = '#'.urlencode( str_replace(' ', '_', $headline ) );
+ $replacearray = array(
+ '%3A' => ':',
+ '%' => '.'
+ );
+ $sectionanchor = str_replace(array_keys($replacearray),array_values($replacearray),$sectionanchor);
}
}
@@ -301,12 +317,12 @@ class EditPage {
$save = wfMsg( "savearticle" );
$prev = wfMsg( "showpreview" );
- $cancel = $sk->makeKnownLink( $this->mTitle->getPrefixedURL(),
+ $cancel = $sk->makeKnownLink( $this->mTitle->getPrefixedText(),
wfMsg( "cancel" ) );
- $edithelpurl = $sk->makeUrl( wfMsg( "edithelppage" ));
- $edithelp = '<a onclick="window.open('.
- "'$edithelpurl', 'helpwindow', 'width=610,height=400,left=10,top=10'".'); return false;" href="'.$edithelpurl.'">'.
- wfMsg( "edithelp" ).'</a>';
+ $edithelpurl = $sk->makeUrl( wfMsg( 'edithelppage' ));
+ $edithelp = '<a target="helpwindow" href="'.$edithelpurl.'">'.
+ htmlspecialchars( wfMsg( 'edithelp' ) ).'</a> '.
+ htmlspecialchars( wfMsg( 'newwindow' ) );
$copywarn = wfMsg( "copyrightwarning", $sk->makeKnownLink(
wfMsg( "copyrightpage" ) ) );
@@ -354,7 +370,6 @@ class EditPage {
$previewhead.="<h2>" . wfMsg( "previewconflict" ) .
"</h2>\n";
}
- $previewtext = wfUnescapeHTML( $this->textbox1 );
$parserOptions = ParserOptions::newFromUser( $wgUser );
$parserOptions->setUseCategoryMagic( false );
@@ -371,7 +386,7 @@ class EditPage {
$parserOutput = $wgParser->parse( $previewtext , $wgTitle, $parserOptions );
$wgOut->addHTML( $parserOutput->mText );
} else {
- $parserOutput = $wgParser->parse( $this->mArticle->preSaveTransform( $previewtext ) ."\n\n",
+ $parserOutput = $wgParser->parse( $this->mArticle->preSaveTransform( $this->textbox1 ) ."\n\n",
$wgTitle, $parserOptions );
$previewHTML = $parserOutput->mText;
@@ -379,6 +394,7 @@ class EditPage {
$wgOut->addHTML($previewhead);
$wgOut->addHTML($previewHTML);
}
+ $wgOut->addLanguageLinks($parserOutput->getLanguageLinks());
$wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
}
}
@@ -410,12 +426,12 @@ htmlspecialchars( $wgLang->recodeForEdit( $this->textbox1 ) ) .
</textarea>
<br />{$editsummary}
{$checkboxhtml}
-<input tabindex='5' type='submit' value=\"{$save}\" name=\"wpSave\" accesskey=\"".wfMsg('accesskey-save')."\"".
+<input tabindex='5' id='wpSave' type='submit' value=\"{$save}\" name=\"wpSave\" accesskey=\"".wfMsg('accesskey-save')."\"".
" title=\"".wfMsg('tooltip-save')."\"/>
-<input tabindex='6' type='submit' value=\"{$prev}\" name=\"wpPreview\" accesskey=\"".wfMsg('accesskey-preview')."\"".
+<input tabindex='6' id='wpSave' type='submit' value=\"{$prev}\" name=\"wpPreview\" accesskey=\"".wfMsg('accesskey-preview')."\"".
" title=\"".wfMsg('tooltip-preview')."\"/>
<em>{$cancel}</em> | <em>{$edithelp}</em>
-<br /><br />{$copywarn}
+<br /><div id=\"editpage-copywarn\">{$copywarn}</div>
<input type='hidden' value=\"" . htmlspecialchars( $this->section ) . "\" name=\"wpSection\" />
<input type='hidden' value=\"{$this->edittime}\" name=\"wpEdittime\" />\n" );
@@ -425,7 +441,7 @@ htmlspecialchars( $wgLang->recodeForEdit( $this->textbox1 ) ) .
wfMsg( "yourtext" ), wfMsg( "storedversion" ) );
$wgOut->addHTML( "<h2>" . wfMsg( "yourtext" ) . "</h2>
-<textarea tabindex=6 name=\"wpTextbox2\" rows='{$rows}' cols='{$cols}' wrap='virtual'>"
+<textarea tabindex=6 id='wpTextbox2' name=\"wpTextbox2\" rows='{$rows}' cols='{$cols}' wrap='virtual'>"
. htmlspecialchars( $wgLang->recodeForEdit( $this->textbox2 ) ) .
"
</textarea>" );
@@ -472,6 +488,18 @@ htmlspecialchars( $wgLang->recodeForEdit( $this->textbox1 ) ) .
$wgOut->returnToMain( false );
}
+ function spamPage()
+ {
+ global $wgOut, $wgSpamRegex;
+ $wgOut->setPageTitle( wfMsg( "spamprotectiontitle" ) );
+ $wgOut->setRobotpolicy( "noindex,nofollow" );
+ $wgOut->setArticleRelated( false );
+
+ $wgOut->addWikiText( wfMsg( "spamprotectiontext" ) );
+ $wgOut->addWikiText( "<pre>".$wgSpamRegex."</pre>" );
+ $wgOut->returnToMain( false );
+ }
+
# Forks processes to scan the originating IP for an open proxy server
# MemCached can be used to skip IPs that have already been scanned
function proxyCheck()
@@ -516,6 +544,7 @@ htmlspecialchars( $wgLang->recodeForEdit( $this->textbox1 ) ) .
}
/* private */ function mergeChangesInto( &$text ){
+ global $wgIsPg;
$oldDate = $this->edittime;
$res = wfQuery("SELECT cur_text FROM cur WHERE cur_id=" .
$this->mTitle->getArticleID() . " FOR UPDATE", DB_WRITE);
@@ -524,10 +553,13 @@ htmlspecialchars( $wgLang->recodeForEdit( $this->textbox1 ) ) .
$yourtext = $obj->cur_text;
$ns = $this->mTitle->getNamespace();
$title = wfStrencode( $this->mTitle->getDBkey() );
- $res = wfQuery("SELECT old_text FROM old WHERE old_namespace = $ns AND ".
+ $oldtable=$wgIsPg?'"old"':'old';
+ $res = wfQuery("SELECT old_text,old_flags FROM $oldtable WHERE old_namespace = $ns AND ".
"old_title = '{$title}' AND old_timestamp = '{$oldDate}'", DB_WRITE);
$obj = wfFetchObject($res);
- if(wfMerge($obj->old_text, $text, $yourtext, $result)){
+ $oldText = Article::getRevisionText( $obj );
+
+ if(wfMerge($oldText, $text, $yourtext, $result)){
$text = $result;
return true;
} else {
diff --git a/includes/Feed.php b/includes/Feed.php
index 0be93e8a7017..b0d208b251e1 100644
--- a/includes/Feed.php
+++ b/includes/Feed.php
@@ -20,18 +20,18 @@
# http://www.gnu.org/copyleft/gpl.html
$wgFeedClasses = array(
- "rss" => "RSSFeed",
- "atom" => "AtomFeed",
+ 'rss' => 'RSSFeed',
+ 'atom' => 'AtomFeed',
);
class FeedItem {
- var $Title = "Wiki";
- var $Description = "";
- var $Url = "";
- var $Date = "";
- var $Author = "";
+ var $Title = 'Wiki';
+ var $Description = '';
+ var $Url = '';
+ var $Date = '';
+ var $Author = '';
- function FeedItem( $Title, $Description, $Url, $Date = "", $Author = "", $Comments = "" ) {
+ function FeedItem( $Title, $Description, $Url, $Date = '', $Author = '', $Comments = '' ) {
$this->Title = $Title;
$this->Description = $Description;
$this->Url = $Url;
@@ -44,8 +44,8 @@ class FeedItem {
function xmlEncode( $string ) {
global $wgInputEncoding, $wgLang;
$string = str_replace( "\r\n", "\n", $string );
- if( strcasecmp( $wgInputEncoding, "utf-8" ) != 0 ) {
- $string = $wgLang->iconv( $wgInputEncoding, "utf-8", $string );
+ if( strcasecmp( $wgInputEncoding, 'utf-8' ) != 0 ) {
+ $string = $wgLang->iconv( $wgInputEncoding, 'utf-8', $string );
}
return htmlspecialchars( $string );
}
@@ -85,7 +85,7 @@ class ChannelFeed extends FeedItem {
# print "</feed>";
}
- function outXmlHeader( $mimetype="application/xml" ) {
+ function outXmlHeader( $mimetype='application/xml' ) {
global $wgServer, $wgStylePath, $wgOut;
# We take over from $wgOut, excepting its cache header info
@@ -102,7 +102,7 @@ class ChannelFeed extends FeedItem {
class RSSFeed extends ChannelFeed {
function formatTime( $ts ) {
- return gmdate( "D, d M Y H:i:s \G\M\T", wfTimestamp2Unix( $ts ) );
+ return gmdate( 'D, d M Y H:i:s \G\M\T', wfTimestamp2Unix( $ts ) );
}
function outHeader() {
@@ -143,7 +143,7 @@ class RSSFeed extends ChannelFeed {
class AtomFeed extends ChannelFeed {
function formatTime( $ts ) {
// need to use RFC 822 time format at least for rss2.0
- return gmdate( "Y-m-d\TH:i:s", wfTimestamp2Unix( $ts ) );
+ return gmdate( 'Y-m-d\TH:i:s', wfTimestamp2Unix( $ts ) );
}
function outHeader() {
@@ -186,4 +186,4 @@ class AtomFeed extends ChannelFeed {
}
}
-?> \ No newline at end of file
+?>
diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index 8989b6078d75..7e4d9117a012 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -5,9 +5,9 @@ $wgNumberOfArticles = -1; # Unset
$wgTotalViews = -1;
$wgTotalEdits = -1;
-require_once( "DatabaseFunctions.php" );
-require_once( "UpdateClasses.php" );
-require_once( "LogPage.php" );
+require_once( 'DatabaseFunctions.php' );
+require_once( 'UpdateClasses.php' );
+require_once( 'LogPage.php' );
/*
* Compatibility functions
@@ -23,8 +23,8 @@ if( !function_exists('iconv') ) {
# This will *not* work in all circumstances.
function iconv( $from, $to, $string ) {
if(strcasecmp( $from, $to ) == 0) return $string;
- if(strcasecmp( $from, "utf-8" ) == 0) return utf8_decode( $string );
- if(strcasecmp( $to, "utf-8" ) == 0) return utf8_encode( $string );
+ if(strcasecmp( $from, 'utf-8' ) == 0) return utf8_decode( $string );
+ if(strcasecmp( $to, 'utf-8' ) == 0) return utf8_encode( $string );
return $string;
}
}
@@ -32,7 +32,7 @@ if( !function_exists('iconv') ) {
if( !function_exists('file_get_contents') ) {
# Exists in PHP 4.3.0+
function file_get_contents( $filename ) {
- return implode( "", file( $filename ) );
+ return implode( '', file( $filename ) );
}
}
@@ -47,15 +47,15 @@ if( !function_exists('is_a') ) {
# html_entity_decode exists in PHP 4.3.0+ but is FATALLY BROKEN even then,
# with no UTF-8 support.
-function do_html_entity_decode( $string, $quote_style=ENT_COMPAT, $charset="ISO-8859-1" ) {
+function do_html_entity_decode( $string, $quote_style=ENT_COMPAT, $charset='ISO-8859-1' ) {
static $trans;
if( !isset( $trans ) ) {
$trans = array_flip( get_html_translation_table( HTML_ENTITIES, $quote_style ) );
# Assumes $charset will always be the same through a run, and only understands
# utf-8 or default. Note - mixing latin1 named entities and unicode numbered
# ones will result in a bad link.
- if( strcasecmp( "utf-8", $charset ) == 0 ) {
- $trans = array_map( "utf8_encode", $trans );
+ if( strcasecmp( 'utf-8', $charset ) == 0 ) {
+ $trans = array_map( 'utf8_encode', $trans );
}
}
return strtr( $string, $trans );
@@ -77,19 +77,19 @@ function wfSeedRandom()
# Generates a URL from a URL-encoded title and a query string
# Title::getLocalURL() is preferred in most cases
#
-function wfLocalUrl( $a, $q = "" )
+function wfLocalUrl( $a, $q = '' )
{
global $wgServer, $wgScript, $wgArticlePath;
- $a = str_replace( " ", "_", $a );
+ $a = str_replace( ' ', '_', $a );
- if ( "" == $a ) {
- if( "" == $q ) {
+ if ( '' == $a ) {
+ if( '' == $q ) {
$a = $wgScript;
} else {
$a = "{$wgScript}?{$q}";
}
- } else if ( "" == $q ) {
+ } else if ( '' == $q ) {
$a = str_replace( "$1", $a, $wgArticlePath );
} else if ($wgScript != '' ) {
$a = "{$wgScript}?title={$a}&{$q}";
@@ -99,18 +99,18 @@ function wfLocalUrl( $a, $q = "" )
return $a;
}
-function wfLocalUrlE( $a, $q = "" )
+function wfLocalUrlE( $a, $q = '' )
{
return wfEscapeHTML( wfLocalUrl( $a, $q ) );
# die( "Call to obsolete function wfLocalUrlE()" );
}
-function wfFullUrl( $a, $q = "" ) {
- wfDebugDieBacktrace( "Call to obsolete function wfFullUrl(); use Title::getFullURL" );
+function wfFullUrl( $a, $q = '' ) {
+ wfDebugDieBacktrace( 'Call to obsolete function wfFullUrl(); use Title::getFullURL' );
}
-function wfFullUrlE( $a, $q = "" ) {
- wfDebugDieBacktrace( "Call to obsolete function wfFullUrlE(); use Title::getFullUrlE" );
+function wfFullUrlE( $a, $q = '' ) {
+ wfDebugDieBacktrace( 'Call to obsolete function wfFullUrlE(); use Title::getFullUrlE' );
}
@@ -143,27 +143,28 @@ function wfImageArchiveUrl( $name )
function wfUrlencode ( $s )
{
$s = urlencode( $s );
- $s = preg_replace( "/%3[Aa]/", ":", $s );
- $s = preg_replace( "/%2[Ff]/", "/", $s );
+ $s = preg_replace( '/%3[Aa]/', ':', $s );
+ $s = preg_replace( '/%2[Ff]/', '/', $s );
return $s;
}
function wfUtf8Sequence($codepoint) {
- if($codepoint < 0x80) return chr($codepoint);
- if($codepoint < 0x800) return chr($codepoint >> 6 & 0x3f | 0xc0) .
- chr($codepoint & 0x3f | 0x80);
- if($codepoint < 0x10000) return chr($codepoint >> 12 & 0x0f | 0xe0) .
- chr($codepoint >> 6 & 0x3f | 0x80) .
- chr($codepoint & 0x3f | 0x80);
+ if($codepoint < 0x80) return chr($codepoint);
+ if($codepoint < 0x800) return chr($codepoint >> 6 & 0x3f | 0xc0) .
+ chr($codepoint & 0x3f | 0x80);
+ if($codepoint < 0x10000) return chr($codepoint >> 12 & 0x0f | 0xe0) .
+ chr($codepoint >> 6 & 0x3f | 0x80) .
+ chr($codepoint & 0x3f | 0x80);
if($codepoint < 0x100000) return chr($codepoint >> 18 & 0x07 | 0xf0) . # Double-check this
- chr($codepoint >> 12 & 0x3f | 0x80) .
- chr($codepoint >> 6 & 0x3f | 0x80) .
- chr($codepoint & 0x3f | 0x80);
+ chr($codepoint >> 12 & 0x3f | 0x80) .
+ chr($codepoint >> 6 & 0x3f | 0x80) .
+ chr($codepoint & 0x3f | 0x80);
# Doesn't yet handle outside the BMP
return "&#$codepoint;";
}
+# Converts numeric character entities to UTF-8
function wfMungeToUtf8($string) {
global $wgInputEncoding; # This is debatable
#$string = iconv($wgInputEncoding, "UTF-8", $string);
@@ -189,7 +190,7 @@ function wfUtf8Entity( $matches ) {
}
if ( $length != strlen( $char ) ) {
- return "";
+ return '';
}
if ( $length == 1 ) {
return $char;
@@ -235,23 +236,25 @@ function logProfilingData()
list( $usec, $sec ) = explode( " ", $wgRequestTime );
$start = (float)$sec + (float)$usec;
$elapsed = $now - $start;
- if ( "" != $wgDebugLogFile ) {
+ if ( $wgProfiling ) {
$prof = wfGetProfilingOutput( $start, $elapsed );
- $forward = "";
+ $forward = '';
if( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
- $forward = " forwarded for " . $_SERVER['HTTP_X_FORWARDED_FOR'];
+ $forward = ' forwarded for ' . $_SERVER['HTTP_X_FORWARDED_FOR'];
if( !empty( $_SERVER['HTTP_CLIENT_IP'] ) )
- $forward .= " client IP " . $_SERVER['HTTP_CLIENT_IP'];
+ $forward .= ' client IP ' . $_SERVER['HTTP_CLIENT_IP'];
if( !empty( $_SERVER['HTTP_FROM'] ) )
- $forward .= " from " . $_SERVER['HTTP_FROM'];
+ $forward .= ' from ' . $_SERVER['HTTP_FROM'];
if( $forward )
$forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})";
if($wgUser->getId() == 0)
- $forward .= " anon";
+ $forward .= ' anon';
$log = sprintf( "%s\t%04.3f\t%s\n",
- gmdate( "YmdHis" ), $elapsed,
+ gmdate( 'YmdHis' ), $elapsed,
urldecode( $_SERVER['REQUEST_URI'] . $forward ) );
- error_log( $log . $prof, 3, $wgDebugLogFile );
+ if ( '' != $wgDebugLogFile ) {
+ error_log( $log . $prof, 3, $wgDebugLogFile );
+ }
}
}
@@ -288,7 +291,7 @@ function wfMsgNoDB( $key ) {
function wfMsgReal( $key, $args, $useDB ) {
global $wgReplacementKeys, $wgMessageCache, $wgLang;
- $fname = "wfMsg";
+ $fname = 'wfMsg';
wfProfileIn( $fname );
if ( $wgMessageCache ) {
$message = $wgMessageCache->get( $key, $useDB );
@@ -309,28 +312,28 @@ function wfMsgReal( $key, $args, $useDB ) {
function wfCleanFormFields( $fields )
{
- wfDebugDieBacktrace( "Call to obsolete wfCleanFormFields(). Use wgRequest instead..." );
+ wfDebugDieBacktrace( 'Call to obsolete wfCleanFormFields(). Use wgRequest instead...' );
}
function wfMungeQuotes( $in )
{
- $out = str_replace( "%", "%25", $in );
- $out = str_replace( "'", "%27", $out );
- $out = str_replace( "\"", "%22", $out );
+ $out = str_replace( '%', '%25', $in );
+ $out = str_replace( "'", '%27', $out );
+ $out = str_replace( '"', '%22', $out );
return $out;
}
function wfDemungeQuotes( $in )
{
- $out = str_replace( "%22", "\"", $in );
- $out = str_replace( "%27", "'", $out );
- $out = str_replace( "%25", "%", $out );
+ $out = str_replace( '%22', '"', $in );
+ $out = str_replace( '%27', "'", $out );
+ $out = str_replace( '%25', '%', $out );
return $out;
}
function wfCleanQueryVar( $var )
{
- wfDebugDieBacktrace( "Call to obsolete function wfCleanQueryVar(); use wgRequest instead" );
+ wfDebugDieBacktrace( 'Call to obsolete function wfCleanQueryVar(); use wgRequest instead' );
}
function wfSearch( $s )
@@ -353,30 +356,32 @@ function wfAbruptExit(){
}
$called = true;
- if( function_exists( "debug_backtrace" ) ){ // PHP >= 4.3
+ if( function_exists( 'debug_backtrace' ) ){ // PHP >= 4.3
$bt = debug_backtrace();
for($i = 0; $i < count($bt) ; $i++){
- $file = $bt[$i]["file"];
- $line = $bt[$i]["line"];
+ $file = $bt[$i]['file'];
+ $line = $bt[$i]['line'];
wfDebug("WARNING: Abrupt exit in $file at line $line\n");
}
} else {
- wfDebug("WARNING: Abrupt exit\n");
+ wfDebug('WARNING: Abrupt exit\n');
}
exit();
}
-function wfDebugDieBacktrace( $msg = "" ) {
- $msg .= "\n<p>Backtrace:</p>\n<ul>\n";
- $backtrace = debug_backtrace();
- foreach( $backtrace as $call ) {
- $f = explode( DIRECTORY_SEPARATOR, $call['file'] );
- $file = $f[count($f)-1];
- $msg .= "<li>" . $file . " line " . $call['line'] . ", in ";
- if( !empty( $call['class'] ) ) $msg .= $call['class'] . "::";
- $msg .= $call['function'] . "()</li>\n";
- }
- die( $msg );
+function wfDebugDieBacktrace( $msg = '' ) {
+ if ( function_exists( 'debug_backtrace' ) ) {
+ $msg .= "\n<p>Backtrace:</p>\n<ul>\n";
+ $backtrace = debug_backtrace();
+ foreach( $backtrace as $call ) {
+ $f = explode( DIRECTORY_SEPARATOR, $call['file'] );
+ $file = $f[count($f)-1];
+ $msg .= '<li>' . $file . " line " . $call['line'] . ', in ';
+ if( !empty( $call['class'] ) ) $msg .= $call['class'] . '::';
+ $msg .= $call['function'] . "()</li>\n";
+ }
+ }
+ die( $msg );
}
function wfNumberOfArticles()
@@ -392,9 +397,9 @@ function wfNumberOfArticles()
global $wgNumberOfArticles, $wgTotalViews, $wgTotalEdits;
if ( -1 != $wgNumberOfArticles ) return;
- $sql = "SELECT ss_total_views, ss_total_edits, ss_good_articles " .
- "FROM site_stats WHERE ss_row_id=1";
- $res = wfQuery( $sql, DB_READ, "wfLoadSiteStats" );
+ $sql = 'SELECT ss_total_views, ss_total_edits, ss_good_articles ' .
+ 'FROM site_stats WHERE ss_row_id=1';
+ $res = wfQuery( $sql, DB_READ, 'wfLoadSiteStats' );
if ( 0 == wfNumRows( $res ) ) { return; }
else {
@@ -408,24 +413,24 @@ function wfNumberOfArticles()
function wfEscapeHTML( $in )
{
return str_replace(
- array( "&", "\"", ">", "<" ),
- array( "&amp;", "&quot;", "&gt;", "&lt;" ),
+ array( '&', '"', '>', '<' ),
+ array( '&amp;', '&quot;', '&gt;', '&lt;' ),
$in );
}
function wfEscapeHTMLTagsOnly( $in ) {
return str_replace(
- array( "\"", ">", "<" ),
- array( "&quot;", "&gt;", "&lt;" ),
+ array( '"', '>', '<' ),
+ array( '&quot;', '&gt;', '&lt;' ),
$in );
}
function wfUnescapeHTML( $in )
{
- $in = str_replace( "&lt;", "<", $in );
- $in = str_replace( "&gt;", ">", $in );
- $in = str_replace( "&quot;", "\"", $in );
- $in = str_replace( "&amp;", "&", $in );
+ $in = str_replace( '&lt;', '<', $in );
+ $in = str_replace( '&gt;', '>', $in );
+ $in = str_replace( '&quot;', '"', $in );
+ $in = str_replace( '&amp;', '&', $in );
return $in;
}
@@ -435,21 +440,21 @@ function wfImageDir( $fname )
$hash = md5( $fname );
$oldumask = umask(0);
- $dest = $wgUploadDirectory . "/" . $hash{0};
+ $dest = $wgUploadDirectory . '/' . $hash{0};
if ( ! is_dir( $dest ) ) { mkdir( $dest, 0777 ); }
- $dest .= "/" . substr( $hash, 0, 2 );
+ $dest .= '/' . substr( $hash, 0, 2 );
if ( ! is_dir( $dest ) ) { mkdir( $dest, 0777 ); }
umask( $oldumask );
return $dest;
}
-function wfImageThumbDir( $fname , $subdir="thumb")
+function wfImageThumbDir( $fname , $subdir='thumb')
{
return wfImageArchiveDir( $fname, $subdir );
}
-function wfImageArchiveDir( $fname , $subdir="archive")
+function wfImageArchiveDir( $fname , $subdir='archive')
{
global $wgUploadDirectory;
@@ -460,9 +465,9 @@ function wfImageArchiveDir( $fname , $subdir="archive")
# be written we'll worry about it then.
$archive = "{$wgUploadDirectory}/{$subdir}";
if ( ! is_dir( $archive ) ) { @mkdir( $archive, 0777 ); }
- $archive .= "/" . $hash{0};
+ $archive .= '/' . $hash{0};
if ( ! is_dir( $archive ) ) { @mkdir( $archive, 0777 ); }
- $archive .= "/" . substr( $hash, 0, 2 );
+ $archive .= '/' . substr( $hash, 0, 2 );
if ( ! is_dir( $archive ) ) { @mkdir( $archive, 0777 ); }
umask( $oldumask );
@@ -474,9 +479,9 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
global $wgUser, $wgLang, $wgTitle, $wgOut, $wgDeferredUpdateList;
global $wgUseCopyrightUpload;
- $fname = "wfRecordUpload";
+ $fname = 'wfRecordUpload';
- $sql = "SELECT img_name,img_size,img_timestamp,img_description,img_user," .
+ $sql = 'SELECT img_name,img_size,img_timestamp,img_description,img_user,' .
"img_user_text FROM image WHERE img_name='" . wfStrencode( $name ) . "'";
$res = wfQuery( $sql, DB_READ, $fname );
@@ -486,9 +491,9 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
if ( $wgUseCopyrightUpload )
{
- $textdesc = "== " . wfMsg ( "filedesc" ) . " ==\n" . $desc . "\n" .
- "== " . wfMsg ( "filestatus" ) . " ==\n" . $copyStatus . "\n" .
- "== " . wfMsg ( "filesource" ) . " ==\n" . $source ;
+ $textdesc = '== ' . wfMsg ( 'filedesc' ) . " ==\n" . $desc . "\n" .
+ '== ' . wfMsg ( 'filestatus' ) . " ==\n" . $copyStatus . "\n" .
+ '== ' . wfMsg ( 'filesource' ) . " ==\n" . $source ;
}
else $textdesc = $desc ;
@@ -496,27 +501,27 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
$won = wfInvertTimestamp( $now );
if ( 0 == wfNumRows( $res ) ) {
- $sql = "INSERT INTO image (img_name,img_size,img_timestamp," .
+ $sql = 'INSERT INTO image (img_name,img_size,img_timestamp,' .
"img_description,img_user,img_user_text) VALUES ('" .
wfStrencode( $name ) . "',$size,'{$now}','" .
wfStrencode( $desc ) . "', '" . $wgUser->getID() .
"', '" . wfStrencode( $wgUser->getName() ) . "')";
wfQuery( $sql, DB_WRITE, $fname );
- $sql = "SELECT cur_id,cur_text FROM cur WHERE cur_namespace=" .
+ $sql = 'SELECT cur_id,cur_text FROM cur WHERE cur_namespace=' .
Namespace::getImage() . " AND cur_title='" .
wfStrencode( $name ) . "'";
$res = wfQuery( $sql, DB_READ, $fname );
if ( 0 == wfNumRows( $res ) ) {
- $common =
+ $common =
Namespace::getImage() . ",'" .
wfStrencode( $name ) . "','" .
wfStrencode( $desc ) . "','" . $wgUser->getID() . "','" .
wfStrencode( $wgUser->getName() ) . "','" . $now .
"',1";
- $sql = "INSERT INTO cur (cur_namespace,cur_title," .
- "cur_comment,cur_user,cur_user_text,cur_timestamp,cur_is_new," .
- "cur_text,inverse_timestamp,cur_touched) VALUES (" .
+ $sql = 'INSERT INTO cur (cur_namespace,cur_title,' .
+ 'cur_comment,cur_user,cur_user_text,cur_timestamp,cur_is_new,' .
+ 'cur_text,inverse_timestamp,cur_touched) VALUES (' .
$common .
",'" . wfStrencode( $textdesc ) . "','{$won}','{$now}')";
wfQuery( $sql, DB_WRITE, $fname );
@@ -531,7 +536,7 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
} else {
$s = wfFetchObject( $res );
- $sql = "INSERT INTO oldimage (oi_name,oi_archive_name,oi_size," .
+ $sql = 'INSERT INTO oldimage (oi_name,oi_archive_name,oi_size,' .
"oi_timestamp,oi_description,oi_user,oi_user_text) VALUES ('" .
wfStrencode( $s->img_name ) . "','" .
wfStrencode( $oldver ) .
@@ -555,10 +560,10 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
wfQuery( $sql, DB_WRITE, $fname );
}
- $log = new LogPage( wfMsg( "uploadlogpage" ), wfMsg( "uploadlogpagetext" ) );
- $da = wfMsg( "uploadedimage", "[[:" . $wgLang->getNsText(
+ $log = new LogPage( wfMsg( 'uploadlogpage' ), wfMsg( 'uploadlogpagetext' ) );
+ $da = wfMsg( 'uploadedimage', '[[:' . $wgLang->getNsText(
Namespace::getImage() ) . ":{$name}|{$name}]]" );
- $ta = wfMsg( "uploadedimage", $name );
+ $ta = wfMsg( 'uploadedimage', $name );
$log->addEntry( $da, $desc, $ta );
}
@@ -568,21 +573,21 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
function wfShowingResults( $offset, $limit )
{
global $wgLang;
- return wfMsg( "showingresults", $wgLang->formatNum( $limit ), $wgLang->formatNum( $offset+1 ) );
+ return wfMsg( 'showingresults', $wgLang->formatNum( $limit ), $wgLang->formatNum( $offset+1 ) );
}
function wfShowingResultsNum( $offset, $limit, $num )
{
global $wgLang;
- return wfMsg( "showingresultsnum", $wgLang->formatNum( $limit ), $wgLang->formatNum( $offset+1 ), $wgLang->formatNum( $num ) );
+ return wfMsg( 'showingresultsnum', $wgLang->formatNum( $limit ), $wgLang->formatNum( $offset+1 ), $wgLang->formatNum( $num ) );
}
-function wfViewPrevNext( $offset, $limit, $link, $query = "", $atend = false )
+function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false )
{
global $wgUser, $wgLang;
$fmtLimit = $wgLang->formatNum( $limit );
- $prev = wfMsg( "prevn", $fmtLimit );
- $next = wfMsg( "nextn", $fmtLimit );
+ $prev = wfMsg( 'prevn', $fmtLimit );
+ $next = wfMsg( 'nextn', $fmtLimit );
$link = wfUrlencode( $link );
$sk = $wgUser->getSkin();
@@ -590,8 +595,8 @@ function wfViewPrevNext( $offset, $limit, $link, $query = "", $atend = false )
$po = $offset - $limit;
if ( $po < 0 ) { $po = 0; }
$q = "limit={$limit}&offset={$po}";
- if ( "" != $query ) { $q .= "&{$query}"; }
- $plink = "<a href=\"" . wfLocalUrlE( $link, $q ) . "\">{$prev}</a>";
+ if ( '' != $query ) { $q .= "&{$query}"; }
+ $plink = '<a href="' . wfLocalUrlE( $link, $q ) . "\">{$prev}</a>";
} else { $plink = $prev; }
$no = $offset + $limit;
@@ -601,26 +606,26 @@ function wfViewPrevNext( $offset, $limit, $link, $query = "", $atend = false )
if ( $atend ) {
$nlink = $next;
} else {
- $nlink = "<a href=\"" . wfLocalUrlE( $link, $q ) . "\">{$next}</a>";
+ $nlink = '<a href="' . wfLocalUrlE( $link, $q ) . "\">{$next}</a>";
}
- $nums = wfNumLink( $offset, 20, $link , $query ) . " | " .
- wfNumLink( $offset, 50, $link, $query ) . " | " .
- wfNumLink( $offset, 100, $link, $query ) . " | " .
- wfNumLink( $offset, 250, $link, $query ) . " | " .
+ $nums = wfNumLink( $offset, 20, $link , $query ) . ' | ' .
+ wfNumLink( $offset, 50, $link, $query ) . ' | ' .
+ wfNumLink( $offset, 100, $link, $query ) . ' | ' .
+ wfNumLink( $offset, 250, $link, $query ) . ' | ' .
wfNumLink( $offset, 500, $link, $query );
- return wfMsg( "viewprevnext", $plink, $nlink, $nums );
+ return wfMsg( 'viewprevnext', $plink, $nlink, $nums );
}
-function wfNumLink( $offset, $limit, $link, $query = "" )
+function wfNumLink( $offset, $limit, $link, $query = '' )
{
global $wgUser, $wgLang;
- if ( "" == $query ) { $q = ""; }
+ if ( '' == $query ) { $q = ''; }
else { $q = "{$query}&"; }
$q .= "limit={$limit}&offset={$offset}";
$fmtLimit = $wgLang->formatNum( $limit );
- $s = "<a href=\"" . wfLocalUrlE( $link, $q ) . "\">{$fmtLimit}</a>";
+ $s = '<a href="' . wfLocalUrlE( $link, $q ) . "\">{$fmtLimit}</a>";
return $s;
}
@@ -630,9 +635,9 @@ function wfClientAcceptsGzip() {
# FIXME: we may want to blacklist some broken browsers
if( preg_match(
'/\bgzip(?:;(q)=([0-9]+(?:\.[0-9]+)))?\b/',
- $_SERVER["HTTP_ACCEPT_ENCODING"],
+ $_SERVER['HTTP_ACCEPT_ENCODING'],
$m ) ) {
- if( ( $m[1] == "q" ) && ( $m[2] == 0 ) ) return false;
+ if( ( $m[1] == 'q' ) && ( $m[2] == 0 ) ) return false;
wfDebug( " accepts gzip\n" );
return true;
}
@@ -641,12 +646,12 @@ function wfClientAcceptsGzip() {
}
# Yay, more global functions!
-function wfCheckLimits( $deflimit = 50, $optionname = "rclimit" ) {
+function wfCheckLimits( $deflimit = 50, $optionname = 'rclimit' ) {
global $wgUser, $wgRequest;
$limit = $wgRequest->getInt( 'limit', 0 );
if( $limit < 0 ) $limit = 0;
- if( ( $limit == 0 ) && ( $optionname != "" ) ) {
+ if( ( $limit == 0 ) && ( $optionname != '' ) ) {
$limit = (int)$wgUser->getOption( $optionname );
}
if( $limit <= 0 ) $limit = $deflimit;
@@ -668,13 +673,13 @@ function wfCheckLimits( $deflimit = 50, $optionname = "rclimit" ) {
function wfEscapeWikiText( $text )
{
$text = str_replace(
- array( '[', '|', "'", 'ISBN ' , '://' , "\n=" ),
+ array( '[', '|', "'", 'ISBN ' , '://' , "\n=" ),
array( '&#91;', '&#124;', '&#39;', 'ISBN&#32;', '&#58;//' , "\n&#61;" ),
htmlspecialchars($text) );
return $text;
}
-function wfQuotedPrintable( $string, $charset = "" )
+function wfQuotedPrintable( $string, $charset = '' )
{
# Probably incomplete; see RFC 2045
if( empty( $charset ) ) {
@@ -682,19 +687,19 @@ function wfQuotedPrintable( $string, $charset = "" )
$charset = $wgInputEncoding;
}
$charset = strtoupper( $charset );
- $charset = str_replace( "ISO-8859", "ISO8859", $charset ); // ?
+ $charset = str_replace( 'ISO-8859', 'ISO8859', $charset ); // ?
$illegal = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff=';
$replace = $illegal . '\t ?_';
if( !preg_match( "/[$illegal]/", $string ) ) return $string;
$out = "=?$charset?Q?";
$out .= preg_replace( "/([$replace])/e", 'sprintf("=%02X",ord("$1"))', $string );
- $out .= "?=";
+ $out .= '?=';
return $out;
}
function wfTime(){
- $st = explode( " ", microtime() );
+ $st = explode( ' ', microtime() );
return (float)$st[0] + (float)$st[1];
}
@@ -714,11 +719,10 @@ function wfSetVar( &$dest, $source )
}
# Sets dest to a reference to source and returns the original dest
+# Pity that doesn't work in PHP
function &wfSetRef( &$dest, &$source )
{
- $temp =& $dest;
- $dest =& $source;
- return $temp;
+ die( "You can't rebind a variable in the caller's scope" );
}
# This function takes two arrays as input, and returns a CGI-style string, e.g.
@@ -730,11 +734,11 @@ function wfArrayToCGI( $array1, $array2 = NULL )
$array1 = $array1 + $array2;
}
- $cgi = "";
+ $cgi = '';
foreach ( $array1 as $key => $value ) {
- if ( "" !== $value ) {
- if ( "" != $cgi ) {
- $cgi .= "&";
+ if ( '' !== $value ) {
+ if ( '' != $cgi ) {
+ $cgi .= '&';
}
$cgi .= "{$key}={$value}";
}
@@ -752,15 +756,15 @@ function wfEscapeShellArg( )
{
$args = func_get_args();
$first = true;
- $retVal = "";
+ $retVal = '';
foreach ( $args as $arg ) {
if ( !$first ) {
- $retVal .= " ";
+ $retVal .= ' ';
} else {
$first = false;
}
- if (substr(php_uname(), 0, 7) == "Windows") {
+ if ( wfIsWindows() ) {
$retVal .= '"' . str_replace( '"','\"', $arg ) . '"';
} else {
$retVal .= escapeshellarg( $arg );
@@ -782,21 +786,21 @@ function wfMerge( $old, $mine, $yours, &$result ){
}
# Make temporary files
- $td = "/tmp/";
- $oldtextFile = fopen( $oldtextName = tempnam( $td, "merge-old-" ), "w" );
- $mytextFile = fopen( $mytextName = tempnam( $td, "merge-mine-" ), "w" );
- $yourtextFile = fopen( $yourtextName = tempnam( $td, "merge-your-" ), "w" );
+ $td = '/tmp/';
+ $oldtextFile = fopen( $oldtextName = tempnam( $td, 'merge-old-' ), 'w' );
+ $mytextFile = fopen( $mytextName = tempnam( $td, 'merge-mine-' ), 'w' );
+ $yourtextFile = fopen( $yourtextName = tempnam( $td, 'merge-your-' ), 'w' );
fwrite( $oldtextFile, $old ); fclose( $oldtextFile );
fwrite( $mytextFile, $mine ); fclose( $mytextFile );
fwrite( $yourtextFile, $yours ); fclose( $yourtextFile );
# Check for a conflict
- $cmd = wfEscapeShellArg( $wgDiff3 ) . " -a --overlap-only " .
- wfEscapeShellArg( $mytextName ) . " " .
- wfEscapeShellArg( $oldtextName ) . " " .
- wfEscapeShellArg( $yourtextName );
- $handle = popen( $cmd, "r" );
+ $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a --overlap-only ' .
+ wfEscapeShellArg( $mytextName ) . ' ' .
+ wfEscapeShellArg( $oldtextName ) . ' ' .
+ wfEscapeShellArg( $yourtextName );
+ $handle = popen( $cmd, 'r' );
if( fgets( $handle ) ){
$conflict = true;
@@ -806,10 +810,10 @@ function wfMerge( $old, $mine, $yours, &$result ){
pclose( $handle );
# Merge differences
- $cmd = wfEscapeShellArg( $wgDiff3 ) . " -a -e --merge " .
+ $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a -e --merge ' .
wfEscapeShellArg( $mytextName, $oldtextName, $yourtextName );
- $handle = popen( $cmd, "r" );
- $result = "";
+ $handle = popen( $cmd, 'r' );
+ $result = '';
do {
$data = fread( $handle, 8192 );
if ( strlen( $data ) == 0 ) {
@@ -843,13 +847,13 @@ function wfHttpError( $code, $label, $desc ) {
# Don't send content if it's a HEAD request.
if( $_SERVER['REQUEST_METHOD'] == 'HEAD' ) {
- header( "Content-type: text/plain" );
+ header( 'Content-type: text/plain' );
print "$desc\n";
}
}
# Converts an Accept-* header into an array mapping string values to quality factors
-function wfAcceptToPrefs( $accept, $def = "*/*" ) {
+function wfAcceptToPrefs( $accept, $def = '*/*' ) {
# No arg means accept anything (per HTTP spec)
if( !$accept ) {
return array( $def => 1 );
@@ -857,11 +861,11 @@ function wfAcceptToPrefs( $accept, $def = "*/*" ) {
$prefs = array();
- $parts = explode( ",", $accept );
+ $parts = explode( ',', $accept );
foreach( $parts as $part ) {
# FIXME: doesn't deal with params like 'text/html; level=1'
- @list( $value, $qpart ) = explode( ";", $part );
+ @list( $value, $qpart ) = explode( ';', $part );
if( !isset( $qpart ) ) {
$prefs[$value] = 1;
} elseif( preg_match( '/q\s*=\s*(\d*\.\d+)/', $qpart, $match ) ) {
@@ -933,4 +937,14 @@ function wfArrayLookup( $a, $b )
return array_flip( array_intersect( array_flip( $a ), array_keys( $b ) ) );
}
+# Since Windows is so different to any of the other popular OSes, it seems appropriate
+# to have a simple way to test for its presence
+function wfIsWindows() {
+ if (substr(php_uname(), 0, 7) == 'Windows') {
+ return true;
+ } else {
+ return false;
+ }
+}
+
?>
diff --git a/includes/HistoryBlob.php b/includes/HistoryBlob.php
new file mode 100644
index 000000000000..cf170b759531
--- /dev/null
+++ b/includes/HistoryBlob.php
@@ -0,0 +1,64 @@
+<?php
+
+# Pure virtual parent
+class HistoryBlob
+{
+ function setMeta() {}
+ function getMeta() {}
+ function addItem() {}
+ function getItem() {}
+}
+
+# The real object
+class ConcatenatedGzipHistoryBlob
+{
+ /* private */ var $mVersion = 0, $mCompressed = false, $mItems = array();
+
+ function HistoryBlob() {
+ if ( !function_exists( 'gzdeflate' ) ) {
+ die( "Need zlib support to read or write this kind of history object (ConcatenatedGzipHistoryBlob)\n" );
+ }
+ }
+
+ function setMeta( $metaData ) {
+ $this->uncompress();
+ $this->mItems['meta'] = $metaData;
+ }
+
+ function getMeta() {
+ $this->uncompress();
+ return $this->mItems['meta'];
+ }
+
+ function addItem( $text ) {
+ $this->uncompress();
+ $this->mItems[md5($text)] = $text;
+ }
+
+ function getItem( $hash ) {
+ $this->compress();
+ return $this->mItems[$hash];
+ }
+
+ function compress() {
+ if ( !$this->mCompressed ) {
+ $this->mItems = gzdeflate( serialize( $this->mItems ) );
+ $this->mCompressed = true;
+ }
+ }
+
+ function uncompress() {
+ if ( $this->mCompressed ) {
+ $this->mItems = unserialize( gzinflate( $this->mItems ) );
+ }
+ }
+
+ function __sleep() {
+ compress();
+ }
+
+ function __wakeup() {
+ uncompress();
+ }
+}
+?>
diff --git a/includes/Image.php b/includes/Image.php
index d0293a5443c7..27eeb9d72e3f 100644
--- a/includes/Image.php
+++ b/includes/Image.php
@@ -35,16 +35,17 @@ class Image
if ( $this->fileExists = file_exists( $this->imagePath ) ) // Sic!, "=" is intended
{
- $gis = getimagesize( $this->imagePath );
- $this->width = $gis[0];
- $this->height = $gis[1];
- $this->type = $gis[2];
- $this->attr = $gis[3];
- if ( isset( $gis["bits"] ) )
- {
- $this->bits = $gis["bits"];
- } else {
- $this->bits = 0;
+ @$gis = getimagesize( $this->imagePath );
+ if( $gis !== false ) {
+ $this->width = $gis[0];
+ $this->height = $gis[1];
+ $this->type = $gis[2];
+ $this->attr = $gis[3];
+ if ( isset( $gis["bits"] ) ) {
+ $this->bits = $gis["bits"];
+ } else {
+ $this->bits = 0;
+ }
}
}
$this->historyLine = 0;
diff --git a/includes/ImagePage.php b/includes/ImagePage.php
index 164abb5a370f..6e8d72b6c20e 100644
--- a/includes/ImagePage.php
+++ b/includes/ImagePage.php
@@ -67,7 +67,7 @@ class ImagePage extends Article {
$line = $this->img->nextHistoryLine();
$s .= $sk->imageHistoryLine( true, $line->img_timestamp,
- $this->mTitle->getText(), $line->img_user,
+ $this->mTitle->getDBkey(), $line->img_user,
$line->img_user_text, $line->img_size, $line->img_description );
while ( $line = $this->img->nextHistoryLine() ) {
@@ -139,9 +139,9 @@ class ImagePage extends Article {
}
if ( !is_null( $image ) ) {
- $q = "&image={$image}";
+ $q = "&image=" . urlencode( $image );
} else if ( !is_null( $oldimage ) ) {
- $q = "&oldimage={$oldimage}";
+ $q = "&oldimage=" . urlencode( $oldimage );
} else {
$q = "";
}
diff --git a/includes/LinkCache.php b/includes/LinkCache.php
index 8f41cccf7e51..cd0c0879e4e8 100644
--- a/includes/LinkCache.php
+++ b/includes/LinkCache.php
@@ -171,6 +171,7 @@ class LinkCache {
if ( $wgEnablePersistentLC ) {
if( $this->fillFromLinkscc( $id ) ){
+ wfProfileOut( $fname );
return;
}
}
@@ -301,35 +302,61 @@ class LinkCache {
}
/* private */ function saveToLinkscc( $pid ){
- global $wgCompressedPersistentLC;
+ global $wgCompressedPersistentLC, $wgIsMySQL;
if( $wgCompressedPersistentLC and function_exists( "gzcompress" ) ) {
$ser = wfStrencode( gzcompress( serialize( $this ), 3 ));
} else {
$ser = wfStrencode( serialize( $this ) );
}
- wfQuery("REPLACE INTO linkscc(lcc_pageid,lcc_cacheobj) " .
- "VALUES({$pid}, '{$ser}')", DB_WRITE);
+ if ($wgIsMySQL) {
+ wfQuery("REPLACE INTO linkscc(lcc_pageid,lcc_cacheobj) " .
+ "VALUES({$pid}, '{$ser}')", DB_WRITE);
+ } else {
+ wfQuery("DELETE FROM linkscc WHERE lcc_pageid={$pid}",DB_WRITE);
+ wfQuery("INSERT INTO linkscc(lcc_pageid,lcc_cacheobj) " .
+ "VALUES({$pid}, '{$ser}')", DB_WRITE);
+ }
}
# $pid is a page id
/* static */ function linksccClearLinksTo( $pid ){
- $pid = intval( $pid );
- wfQuery("DELETE linkscc FROM linkscc,links ".
- "WHERE lcc_pageid=links.l_from AND l_to={$pid}", DB_WRITE);
- wfQuery("DELETE FROM linkscc WHERE lcc_pageid='{$pid}'", DB_WRITE);
+ global $wgEnablePersistentLC, $wgIsMySQL;
+ if ( $wgEnablePersistentLC ) {
+ $pid = intval( $pid );
+ if ($wgIsMySQL) {
+ wfQuery("DELETE linkscc FROM linkscc,links ".
+ "WHERE lcc_pageid=links.l_from AND l_to={$pid}", DB_WRITE);
+ } else {
+ wfQuery("DELETE FROM linkscc WHERE lcc_pageid IN ".
+ "(SELECT l_from FROM links WHERE l_to={$pid})", DB_WRITE);
+ }
+ wfQuery("DELETE FROM linkscc WHERE lcc_pageid='{$pid}'", DB_WRITE);
+ }
}
# $title is a prefixed db title, for example like Title->getPrefixedDBkey() returns.
/* static */ function linksccClearBrokenLinksTo( $title ){
- $title = wfStrencode( $title );
- wfQuery("DELETE linkscc FROM linkscc,brokenlinks ".
- "WHERE lcc_pageid=bl_from AND bl_to='{$title}'", DB_WRITE);
+ global $wgEnablePersistentLC,$wgIsMySQL;
+ if ( $wgEnablePersistentLC ) {
+ $title = wfStrencode( $title );
+ if ($wgIsMySQL) {
+ wfQuery("DELETE linkscc FROM linkscc,brokenlinks ".
+ "WHERE lcc_pageid=bl_from AND bl_to='{$title}'", DB_WRITE);
+ } else {
+ wfQuery("DELETE FROM linkscc WHERE lcc_pageid IN ".
+ "(SELECT bl_from FROM brokenlinks ".
+ "WHERE bl_to='{$title}')",DB_WRITE);
+ }
+ }
}
# $pid is a page id
/* static */ function linksccClearPage( $pid ){
- $pid = intval( $pid );
- wfQuery("DELETE FROM linkscc WHERE lcc_pageid='{$pid}'", DB_WRITE);
+ global $wgEnablePersistentLC;
+ if ( $wgEnablePersistentLC ) {
+ $pid = intval( $pid );
+ wfQuery("DELETE FROM linkscc WHERE lcc_pageid='{$pid}'", DB_WRITE);
+ }
}
}
?>
diff --git a/includes/LoadBalancer.php b/includes/LoadBalancer.php
index 3df2ac58c604..baea60ac3264 100644
--- a/includes/LoadBalancer.php
+++ b/includes/LoadBalancer.php
@@ -1,10 +1,27 @@
<?php
# Database load balancing object
+# Valid database indexes
+# Operation-based indexes
+define( "DB_READ", -1 ); # Read from the slave (or only server)
+define( "DB_WRITE", -2 ); # Write to master (or only server)
+define( "DB_LAST", -3 ); # Whatever database was used last
+
+# Task-based indexes
+# ***NOT USED YET, EXPERIMENTAL***
+# These may be defined in $wgDBservers. If they aren't, the default reader or writer will be used
+# Even numbers are always readers, odd numbers are writers
+define( "DB_TASK_FIRST", 1000 ); # First in list
+define( "DB_SEARCH_R", 1000 ); # Search read
+define( "DB_SEARCH_W", 1001 ); # Search write
+define( "DB_ASKSQL_R", 1002 ); # Special:Asksql read
+define( "DB_WATCHLIST_R", 1004 ); # Watchlist read
+define( "DB_TASK_LAST", 1004) ; # Last in list
+
class LoadBalancer {
/* private */ var $mServers, $mConnections, $mLoads;
/* private */ var $mUser, $mPassword, $mDbName, $mFailFunction;
- /* private */ var $mForce, $mReadIndex;
+ /* private */ var $mForce, $mReadIndex, $mLastConn;
function LoadBalancer()
{
@@ -17,6 +34,7 @@ class LoadBalancer {
$this->mFailFunction = false;
$this->mReadIndex = -1;
$this->mForce = -1;
+ $this->mLastConn = false;
}
function newFromParams( $servers, $loads, $user, $password, $dbName, $failFunction = false )
@@ -38,6 +56,7 @@ class LoadBalancer {
$this->mWriteIndex = -1;
$this->mForce = -1;
$this->mConnections = array();
+ $this->mLastConn = false;
wfSeedRandom();
}
@@ -96,21 +115,49 @@ class LoadBalancer {
}
return $conn;
}
-
+
function &getConnection( $i, $fail = false )
{
- if ( !array_key_exists( $i, $this->mConnections) || !$this->mConnections[$i]->isOpen() ) {
- $this->mConnections[$i] = Database::newFromParams( $this->mServers[$i], $this->mUser,
- $this->mPassword, $this->mDbName, 1 );
- }
- if ( !$this->mConnections[$i]->isOpen() ) {
- wfDebug( "Failed to connect to database $i at {$this->mServers[$i]}\n" );
- if ( $fail ) {
- $this->reportConnectionError( $this->mConnections[$i] );
+ /*
+ # Task-based index
+ if ( $i >= DB_TASK_FIRST && $i < DB_TASK_LAST ) {
+ if ( $i % 2 ) {
+ # Odd index use writer
+ $i = DB_WRITE;
+ } else {
+ # Even index use reader
+ $i = DB_READ;
+ }
+ }*/
+
+ # Operation-based index
+ # Note, getReader() and getWriter() will re-enter this function
+ if ( $i == DB_READ ) {
+ $this->mLastConn =& $this->getReader();
+ } elseif ( $i == DB_WRITE ) {
+ $this->mLastConn =& $this->getWriter();
+ } elseif ( $i == DB_LAST ) {
+ # Just use $this->mLastConn, which should already be set
+ if ( $this->mLastConn === false ) {
+ # Oh dear, not set, best to use the writer for safety
+ $this->mLastConn =& $this->getWriter();
}
- $this->mConnections[$i] = false;
+ } else {
+ # Explicit index
+ if ( !array_key_exists( $i, $this->mConnections) || !$this->mConnections[$i]->isOpen() ) {
+ $this->mConnections[$i] = Database::newFromParams( $this->mServers[$i], $this->mUser,
+ $this->mPassword, $this->mDbName, 1 );
+ }
+ if ( !$this->mConnections[$i]->isOpen() ) {
+ wfDebug( "Failed to connect to database $i at {$this->mServers[$i]}\n" );
+ if ( $fail ) {
+ $this->reportConnectionError( $this->mConnections[$i] );
+ }
+ $this->mConnections[$i] = false;
+ }
+ $this->mLastConn =& $this->mConnections[$i];
}
- return $this->mConnections[$i];
+ return $this->mLastConn;
}
function reportConnectionError( &$conn )
@@ -140,4 +187,9 @@ class LoadBalancer {
{
$this->mForce = $i;
}
+
+ function haveIndex( $i )
+ {
+ return array_key_exists( $i, $this->mServers );
+ }
}
diff --git a/includes/MagicWord.php b/includes/MagicWord.php
index 9089d5108a2c..bb7b7c1640b3 100644
--- a/includes/MagicWord.php
+++ b/includes/MagicWord.php
@@ -110,7 +110,7 @@ class MagicWord {
$this->mRegexStart = "/^{$this->mBaseRegex}/{$case}";
$this->mVariableRegex = str_replace( "\\$1", "([$variableClass]*?)", $this->mRegex );
$this->mVariableStartToEndRegex = str_replace( "\\$1", "([$variableClass]*?)",
- "/^{$this->mBaseRegex}$/{$case}" );
+ "/^({$this->mBaseRegex})$/{$case}" );
}
# Gets a regex representing matching the word
diff --git a/includes/Math.php b/includes/Math.php
index 5946061fb48f..8b03af6adcbb 100644
--- a/includes/Math.php
+++ b/includes/Math.php
@@ -30,7 +30,7 @@ class MathRenderer {
if( $this->mode == MW_MATH_SOURCE ) {
# No need to render or parse anything more!
- return ('$ '.htmlspecialchars( $tex ).' $');
+ return ('$ '.htmlspecialchars( $this->tex ).' $');
}
if( !$this->_recall() ) {
@@ -182,7 +182,7 @@ class MathRenderer {
(($this->mode == MW_MATH_MODERN || $this->mode == MW_MATH_MATHML) && ($this->conservativeness == 0))) {
return $this->_linkToMathImage();
} else {
- return $this->html;
+ return '<span class="texhtml">'.$this->html.'</span>';
}
}
diff --git a/includes/MessageCache.php b/includes/MessageCache.php
index 66285e18b936..4aee8583134d 100755
--- a/includes/MessageCache.php
+++ b/includes/MessageCache.php
@@ -81,7 +81,7 @@ class MessageCache
function loadFromDB()
{
$fname = "MessageCache::loadFromDB";
- $sql = "SELECT cur_title,cur_text FROM cur WHERE cur_namespace=" . NS_MEDIAWIKI;
+ $sql = "SELECT cur_title,cur_text FROM cur WHERE cur_is_redirect=0 AND cur_namespace=" . NS_MEDIAWIKI;
$res = wfQuery( $sql, DB_READ, $fname );
$this->mCache = array();
diff --git a/includes/ObjectCache.php b/includes/ObjectCache.php
index 00864c6b16b1..ce511ff37b10 100644
--- a/includes/ObjectCache.php
+++ b/includes/ObjectCache.php
@@ -1,4 +1,6 @@
<?php
+# $Id$
+#
# Copyright (C) 2003-2004 Brion Vibber <brion@pobox.com>
# http://www.mediawiki.org/
#
@@ -69,8 +71,10 @@ class /* abstract */ BagOStuff {
}
function add($key, $value, $exptime=0) {
- if( $this->get($key) === false )
+ if( $this->get($key) == false ) {
$this->set($key, $value, $exptime);
+ return true;
+ }
}
function add_multi($hash, $exptime=0) {
@@ -114,7 +118,7 @@ class /* abstract */ BagOStuff {
function _debug($text) {
if($this->debugmode)
- echo "\ndebug: $text\n";
+ wfDebug("BagOStuff debug: $text\n");
}
}
@@ -187,9 +191,9 @@ class /* abstract */ SqlBagOStuff extends BagOStuff {
$this->_debug("get: ** error: " . $this->_dberror($res) . " **");
return false;
}
- if($arr = $this->_fetchrow($res)) {
- $this->_debug("get: retrieved data; exp time is " . $arr['exptime']);
- return unserialize($arr['value']);
+ if($row=$this->_fetchobject($res)) {
+ $this->_debug("get: retrieved data; exp time is " . $row->exptime);
+ return unserialize($row->value);
} else {
$this->_debug("get: no matching rows");
}
@@ -208,8 +212,8 @@ class /* abstract */ SqlBagOStuff extends BagOStuff {
}
$this->delete( $key );
$this->_query(
- "INSERT INTO $0 (keyname,value,exptime) VALUES('$1','$2',$exp)",
- $key, serialize(&$value));
+ "INSERT INTO $0 (keyname,value,exptime) VALUES('$1','$2','$exp')",
+ $key, serialize($value));
return true; /* ? */
}
@@ -230,7 +234,7 @@ class /* abstract */ SqlBagOStuff extends BagOStuff {
$sql);
}
$res = $this->_doquery($sql);
- if($res === false) {
+ if($res == false) {
$this->_debug("query failed: " . $this->_dberror($res));
}
return $res;
@@ -269,7 +273,8 @@ class /* abstract */ SqlBagOStuff extends BagOStuff {
function expireall() {
/* Remove any items that have expired */
- $this->_query( "DELETE FROM $0 WHERE exptime<=NOW()" );
+ $now=$this->_fromunixtime(time());
+ $this->_query( "DELETE FROM $0 WHERE exptime<'$now'" );
}
function deleteall() {
@@ -278,42 +283,27 @@ class /* abstract */ SqlBagOStuff extends BagOStuff {
}
}
-class MysqlBagOStuff extends SqlBagOStuff {
+class MediaWikiBagOStuff extends SqlBagOStuff {
function _doquery($sql) {
- return mysql_query($sql);
+ return wfQuery($sql, DB_READ, "MediaWikiBagOStuff:_doquery");
}
- function _fetchrow($result) {
- return mysql_fetch_array($result);
+ function _fetchobject($result) {
+ return wfFetchObject($result);
}
function _freeresult($result) {
- return mysql_free_result($result);
+ return wfFreeResult($result);
}
function _dberror($result) {
- if($result)
- return mysql_error($result);
- else
- return mysql_error();
+ return wfLastError();
}
-
function _maxdatetime() {
- return "'9999-12-31 12:59:59'";
+ return "9999-12-31 12:59:59";
}
-
function _fromunixtime($ts) {
- return "FROM_UNIXTIME($ts)";
+ return gmdate( "Y-m-d H:i:s", $ts );
}
-
function _strencode($s) {
- return mysql_escape_string($s);
- }
-}
-
-class MediaWikiBagOStuff extends MysqlBagOStuff {
- function _doquery($sql) {
- return wfQuery($sql, DB_READ, "MediaWikiBagOStuff:_doquery");
- }
- function _freeresult($result) {
- return wfFreeResult($result);
+ return wfStrEncode($s);
}
}
diff --git a/includes/OutputPage.php b/includes/OutputPage.php
index 7860a4228f23..4f797d2b0026 100644
--- a/includes/OutputPage.php
+++ b/includes/OutputPage.php
@@ -181,10 +181,14 @@ class OutputPage {
}
function getLanguageLinks() {
- global $wgTitle, $wgLanguageCode;
- global $wgDBconnection, $wgDBname;
return $this->mLanguageLinks;
}
+ function addLanguageLinks($newLinkArray) {
+ $this->mLanguageLinks += $newLinkArray;
+ }
+ function setLanguageLinks($newLinkArray) {
+ $this->mLanguageLinks = $newLinkArray;
+ }
function suppressQuickbar() { $this->mSuppressQuickbar = true; }
function isQuickbarSuppressed() { return $this->mSuppressQuickbar; }
@@ -204,26 +208,30 @@ class OutputPage {
function addWikiText( $text, $linestart = true, $cacheArticle = NULL )
{
global $wgParser, $wgParserCache, $wgUser, $wgTitle;
-
- $parserOutput = false;
+
+ $parserOutput = $wgParser->parse( $text, $wgTitle, $this->mParserOptions, $linestart );
if ( $cacheArticle ) {
- $parserOutput = $wgParserCache->get( $cacheArticle, $wgUser );
- }
-
- if ( $parserOutput === false ) {
- $parserOutput = $wgParser->parse( $text, $wgTitle, $this->mParserOptions, $linestart );
- if ( $cacheArticle ) {
- $wgParserCache->save( $parserOutput, $cacheArticle, $wgUser );
- }
+ $wgParserCache->save( $parserOutput, $cacheArticle, $wgUser );
}
$this->mLanguageLinks += $parserOutput->getLanguageLinks();
$this->mCategoryLinks += $parserOutput->getCategoryLinks();
-
$this->addHTML( $parserOutput->getText() );
-
}
+ function tryParserCache( $article, $user ) {
+ global $wgParserCache;
+ $parserOutput = $wgParserCache->get( $article, $user );
+ if ( $parserOutput !== false ) {
+ $this->mLanguageLinks += $parserOutput->getLanguageLinks();
+ $this->mCategoryLinks += $parserOutput->getCategoryLinks();
+ $this->addHTML( $parserOutput->getText() );
+ return true;
+ } else {
+ return false;
+ }
+ }
+
# Set the maximum cache time on the Squid in seconds
function setSquidMaxage( $maxage ) {
$this->mSquidMaxage = $maxage;
@@ -407,8 +415,22 @@ class OutputPage {
list( $usec, $sec ) = explode( " ", $wgRequestTime );
$start = (float)$sec + (float)$usec;
$elapsed = $now - $start;
- $com = sprintf( "<!-- Time since request: %01.2f secs. -->",
- $elapsed );
+
+ # Use real server name if available, so we know which machine
+ # in a server farm generated the current page.
+ if ( function_exists( "posix_uname" ) ) {
+ $uname = @posix_uname();
+ } else {
+ $uname = false;
+ }
+ if( is_array( $uname ) && isset( $uname['nodename'] ) ) {
+ $hostname = $uname['nodename'];
+ } else {
+ # This may be a virtual server.
+ $hostname = $_SERVER['SERVER_NAME'];
+ }
+ $com = sprintf( "<!-- Served by %s in %01.2f secs. -->",
+ $hostname, $elapsed );
return $com;
}
@@ -486,7 +508,7 @@ class OutputPage {
$this->returnToMain(); # Flip back to the main page after 10 seconds.
}
- function databaseError( $fname, &$conn )
+ function databaseError( $fname, $sql, $error, $errno )
{
global $wgUser, $wgCommandLineMode;
@@ -501,10 +523,10 @@ class OutputPage {
$msg = wfMsgNoDB( "dberrortext" );
}
- $msg = str_replace( "$1", htmlspecialchars( $conn->lastQuery() ), $msg );
+ $msg = str_replace( "$1", htmlspecialchars( $sql ), $msg );
$msg = str_replace( "$2", htmlspecialchars( $fname ), $msg );
- $msg = str_replace( "$3", $conn->lastErrno(), $msg );
- $msg = str_replace( "$4", htmlspecialchars( $conn->lastError() ), $msg );
+ $msg = str_replace( "$3", $errno, $msg );
+ $msg = str_replace( "$4", htmlspecialchars( $error ), $msg );
if ( $wgCommandLineMode || !is_object( $wgUser )) {
print "$msg\n";
@@ -586,6 +608,9 @@ class OutputPage {
$this->fatalError( wfMsg( "filenotfound", $name ) );
}
+ // return from error messages or notes
+ // auto: automatically redirect the user after 10 seconds
+ // returnto: page title to return to. Default is Main Page.
function returnToMain( $auto = true, $returnto = NULL )
{
global $wgUser, $wgOut, $wgRequest;
diff --git a/includes/PageHistory.php b/includes/PageHistory.php
index 49b42f3f2a7e..56f673fa744d 100644
--- a/includes/PageHistory.php
+++ b/includes/PageHistory.php
@@ -17,7 +17,7 @@ class PageHistory {
function history()
{
- global $wgUser, $wgOut, $wgLang;
+ global $wgUser, $wgOut, $wgLang, $wgIsMySQL, $wgIsPg;
# If page hasn't changed, client can cache this
@@ -54,12 +54,14 @@ class PageHistory {
$namespace = $this->mTitle->getNamespace();
$title = $this->mTitle->getText();
+ $use_index=$wgIsMySQL?"USE INDEX (name_title_timestamp)":"";
+ $oldtable=$wgIsPg?'"old"':'old';
$sql = "SELECT old_id,old_user," .
"old_comment,old_user_text,old_timestamp,old_minor_edit ".
- "FROM old USE INDEX (name_title_timestamp) " .
+ "FROM $oldtable $use_index " .
"WHERE old_namespace={$namespace} AND " .
"old_title='" . wfStrencode( $this->mTitle->getDBkey() ) . "' " .
- "ORDER BY inverse_timestamp LIMIT $rawoffset, $limitplus";
+ "ORDER BY inverse_timestamp".wfLimitResult($limitplus,$rawoffset);
$res = wfQuery( $sql, DB_READ, $fname );
$revs = wfNumRows( $res );
@@ -77,6 +79,12 @@ class PageHistory {
$this->mTitle->getPrefixedText(),
"action=history", $atend );
$s = $numbar;
+ if($this->linesonpage > 0) {
+ $submitpart1 = '<input class="historysubmit" type="submit" accesskey="'.wfMsg('accesskey-compareselectedversions').
+ '" title="'.wfMsg('tooltip-compareselectedversions').'" value="'.wfMsg('compareselectedversions').'"';
+ $this->submitbuttonhtml1 = $submitpart1 . ' />';
+ $this->submitbuttonhtml2 = $submitpart1 . ' id="historysubmit" />';
+ }
$s .= $this->beginHistoryList();
$counter = 1;
if( $offset == 0 ){
@@ -110,9 +118,10 @@ class PageHistory {
global $wgTitle;
$this->lastdate = $this->lastline = "";
$s = "\n<p>" . wfMsg( "histlegend" ).'</p>';
- $s .="\n<form id=\"pagehistory\" name=\"pagehistory\" action=\"" . $wgTitle->getFullURL("-") . "\" method=\"get\">";
- $s .= "<input type=\"hidden\" name=\"title\" value=\"".htmlspecialchars($wgTitle->getPrefixedDbKey())."\"/>\n";
- $s .= "" . "\n<ul>";
+ $s .="\n<form action=\"" . $wgTitle->escapeLocalURL( '-' ) . "\" method=\"get\">";
+ $s .= "<input type=\"hidden\" name=\"title\" value=\"".wfEscapeHTML($wgTitle->getPrefixedDbKey())."\"/>\n";
+ $s .= !empty($this->submitbuttonhtml1) ? $this->submitbuttonhtml1."\n":'';
+ $s .= "" . "\n<ul id=\"pagehistory\" >";
return $s;
}
@@ -121,11 +130,8 @@ class PageHistory {
$last = wfMsg( "last" );
$s = $skip ? "" : preg_replace( "/!OLDID![0-9]+!/", $last, $this->lastline );
- $s .= "</ul>\n";
- if( $this->linesonpage > 1) {
- $s .= '<button type="submit" accesskey="'.wfMsg('accesskey-compareselectedversions').
- '" title="'.wfMsg('tooltip-compareselectedversions').'">'.wfMsg('compareselectedversions')."</button><br/><br/>\n";
- }
+ $s .= "</ul>";
+ $s .= !empty($this->submitbuttonhtml2) ? $this->submitbuttonhtml2."\n":'';
$s .= "</form>\n";
return $s;
}
diff --git a/includes/Parser.php b/includes/Parser.php
index c345e28eec22..5d6a7c7bcc94 100644
--- a/includes/Parser.php
+++ b/includes/Parser.php
@@ -1,13 +1,6 @@
<?php
-require_once('Tokenizer.php');
-
-if( $GLOBALS['wgUseWikiHiero'] ){
- require_once('extensions/wikihiero/wikihiero.php');
-}
-if( $GLOBALS['wgUseTimeline'] ){
- require_once('extensions/timeline/Timeline.php');
-}
+// require_once('Tokenizer.php');
# PHP Parser
#
@@ -55,6 +48,9 @@ define( "UNIQ_PREFIX", "NaodW29");
class Parser
{
+ # Persistent:
+ var $mTagHooks;
+
# Cleared with clearState():
var $mOutput, $mAutonumber, $mDTopen, $mStripState = array();
var $mVariables, $mIncludeCount, $mArgStack, $mLastSection, $mInPre;
@@ -62,13 +58,12 @@ class Parser
# Temporary:
var $mOptions, $mTitle, $mOutputType;
- function Parser()
- {
+ function Parser() {
+ $this->mTagHooks = array();
$this->clearState();
}
- function clearState()
- {
+ function clearState() {
$this->mOutput = new ParserOutput;
$this->mAutonumber = 0;
$this->mLastSection = "";
@@ -77,6 +72,7 @@ class Parser
$this->mIncludeCount = array();
$this->mStripState = array();
$this->mArgStack = array();
+ $this->mInPre = false;
}
# First pass--just handle <nowiki> sections, pass the rest off
@@ -84,8 +80,7 @@ class Parser
#
# Returns a ParserOutput
#
- function parse( $text, &$title, $options, $linestart = true, $clearState = true )
- {
+ function parse( $text, &$title, $options, $linestart = true, $clearState = true ) {
global $wgUseTidy;
$fname = "Parser::parse";
wfProfileIn( $fname );
@@ -105,10 +100,15 @@ class Parser
# Clean up special characters, only run once, next-to-last before doBlockLevels
if(!$wgUseTidy) {
$fixtags = array(
- "/<hr *>/i" => '<hr/>',
- "/<br *>/i" => '<br/>',
- "/<center *>/i"=>'<div class="center">',
- "/<\\/center *>/i" => '</div>',
+ # french spaces, last one Guillemet-left
+ # only if there is something before the space
+ '/(.) (\\?|:|!|\\302\\273)/i' => '\\1&nbsp;\\2',
+ # french spaces, Guillemet-right
+ "/(\\302\\253) /i"=>"\\1&nbsp;",
+ '/<hr *>/i' => '<hr />',
+ '/<br *>/i' => '<br />',
+ '/<center *>/i' => '<div class="center">',
+ '/<\\/center *>/i' => '</div>',
# Clean up spare ampersands; note that we probably ought to be
# more careful about named entities.
'/&(?!:amp;|#[Xx][0-9A-fa-f]+;|#[0-9]+;|[a-zA-Z0-9]+;)/' => '&amp;'
@@ -116,13 +116,18 @@ class Parser
$text = preg_replace( array_keys($fixtags), array_values($fixtags), $text );
} else {
$fixtags = array(
- "/<center *>/i"=>'<div class="center">',
- "/<\\/center *>/i" => '</div>'
+ # french spaces, last one Guillemet-left
+ '/ (\\?|:|!|\\302\\273)/i' => '&nbsp;\\1',
+ # french spaces, Guillemet-right
+ '/(\\302\\253) /i' => '\\1&nbsp;',
+ '/<center *>/i' => '<div class="center">',
+ '/<\\/center *>/i' => '</div>'
);
$text = preg_replace( array_keys($fixtags), array_values($fixtags), $text );
}
# only once and last
$text = $this->doBlockLevels( $text, $linestart );
+ $text = $this->unstripNoWiki( $text, $this->mStripState );
if($wgUseTidy) {
$text = $this->tidy($text);
}
@@ -131,8 +136,7 @@ class Parser
return $this->mOutput;
}
- /* static */ function getRandomString()
- {
+ /* static */ function getRandomString() {
return dechex(mt_rand(0, 0x7fffffff)) . dechex(mt_rand(0, 0x7fffffff));
}
@@ -152,24 +156,24 @@ class Parser
$content = array( );
}
$n = 1;
- $stripped = "";
+ $stripped = '';
- while ( "" != $text ) {
+ while ( '' != $text ) {
if($tag==STRIP_COMMENTS) {
- $p = preg_split( "/<!--/i", $text, 2 );
+ $p = preg_split( '/<!--/i', $text, 2 );
} else {
$p = preg_split( "/<\\s*$tag\\s*>/i", $text, 2 );
}
$stripped .= $p[0];
- if ( ( count( $p ) < 2 ) || ( "" == $p[1] ) ) {
- $text = "";
+ if ( ( count( $p ) < 2 ) || ( '' == $p[1] ) ) {
+ $text = '';
} else {
if($tag==STRIP_COMMENTS) {
- $q = preg_split( "/-->/i", $p[1], 2 );
+ $q = preg_split( '/-->/i', $p[1], 2 );
} else {
$q = preg_split( "/<\\/\\s*$tag\\s*>/i", $p[1], 2 );
}
- $marker = $rnd . sprintf("%08X", $n++);
+ $marker = $rnd . sprintf('%08X', $n++);
$content[$marker] = $q[0];
$stripped .= $marker;
$text = $q[1];
@@ -187,20 +191,21 @@ class Parser
# will be stripped in addition to other tags. This is important
# for section editing, where these comments cause confusion when
# counting the sections in the wikisource
- function strip( $text, &$state, $stripcomments = false )
- {
+ function strip( $text, &$state, $stripcomments = false ) {
$render = ($this->mOutputType == OT_HTML);
$nowiki_content = array();
- $hiero_content = array();
$math_content = array();
$pre_content = array();
$comment_content = array();
-
+ $ext_content = array();
+
# Replace any instances of the placeholders
$uniq_prefix = UNIQ_PREFIX;
#$text = str_replace( $uniq_prefix, wfHtmlEscapeFirst( $uniq_prefix ), $text );
- $text = Parser::extractTags("nowiki", $text, $nowiki_content, $uniq_prefix);
+
+ # nowiki
+ $text = Parser::extractTags('nowiki', $text, $nowiki_content, $uniq_prefix);
foreach( $nowiki_content as $marker => $content ){
if( $render ){
$nowiki_content[$marker] = wfEscapeHTMLTagsOnly( $content );
@@ -209,16 +214,8 @@ class Parser
}
}
- $text = Parser::extractTags("hiero", $text, $hiero_content, $uniq_prefix);
- foreach( $hiero_content as $marker => $content ){
- if( $render && $GLOBALS['wgUseWikiHiero']){
- $hiero_content[$marker] = WikiHiero( $content, WH_MODE_HTML);
- } else {
- $hiero_content[$marker] = "<hiero>$content</hiero>";
- }
- }
-
- $text = Parser::extractTags("math", $text, $math_content, $uniq_prefix);
+ # math
+ $text = Parser::extractTags('math', $text, $math_content, $uniq_prefix);
foreach( $math_content as $marker => $content ){
if( $render ) {
if( $this->mOptions->getUseTeX() ) {
@@ -231,14 +228,17 @@ class Parser
}
}
- $text = Parser::extractTags("pre", $text, $pre_content, $uniq_prefix);
+ # pre
+ $text = Parser::extractTags('pre', $text, $pre_content, $uniq_prefix);
foreach( $pre_content as $marker => $content ){
if( $render ){
- $pre_content[$marker] = "<pre>" . wfEscapeHTMLTagsOnly( $content ) . "</pre>";
+ $pre_content[$marker] = '<pre>' . wfEscapeHTMLTagsOnly( $content ) . '</pre>';
} else {
$pre_content[$marker] = "<pre>$content</pre>";
}
}
+
+ # Comments
if($stripcomments) {
$text = Parser::extractTags(STRIP_COMMENTS, $text, $comment_content, $uniq_prefix);
foreach( $comment_content as $marker => $content ){
@@ -246,49 +246,75 @@ class Parser
}
}
+ # Extensions
+ foreach ( $this->mTagHooks as $tag => $callback ) {
+ $ext_contents[$tag] = array();
+ $text = Parser::extractTags( $tag, $text, $ext_content[$tag], $uniq_prefix );
+ foreach( $ext_content[$tag] as $marker => $content ) {
+ if ( $render ) {
+ $ext_content[$tag][$marker] = $callback( $content );
+ } else {
+ $ext_content[$tag][$marker] = "<$tag>$content</$tag>";
+ }
+ }
+ }
+
# Merge state with the pre-existing state, if there is one
if ( $state ) {
$state['nowiki'] = $state['nowiki'] + $nowiki_content;
- $state['hiero'] = $state['hiero'] + $hiero_content;
$state['math'] = $state['math'] + $math_content;
$state['pre'] = $state['pre'] + $pre_content;
$state['comment'] = $state['comment'] + $comment_content;
+
+ foreach( $ext_content as $tag => $array ) {
+ if ( array_key_exists( $tag, $state ) ) {
+ $state[$tag] = $state[$tag] + $array;
+ }
+ }
} else {
$state = array(
'nowiki' => $nowiki_content,
- 'hiero' => $hiero_content,
'math' => $math_content,
'pre' => $pre_content,
- 'comment' => $comment_content
- );
+ 'comment' => $comment_content,
+ ) + $ext_content;
}
return $text;
}
- function unstrip( $text, &$state )
- {
+ # always call unstripNoWiki() after this one
+ function unstrip( $text, &$state ) {
# Must expand in reverse order, otherwise nested tags will be corrupted
$contentDict = end( $state );
for ( $contentDict = end( $state ); $contentDict !== false; $contentDict = prev( $state ) ) {
- for ( $content = end( $contentDict ); $content !== false; $content = prev( $contentDict ) ) {
- $text = str_replace( key( $contentDict ), $content, $text );
+ if( key($state) != 'nowiki') {
+ for ( $content = end( $contentDict ); $content !== false; $content = prev( $contentDict ) ) {
+ $text = str_replace( key( $contentDict ), $content, $text );
+ }
}
}
return $text;
}
+ # always call this after unstrip() to preserve the order
+ function unstripNoWiki( $text, &$state ) {
+ # Must expand in reverse order, otherwise nested tags will be corrupted
+ for ( $content = end($state['nowiki']); $content !== false; $content = prev( $state['nowiki'] ) ) {
+ $text = str_replace( key( $state['nowiki'] ), $content, $text );
+ }
+
+ return $text;
+ }
# Add an item to the strip state
# Returns the unique tag which must be inserted into the stripped text
# The tag will be replaced with the original text in unstrip()
- function insertStripItem( $text, &$state )
- {
+ function insertStripItem( $text, &$state ) {
$rnd = UNIQ_PREFIX . '-item' . Parser::getRandomString();
if ( !$state ) {
$state = array(
'nowiki' => array(),
- 'hiero' => array(),
'math' => array(),
'pre' => array()
);
@@ -297,9 +323,24 @@ class Parser
return $rnd;
}
+ # categoryMagic
+ # generate a list of subcategories and pages for a category
+ # depending on wfMsg("usenewcategorypage") it either calls the new
+ # or the old code. The new code will not work properly for some
+ # languages due to sorting issues, so they might want to turn it
+ # off.
+ function categoryMagic() {
+ $msg = wfMsg('usenewcategorypage');
+ if ( '0' == @$msg[0] )
+ {
+ return $this->oldCategoryMagic();
+ } else {
+ return $this->newCategoryMagic();
+ }
+ }
+
# This method generates the list of subcategories and pages for a category
- function categoryMagic ()
- {
+ function oldCategoryMagic () {
global $wgLang , $wgUser ;
if ( !$this->mOptions->getUseCategoryMagic() ) return ; # Doesn't use categories at all
@@ -339,66 +380,247 @@ class Parser
# Showing subcategories
if ( count ( $children ) > 0 ) {
- $r .= "<h2>".wfMsg("subcategories")."</h2>\n" ;
- $r .= implode ( ", " , $children ) ;
+ $r .= '<h2>'.wfMsg('subcategories')."</h2>\n" ;
+ $r .= implode ( ', ' , $children ) ;
}
# Showing pages in this category
if ( count ( $articles ) > 0 ) {
$ti = $this->mTitle->getText() ;
- $h = wfMsg( "category_header", $ti );
+ $h = wfMsg( 'category_header', $ti );
$r .= "<h2>{$h}</h2>\n" ;
- $r .= implode ( ", " , $articles ) ;
+ $r .= implode ( ', ' , $articles ) ;
}
return $r ;
}
- function getHTMLattrs ()
- {
+
+
+ function newCategoryMagic () {
+ global $wgLang , $wgUser ;
+ if ( !$this->mOptions->getUseCategoryMagic() ) return ; # Doesn't use categories at all
+
+ $cns = Namespace::getCategory() ;
+ if ( $this->mTitle->getNamespace() != $cns ) return '' ; # This ain't a category page
+
+ $r = "<br style=\"clear:both;\"/>\n";
+
+
+ $sk =& $wgUser->getSkin() ;
+
+ $articles = array() ;
+ $articles_start_char = array();
+ $children = array() ;
+ $children_start_char = array();
+ $data = array () ;
+ $id = $this->mTitle->getArticleID() ;
+
+ # FIXME: add limits
+ $t = wfStrencode( $this->mTitle->getDBKey() );
+ $sql = "SELECT DISTINCT cur_title,cur_namespace,cl_sortkey FROM
+cur,categorylinks WHERE cl_to='$t' AND cl_from=cur_id ORDER BY
+cl_sortkey" ;
+ $res = wfQuery ( $sql, DB_READ ) ;
+ while ( $x = wfFetchObject ( $res ) )
+ {
+ $t = $ns = $wgLang->getNsText ( $x->cur_namespace ) ;
+ if ( $t != '' ) $t .= ':' ;
+ $t .= $x->cur_title ;
+
+ if ( $x->cur_namespace == $cns ) {
+ $ctitle = str_replace( '_',' ',$x->cur_title );
+ array_push ( $children, $sk->makeKnownLink ( $t, $ctitle ) ) ; # Subcategory
+
+ // If there's a link from Category:A to Category:B, the sortkey of the resulting
+ // entry in the categorylinks table is Category:A, not A, which it SHOULD be.
+ // Workaround: If sortkey == "Category:".$title, than use $title for sorting,
+ // else use sortkey...
+ if ( ($ns.":".$ctitle) == $x->cl_sortkey ) {
+ array_push ( $children_start_char, $wgLang->firstChar( $x->cur_title ) );
+ } else {
+ array_push ( $children_start_char, $wgLang->firstChar( $x->cl_sortkey ) ) ;
+ }
+ } else {
+ array_push ( $articles , $sk->makeLink ( $t ) ) ; # Page in this category
+ array_push ( $articles_start_char, $wgLang->firstChar( $x->cl_sortkey ) ) ;
+ }
+ }
+ wfFreeResult ( $res ) ;
+
+ $ti = $this->mTitle->getText() ;
+
+ # Don't show subcategories section if there are none.
+ if ( count ( $children ) > 0 )
+ {
+ # Showing subcategories
+ $r .= '<h2>' . wfMsg( 'subcategories' ) . "</h2>\n"
+ . wfMsg( 'subcategorycount', count( $children ) );
+ if ( count ( $children ) > 6 ) {
+
+ // divide list into three equal chunks
+ $chunk = (int) (count ( $children ) / 3);
+
+ // get and display header
+ $r .= '<table width="100%"><tr valign="top">';
+
+ $startChunk = 0;
+ $endChunk = $chunk;
+
+ // loop through the chunks
+ for($startChunk = 0, $endChunk = $chunk, $chunkIndex = 0;
+ $chunkIndex < 3;
+ $chunkIndex++, $startChunk = $endChunk, $endChunk += $chunk + 1)
+ {
+
+ $r .= '<td><ul>';
+ // output all subcategories to category
+ for ($index = $startChunk ;
+ $index < $endChunk && $index < count($children);
+ $index++ )
+ {
+ // check for change of starting letter or begging of chunk
+ if ( ($children_start_char[$index] != $children_start_char[$index - 1])
+ || ($index == $startChunk) )
+ {
+ $r .= "</ul><h3>{$children_start_char[$index]}</h3>\n<ul>";
+ }
+
+ $r .= "<li>{$children[$index]}</li>";
+ }
+ $r .= '</ul></td>';
+
+
+ }
+ $r .= '</tr></table>';
+ } else {
+ // for short lists of subcategories to category.
+
+ $r .= "<h3>{$children_start_char[0]}</h3>\n";
+ $r .= '<ul><li>'.$children[0].'</li>';
+ for ($index = 1; $index < count($children); $index++ )
+ {
+ if ($children_start_char[$index] != $children_start_char[$index - 1])
+ {
+ $r .= "</ul><h3>{$children_start_char[$index]}</h3>\n<ul>";
+ }
+
+ $r .= "<li>{$children[$index]}</li>";
+ }
+ $r .= '</ul>';
+ }
+ } # END of if ( count($children) > 0 )
+
+ $r .= '<h2>' . wfMsg( 'category_header', $ti ) . "</h2>\n" .
+ wfMsg( 'categoryarticlecount', count( $articles ) );
+
+ # Showing articles in this category
+ if ( count ( $articles ) > 6) {
+ $ti = $this->mTitle->getText() ;
+
+ // divide list into three equal chunks
+ $chunk = (int) (count ( $articles ) / 3);
+
+ // get and display header
+ $r .= '<table width="100%"><tr valign="top">';
+
+ // loop through the chunks
+ for($startChunk = 0, $endChunk = $chunk, $chunkIndex = 0;
+ $chunkIndex < 3;
+ $chunkIndex++, $startChunk = $endChunk, $endChunk += $chunk + 1)
+ {
+
+ $r .= '<td><ul>';
+
+ // output all articles in category
+ for ($index = $startChunk ;
+ $index < $endChunk && $index < count($articles);
+ $index++ )
+ {
+ // check for change of starting letter or begging of chunk
+ if ( ($articles_start_char[$index] != $articles_start_char[$index - 1])
+ || ($index == $startChunk) )
+ {
+ $r .= "</ul><h3>{$articles_start_char[$index]}</h3>\n<ul>";
+ }
+
+ $r .= "<li>{$articles[$index]}</li>";
+ }
+ $r .= '</ul></td>';
+
+
+ }
+ $r .= '</tr></table>';
+ } elseif ( count ( $articles ) > 0) {
+ // for short lists of articles in categories.
+ $ti = $this->mTitle->getText() ;
+
+ $r .= '<h3>'.$articles_start_char[0]."</h3>\n";
+ $r .= '<ul><li>'.$articles[0].'</li>';
+ for ($index = 1; $index < count($articles); $index++ )
+ {
+ if ($articles_start_char[$index] != $articles_start_char[$index - 1])
+ {
+ $r .= "</ul><h3>{$articles_start_char[$index]}</h3>\n<ul>";
+ }
+
+ $r .= "<li>{$articles[$index]}</li>";
+ }
+ $r .= '</ul>';
+ }
+
+
+ return $r ;
+ }
+
+ # Return allowed HTML attributes
+ function getHTMLattrs () {
$htmlattrs = array( # Allowed attributes--no scripting, etc.
- "title", "align", "lang", "dir", "width", "height",
- "bgcolor", "clear", /* BR */ "noshade", /* HR */
- "cite", /* BLOCKQUOTE, Q */ "size", "face", "color",
- /* FONT */ "type", "start", "value", "compact",
+ 'title', 'align', 'lang', 'dir', 'width', 'height',
+ 'bgcolor', 'clear', /* BR */ 'noshade', /* HR */
+ 'cite', /* BLOCKQUOTE, Q */ 'size', 'face', 'color',
+ /* FONT */ 'type', 'start', 'value', 'compact',
/* For various lists, mostly deprecated but safe */
- "summary", "width", "border", "frame", "rules",
- "cellspacing", "cellpadding", "valign", "char",
- "charoff", "colgroup", "col", "span", "abbr", "axis",
- "headers", "scope", "rowspan", "colspan", /* Tables */
- "id", "class", "name", "style" /* For CSS */
+ 'summary', 'width', 'border', 'frame', 'rules',
+ 'cellspacing', 'cellpadding', 'valign', 'char',
+ 'charoff', 'colgroup', 'col', 'span', 'abbr', 'axis',
+ 'headers', 'scope', 'rowspan', 'colspan', /* Tables */
+ 'id', 'class', 'name', 'style' /* For CSS */
);
return $htmlattrs ;
}
- function fixTagAttributes ( $t )
- {
- if ( trim ( $t ) == "" ) return "" ; # Saves runtime ;-)
+ # Remove non approved attributes and javascript in css
+ function fixTagAttributes ( $t ) {
+ if ( trim ( $t ) == '' ) return '' ; # Saves runtime ;-)
$htmlattrs = $this->getHTMLattrs() ;
# Strip non-approved attributes from the tag
$t = preg_replace(
- "/(\\w+)(\\s*=\\s*([^\\s\">]+|\"[^\">]*\"))?/e",
+ '/(\\w+)(\\s*=\\s*([^\\s\">]+|\"[^\">]*\"))?/e',
"(in_array(strtolower(\"\$1\"),\$htmlattrs)?(\"\$1\".((\"x\$3\" != \"x\")?\"=\$3\":'')):'')",
$t);
# Strip javascript "expression" from stylesheets. Brute force approach:
# If anythin offensive is found, all attributes of the HTML tag are dropped
if( preg_match(
- "/style\\s*=.*(expression|tps*:\/\/|url\\s*\().*/is",
+ '/style\\s*=.*(expression|tps*:\/\/|url\\s*\().*/is',
wfMungeToUtf8( $t ) ) )
{
- $t="";
+ $t='';
}
return trim ( $t ) ;
}
- /* interface with html tidy, used if $wgUseTidy = true */
+ # interface with html tidy, used if $wgUseTidy = true
function tidy ( $text ) {
global $wgTidyConf, $wgTidyBin, $wgTidyOpts;
global $wgInputEncoding, $wgOutputEncoding;
+ $fname = 'Parser::tidy';
+ wfProfileIn( $fname );
+
$cleansource = '';
switch(strtoupper($wgOutputEncoding)) {
case 'ISO-8859-1':
@@ -411,17 +633,17 @@ class Parser
$wgTidyOpts .= ' -raw';
}
- $text = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'.
+ $wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'.
' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>'.
'<head><title>test</title></head><body>'.$text.'</body></html>';
$descriptorspec = array(
- 0 => array("pipe", "r"),
- 1 => array("pipe", "w"),
- 2 => array("file", "/dev/null", "a")
+ 0 => array('pipe', 'r'),
+ 1 => array('pipe', 'w'),
+ 2 => array('file', '/dev/null', 'a')
);
$process = proc_open("$wgTidyBin -config $wgTidyConf $wgTidyOpts", $descriptorspec, $pipes);
if (is_resource($process)) {
- fwrite($pipes[0], $text);
+ fwrite($pipes[0], $wrappedtext);
fclose($pipes[0]);
while (!feof($pipes[1])) {
$cleansource .= fgets($pipes[1], 1024);
@@ -429,15 +651,19 @@ class Parser
fclose($pipes[1]);
$return_value = proc_close($process);
}
+
+ wfProfileOut( $fname );
+
if( $cleansource == '' && $text != '') {
- return '<h2>'.wfMsg('seriousxhtmlerrors').'</h2><pre>'.htmlspecialchars($text).'</pre>';
+ wfDebug( "Tidy error detected!\n" );
+ return $text . "\n<!-- Tidy found serious XHTML errors -->\n";
} else {
return $cleansource;
}
}
- function doTableStuff ( $t )
- {
+ # parse the wiki syntax used to render tables
+ function doTableStuff ( $t ) {
$t = explode ( "\n" , $t ) ;
$td = array () ; # Is currently a td tag open?
$ltd = array () ; # Was it TD or TH?
@@ -447,20 +673,20 @@ class Parser
{
$x = trim ( $x ) ;
$fc = substr ( $x , 0 , 1 ) ;
- if ( "{|" == substr ( $x , 0 , 2 ) )
+ if ( '{|' == substr ( $x , 0 , 2 ) )
{
- $t[$k] = "\n<table " . $this->fixTagAttributes ( substr ( $x , 3 ) ) . ">" ;
+ $t[$k] = "\n<table " . $this->fixTagAttributes ( substr ( $x , 3 ) ) . '>' ;
array_push ( $td , false ) ;
- array_push ( $ltd , "" ) ;
+ array_push ( $ltd , '' ) ;
array_push ( $tr , false ) ;
- array_push ( $ltr , "" ) ;
+ array_push ( $ltr , '' ) ;
}
else if ( count ( $td ) == 0 ) { } # Don't do any of the following
- else if ( "|}" == substr ( $x , 0 , 2 ) )
+ else if ( '|}' == substr ( $x , 0 , 2 ) )
{
$z = "</table>\n" ;
$l = array_pop ( $ltd ) ;
- if ( array_pop ( $tr ) ) $z = "</tr>" . $z ;
+ if ( array_pop ( $tr ) ) $z = '</tr>' . $z ;
if ( array_pop ( $td ) ) $z = "</{$l}>" . $z ;
array_pop ( $ltr ) ;
$t[$k] = $z ;
@@ -470,51 +696,51 @@ class Parser
$z = trim ( substr ( $x , 2 ) ) ;
$t[$k] = "<caption>{$z}</caption>\n" ;
}*/
- else if ( "|-" == substr ( $x , 0 , 2 ) ) # Allows for |---------------
+ else if ( '|-' == substr ( $x , 0 , 2 ) ) # Allows for |---------------
{
$x = substr ( $x , 1 ) ;
- while ( $x != "" && substr ( $x , 0 , 1 ) == '-' ) $x = substr ( $x , 1 ) ;
- $z = "" ;
+ while ( $x != '' && substr ( $x , 0 , 1 ) == '-' ) $x = substr ( $x , 1 ) ;
+ $z = '' ;
$l = array_pop ( $ltd ) ;
- if ( array_pop ( $tr ) ) $z = "</tr>" . $z ;
+ if ( array_pop ( $tr ) ) $z = '</tr>' . $z ;
if ( array_pop ( $td ) ) $z = "</{$l}>" . $z ;
array_pop ( $ltr ) ;
$t[$k] = $z ;
array_push ( $tr , false ) ;
array_push ( $td , false ) ;
- array_push ( $ltd , "" ) ;
+ array_push ( $ltd , '' ) ;
array_push ( $ltr , $this->fixTagAttributes ( $x ) ) ;
}
- else if ( "|" == $fc || "!" == $fc || "|+" == substr ( $x , 0 , 2 ) ) # Caption
+ else if ( '|' == $fc || '!' == $fc || '|+' == substr ( $x , 0 , 2 ) ) # Caption
{
- if ( "|+" == substr ( $x , 0 , 2 ) )
+ if ( '|+' == substr ( $x , 0 , 2 ) )
{
- $fc = "+" ;
+ $fc = '+' ;
$x = substr ( $x , 1 ) ;
}
$after = substr ( $x , 1 ) ;
- if ( $fc == "!" ) $after = str_replace ( "!!" , "||" , $after ) ;
- $after = explode ( "||" , $after ) ;
- $t[$k] = "" ;
+ if ( $fc == '!' ) $after = str_replace ( '!!' , '||' , $after ) ;
+ $after = explode ( '||' , $after ) ;
+ $t[$k] = '' ;
foreach ( $after AS $theline )
{
- $z = "" ;
- if ( $fc != "+" )
+ $z = '' ;
+ if ( $fc != '+' )
{
$tra = array_pop ( $ltr ) ;
if ( !array_pop ( $tr ) ) $z = "<tr {$tra}>\n" ;
array_push ( $tr , true ) ;
- array_push ( $ltr , "" ) ;
+ array_push ( $ltr , '' ) ;
}
$l = array_pop ( $ltd ) ;
if ( array_pop ( $td ) ) $z = "</{$l}>" . $z ;
- if ( $fc == "|" ) $l = "td" ;
- else if ( $fc == "!" ) $l = "th" ;
- else if ( $fc == "+" ) $l = "caption" ;
- else $l = "" ;
+ if ( $fc == '|' ) $l = 'td' ;
+ else if ( $fc == '!' ) $l = 'th' ;
+ else if ( $fc == '+' ) $l = 'caption' ;
+ else $l = '' ;
array_push ( $ltd , $l ) ;
- $y = explode ( "|" , $theline , 2 ) ;
+ $y = explode ( '|' , $theline , 2 ) ;
if ( count ( $y ) == 1 ) $y = "{$z}<{$l}>{$y[0]}" ;
else $y = $y = "{$z}<{$l} ".$this->fixTagAttributes($y[0]).">{$y[1]}" ;
$t[$k] .= $y ;
@@ -526,9 +752,9 @@ class Parser
# Closing open td, tr && table
while ( count ( $td ) > 0 )
{
- if ( array_pop ( $td ) ) $t[] = "</td>" ;
- if ( array_pop ( $tr ) ) $t[] = "</tr>" ;
- $t[] = "</table>" ;
+ if ( array_pop ( $td ) ) $t[] = '</td>' ;
+ if ( array_pop ( $tr ) ) $t[] = '</tr>' ;
+ $t[] = '</table>' ;
}
$t = implode ( "\n" , $t ) ;
@@ -536,24 +762,37 @@ class Parser
return $t ;
}
- function internalParse( $text, $linestart, $args = array(), $isMain=true )
+ # Parses the text and adds the result to the strip state
+ # Returns the strip tag
+ function stripParse( $text, $newline, $args )
{
- $fname = "Parser::internalParse";
+ $text = $this->strip( $text, $this->mStripState );
+ $text = $this->internalParse( $text, (bool)$newline, $args, false );
+ return $newline.$this->insertStripItem( $text, $this->mStripState );
+ }
+
+ function internalParse( $text, $linestart, $args = array(), $isMain=true ) {
+ $fname = 'Parser::internalParse';
wfProfileIn( $fname );
$text = $this->removeHTMLtags( $text );
$text = $this->replaceVariables( $text, $args );
- # $text = preg_replace( "/(^|\n)-----*/", "\\1<hr>", $text );
+ $text = preg_replace( '/(^|\n)-----*/', '\\1<hr />', $text );
$text = $this->doHeadings( $text );
if($this->mOptions->getUseDynamicDates()) {
global $wgDateFormatter;
$text = $wgDateFormatter->reformat( $this->mOptions->getDateFormat(), $text );
}
+ $text = $this->doAllQuotes( $text );
$text = $this->replaceExternalLinks( $text );
- $text = $this->doTokenizedParser ( $text );
+ $text = $this->replaceInternalLinks ( $text );
+ $text = $this->replaceInternalLinks ( $text );
+ //$text = $this->doTokenizedParser ( $text );
$text = $this->doTableStuff ( $text ) ;
+ $text = $this->magicISBN( $text );
+ $text = $this->magicRFC( $text );
$text = $this->formatHeadings( $text, $isMain );
$sk =& $this->mOptions->getSkin();
$text = $sk->transformContent( $text );
@@ -567,39 +806,99 @@ class Parser
return $text;
}
-
- /* private */ function doHeadings( $text )
- {
+ # Parse headers and return html
+ /* private */ function doHeadings( $text ) {
+ $fname = 'Parser::doHeadings';
+ wfProfileIn( $fname );
for ( $i = 6; $i >= 1; --$i ) {
- $h = substr( "======", 0, $i );
+ $h = substr( '======', 0, $i );
$text = preg_replace( "/^{$h}(.+){$h}(\\s|$)/m",
"<h{$i}>\\1</h{$i}>\\2", $text );
}
+ wfProfileOut( $fname );
return $text;
}
+ /* private */ function doAllQuotes( $text ) {
+ $fname = 'Parser::doAllQuotes';
+ wfProfileIn( $fname );
+ $outtext = '';
+ $lines = explode( "\n", $text );
+ foreach ( $lines as $line ) {
+ $outtext .= $this->doQuotes ( '', $line, '' ) . "\n";
+ }
+ $outtext = substr($outtext, 0,-1);
+ wfProfileOut( $fname );
+ return $outtext;
+ }
+
+ /* private */ function doQuotes( $pre, $text, $mode ) {
+ if ( preg_match( "/^(.*)''(.*)$/sU", $text, $m ) ) {
+ $m1_strong = ($m[1] == "") ? "" : "<strong>{$m[1]}</strong>";
+ $m1_em = ($m[1] == "") ? "" : "<em>{$m[1]}</em>";
+ if ( substr ($m[2], 0, 1) == '\'' ) {
+ $m[2] = substr ($m[2], 1);
+ if ($mode == 'em') {
+ return $this->doQuotes ( $m[1], $m[2], ($m[1] == '') ? 'both' : 'emstrong' );
+ } else if ($mode == 'strong') {
+ return $m1_strong . $this->doQuotes ( '', $m[2], '' );
+ } else if (($mode == 'emstrong') || ($mode == 'both')) {
+ return $this->doQuotes ( '', $pre.$m1_strong.$m[2], 'em' );
+ } else if ($mode == 'strongem') {
+ return "<strong>{$pre}{$m1_em}</strong>" . $this->doQuotes ( '', $m[2], 'em' );
+ } else {
+ return $m[1] . $this->doQuotes ( '', $m[2], 'strong' );
+ }
+ } else {
+ if ($mode == 'strong') {
+ return $this->doQuotes ( $m[1], $m[2], ($m[1] == '') ? 'both' : 'strongem' );
+ } else if ($mode == 'em') {
+ return $m1_em . $this->doQuotes ( '', $m[2], '' );
+ } else if ($mode == 'emstrong') {
+ return "<em>{$pre}{$m1_strong}</em>" . $this->doQuotes ( '', $m[2], 'strong' );
+ } else if (($mode == 'strongem') || ($mode == 'both')) {
+ return $this->doQuotes ( '', $pre.$m1_em.$m[2], 'strong' );
+ } else {
+ return $m[1] . $this->doQuotes ( '', $m[2], 'em' );
+ }
+ }
+ } else {
+ $text_strong = ($text == '') ? '' : "<strong>{$text}</strong>";
+ $text_em = ($text == '') ? '' : "<em>{$text}</em>";
+ if ($mode == '') {
+ return $pre . $text;
+ } else if ($mode == 'em') {
+ return $pre . $text_em;
+ } else if ($mode == 'strong') {
+ return $pre . $text_strong;
+ } else if ($mode == 'strongem') {
+ return (($pre == '') && ($text == '')) ? '' : "<strong>{$pre}{$text_em}</strong>";
+ } else {
+ return (($pre == '') && ($text == '')) ? '' : "<em>{$pre}{$text_strong}</em>";
+ }
+ }
+ }
+
# Note: we have to do external links before the internal ones,
# and otherwise take great care in the order of things here, so
# that we don't end up interpreting some URLs twice.
- /* private */ function replaceExternalLinks( $text )
- {
- $fname = "Parser::replaceExternalLinks";
+ /* private */ function replaceExternalLinks( $text ) {
+ $fname = 'Parser::replaceExternalLinks';
wfProfileIn( $fname );
- $text = $this->subReplaceExternalLinks( $text, "http", true );
- $text = $this->subReplaceExternalLinks( $text, "https", true );
- $text = $this->subReplaceExternalLinks( $text, "ftp", false );
- $text = $this->subReplaceExternalLinks( $text, "irc", false );
- $text = $this->subReplaceExternalLinks( $text, "gopher", false );
- $text = $this->subReplaceExternalLinks( $text, "news", false );
- $text = $this->subReplaceExternalLinks( $text, "mailto", false );
+ $text = $this->subReplaceExternalLinks( $text, 'http', true );
+ $text = $this->subReplaceExternalLinks( $text, 'https', true );
+ $text = $this->subReplaceExternalLinks( $text, 'ftp', false );
+ $text = $this->subReplaceExternalLinks( $text, 'irc', false );
+ $text = $this->subReplaceExternalLinks( $text, 'gopher', false );
+ $text = $this->subReplaceExternalLinks( $text, 'news', false );
+ $text = $this->subReplaceExternalLinks( $text, 'mailto', false );
wfProfileOut( $fname );
return $text;
}
- /* private */ function subReplaceExternalLinks( $s, $protocol, $autonumber )
- {
- $unique = "4jzAfzB8hNvf4sqyO9Edd8pSmk9rE2in0Tgw3";
+ /* private */ function subReplaceExternalLinks( $s, $protocol, $autonumber ) {
+ $unique = '4jzAfzB8hNvf4sqyO9Edd8pSmk9rE2in0Tgw3';
$uc = "A-Za-z0-9_\\/~%\\-+&*#?!=()@\\x80-\\xFF";
# this is the list of separators that should be ignored if they
@@ -608,8 +907,8 @@ class Parser
# in this case, the last comma should not become part of the URL,
# but in "www.foo.com/123,2342,32.htm" it should.
$sep = ",;\.:";
- $fnc = "A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF";
- $images = "gif|png|jpg|jpeg";
+ $fnc = 'A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF';
+ $images = 'gif|png|jpg|jpeg';
# PLEASE NOTE: The curly braces { } are not part of the regex,
# they are interpreted as part of the string (used to tell PHP
@@ -621,13 +920,13 @@ class Parser
$sk =& $this->mOptions->getSkin();
if ( $autonumber and $this->mOptions->getAllowExternalImages() ) { # Use img tags only for HTTP urls
- $s = preg_replace( $e1, "\\1" . $sk->makeImage( "{$unique}:\\3" .
- "/\\4.\\5", "\\4.\\5" ) . "\\6", $s );
+ $s = preg_replace( $e1, '\\1' . $sk->makeImage( "{$unique}:\\3" .
+ '/\\4.\\5', '\\4.\\5' ) . '\\6', $s );
}
- $s = preg_replace( $e2, "\\1" . "<a href=\"{$unique}:\\3\"" .
+ $s = preg_replace( $e2, '\\1' . "<a href=\"{$unique}:\\3\"" .
$sk->getExternalLinkAttributes( "{$unique}:\\3", wfEscapeHTML(
"{$unique}:\\3" ) ) . ">" . wfEscapeHTML( "{$unique}:\\3" ) .
- "</a>\\5", $s );
+ '</a>\\5', $s );
$s = str_replace( $unique, $protocol, $s );
$a = explode( "[{$protocol}:", " " . $s );
@@ -652,7 +951,7 @@ class Parser
continue;
}
if( $link == $text || preg_match( "!$protocol://" . preg_quote( $text, "/" ) . "/?$!", $link ) ) {
- $paren = "";
+ $paren = '';
} else {
# Expand the URL for printable version
$paren = "<span class='urlexpansion'> (<i>" . htmlspecialchars ( $link ) . "</i>)</span>";
@@ -664,301 +963,31 @@ class Parser
return $s;
}
- /* private */ function handle4Quotes( &$state, $token )
- {
- /* This one makes some assumptions.
- * '''Caesar''''s army => <strong>Caesar</strong>'s army
- * ''''Caesar'''' was a roman emperor => '<strong>Caesar</strong>' was a roman emperor
- * These assumptions might be wrong, but any other assumption might be wrong, too.
- * So here we go */
- if ( $state["strong"] !== false ) {
- return $this->handle3Quotes( $state, $token ) . "'";
- } else {
- return "'" . $this->handle3Quotes( $state, $token );
- }
- }
-
-
- /* private */ function handle3Quotes( &$state, $token )
- {
- if ( $state["strong"] !== false ) {
- if ( $state["em"] !== false && $state["em"] > $state["strong"] )
- {
- # ''' lala ''lala '''
- $s = "</em></strong><em>";
- } else {
- $s = "</strong>";
- }
- $state["strong"] = FALSE;
- } else {
- $s = "<strong>";
- $state["strong"] = $token["pos"];
- }
- return $s;
- }
-
- /* private */ function handle2Quotes( &$state, $token )
- {
- if ( $state["em"] !== false ) {
- if ( $state["strong"] !== false && $state["strong"] > $state["em"] )
- {
- # ''lala'''lala'' ....'''
- $s = "</strong></em><strong>";
- } else {
- $s = "</em>";
- }
- $state["em"] = FALSE;
- } else {
- $s = "<em>";
- $state["em"] = $token["pos"];
- }
- return $s;
- }
-
- /* private */ function handle5Quotes( &$state, $token )
- {
- $s = "";
- if ( $state["em"] !== false && $state["strong"] !== false ) {
- if ( $state["em"] < $state["strong"] ) {
- $s .= "</strong></em>";
- } else {
- $s .= "</em></strong>";
- }
- $state["strong"] = $state["em"] = FALSE;
- } elseif ( $state["em"] !== false ) {
- $s .= "</em><strong>";
- $state["em"] = FALSE;
- $state["strong"] = $token["pos"];
- } elseif ( $state["strong"] !== false ) {
- $s .= "</strong><em>";
- $state["strong"] = FALSE;
- $state["em"] = $token["pos"];
- } else { # not $em and not $strong
- $s .= "<strong><em>";
- $state["strong"] = $state["em"] = $token["pos"];
- }
- return $s;
- }
-
- /* private */ function doTokenizedParser( $str )
- {
- global $wgLang; # for language specific parser hook
- global $wgUploadDirectory, $wgUseTimeline;
-
- $tokenizer=Tokenizer::newFromString( $str );
- $tokenStack = array();
-
- $s="";
- $state["em"] = FALSE;
- $state["strong"] = FALSE;
- $tagIsOpen = FALSE;
- $threeopen = false;
-
- # The tokenizer splits the text into tokens and returns them one by one.
- # Every call to the tokenizer returns a new token.
- while ( $token = $tokenizer->nextToken() )
- {
- switch ( $token["type"] )
- {
- case "text":
- # simple text with no further markup
- $txt = $token["text"];
- break;
- case "blank":
- # Text that contains blanks that have to be converted to
- # non-breakable spaces for French.
- # U+202F NARROW NO-BREAK SPACE might be a better choice, but
- # browser support for Unicode spacing is poor.
- $txt = str_replace( " ", "&nbsp;", $token["text"] );
- break;
- case "[[[":
- # remember the tag opened with 3 [
- $threeopen = true;
- case "[[":
- # link opening tag.
- # FIXME : Treat orphaned open tags (stack not empty when text is over)
- $tagIsOpen = TRUE;
- array_push( $tokenStack, $token );
- $txt="";
- break;
-
- case "]]]":
- case "]]":
- # link close tag.
- # get text from stack, glue it together, and call the code to handle a
- # link
-
- if ( count( $tokenStack ) == 0 )
- {
- # stack empty. Found a ]] without an opening [[
- $txt = "]]";
- } else {
- $linkText = "";
- $lastToken = array_pop( $tokenStack );
- while ( !(($lastToken["type"] == "[[[") or ($lastToken["type"] == "[[")) )
- {
- if( !empty( $lastToken["text"] ) ) {
- $linkText = $lastToken["text"] . $linkText;
- }
- $lastToken = array_pop( $tokenStack );
- }
-
- $txt = $linkText ."]]";
-
- if( isset( $lastToken["text"] ) ) {
- $prefix = $lastToken["text"];
- } else {
- $prefix = "";
- }
- $nextToken = $tokenizer->previewToken();
- if ( $nextToken["type"] == "text" )
- {
- # Preview just looks at it. Now we have to fetch it.
- $nextToken = $tokenizer->nextToken();
- $txt .= $nextToken["text"];
- }
- $txt = $this->handleInternalLink( $this->unstrip($txt,$this->mStripState), $prefix );
-
- # did the tag start with 3 [ ?
- if($threeopen) {
- # show the first as text
- $txt = "[".$txt;
- $threeopen=false;
- }
-
- }
- $tagIsOpen = (count( $tokenStack ) != 0);
- break;
- case "----":
- $txt = "\n<hr />\n";
- break;
- case "'''":
- # This and the four next ones handle quotes
- $txt = $this->handle3Quotes( $state, $token );
- break;
- case "''":
- $txt = $this->handle2Quotes( $state, $token );
- break;
- case "'''''":
- $txt = $this->handle5Quotes( $state, $token );
- break;
- case "''''":
- $txt = $this->handle4Quotes( $state, $token );
- break;
- case "":
- # empty token
- $txt="";
- break;
- case "h":
- #heading- used to close all unbalanced bold or em tags in this section
- $txt = '';
- if( $state['em'] !== false and
- ( $state['strong'] === false or $state['em'] > $state['strong'] ) )
- {
- $s .= '</em>';
- $state['em'] = false;
- }
- if ( $state['strong'] !== false ) $txt .= '</strong>';
- if ( $state['em'] !== false ) $txt .= '</em>';
- $state['strong'] = $state['em'] = false;
- break;
- case "RFC ":
- if ( $tagIsOpen ) {
- $txt = "RFC ";
- } else {
- $txt = $this->doMagicRFC( $tokenizer );
- }
- break;
- case "ISBN ":
- if ( $tagIsOpen ) {
- $txt = "ISBN ";
- } else {
- $txt = $this->doMagicISBN( $tokenizer );
- }
- break;
- case "<timeline>":
- if ( $wgUseTimeline &&
- "" != ( $timelinesrc = $tokenizer->readAllUntil("&lt;/timeline&gt;") ) )
- {
- $txt = renderTimeline( $timelinesrc );
- } else {
- $txt=$token["text"];
- }
- break;
- default:
- # Call language specific Hook.
- $txt = $wgLang->processToken( $token, $tokenStack );
- if ( NULL == $txt ) {
- # An unkown token. Highlight.
- $txt = "<font color=\"#FF0000\"><b>".$token["type"]."</b></font>";
- $txt .= "<font color=\"#FFFF00\"><b>".$token["text"]."</b></font>";
- }
- break;
- }
- # If we're parsing the interior of a link, don't append the interior to $s,
- # but push it to the stack so it can be processed when a ]] token is found.
- if ( $tagIsOpen && $txt != "" ) {
- $token["type"] = "text";
- $token["text"] = $txt;
- array_push( $tokenStack, $token );
- } else {
- $s .= $txt;
- }
- } #end while
-
- # make 100% sure all strong and em tags are closed
- # doBlockLevels often messes the last bit up though, but invalid nesting is better than unclosed tags
- # tidy solves this though
- if( $state['em'] !== false and
- ( $state['strong'] === false or $state['em'] > $state['strong'] ) )
- {
- $s .= '</em>';
- $state['em'] = false;
- }
- if ( $state['strong'] !== false ) $s .= '</strong>';
- if ( $state['em'] !== false ) $s .= '</em>';
-
- if ( count( $tokenStack ) != 0 )
- {
- # still objects on stack. opened [[ tag without closing ]] tag.
- $txt = "";
- while ( $lastToken = array_pop( $tokenStack ) )
- {
- if ( $lastToken["type"] == "text" )
- {
- $txt = $lastToken["text"] . $txt;
- } else {
- $txt = $lastToken["type"] . $txt;
- }
- }
- $s .= $txt;
- }
- return $s;
- }
-
- /* private */ function handleInternalLink( $line, $prefix )
- {
+ /* private */ function replaceInternalLinks( $s ) {
global $wgLang, $wgLinkCache;
global $wgNamespacesWithSubpages, $wgLanguageCode;
- static $fname = "Parser::handleInternalLink" ;
+ static $fname = 'Parser::replaceInternalLinks' ;
wfProfileIn( $fname );
- wfProfileIn( "$fname-setup" );
+ wfProfileIn( $fname.'-setup' );
static $tc = FALSE;
- if ( !$tc ) { $tc = Title::legalChars() . "#"; }
+ # the % is needed to support urlencoded titles as well
+ if ( !$tc ) { $tc = Title::legalChars() . '#%'; }
$sk =& $this->mOptions->getSkin();
+ $a = explode( '[[', ' ' . $s );
+ $s = array_shift( $a );
+ $s = substr( $s, 1 );
+
# Match a link having the form [[namespace:link|alternate]]trail
static $e1 = FALSE;
if ( !$e1 ) { $e1 = "/^([{$tc}]+)(?:\\|([^]]+))?]](.*)\$/sD"; }
# Match the end of a line for a word that's not followed by whitespace,
# e.g. in the case of 'The Arab al[[Razi]]', 'al' will be matched
- #$e2 = "/^(.*)\\b(\\w+)\$/suD";
- #$e2 = "/^(.*\\s)(\\S+)\$/suD";
- static $e2 = '/^(.*\s)([a-zA-Z\x80-\xff]+)$/sD';
-
+ static $e2 = '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD';
+ $useLinkPrefixExtension = $wgLang->linkPrefixExtension();
# Special and Media are pseudo-namespaces; no pages actually exist in them
static $image = FALSE;
static $special = FALSE;
@@ -971,120 +1000,148 @@ class Parser
$nottalk = !Namespace::isTalk( $this->mTitle->getNamespace() );
- wfProfileOut( "$fname-setup" );
- $s = "";
-
- if ( preg_match( $e1, $line, $m ) ) { # page with normal text or alt
- $text = $m[2];
- $trail = $m[3];
- } else { # Invalid form; output directly
- $s .= $prefix . "[[" . $line ;
- return $s;
+ if ( $useLinkPrefixExtension ) {
+ if ( preg_match( $e2, $s, $m ) ) {
+ $first_prefix = $m[2];
+ $s = $m[1];
+ } else {
+ $first_prefix = false;
+ }
+ } else {
+ $prefix = '';
}
- /* Valid link forms:
- Foobar -- normal
- :Foobar -- override special treatment of prefix (images, language links)
- /Foobar -- convert to CurrentPage/Foobar
- /Foobar/ -- convert to CurrentPage/Foobar, strip the initial / from text
- */
- $c = substr($m[1],0,1);
- $noforce = ($c != ":");
- if( $c == "/" ) { # subpage
- if(substr($m[1],-1,1)=="/") { # / at end means we don't want the slash to be shown
- $m[1]=substr($m[1],1,strlen($m[1])-2);
- $noslash=$m[1];
- } else {
- $noslash=substr($m[1],1);
+ wfProfileOut( $fname.'-setup' );
+
+ foreach ( $a as $line ) {
+ wfProfileIn( $fname.'-prefixhandling' );
+ if ( $useLinkPrefixExtension ) {
+ if ( preg_match( $e2, $s, $m ) ) {
+ $prefix = $m[2];
+ $s = $m[1];
+ } else {
+ $prefix='';
+ }
+ # first link
+ if($first_prefix) {
+ $prefix = $first_prefix;
+ $first_prefix = false;
+ }
}
- if($wgNamespacesWithSubpages[$this->mTitle->getNamespace()]) { # subpages allowed here
- $link = $this->mTitle->getPrefixedText(). "/" . trim($noslash);
- if( "" == $text ) {
- $text= $m[1];
- } # this might be changed for ugliness reasons
+ wfProfileOut( $fname.'-prefixhandling' );
+
+ if ( preg_match( $e1, $line, $m ) ) { # page with normal text or alt
+ $text = $m[2];
+ # fix up urlencoded title texts
+ if(preg_match('/%/', $m[1] )) $m[1] = urldecode($m[1]);
+ $trail = $m[3];
+ } else { # Invalid form; output directly
+ $s .= $prefix . '[[' . $line ;
+ continue;
+ }
+
+ /* Valid link forms:
+ Foobar -- normal
+ :Foobar -- override special treatment of prefix (images, language links)
+ /Foobar -- convert to CurrentPage/Foobar
+ /Foobar/ -- convert to CurrentPage/Foobar, strip the initial / from text
+ */
+ $c = substr($m[1],0,1);
+ $noforce = ($c != ':');
+ if( $c == '/' ) { # subpage
+ if(substr($m[1],-1,1)=='/') { # / at end means we don't want the slash to be shown
+ $m[1]=substr($m[1],1,strlen($m[1])-2);
+ $noslash=$m[1];
+ } else {
+ $noslash=substr($m[1],1);
+ }
+ if(!empty($wgNamespacesWithSubpages[$this->mTitle->getNamespace()])) { # subpages allowed here
+ $link = $this->mTitle->getPrefixedText(). '/' . trim($noslash);
+ if( '' == $text ) {
+ $text= $m[1];
+ } # this might be changed for ugliness reasons
+ } else {
+ $link = $noslash; # no subpage allowed, use standard link
+ }
+ } elseif( $noforce ) { # no subpage
+ $link = $m[1];
} else {
- $link = $noslash; # no subpage allowed, use standard link
+ $link = substr( $m[1], 1 );
}
- } elseif( $noforce ) { # no subpage
- $link = $m[1];
- } else {
- $link = substr( $m[1], 1 );
- }
- $wasblank = ( "" == $text );
- if( $wasblank )
+ $wasblank = ( '' == $text );
+ if( $wasblank )
$text = $link;
- $nt = Title::newFromText( $link );
- if( !$nt ) {
- $s .= $prefix . "[[" . $line;
- return $s;
- }
- $ns = $nt->getNamespace();
- $iw = $nt->getInterWiki();
- if( $noforce ) {
- if( $iw && $this->mOptions->getInterwikiMagic() && $nottalk && $wgLang->getLanguageName( $iw ) ) {
- array_push( $this->mOutput->mLanguageLinks, $nt->getPrefixedText() );
- $s .= $prefix . $trail ;
- return (trim($s) == '')? '': $s;
- }
- if( $ns == $image ) {
- $s .= $prefix . $sk->makeImageLinkObj( $nt, $text ) . $trail;
- $wgLinkCache->addImageLinkObj( $nt );
- return $s;
+ $nt = Title::newFromText( $link );
+ if( !$nt ) {
+ $s .= $prefix . '[[' . $line;
+ continue;
}
- if ( $ns == $category ) {
- $t = $nt->getText() ;
- $nnt = Title::newFromText ( Namespace::getCanonicalName($category).":".$t ) ;
-
- $wgLinkCache->suspend(); # Don't save in links/brokenlinks
- $t = $sk->makeLinkObj( $nnt, $t, "", "" , $prefix );
- $wgLinkCache->resume();
-
- $sortkey = $wasblank ? $this->mTitle->getPrefixedText() : $text;
- $wgLinkCache->addCategoryLinkObj( $nt, $sortkey );
- $this->mOutput->mCategoryLinks[] = $t ;
- $s .= $prefix . $trail ;
- return $s ;
+ $ns = $nt->getNamespace();
+ $iw = $nt->getInterWiki();
+ if( $noforce ) {
+ if( $iw && $this->mOptions->getInterwikiMagic() && $nottalk && $wgLang->getLanguageName( $iw ) ) {
+ array_push( $this->mOutput->mLanguageLinks, $nt->getPrefixedText() );
+ $tmp = $prefix . $trail ;
+ $s .= (trim($tmp) == '')? '': $tmp;
+ continue;
+ }
+ if ( $ns == $image ) {
+ $s .= $prefix . $sk->makeImageLinkObj( $nt, $text ) . $trail;
+ $wgLinkCache->addImageLinkObj( $nt );
+ continue;
+ }
+ if ( $ns == $category ) {
+ $t = $nt->getText() ;
+ $nnt = Title::newFromText ( Namespace::getCanonicalName($category).":".$t ) ;
+
+ $wgLinkCache->suspend(); # Don't save in links/brokenlinks
+ $t = $sk->makeLinkObj( $nnt, $t, '', '' , $prefix );
+ $wgLinkCache->resume();
+
+ $sortkey = $wasblank ? $this->mTitle->getPrefixedText() : $text;
+ $wgLinkCache->addCategoryLinkObj( $nt, $sortkey );
+ $this->mOutput->mCategoryLinks[] = $t ;
+ $s .= $prefix . $trail ;
+ continue;
+ }
+ }
+ if( ( $nt->getPrefixedText() == $this->mTitle->getPrefixedText() ) &&
+ ( strpos( $link, '#' ) == FALSE ) ) {
+ # Self-links are handled specially; generally de-link and change to bold.
+ $s .= $prefix . $sk->makeSelfLinkObj( $nt, $text, '', $trail );
+ continue;
}
- }
- if( ( $nt->getPrefixedText() == $this->mTitle->getPrefixedText() ) &&
- ( strpos( $link, "#" ) == FALSE ) ) {
- # Self-links are handled specially; generally de-link and change to bold.
- $s .= $prefix . $sk->makeSelfLinkObj( $nt, $text, "", $trail );
- return $s;
- }
- if( $ns == $media ) {
- $s .= $prefix . $sk->makeMediaLinkObj( $nt, $text ) . $trail;
- $wgLinkCache->addImageLinkObj( $nt );
- return $s;
- } elseif( $ns == $special ) {
- $s .= $prefix . $sk->makeKnownLinkObj( $nt, $text, "", $trail );
- return $s;
+ if( $ns == $media ) {
+ $s .= $prefix . $sk->makeMediaLinkObj( $nt, $text ) . $trail;
+ $wgLinkCache->addImageLinkObj( $nt );
+ continue;
+ } elseif( $ns == $special ) {
+ $s .= $prefix . $sk->makeKnownLinkObj( $nt, $text, '', $trail );
+ continue;
+ }
+ $s .= $sk->makeLinkObj( $nt, $text, '', $trail, $prefix );
}
- $s .= $sk->makeLinkObj( $nt, $text, "", $trail , $prefix );
-
wfProfileOut( $fname );
return $s;
}
# Some functions here used by doBlockLevels()
#
- /* private */ function closeParagraph()
- {
- $result = "";
+ /* private */ function closeParagraph() {
+ $result = '';
if ( '' != $this->mLastSection ) {
- $result = "</" . $this->mLastSection . ">\n";
+ $result = '</' . $this->mLastSection . ">\n";
}
$this->mInPre = false;
- $this->mLastSection = "";
+ $this->mLastSection = '';
return $result;
}
# getCommon() returns the length of the longest common substring
# of both arguments, starting at the beginning of both.
#
- /* private */ function getCommon( $st1, $st2 )
- {
+ /* private */ function getCommon( $st1, $st2 ) {
$fl = strlen( $st1 );
$shorter = strlen( $st2 );
if ( $fl < $shorter ) { $shorter = $fl; }
@@ -1101,53 +1158,51 @@ class Parser
{
$result = $this->closeParagraph();
- if ( "*" == $char ) { $result .= "<ul><li>"; }
- else if ( "#" == $char ) { $result .= "<ol><li>"; }
- else if ( ":" == $char ) { $result .= "<dl><dd>"; }
- else if ( ";" == $char ) {
- $result .= "<dl><dt>";
+ if ( '*' == $char ) { $result .= '<ul><li>'; }
+ else if ( '#' == $char ) { $result .= '<ol><li>'; }
+ else if ( ':' == $char ) { $result .= '<dl><dd>'; }
+ else if ( ';' == $char ) {
+ $result .= '<dl><dt>';
$this->mDTopen = true;
}
- else { $result = "<!-- ERR 1 -->"; }
+ else { $result = '<!-- ERR 1 -->'; }
return $result;
}
- /* private */ function nextItem( $char )
- {
- if ( "*" == $char || "#" == $char ) { return "</li><li>"; }
- else if ( ":" == $char || ";" == $char ) {
+ /* private */ function nextItem( $char ) {
+ if ( '*' == $char || '#' == $char ) { return '</li><li>'; }
+ else if ( ':' == $char || ';' == $char ) {
$close = "</dd>";
- if ( $this->mDTopen ) { $close = "</dt>"; }
- if ( ";" == $char ) {
+ if ( $this->mDTopen ) { $close = '</dt>'; }
+ if ( ';' == $char ) {
$this->mDTopen = true;
- return $close . "<dt>";
+ return $close . '<dt>';
} else {
$this->mDTopen = false;
- return $close . "<dd>";
+ return $close . '<dd>';
}
}
- return "<!-- ERR 2 -->";
+ return '<!-- ERR 2 -->';
}
- /* private */function closeList( $char )
- {
- if ( "*" == $char ) { $text = "</li></ul>"; }
- else if ( "#" == $char ) { $text = "</li></ol>"; }
- else if ( ":" == $char ) {
+ /* private */function closeList( $char ) {
+ if ( '*' == $char ) { $text = '</li></ul>'; }
+ else if ( '#' == $char ) { $text = '</li></ol>'; }
+ else if ( ':' == $char ) {
if ( $this->mDTopen ) {
$this->mDTopen = false;
- $text = "</dt></dl>";
+ $text = '</dt></dl>';
} else {
- $text = "</dd></dl>";
+ $text = '</dd></dl>';
}
}
- else { return "<!-- ERR 3 -->"; }
+ else { return '<!-- ERR 3 -->'; }
return $text."\n";
}
/* private */ function doBlockLevels( $text, $linestart ) {
- $fname = "Parser::doBlockLevels";
+ $fname = 'Parser::doBlockLevels';
wfProfileIn( $fname );
# Parsing through the text line by line. The main thing
@@ -1173,11 +1228,11 @@ class Parser
}
if ( !$this->mInPre ) {
# Multiple prefixes may abut each other for nested lists.
- $prefixLength = strspn( $oLine, "*#:;" );
+ $prefixLength = strspn( $oLine, '*#:;' );
$pref = substr( $oLine, 0, $prefixLength );
# eh?
- $pref2 = str_replace( ";", ":", $pref );
+ $pref2 = str_replace( ';', ':', $pref );
$t = substr( $oLine, $prefixLength );
} else {
# Don't interpret any other prefixes in preformatted text
@@ -1200,7 +1255,7 @@ class Parser
# FIXME: This is not foolproof. Something better in Tokenizer might help.
if( preg_match( '/^(.*?(?:\s|&nbsp;)):(.*)$/', $t, $match ) ) {
$term = $match[1];
- $output .= $term . $this->nextItem( ":" );
+ $output .= $term . $this->nextItem( ':' );
$t = $match[2];
}
}
@@ -1220,7 +1275,7 @@ class Parser
$char = substr( $pref, $commonPrefixLength, 1 );
$output .= $this->openList( $char );
- if ( ";" == $char ) {
+ if ( ';' == $char ) {
# FIXME: This is dupe of code above
if( preg_match( '/^(.*?(?:\s|&nbsp;)):(.*)$/', $t, $match ) ) {
$term = $match[1];
@@ -1236,10 +1291,10 @@ class Parser
# No prefix (not in list)--go to paragraph mode
$uniq_prefix = UNIQ_PREFIX;
// XXX: use a stack for nestable elements like span, table and div
- $openmatch = preg_match("/(<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<div|<pre|<tr|<td|<p|<ul|<li)/i", $t );
+ $openmatch = preg_match('/(<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<li|<\\/tr|<\\/td|<\\/th)/i', $t );
$closematch = preg_match(
- "/(<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|".
- "<\\/div|<hr|<\\/td|<\\/pre|<\\/p|".$uniq_prefix."-pre|<\\/li|<\\/ul)/i", $t );
+ '/(<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|'.
+ '<td|<th|<div|<\\/div|<hr|<\\/pre|<\\/p|'.$uniq_prefix.'-pre|<\\/li|<\\/ul)/i', $t );
if ( $openmatch or $closematch ) {
$paragraphStack = false;
$output .= $this->closeParagraph();
@@ -1251,7 +1306,7 @@ class Parser
} else {
$inBlockElem = true;
}
- } else if ( !$inBlockElem ) {
+ } else if ( !$inBlockElem && !$this->mInPre ) {
if ( " " == $t{0} and trim($t) != '' ) {
// pre
if ($this->mLastSection != 'pre') {
@@ -1263,14 +1318,14 @@ class Parser
// paragraph
if ( '' == trim($t) ) {
if ( $paragraphStack ) {
- $output .= $paragraphStack.'<br/>';
+ $output .= $paragraphStack.'<br />';
$paragraphStack = false;
$this->mLastSection = 'p';
} else {
if ($this->mLastSection != 'p' ) {
$output .= $this->closeParagraph();
$this->mLastSection = '';
- $paragraphStack = "<p>";
+ $paragraphStack = '<p>';
} else {
$paragraphStack = '</p><p>';
}
@@ -1296,36 +1351,37 @@ class Parser
$output .= $this->closeList( $pref2{$prefixLength-1} );
--$prefixLength;
}
- if ( "" != $this->mLastSection ) {
- $output .= "</" . $this->mLastSection . ">";
- $this->mLastSection = "";
+ if ( '' != $this->mLastSection ) {
+ $output .= '</' . $this->mLastSection . '>';
+ $this->mLastSection = '';
}
wfProfileOut( $fname );
return $output;
}
+ # Return value of a magic variable (like PAGENAME)
function getVariableValue( $index ) {
global $wgLang, $wgSitename, $wgServer;
switch ( $index ) {
case MAG_CURRENTMONTH:
- return date( "m" );
+ return date( 'm' );
case MAG_CURRENTMONTHNAME:
- return $wgLang->getMonthName( date("n") );
+ return $wgLang->getMonthName( date('n') );
case MAG_CURRENTMONTHNAMEGEN:
- return $wgLang->getMonthNameGen( date("n") );
+ return $wgLang->getMonthNameGen( date('n') );
case MAG_CURRENTDAY:
- return date("j");
+ return date('j');
case MAG_PAGENAME:
return $this->mTitle->getText();
case MAG_NAMESPACE:
# return Namespace::getCanonicalName($this->mTitle->getNamespace());
return $wgLang->getNsText($this->mTitle->getNamespace()); // Patch by Dori
case MAG_CURRENTDAYNAME:
- return $wgLang->getWeekdayName( date("w")+1 );
+ return $wgLang->getWeekdayName( date('w')+1 );
case MAG_CURRENTYEAR:
- return date( "Y" );
+ return date( 'Y' );
case MAG_CURRENTTIME:
return $wgLang->time( wfTimestampNow(), false );
case MAG_NUMBEROFARTICLES:
@@ -1339,8 +1395,8 @@ class Parser
}
}
- function initialiseVariables()
- {
+ # initialise the magic variables (like CURRENTMONTHNAME)
+ function initialiseVariables() {
global $wgVariableIDs;
$this->mVariables = array();
foreach ( $wgVariableIDs as $id ) {
@@ -1349,11 +1405,10 @@ class Parser
}
}
- /* private */ function replaceVariables( $text, $args = array() )
- {
+ /* private */ function replaceVariables( $text, $args = array() ) {
global $wgLang, $wgScript, $wgArticlePath;
- $fname = "Parser::replaceVariables";
+ $fname = 'Parser::replaceVariables';
wfProfileIn( $fname );
$bail = false;
@@ -1361,26 +1416,49 @@ class Parser
$this->initialiseVariables();
}
$titleChars = Title::legalChars();
- $regex = "/(\\n?){{([$titleChars]*?)(\\|.*?|)}}/s";
+ $nonBraceChars = str_replace( array( '{', '}' ), array( '', '' ), $titleChars );
# This function is called recursively. To keep track of arguments we need a stack:
array_push( $this->mArgStack, $args );
# PHP global rebinding syntax is a bit weird, need to use the GLOBALS array
$GLOBALS['wgCurParser'] =& $this;
- $text = preg_replace_callback( $regex, "wfBraceSubstitution", $text );
+
+
+ if ( $this->mOutputType == OT_HTML ) {
+ # Variable substitution
+ $text = preg_replace_callback( "/{{([$nonBraceChars]*?)}}/", 'wfVariableSubstitution', $text );
+
+ # Argument substitution
+ $text = preg_replace_callback( "/(\\n?){{{([$titleChars]*?)}}}/", 'wfArgSubstitution', $text );
+ }
+ # Template substitution
+ $regex = '/(\\n?){{(['.$nonBraceChars.']*)(\\|.*?|)}}/s';
+ $text = preg_replace_callback( $regex, 'wfBraceSubstitution', $text );
array_pop( $this->mArgStack );
+ wfProfileOut( $fname );
return $text;
}
- function braceSubstitution( $matches )
- {
+ function variableSubstitution( $matches ) {
+ if ( array_key_exists( $matches[1], $this->mVariables ) ) {
+ $text = $this->mVariables[$matches[1]];
+ $this->mOutput->mContainsOldMagic = true;
+ } else {
+ $text = $matches[0];
+ }
+ return $text;
+ }
+
+ function braceSubstitution( $matches ) {
global $wgLinkCache, $wgLang;
- $fname = "Parser::braceSubstitution";
+ $fname = 'Parser::braceSubstitution';
$found = false;
$nowiki = false;
+ $noparse = false;
+
$title = NULL;
# $newline is an optional newline character before the braces
@@ -1390,26 +1468,36 @@ class Parser
$newline = $matches[1];
$part1 = $matches[2];
# If the third subpattern matched anything, it will start with |
- if ( $matches[3] !== "" ) {
- $args = explode( "|", substr( $matches[3], 1 ) );
+ if ( $matches[3] !== '' ) {
+ $args = explode( '|', substr( $matches[3], 1 ) );
} else {
$args = array();
}
$argc = count( $args );
+
+ # {{{}}}
+ if ( strpos( $matches[0], '{{{' ) !== false ) {
+ $text = $matches[0];
+ $found = true;
+ $noparse = true;
+ }
# SUBST
- $mwSubst =& MagicWord::get( MAG_SUBST );
- if ( $mwSubst->matchStartAndRemove( $part1 ) ) {
- if ( $this->mOutputType != OT_WIKI ) {
- # Invalid SUBST not replaced at PST time
- # Return without further processing
+ if ( !$found ) {
+ $mwSubst =& MagicWord::get( MAG_SUBST );
+ if ( $mwSubst->matchStartAndRemove( $part1 ) ) {
+ if ( $this->mOutputType != OT_WIKI ) {
+ # Invalid SUBST not replaced at PST time
+ # Return without further processing
+ $text = $matches[0];
+ $found = true;
+ $noparse= true;
+ }
+ } elseif ( $this->mOutputType == OT_WIKI ) {
+ # SUBST not found in PST pass, do nothing
$text = $matches[0];
$found = true;
}
- } elseif ( $this->mOutputType == OT_WIKI ) {
- # SUBST not found in PST pass, do nothing
- $text = $matches[0];
- $found = true;
}
# MSG, MSGNW and INT
@@ -1427,7 +1515,7 @@ class Parser
# Check if it is an internal message
$mwInt =& MagicWord::get( MAG_INT );
if ( $mwInt->matchStartAndRemove( $part1 ) ) {
- if ( $this->incrementIncludeCount( "int:$part1" ) ) {
+ if ( $this->incrementIncludeCount( 'int:'.$part1 ) ) {
$text = wfMsgReal( $part1, $args, true );
$found = true;
}
@@ -1484,14 +1572,14 @@ class Parser
$found = true;
$this->mOutput->mContainsOldMagic = true;
}
-
+/*
# Arguments input from the caller
$inputArgs = end( $this->mArgStack );
if ( !$found && array_key_exists( $part1, $inputArgs ) ) {
$text = $inputArgs[$part1];
$found = true;
}
-
+*/
# Load from database
if ( !$found ) {
$title = Title::newFromText( $part1, NS_TEMPLATE );
@@ -1510,7 +1598,7 @@ class Parser
# If the title is valid but undisplayable, make a link to it
if ( $this->mOutputType == OT_HTML && !$found ) {
- $text = "[[" . $title->getPrefixedText() . "]]";
+ $text = '[[' . $title->getPrefixedText() . ']]';
$found = true;
}
}
@@ -1520,19 +1608,19 @@ class Parser
# Only for HTML output
if ( $nowiki && $found && $this->mOutputType == OT_HTML ) {
$text = wfEscapeWikiText( $text );
- } elseif ( $this->mOutputType == OT_HTML && $found ) {
+ } elseif ( $this->mOutputType == OT_HTML && $found && !$noparse) {
# Clean up argument array
$assocArgs = array();
$index = 1;
foreach( $args as $arg ) {
- $eqpos = strpos( $arg, "=" );
+ $eqpos = strpos( $arg, '=' );
if ( $eqpos === false ) {
$assocArgs[$index++] = $arg;
} else {
$name = trim( substr( $arg, 0, $eqpos ) );
$value = trim( substr( $arg, $eqpos+1 ) );
if ( $value === false ) {
- $value = "";
+ $value = '';
}
if ( $name !== false ) {
$assocArgs[$name] = $value;
@@ -1546,13 +1634,7 @@ class Parser
}
# Run full parser on the included text
- $text = $this->strip( $text, $this->mStripState );
- $text = $this->internalParse( $text, (bool)$newline, $assocArgs, false );
- if(!empty($newline)) $text = "\n".$text;
-
- # Add the result to the strip state for re-inclusion after
- # the rest of the processing
- $text = $this->insertStripItem( $text, $this->mStripState );
+ $text = $this->stripParse( $text, $newline, $assocArgs );
# Resume the link cache and register the inclusion as a link
if ( !is_null( $title ) ) {
@@ -1568,9 +1650,22 @@ class Parser
}
}
+ # Triple brace replacement -- used for template arguments
+ function argSubstitution( $matches ) {
+ $newline = $matches[1];
+ $arg = trim( $matches[2] );
+ $text = $matches[0];
+ $inputArgs = end( $this->mArgStack );
+
+ if ( array_key_exists( $arg, $inputArgs ) ) {
+ $text = $this->stripParse( $inputArgs[$arg], $newline, array() );
+ }
+
+ return $text;
+ }
+
# Returns true if the function is allowed to include this entity
- function incrementIncludeCount( $dbk )
- {
+ function incrementIncludeCount( $dbk ) {
if ( !array_key_exists( $dbk, $this->mIncludeCount ) ) {
$this->mIncludeCount[$dbk] = 0;
}
@@ -1583,29 +1678,28 @@ class Parser
# Cleans up HTML, removes dangerous tags and attributes
- /* private */ function removeHTMLtags( $text )
- {
+ /* private */ function removeHTMLtags( $text ) {
global $wgUseTidy, $wgUserHtml;
- $fname = "Parser::removeHTMLtags";
+ $fname = 'Parser::removeHTMLtags';
wfProfileIn( $fname );
if( $wgUserHtml ) {
$htmlpairs = array( # Tags that must be closed
- "b", "del", "i", "ins", "u", "font", "big", "small", "sub", "sup", "h1",
- "h2", "h3", "h4", "h5", "h6", "cite", "code", "em", "s",
- "strike", "strong", "tt", "var", "div", "center",
- "blockquote", "ol", "ul", "dl", "table", "caption", "pre",
- "ruby", "rt" , "rb" , "rp", "p"
+ 'b', 'del', 'i', 'ins', 'u', 'font', 'big', 'small', 'sub', 'sup', 'h1',
+ 'h2', 'h3', 'h4', 'h5', 'h6', 'cite', 'code', 'em', 's',
+ 'strike', 'strong', 'tt', 'var', 'div', 'center',
+ 'blockquote', 'ol', 'ul', 'dl', 'table', 'caption', 'pre',
+ 'ruby', 'rt' , 'rb' , 'rp', 'p'
);
$htmlsingle = array(
- "br", "hr", "li", "dt", "dd"
+ 'br', 'hr', 'li', 'dt', 'dd'
);
$htmlnest = array( # Tags that can be nested--??
- "table", "tr", "td", "th", "div", "blockquote", "ol", "ul",
- "dl", "font", "big", "small", "sub", "sup"
+ 'table', 'tr', 'td', 'th', 'div', 'blockquote', 'ol', 'ul',
+ 'dl', 'font', 'big', 'small', 'sub', 'sup'
);
$tabletags = array( # Can only appear inside table
- "td", "th", "tr"
+ 'td', 'th', 'tr'
);
} else {
$htmlpairs = array();
@@ -1620,15 +1714,15 @@ class Parser
$htmlattrs = $this->getHTMLattrs () ;
# Remove HTML comments
- $text = preg_replace( "/(\\n *<!--.*--> *(?=\\n)|<!--.*-->)/sU", "$2", $text );
+ $text = preg_replace( '/(\\n *<!--.*--> *(?=\\n)|<!--.*-->)/sU', '$2', $text );
- $bits = explode( "<", $text );
+ $bits = explode( '<', $text );
$text = array_shift( $bits );
if(!$wgUseTidy) {
$tagstack = array(); $tablestack = array();
foreach ( $bits as $x ) {
$prev = error_reporting( E_ALL & ~( E_NOTICE | E_WARNING ) );
- preg_match( "/^(\\/?)(\\w+)([^>]*)(\\/{0,1}>)([^<]*)$/",
+ preg_match( '/^(\\/?)(\\w+)([^>]*)(\\/{0,1}>)([^<]*)$/',
$x, $regs );
list( $qbar, $slash, $t, $params, $brace, $rest ) = $regs;
error_reporting( $prev );
@@ -1639,25 +1733,25 @@ class Parser
if ( $slash ) {
# Closing a tag...
if ( ! in_array( $t, $htmlsingle ) &&
- ( count($tagstack) && $ot = array_pop( $tagstack ) ) != $t ) {
- if(!empty($ot)) array_push( $tagstack, $ot );
+ ( $ot = @array_pop( $tagstack ) ) != $t ) {
+ @array_push( $tagstack, $ot );
$badtag = 1;
} else {
- if ( $t == "table" ) {
+ if ( $t == 'table' ) {
$tagstack = array_pop( $tablestack );
}
- $newparams = "";
+ $newparams = '';
}
} else {
# Keep track for later
if ( in_array( $t, $tabletags ) &&
- ! in_array( "table", $tagstack ) ) {
+ ! in_array( 'table', $tagstack ) ) {
$badtag = 1;
} else if ( in_array( $t, $tagstack ) &&
! in_array ( $t , $htmlnest ) ) {
$badtag = 1 ;
} else if ( ! in_array( $t, $htmlsingle ) ) {
- if ( $t == "table" ) {
+ if ( $t == 'table' ) {
array_push( $tablestack, $tagstack );
$tagstack = array();
}
@@ -1668,30 +1762,30 @@ class Parser
}
if ( ! $badtag ) {
- $rest = str_replace( ">", "&gt;", $rest );
+ $rest = str_replace( '>', '&gt;', $rest );
$text .= "<$slash$t $newparams$brace$rest";
continue;
}
}
- $text .= "&lt;" . str_replace( ">", "&gt;", $x);
+ $text .= '&lt;' . str_replace( '>', '&gt;', $x);
}
# Close off any remaining tags
- while ( $t = array_pop( $tagstack ) ) {
+ while ( is_array( $tagstack ) && ($t = array_pop( $tagstack )) ) {
$text .= "</$t>\n";
- if ( $t == "table" ) { $tagstack = array_pop( $tablestack ); }
+ if ( $t == 'table' ) { $tagstack = array_pop( $tablestack ); }
}
} else {
# this might be possible using tidy itself
foreach ( $bits as $x ) {
- preg_match( "/^(\\/?)(\\w+)([^>]*)(\\/{0,1}>)([^<]*)$/",
+ preg_match( '/^(\\/?)(\\w+)([^>]*)(\\/{0,1}>)([^<]*)$/',
$x, $regs );
@list( $qbar, $slash, $t, $params, $brace, $rest ) = $regs;
if ( in_array( $t = strtolower( $t ), $htmlelements ) ) {
$newparams = $this->fixTagAttributes($params);
- $rest = str_replace( ">", "&gt;", $rest );
+ $rest = str_replace( '>', '&gt;', $rest );
$text .= "<$slash$t $newparams$brace$rest";
} else {
- $text .= "&lt;" . str_replace( ">", "&gt;", $x);
+ $text .= '&lt;' . str_replace( '>', '&gt;', $x);
}
}
}
@@ -1713,8 +1807,7 @@ class Parser
*
*/
- /* private */ function formatHeadings( $text, $isMain=true )
- {
+ /* private */ function formatHeadings( $text, $isMain=true ) {
global $wgInputEncoding;
$doNumberHeadings = $this->mOptions->getNumberHeadings();
@@ -1741,13 +1834,13 @@ class Parser
# never add the TOC to the Main Page. This is an entry page that should not
# be more than 1-2 screens large anyway
- if( $this->mTitle->getPrefixedText() == wfMsg("mainpage") ) {
+ if( $this->mTitle->getPrefixedText() == wfMsg('mainpage') ) {
$doShowToc = 0;
}
# Get all headlines for numbering them and adding funky stuff like [edit]
# links - this is for later, but we need the number of headlines right now
- $numMatches = preg_match_all( "/<H([1-6])(.*?" . ">)(.*?)<\/H[1-6]>/i", $text, $matches );
+ $numMatches = preg_match_all( '/<H([1-6])(.*?' . '>)(.*?)<\/H[1-6]>/i', $text, $matches );
# if there are fewer than 4 headlines in the article, do not show TOC
if( $numMatches < 4 ) {
@@ -1771,14 +1864,14 @@ class Parser
# Ugh .. the TOC should have neat indentation levels which can be
# passed to the skin functions. These are determined here
$toclevel = 0;
- $toc = "";
- $full = "";
+ $toc = '';
+ $full = '';
$head = array();
$sublevelCount = array();
$level = 0;
$prevlevel = 0;
foreach( $matches[3] as $headline ) {
- $numbering = "";
+ $numbering = '';
if( $level ) {
$prevlevel = $level;
}
@@ -1802,7 +1895,7 @@ class Parser
for( $i = 1; $i <= $level; $i++ ) {
if( !empty( $sublevelCount[$i] ) ) {
if( $dot ) {
- $numbering .= ".";
+ $numbering .= '.';
}
$numbering .= $sublevelCount[$i];
$dot = 1;
@@ -1813,13 +1906,17 @@ class Parser
# The canonized header is a version of the header text safe to use for links
# Avoid insertion of weird stuff like <math> by expanding the relevant sections
$canonized_headline = $this->unstrip( $headline, $this->mStripState );
+ $canonized_headline = $this->unstripNoWiki( $headline, $this->mStripState );
# strip out HTML
- $canonized_headline = preg_replace( "/<.*?" . ">/","",$canonized_headline );
+ $canonized_headline = preg_replace( '/<.*?' . '>/','',$canonized_headline );
$tocline = trim( $canonized_headline );
- $canonized_headline = preg_replace("/[ \\?&\\/<>\\(\\)\\[\\]=,+']+/", '_', urlencode( do_html_entity_decode( $tocline, ENT_COMPAT, $wgInputEncoding ) ) );
- # strip out urlencoded &nbsp; (inserted for french spaces, e.g. first space in 'something : something')
- $canonized_headline = str_replace('%C2%A0','_', $canonized_headline);
+ $canonized_headline = urlencode( do_html_entity_decode( str_replace(' ', '_', $tocline), ENT_COMPAT, $wgInputEncoding ) );
+ $replacearray = array(
+ '%3A' => ':',
+ '%' => '.'
+ );
+ $canonized_headline = str_replace(array_keys($replacearray),array_values($replacearray),$canonized_headline);
$refer[$headlineCount] = $canonized_headline;
# count how many in assoc. array so we can track dupes in anchors
@@ -1829,26 +1926,26 @@ class Parser
# Prepend the number to the heading text
if( $doNumberHeadings || $doShowToc ) {
- $tocline = $numbering . " " . $tocline;
+ $tocline = $numbering . ' ' . $tocline;
# Don't number the heading if it is the only one (looks silly)
if( $doNumberHeadings && count( $matches[3] ) > 1) {
# the two are different if the line contains a link
- $headline=$numbering . " " . $headline;
+ $headline=$numbering . ' ' . $headline;
}
}
# Create the anchor for linking from the TOC to the section
$anchor = $canonized_headline;
if($refcount[$headlineCount] > 1 ) {
- $anchor .= "_" . $refcount[$headlineCount];
+ $anchor .= '_' . $refcount[$headlineCount];
}
if( $doShowToc ) {
$toc .= $sk->tocLine($anchor,$tocline,$toclevel);
}
if( $showEditLink ) {
if ( empty( $head[$headlineCount] ) ) {
- $head[$headlineCount] = "";
+ $head[$headlineCount] = '';
}
$head[$headlineCount] .= $sk->editSectionLink($headlineCount+1);
}
@@ -1872,7 +1969,7 @@ class Parser
# split up and insert constructed headlines
- $blocks = preg_split( "/<H[1-6].*?" . ">.*?<\/H[1-6]>/i", $text );
+ $blocks = preg_split( '/<H[1-6].*?' . '>.*?<\/H[1-6]>/i', $text );
$i = 0;
foreach( $blocks as $block ) {
@@ -1899,73 +1996,54 @@ class Parser
return $full;
}
- /* private */ function doMagicISBN( &$tokenizer )
- {
+ # Return an HTML link for the "ISBN 123456" text
+ /* private */ function magicISBN( $text ) {
global $wgLang;
- # Check whether next token is a text token
- # If yes, fetch it and convert the text into a
- # Special::BookSources link
- $token = $tokenizer->previewToken();
- while ( $token["type"] == "" )
- {
- $tokenizer->nextToken();
- $token = $tokenizer->previewToken();
- }
- if ( $token["type"] == "text" )
- {
- $token = $tokenizer->nextToken();
- $x = $token["text"];
- $valid = "0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ $a = split( 'ISBN ', " $text" );
+ if ( count ( $a ) < 2 ) return $text;
+ $text = substr( array_shift( $a ), 1);
+ $valid = '0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ';
- $isbn = $blank = "" ;
- while ( " " == $x{0} ) {
- $blank .= " ";
+ foreach ( $a as $x ) {
+ $isbn = $blank = '' ;
+ while ( ' ' == $x{0} ) {
+ $blank .= ' ';
$x = substr( $x, 1 );
}
while ( strstr( $valid, $x{0} ) != false ) {
$isbn .= $x{0};
$x = substr( $x, 1 );
}
- $num = str_replace( "-", "", $isbn );
- $num = str_replace( " ", "", $num );
+ $num = str_replace( '-', '', $isbn );
+ $num = str_replace( ' ', '', $num );
- if ( "" == $num ) {
- $text = "ISBN $blank$x";
+ if ( '' == $num ) {
+ $text .= "ISBN $blank$x";
} else {
- $titleObj = Title::makeTitle( NS_SPECIAL, "Booksources" );
- $text = "<a href=\"" .
+ $titleObj = Title::makeTitle( NS_SPECIAL, 'Booksources' );
+ $text .= '<a href="' .
$titleObj->escapeLocalUrl( "isbn={$num}" ) .
"\" class=\"internal\">ISBN $isbn</a>";
$text .= $x;
}
- } else {
- $text = "ISBN ";
}
return $text;
}
- /* private */ function doMagicRFC( &$tokenizer )
- {
+
+ # Return an HTML link for the "RFC 1234" text
+ /* private */ function magicRFC( $text ) {
global $wgLang;
- # Check whether next token is a text token
- # If yes, fetch it and convert the text into a
- # link to an RFC source
- $token = $tokenizer->previewToken();
- while ( $token["type"] == "" )
- {
- $tokenizer->nextToken();
- $token = $tokenizer->previewToken();
- }
- if ( $token["type"] == "text" )
- {
- $token = $tokenizer->nextToken();
- $x = $token["text"];
- $valid = "0123456789";
+ $a = split( 'RFC ', ' '.$text );
+ if ( count ( $a ) < 2 ) return $text;
+ $text = substr( array_shift( $a ), 1);
+ $valid = '0123456789';
- $rfc = $blank = "" ;
- while ( " " == $x{0} ) {
- $blank .= " ";
+ foreach ( $a as $x ) {
+ $rfc = $blank = '' ;
+ while ( ' ' == $x{0} ) {
+ $blank .= ' ';
$x = substr( $x, 1 );
}
while ( strstr( $valid, $x{0} ) != false ) {
@@ -1973,23 +2051,20 @@ class Parser
$x = substr( $x, 1 );
}
- if ( "" == $rfc ) {
+ if ( '' == $rfc ) {
$text .= "RFC $blank$x";
} else {
- $url = wfmsg( "rfcurl" );
- $url = str_replace( "$1", $rfc, $url);
+ $url = wfmsg( 'rfcurl' );
+ $url = str_replace( '$1', $rfc, $url);
$sk =& $this->mOptions->getSkin();
$la = $sk->getExternalLinkAttributes( $url, "RFC {$rfc}" );
- $text = "<a href='{$url}'{$la}>RFC {$rfc}</a>{$x}";
+ $text .= "<a href='{$url}'{$la}>RFC {$rfc}</a>{$x}";
}
- } else {
- $text = "RFC ";
}
return $text;
}
- function preSaveTransform( $text, &$title, &$user, $options, $clearState = true )
- {
+ function preSaveTransform( $text, &$title, &$user, $options, $clearState = true ) {
$this->mOptions = $options;
$this->mTitle =& $title;
$this->mOutputType = OT_WIKI;
@@ -2004,19 +2079,21 @@ class Parser
);
$text = str_replace(array_keys($pairs), array_values($pairs), $text);
// now with regexes
+ /*
$pairs = array(
"/<br.+(clear|break)=[\"']?(all|both)[\"']?\\/?>/i" => '<br style="clear:both;"/>',
- "/<br *?>/i" => "<br/>",
+ "/<br *?>/i" => "<br />",
);
$text = preg_replace(array_keys($pairs), array_values($pairs), $text);
+ */
$text = $this->strip( $text, $stripState, false );
$text = $this->pstPass2( $text, $user );
$text = $this->unstrip( $text, $stripState );
+ $text = $this->unstripNoWiki( $text, $stripState );
return $text;
}
- /* private */ function pstPass2( $text, &$user )
- {
+ /* private */ function pstPass2( $text, &$user ) {
global $wgLang, $wgLocaltimezone, $wgCurParser;
# Variable replacement
@@ -2026,20 +2103,20 @@ class Parser
# Signatures
#
$n = $user->getName();
- $k = $user->getOption( "nickname" );
- if ( "" == $k ) { $k = $n; }
+ $k = $user->getOption( 'nickname' );
+ if ( '' == $k ) { $k = $n; }
if(isset($wgLocaltimezone)) {
- $oldtz = getenv("TZ"); putenv("TZ=$wgLocaltimezone");
+ $oldtz = getenv('TZ'); putenv('TZ='.$wgLocaltimezone);
}
/* Note: this is an ugly timezone hack for the European wikis */
- $d = $wgLang->timeanddate( date( "YmdHis" ), false ) .
- " (" . date( "T" ) . ")";
- if(isset($wgLocaltimezone)) putenv("TZ=$oldtz");
+ $d = $wgLang->timeanddate( date( 'YmdHis' ), false ) .
+ ' (' . date( 'T' ) . ')';
+ if(isset($wgLocaltimezone)) putenv('TZ='.$oldtzs);
- $text = preg_replace( "/~~~~~/", $d, $text );
- $text = preg_replace( "/~~~~/", "[[" . $wgLang->getNsText(
+ $text = preg_replace( '/~~~~~/', $d, $text );
+ $text = preg_replace( '/~~~~/', '[[' . $wgLang->getNsText(
Namespace::getUser() ) . ":$n|$k]] $d", $text );
- $text = preg_replace( "/~~~/", "[[" . $wgLang->getNsText(
+ $text = preg_replace( '/~~~/', '[[' . $wgLang->getNsText(
Namespace::getUser() ) . ":$n|$k]]", $text );
# Context links: [[|name]] and [[name (context)|]]
@@ -2059,12 +2136,12 @@ class Parser
if ( preg_match( $conpat, $t, $m ) ) {
$context = $m[2];
}
- $text = preg_replace( $p4, "[[\\1:\\2 (\\3)|\\2]]", $text );
- $text = preg_replace( $p1, "[[\\1 (\\2)|\\1]]", $text );
- $text = preg_replace( $p3, "[[\\1:\\2|\\2]]", $text );
+ $text = preg_replace( $p4, '[[\\1:\\2 (\\3)|\\2]]', $text );
+ $text = preg_replace( $p1, '[[\\1 (\\2)|\\1]]', $text );
+ $text = preg_replace( $p3, '[[\\1:\\2|\\2]]', $text );
- if ( "" == $context ) {
- $text = preg_replace( $p2, "[[\\1]]", $text );
+ if ( '' == $context ) {
+ $text = preg_replace( $p2, '[[\\1]]', $text );
} else {
$text = preg_replace( $p2, "[[\\1 ({$context})|\\1]]", $text );
}
@@ -2088,8 +2165,7 @@ class Parser
# Set up some variables which are usually set up in parse()
# so that an external function can call some class members with confidence
- function startExternalParse( &$title, $options, $outputType, $clearState = true )
- {
+ function startExternalParse( &$title, $options, $outputType, $clearState = true ) {
$this->mTitle =& $title;
$this->mOptions = $options;
$this->mOutputType = $outputType;
@@ -2117,11 +2193,21 @@ class Parser
$executing = false;
return $text;
}
+
+ # Create an HTML-style tag, e.g. <yourtag>special text</yourtag>
+ # Callback will be called with the text within
+ # Transform and return the text within
+ function setHook( $tag, $callback ) {
+ $oldVal = @$this->mTagHooks[$tag];
+ $this->mTagHooks[$tag] = $callback;
+ return $oldVal;
+ }
}
class ParserOutput
{
var $mText, $mLanguageLinks, $mCategoryLinks, $mContainsOldMagic;
+ var $mCacheTime; # Used in ParserCache
function ParserOutput( $text = "", $languageLinks = array(), $categoryLinks = array(),
$containsOldMagic = false )
@@ -2130,16 +2216,19 @@ class ParserOutput
$this->mLanguageLinks = $languageLinks;
$this->mCategoryLinks = $categoryLinks;
$this->mContainsOldMagic = $containsOldMagic;
+ $this->mCacheTime = "";
}
function getText() { return $this->mText; }
function getLanguageLinks() { return $this->mLanguageLinks; }
function getCategoryLinks() { return $this->mCategoryLinks; }
+ function getCacheTime() { return $this->mCacheTime; }
function containsOldMagic() { return $this->mContainsOldMagic; }
function setText( $text ) { return wfSetVar( $this->mText, $text ); }
function setLanguageLinks( $ll ) { return wfSetVar( $this->mLanguageLinks, $ll ); }
function setCategoryLinks( $cl ) { return wfSetVar( $this->mCategoryLinks, $cl ); }
function setContainsOldMagic( $com ) { return wfSetVar( $this->mContainsOldMagic, $com ); }
+ function setCacheTime( $t ) { return wfSetVar( $this->mCacheTime, $t ); }
function merge( $other ) {
$this->mLanguageLinks = array_merge( $this->mLanguageLinks, $other->mLanguageLinks );
@@ -2164,39 +2253,38 @@ class ParserOptions
var $mNumberHeadings; # Automatically number headings
var $mShowToc; # Show table of contents
- function getUseTeX() { return $this->mUseTeX; }
- function getUseCategoryMagic() { return $this->mUseCategoryMagic; }
- function getUseDynamicDates() { return $this->mUseDynamicDates; }
- function getInterwikiMagic() { return $this->mInterwikiMagic; }
- function getAllowExternalImages() { return $this->mAllowExternalImages; }
- function getSkin() { return $this->mSkin; }
- function getDateFormat() { return $this->mDateFormat; }
- function getEditSection() { return $this->mEditSection; }
- function getEditSectionOnRightClick() { return $this->mEditSectionOnRightClick; }
- function getNumberHeadings() { return $this->mNumberHeadings; }
- function getShowToc() { return $this->mShowToc; }
-
- function setUseTeX( $x ) { return wfSetVar( $this->mUseTeX, $x ); }
- function setUseCategoryMagic( $x ) { return wfSetVar( $this->mUseCategoryMagic, $x ); }
- function setUseDynamicDates( $x ) { return wfSetVar( $this->mUseDynamicDates, $x ); }
- function setInterwikiMagic( $x ) { return wfSetVar( $this->mInterwikiMagic, $x ); }
- function setAllowExternalImages( $x ) { return wfSetVar( $this->mAllowExternalImages, $x ); }
- function setSkin( $x ) { return wfSetRef( $this->mSkin, $x ); }
- function setDateFormat( $x ) { return wfSetVar( $this->mDateFormat, $x ); }
- function setEditSection( $x ) { return wfSetVar( $this->mEditSection, $x ); }
- function setEditSectionOnRightClick( $x ) { return wfSetVar( $this->mEditSectionOnRightClick, $x ); }
- function setNumberHeadings( $x ) { return wfSetVar( $this->mNumberHeadings, $x ); }
- function setShowToc( $x ) { return wfSetVar( $this->mShowToc, $x ); }
-
- /* static */ function newFromUser( &$user )
- {
+ function getUseTeX() { return $this->mUseTeX; }
+ function getUseCategoryMagic() { return $this->mUseCategoryMagic; }
+ function getUseDynamicDates() { return $this->mUseDynamicDates; }
+ function getInterwikiMagic() { return $this->mInterwikiMagic; }
+ function getAllowExternalImages() { return $this->mAllowExternalImages; }
+ function getSkin() { return $this->mSkin; }
+ function getDateFormat() { return $this->mDateFormat; }
+ function getEditSection() { return $this->mEditSection; }
+ function getEditSectionOnRightClick() { return $this->mEditSectionOnRightClick; }
+ function getNumberHeadings() { return $this->mNumberHeadings; }
+ function getShowToc() { return $this->mShowToc; }
+
+ function setUseTeX( $x ) { return wfSetVar( $this->mUseTeX, $x ); }
+ function setUseCategoryMagic( $x ) { return wfSetVar( $this->mUseCategoryMagic, $x ); }
+ function setUseDynamicDates( $x ) { return wfSetVar( $this->mUseDynamicDates, $x ); }
+ function setInterwikiMagic( $x ) { return wfSetVar( $this->mInterwikiMagic, $x ); }
+ function setAllowExternalImages( $x ) { return wfSetVar( $this->mAllowExternalImages, $x ); }
+ function setDateFormat( $x ) { return wfSetVar( $this->mDateFormat, $x ); }
+ function setEditSection( $x ) { return wfSetVar( $this->mEditSection, $x ); }
+ function setEditSectionOnRightClick( $x ) { return wfSetVar( $this->mEditSectionOnRightClick, $x ); }
+ function setNumberHeadings( $x ) { return wfSetVar( $this->mNumberHeadings, $x ); }
+ function setShowToc( $x ) { return wfSetVar( $this->mShowToc, $x ); }
+
+ function setSkin( &$x ) { $this->mSkin =& $x; }
+
+ /* static */ function newFromUser( &$user ) {
$popts = new ParserOptions;
$popts->initialiseFromUser( $user );
return $popts;
}
- function initialiseFromUser( &$userInput )
- {
+ function initialiseFromUser( &$userInput ) {
global $wgUseTeX, $wgUseCategoryMagic, $wgUseDynamicDates, $wgInterwikiMagic, $wgAllowExternalImages;
if ( !$userInput ) {
@@ -2212,11 +2300,11 @@ class ParserOptions
$this->mInterwikiMagic = $wgInterwikiMagic;
$this->mAllowExternalImages = $wgAllowExternalImages;
$this->mSkin =& $user->getSkin();
- $this->mDateFormat = $user->getOption( "date" );
- $this->mEditSection = $user->getOption( "editsection" );
- $this->mEditSectionOnRightClick = $user->getOption( "editsectiononrightclick" );
- $this->mNumberHeadings = $user->getOption( "numberheadings" );
- $this->mShowToc = $user->getOption( "showtoc" );
+ $this->mDateFormat = $user->getOption( 'date' );
+ $this->mEditSection = $user->getOption( 'editsection' );
+ $this->mEditSectionOnRightClick = $user->getOption( 'editsectiononrightclick' );
+ $this->mNumberHeadings = $user->getOption( 'numberheadings' );
+ $this->mShowToc = $user->getOption( 'showtoc' );
}
@@ -2229,4 +2317,16 @@ function wfBraceSubstitution( $matches )
return $wgCurParser->braceSubstitution( $matches );
}
+function wfArgSubstitution( $matches )
+{
+ global $wgCurParser;
+ return $wgCurParser->argSubstitution( $matches );
+}
+
+function wfVariableSubstitution( $matches )
+{
+ global $wgCurParser;
+ return $wgCurParser->variableSubstitution( $matches );
+}
+
?>
diff --git a/includes/ParserCache.php b/includes/ParserCache.php
index 70b994365caf..8634a3b7d657 100644
--- a/includes/ParserCache.php
+++ b/includes/ParserCache.php
@@ -2,67 +2,62 @@
class ParserCache
{
- function get( &$article, &$user ){
+ function getKey( &$article, &$user ) {
+ global $wgDBname;
$hash = $user->getPageRenderingHash();
- $pageid = intval( $id );
- $res = wfQuery("SELECT pc_data FROM parsercache WHERE pc_pageid = {$pageid} ".
- " AND pc_prefhash = '{$hash}' AND pc_expire > NOW()", DB_WRITE);
- $row = wfFetchObject ( $res );
- if( $row ){
- $retVal = unserialize( gzuncompress($row->pc_data) );
- wfProfileOut( $fname );
- } else {
- $retVal = false;
- }
- return $retVal;
+ $pageid = intval( $article->getID() );
+ $key = "$wgDBname:pcache:idhash:$pageid-$hash";
+ return $key;
}
+
+ function get( &$article, &$user ) {
+ global $wgMemc, $wgCacheEpoch;
+ $fname = "ParserCache::get";
+ wfProfileIn( $fname );
- function save( $parserOutput, &$article, &$user ){
$hash = $user->getPageRenderingHash();
$pageid = intval( $article->getID() );
- $title = wfStrencode( $article->mTitle->getPrefixedDBKey() );
- $ser = addslashes( gzcompress( serialize( $parserOutput ) ) );
- if( $parserOutput->containsOldMagic() ){
- $expire = "1 HOUR";
+ $key = $this->getKey( $article, $user );
+ wfDebug( "Trying parser cache $key\n" );
+ $value = $wgMemc->get( $key );
+ if ( $value ) {
+ wfDebug( "Found.\n" );
+ # Delete if article has changed since the cache was made
+ $canCache = $article->checkTouched();
+ $cacheTime = $value->getCacheTime();
+ $touched = $article->mTouched;
+ if ( !$canCache || $value->getCacheTime() <= $touched || $cacheTime < $wgCacheEpoch ) {
+ if ( !$canCache ) {
+ wfDebug( "Invalid cached redirect, touched $touched, epoch $wgCacheEpoch, cached $cacheTime\n" );
+ } else {
+ wfDebug( "Key expired, touched $touched, epoch $wgCacheEpoch, cached $cacheTime\n" );
+ }
+ $wgMemc->delete( $key );
+ $value = false;
+ }
} else {
- $expire = "7 DAY";
+ $value = false;
}
- wfQuery("REPLACE INTO parsercache (pc_prefhash,pc_pageid,pc_title,pc_data, pc_expire) ".
- "VALUES('{$hash}', {$pageid}, '{$title}', '{$ser}', ".
- "DATE_ADD(NOW(), INTERVAL {$expire}))", DB_WRITE);
-
- if( rand() % 50 == 0 ){ // more efficient to just do it sometimes
- $this->purge();
- }
+ wfProfileOut( $fname );
+ return $value;
}
- function purge(){
- wfQuery("DELETE FROM parsercache WHERE pc_expire < NOW() LIMIT 250", DB_WRITE);
- }
+ function save( $parserOutput, &$article, &$user ){
+ global $wgMemc;
- function clearLinksTo( $pid ){
- $pid = intval( $pid );
- wfQuery("DELETE parsercache FROM parsercache,links ".
- "WHERE pc_pageid=links.l_from AND l_to={$pid}", DB_WRITE);
- wfQuery("DELETE FROM parsercache WHERE pc_pageid='{$pid}'", DB_WRITE);
- }
+ $key = $this->getKey( $article, $user );
+ $now = wfTimestampNow();
+ $parserOutput->setCacheTime( $now );
+ $parserOutput->mText .= "\n<!-- Saved in parser cache with key $key and timestamp $now -->\n";
- # $title is a prefixed db title, for example like Title->getPrefixedDBkey() returns.
- function clearBrokenLinksTo( $title ){
- $title = wfStrencode( $title );
- wfQuery("DELETE parsercache FROM parsercache,brokenlinks ".
- "WHERE pc_pageid=bl_from AND bl_to='{$title}'", DB_WRITE);
- }
-
- # $pid is a page id
- function clearPage( $pid, $namespace ){
- $pid = intval( $pid );
- if( $namespace == NS_MEDIAWIKI ){
- $this->clearLinksTo( $pid );
+ if( $parserOutput->containsOldMagic() ){
+ $expire = 3600; # 1 hour
} else {
- wfQuery("DELETE FROM parsercache WHERE pc_pageid='{$pid}'", DB_WRITE);
+ $expire = 86400; # 1 day
}
+
+ $wgMemc->set( $key, $parserOutput, $expire );
}
}
diff --git a/includes/Profiling.php b/includes/Profiling.php
index 392ca38f1247..ed58bf08d80a 100755
--- a/includes/Profiling.php
+++ b/includes/Profiling.php
@@ -82,6 +82,7 @@ class Profiler
if( !count( $this->mStack ) ) {
return "No profiling output\n";
}
+ $this->close();
$width = 125;
$format = "%-" . ($width - 28) . "s %6d %6.3f %6.3f %6.3f%%\n";
$titleFormat = "%-" . ($width - 28) . "s %9s %9s %9s %9s\n";
@@ -173,5 +174,4 @@ class Profiler
$wgProfiler = new Profiler();
$wgProfiler->profileIn( "-total" );
-
?>
diff --git a/includes/QueryPage.php b/includes/QueryPage.php
index 6ffd11662326..43804cee26e8 100644
--- a/includes/QueryPage.php
+++ b/includes/QueryPage.php
@@ -37,7 +37,7 @@ class QueryPage {
function getOrderLimit( $offset, $limit ) {
return " ORDER BY value " .
($this->sortDescending() ? "DESC" : "")
- . " LIMIT {$offset}, {$limit}";
+ . wfLimitResult($limit,$offset);
}
# Is this query expensive (for some definition of expensive)? Then we
diff --git a/includes/RawPage.php b/includes/RawPage.php
index b218612a9637..4116f005667c 100644
--- a/includes/RawPage.php
+++ b/includes/RawPage.php
@@ -8,36 +8,74 @@
class RawPage {
function RawPage( $article ) {
- global $wgRequest, $wgInputEncoding;
+ global $wgRequest, $wgInputEncoding, $wgSquidMaxage;
$allowedCTypes = array('text/x-wiki', 'text/javascript', 'text/css', 'application/x-zope-edit');
$this->mArticle =& $article;
$this->mTitle =& $article->mTitle;
+
$ctype = $wgRequest->getText( 'ctype' );
+ $charset = $wgRequest->getText( 'charset' );
+ $smaxage = $wgRequest->getText( 'smaxage' );
+ $maxage = $wgRequest->getText( 'maxage' );
+ $this->mOldId = $wgRequest->getInt( 'oldid' );
+ # special case for 'generated' raw things: user css/js
+ $gen = $wgRequest->getText( 'gen' );
+ if($gen == 'css') {
+ $this->mGen = $gen;
+ if($smaxage == '') $smaxage = $wgSquidMaxage;
+ if($ctype == '') $ctype = 'text/css';
+ } else if ($gen == 'js') {
+ $this->mGen = $gen;
+ if($smaxage == '') $smaxage = $wgSquidMaxage;
+ if($ctype == '') $ctype = 'text/javascript';
+ } else {
+ $this->mGen = false;
+ }
+ $this->mCharset = !empty($charset) ? $charset : $wgInputEncoding;
+ $this->mSmaxage = ($smaxage != '') ? $smaxage : 0;
+ $this->mMaxage = ($maxage != '') ? $maxage : 86400;
if(empty($ctype) or !in_array($ctype, $allowedCTypes)) {
$this->mContentType = 'text/x-wiki';
} else {
$this->mContentType = $ctype;
}
-
- $charset = $wgRequest->getText( 'charset' );
- $this->mCharset = !empty($charset) ? $charset : $wgInputEncoding;
- $this->mOldId = $wgRequest->getInt( 'oldid' );
}
function view() {
+ global $wgUser, $wgOut;
header( "Content-type: ".$this->mContentType.'; charset='.$this->mCharset );
# allow the client to cache this for 24 hours
- header( 'Cache-Control: s-maxage=0, max-age=86400' );
- echo $this->getrawtext();
+ header( 'Cache-Control: s-maxage='.$this->mSmaxage.', max-age='.$this->mMaxage );
+ if($this->mGen) {
+ $sk = $wgUser->getSkin();
+ $sk->initPage($wgOut);
+ if($this->mGen == 'css') {
+ echo $sk->getUserStylesheet();
+ } else if($this->mGen == 'js') {
+ echo $sk->getUserJs();
+ }
+ } else {
+ echo $this->getrawtext();
+ }
wfAbruptExit();
}
function getrawtext () {
- global $wgInputEncoding, $wgLang;
+ global $wgInputEncoding, $wgLang, $wgIsPg;
if( !$this->mTitle ) return '';
$t = wfStrencode( $this->mTitle->getDBKey() );
$ns = $this->mTitle->getNamespace();
+ # special case
+ if($ns == NS_MEDIAWIKI) {
+ $rawtext = wfMsg($t);
+ if($wgInputEncoding != $this->mCharset)
+ $rawtext = $wgLang->iconv( $wgInputEncoding, $this->mCharset, $rawtext );
+ return $rawtext;
+ }
+ # else get it from the DB
if(!empty($this->mOldId)) {
- $sql = "SELECT old_text as text,old_timestamp as timestamp,old_user as user,old_flags as flags FROM old " .
+ $oldtable=$wgIsPg?'"old"':'old';
+ $sql = "SELECT old_text AS text,old_timestamp AS timestamp,".
+ "old_user AS user,old_flags AS flags FROM $oldtable " .
"WHERE old_id={$this->mOldId}";
} else {
$sql = "SELECT cur_id as id,cur_timestamp as timestamp,cur_user as user,cur_user_text as user_text," .
diff --git a/includes/RecentChange.php b/includes/RecentChange.php
index fb385bca24b1..793cb6b11b5c 100644
--- a/includes/RecentChange.php
+++ b/includes/RecentChange.php
@@ -21,6 +21,7 @@ mAttributes:
rc_this_oldid old_id associated with this entry (or zero)
rc_last_oldid old_id associated with the entry before this one (or zero)
rc_bot is bot, hidden
+ rc_ip IP address of the user in dotted quad notation
rc_new obsolete, use rc_type==RC_NEW
mExtra:
@@ -82,7 +83,7 @@ class RecentChange
# Writes the data in this object to the database
function save()
{
- global $wgUseRCQueue, $wgRCQueueID, $wgLocalInterwiki;
+ global $wgUseRCQueue, $wgRCQueueID, $wgLocalInterwiki, $wgPutIPinRC;
$fname = "RecentChange::save";
if ( !is_array($this->mExtra) ) {
@@ -90,6 +91,10 @@ class RecentChange
}
$this->mExtra['lang'] = $wgLocalInterwiki;
+ if ( !$wgPutIPinRC ) {
+ $this->mAttribs['rc_ip'] = '';
+ }
+
# Insert new row
wfInsertArray( "recentchanges", $this->mAttribs, $fname );
@@ -126,12 +131,17 @@ class RecentChange
# Makes an entry in the database corresponding to an edit
/*static*/ function notifyEdit( $timestamp, &$title, $minor, &$user, $comment,
- $oldId, $lastTimestamp, $bot = "default" )
+ $oldId, $lastTimestamp, $bot = "default", $ip = '' )
{
if ( $bot == "default " ) {
$bot = $user->isBot();
}
+ if ( !$ip ) {
+ global $wgIP;
+ $ip = empty( $wgIP ) ? '' : $wgIP;
+ }
+
$rc = new RecentChange;
$rc->mAttribs = array(
'rc_timestamp' => $timestamp,
@@ -149,6 +159,7 @@ class RecentChange
'rc_bot' => $bot ? 1 : 0,
'rc_moved_to_ns' => 0,
'rc_moved_to_title' => '',
+ 'rc_ip' => $ip,
'rc_new' => 0 # obsolete
);
@@ -161,28 +172,34 @@ class RecentChange
# Makes an entry in the database corresponding to page creation
# Note: the title object must be loaded with the new id using resetArticleID()
- /*static*/ function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot = "default" )
+ /*static*/ function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot = "default", $ip='' )
{
+ if ( !$ip ) {
+ global $wgIP;
+ $ip = empty( $wgIP ) ? '' : $wgIP;
+ }
if ( $bot == "default" ) {
$bot = $user->isBot();
}
+
$rc = new RecentChange;
$rc->mAttribs = array(
- 'rc_timestamp' => $timestamp,
- 'rc_cur_time' => $timestamp,
- 'rc_namespace' => $title->getNamespace(),
- 'rc_title' => $title->getDBkey(),
- 'rc_type' => RC_NEW,
- 'rc_minor' => $minor ? 1 : 0,
- 'rc_cur_id' => $title->getArticleID(),
- 'rc_user' => $user->getID(),
- 'rc_user_text' => $user->getName(),
- 'rc_comment' => $comment,
- 'rc_this_oldid' => 0,
- 'rc_last_oldid' => 0,
- 'rc_bot' => $bot ? 1 : 0,
- 'rc_moved_to_ns' => 0,
- 'rc_moved_to_title' => '',
+ 'rc_timestamp' => $timestamp,
+ 'rc_cur_time' => $timestamp,
+ 'rc_namespace' => $title->getNamespace(),
+ 'rc_title' => $title->getDBkey(),
+ 'rc_type' => RC_NEW,
+ 'rc_minor' => $minor ? 1 : 0,
+ 'rc_cur_id' => $title->getArticleID(),
+ 'rc_user' => $user->getID(),
+ 'rc_user_text' => $user->getName(),
+ 'rc_comment' => $comment,
+ 'rc_this_oldid' => 0,
+ 'rc_last_oldid' => 0,
+ 'rc_bot' => $bot ? 1 : 0,
+ 'rc_moved_to_ns' => 0,
+ 'rc_moved_to_title' => '',
+ 'rc_ip' => $ip,
'rc_new' => 1 # obsolete
);
@@ -194,8 +211,12 @@ class RecentChange
}
# Makes an entry in the database corresponding to a rename
- /*static*/ function notifyMove( $timestamp, &$oldTitle, &$newTitle, &$user, $comment )
+ /*static*/ function notifyMove( $timestamp, &$oldTitle, &$newTitle, &$user, $comment, $ip='' )
{
+ if ( !$ip ) {
+ global $wgIP;
+ $ip = empty( $wgIP ) ? '' : $wgIP;
+ }
$rc = new RecentChange;
$rc->mAttribs = array(
'rc_timestamp' => $timestamp,
@@ -213,6 +234,7 @@ class RecentChange
'rc_bot' => $user->isBot() ? 1 : 0,
'rc_moved_to_ns' => $newTitle->getNamespace(),
'rc_moved_to_title' => $newTitle->getDBkey(),
+ 'rc_ip' => $ip,
'rc_new' => 0 # obsolete
);
@@ -226,8 +248,12 @@ class RecentChange
# A log entry is different to an edit in that previous revisions are
# not kept
- /*static*/ function notifyLog( $timestamp, &$title, &$user, $comment )
+ /*static*/ function notifyLog( $timestamp, &$title, &$user, $comment, $ip='' )
{
+ if ( !$ip ) {
+ global $wgIP;
+ $ip = empty( $wgIP ) ? '' : $wgIP;
+ }
$rc = new RecentChange;
$rc->mAttribs = array(
'rc_timestamp' => $timestamp,
@@ -245,6 +271,7 @@ class RecentChange
'rc_bot' => 0,
'rc_moved_to_ns' => 0,
'rc_moved_to_title' => '',
+ 'rc_ip' => $ip,
'rc_new' => 0 # obsolete
);
$rc->mExtra = array(
@@ -280,6 +307,7 @@ class RecentChange
'rc_bot' => 0,
'rc_moved_to_ns' => 0,
'rc_moved_to_title' => '',
+ 'rc_ip' => '',
'rc_new' => $row->cur_is_new # obsolete
);
diff --git a/includes/SearchEngine.php b/includes/SearchEngine.php
index 19a081b302f7..53d9e691591b 100644
--- a/includes/SearchEngine.php
+++ b/includes/SearchEngine.php
@@ -296,6 +296,8 @@ class SearchEngine {
# Use cleaner boolean search if available
return $this->parseQuery4();
}
+ # on non mysql4 database: get list of words we don't want to search for
+ require_once( "FulltextStoplist.php" );
$lc = SearchEngine::legalSearchChars() . "()";
$q = preg_replace( "/([()])/", " \\1 ", $this->mUsertext );
@@ -485,8 +487,13 @@ class SearchEngine {
$wgOut->redirect( $t->getFullURL( "action=edit" ) );
return;
}
-
- $wgOut->addHTML( "<p>" . wfMsg("nogomatch", $t->escapeLocalURL( "action=edit" ) ) . "</p>\n" );
+
+ if( $t ) {
+ $editurl = $t->escapeLocalURL( "action=edit" );
+ } else {
+ $editurl = ""; # ??
+ }
+ $wgOut->addHTML( "<p>" . wfMsg("nogomatch", $editurl ) . "</p>\n" );
# Try a fuzzy title search
$anyhit = false;
diff --git a/includes/SearchUpdate.php b/includes/SearchUpdate.php
index 08f66eab88ed..adad91bde47b 100644
--- a/includes/SearchUpdate.php
+++ b/includes/SearchUpdate.php
@@ -1,4 +1,5 @@
<?php
+# $Id$
# See deferred.doc
class SearchUpdate {
@@ -24,7 +25,7 @@ class SearchUpdate {
function doUpdate()
{
- global $wgDBminWordLen, $wgLang, $wgDisableSearchUpdate;
+ global $wgDBminWordLen, $wgLang, $wgDisableSearchUpdate, $wgIsMySQL;
if( $wgDisableSearchUpdate || !$this->mId ) {
return false;
@@ -32,7 +33,8 @@ class SearchUpdate {
$lc = SearchEngine::legalSearchChars() . "&#;";
if( $this->mText == false ) {
# Just update the title
- $sql = "UPDATE LOW_PRIORITY searchindex SET si_title='" .
+ $lowpri=$wgIsMySQL?"LOW_PRIORITY":"";
+ $sql = "UPDATE $lowpri searchindex SET si_title='" .
wfStrencode( Title::indexTitle( $this->mNamespace, $this->mTitle ) ) .
"' WHERE si_page={$this->mId}";
wfQuery( $sql, DB_WRITE, "SearchUpdate::doUpdate" );
diff --git a/includes/Setup.php b/includes/Setup.php
index 7a668080fa0a..3268788f73bd 100644
--- a/includes/Setup.php
+++ b/includes/Setup.php
@@ -11,72 +11,73 @@ if( !isset( $wgProfiling ) )
$wgProfiling = false;
if ( $wgProfiling and (0 == rand() % $wgProfileSampleRate ) ) {
- require_once( "Profiling.php" );
+ require_once( 'Profiling.php' );
} else {
- function wfProfileIn( $fn ) {}
- function wfProfileOut( $fn = "" ) {}
+ function wfProfileIn( $fn = '' ) {}
+ function wfProfileOut( $fn = '' ) {}
function wfGetProfilingOutput( $s, $e ) {}
function wfProfileClose() {}
}
/* collect the originating ips */
-if( $wgUseSquid && isset( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) {
+if( $wgUseSquid && isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
# If the web server is behind a reverse proxy, we need to find
# out where our requests are really coming from.
- $hopips = array_map( "trim", explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ) );
+ $hopips = array_map( 'trim', explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ) );
while(in_array(trim(end($hopips)), $wgSquidServers)){
array_pop($hopips);
}
$wgIP = trim(end($hopips));
} else {
- $wgIP = getenv("REMOTE_ADDR");
+ $wgIP = getenv('REMOTE_ADDR');
}
-$fname = "Setup.php";
+$fname = 'Setup.php';
wfProfileIn( $fname );
global $wgUseDynamicDates;
-wfProfileIn( "$fname-includes" );
-
-require_once( "GlobalFunctions.php" );
-require_once( "Namespace.php" );
-require_once( "RecentChange.php" );
-require_once( "Skin.php" );
-require_once( "OutputPage.php" );
-require_once( "User.php" );
-require_once( "LinkCache.php" );
-require_once( "Title.php" );
-require_once( "Article.php" );
-require_once( "MagicWord.php" );
-require_once( "memcached-client.php" );
-require_once( "Block.php" );
-require_once( "SearchEngine.php" );
-require_once( "DifferenceEngine.php" );
-require_once( "MessageCache.php" );
-require_once( "BlockCache.php" );
-require_once( "Parser.php" );
-require_once( "ParserCache.php" );
-require_once( "WebRequest.php" );
-require_once( "SpecialPage.php" );
+wfProfileIn( $fname.'-includes' );
+
+require_once( 'GlobalFunctions.php' );
+require_once( 'Namespace.php' );
+require_once( 'RecentChange.php' );
+require_once( 'Skin.php' );
+require_once( 'OutputPage.php' );
+require_once( 'User.php' );
+require_once( 'LinkCache.php' );
+require_once( 'Title.php' );
+require_once( 'Article.php' );
+require_once( 'MagicWord.php' );
+require_once( 'memcached-client.php' );
+require_once( 'Block.php' );
+require_once( 'SearchEngine.php' );
+require_once( 'DifferenceEngine.php' );
+require_once( 'MessageCache.php' );
+require_once( 'BlockCache.php' );
+require_once( 'Parser.php' );
+require_once( 'ParserCache.php' );
+require_once( 'WebRequest.php' );
+require_once( 'LoadBalancer.php' );
$wgRequest = new WebRequest();
-wfProfileOut( "$fname-includes" );
-wfProfileIn( "$fname-memcached" );
+wfProfileOut( $fname.'-includes' );
+wfProfileIn( $fname.'-memcached' );
global $wgUser, $wgLang, $wgOut, $wgTitle;
global $wgArticle, $wgDeferredUpdateList, $wgLinkCache;
global $wgMemc, $wgMagicWords, $wgMwRedir, $wgDebugLogFile;
global $wgMessageCache, $wgUseMemCached, $wgUseDatabaseMessages;
global $wgMsgCacheExpiry, $wgDBname, $wgCommandLineMode;
-global $wgBlockCache, $wgParserCache, $wgParser;
+global $wgBlockCache, $wgParserCache, $wgParser, $wgDBConnections;
+global $wgLoadBalancer, $wgDBservers, $wgDBloads, $wgDBuser, $wgDBpassword;
# Useful debug output
if ( $wgCommandLineMode ) {
# wfDebug( '"' . implode( '" "', $argv ) . '"' );
-} elseif ( function_exists( "getallheaders" ) ) {
+} elseif ( function_exists( 'getallheaders' ) ) {
wfDebug( "\nStart request\n" );
wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" );
$headers = getallheaders();
@@ -126,7 +127,7 @@ if( $wgUseMemCached ) {
# Test it to see if it's working
# This is necessary because otherwise wfMsg would be extremely inefficient
- if ( !$wgMemc->set( "test", "", 0 ) ) {
+ if ( !$wgMemc->set( 'test', '', 0 ) ) {
wfDebug( "Memcached failed setup test - connection error?\n" );
$wgUseMemCached = false;
$wgMemc = new FakeMemCachedClient();
@@ -137,43 +138,80 @@ if( $wgUseMemCached ) {
# Give the message cache a separate cache in the DB.
# This is a speedup over separately querying every message used
- require_once( "ObjectCache.php" );
- $messageMemc = new MediaWikiBagOStuff("objectcache");
+ require_once( 'ObjectCache.php' );
+ $messageMemc = new MediaWikiBagOStuff('objectcache');
}
-wfProfileOut( "$fname-memcached" );
-wfProfileIn( "$fname-misc" );
+wfProfileOut( $fname.'-memcached' );
+wfProfileIn( $fname.'-database' );
-require_once( "languages/Language.php" );
+if ( !$wgDBservers ) {
+ $wgDBservers = array( $wgDBserver );
+ $wgDBloads = array( 1 );
+}
+$wgLoadBalancer = LoadBalancer::newFromParams( $wgDBservers, $wgDBloads, $wgDBuser, $wgDBpassword, $wgDBname );
+$wgLoadBalancer->force(0);
+
+wfProfileOut( $fname.'-database' );
+wfProfileIn( $fname.'-language' );
+require_once( 'languages/Language.php' );
$wgMessageCache = new MessageCache;
-$wgLangClass = "Language" . ucfirst( $wgLanguageCode );
-if( ! class_exists( $wgLangClass ) || ($wgLanguageCode == "en" && strcasecmp( $wgInputEncoding, "utf-8" ) == 0 ) ) {
- require_once( "languages/LanguageUtf8.php" );
- $wgLangClass = "LanguageUtf8";
+$wgLangClass = 'Language' . ucfirst( $wgLanguageCode );
+if( ! class_exists( $wgLangClass ) || ($wgLanguageCode == 'en' && !$wgUseLatin1) ) {
+ # Default to English/UTF-8
+ require_once( 'languages/LanguageUtf8.php' );
+ $wgLangClass = 'LanguageUtf8';
}
$wgLang = new $wgLangClass();
if ( !is_object($wgLang) ) {
print "No language class ($wgLang)\N";
}
+
+if( $wgUseLatin1 && $wgLanguageCode != 'en' ) {
+ # For non-UTF-8 non-English.
+ require_once( 'languages/LanguageLatin1.php' );
+ $xxx = new LanguageLatin1( $wgLang );
+ unset( $wgLang );
+ $wgLang = $xxx;
+}
+wfProfileOut( $fname.'-language' );
+wfProfileIn( $fname.'-MessageCache' );
+
$wgMessageCache->initialise( $messageMemc, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgDBname );
+wfProfileOut( $fname.'-MessageCache' );
+wfProfileIn( $fname.'-OutputPage' );
+
$wgOut = new OutputPage();
wfDebug( "\n\n" );
+wfProfileOut( $fname.'-OutputPage' );
+wfProfileIn( $fname.'-DateFormatter' );
+
if ( $wgUseDynamicDates ) {
- require_once( "DateFormatter.php" );
+ require_once( 'DateFormatter.php' );
global $wgDateFormatter;
$wgDateFormatter = new DateFormatter;
}
-if( !$wgCommandLineMode && ( isset( $_COOKIE[ini_get("session.name")] ) || isset( $_COOKIE["{$wgDBname}Password"] ) ) ) {
+wfProfileOut( $fname.'-DateFormatter' );
+wfProfileIn( $fname.'-SetupSession' );
+
+if( !$wgCommandLineMode && ( isset( $_COOKIE[ini_get('session.name')] ) || isset( $_COOKIE[$wgDBname.'Password'] ) ) ) {
User::SetupSession();
}
+wfProfileOut( $fname.'-SetupSession' );
+wfProfileIn( $fname.'-BlockCache' );
+
$wgBlockCache = new BlockCache( true );
+
+wfProfileOut( $fname.'-BlockCache' );
+wfProfileIn( $fname.'-User' );
+
if( $wgCommandLineMode ) {
# Used for some maintenance scripts; user session cookies can screw things up
# when the database is in an in-between state.
@@ -181,6 +219,10 @@ if( $wgCommandLineMode ) {
} else {
$wgUser = User::loadFromSession();
}
+
+wfProfileOut( $fname.'-User' );
+wfProfileIn( $fname.'-misc' );
+
$wgDeferredUpdateList = array();
$wgLinkCache = new LinkCache();
$wgMagicWords = array();
@@ -188,10 +230,14 @@ $wgMwRedir =& MagicWord::get( MAG_REDIRECT );
$wgParserCache = new ParserCache();
$wgParser = new Parser();
$wgOut->setParserOptions( ParserOptions::newFromUser( $wgUser ) );
+$wgDBConnections = array();
-if ( !$wgAllowSysopQueries ) {
- SpecialPage::removePage( "Asksql" );
-}
+# Placeholders in case of DB error
+$wgTitle = Title::newFromText( wfMsg( 'badtitle' ) );
+$wgArticle = new Article($wgTitle);
+
+wfProfileOut( $fname.'-misc' );
+wfProfileIn( $fname.'-extensions' );
# Extension setup functions
# Entries should be added to this variable during the inclusion
@@ -201,7 +247,7 @@ foreach ( $wgExtensionFunctions as $func ) {
$func();
}
-wfProfileOut( "$fname-misc" );
+wfProfileOut( $fname.'-extensions' );
wfProfileOut( $fname );
diff --git a/includes/SiteConfiguration.php b/includes/SiteConfiguration.php
new file mode 100644
index 000000000000..aa0a6b56aa55
--- /dev/null
+++ b/includes/SiteConfiguration.php
@@ -0,0 +1,65 @@
+<?php
+
+# This file is used to configure the live Wikimedia wikis. The file that includes
+# it contains passwords and other sensitive data, and there's currently no public
+# equivalent.
+
+class SiteConfiguration {
+ var $suffixes, $wikis, $settings;
+ var $localDatabases;
+
+ function get( $setting, $wiki, $suffix, $params = array() ) {
+ if ( array_key_exists( $wiki, $this->settings[$setting] ) ) {
+ $retval = $this->settings[$setting][$wiki];
+ } elseif ( array_key_exists( $suffix, $this->settings[$setting] ) ) {
+ $retval = $this->settings[$setting][$suffix];
+ } elseif ( array_key_exists( "default", $this->settings[$setting] ) ) {
+ $retval = $this->settings[$setting]['default'];
+ } else {
+ $retval = NULL;
+ }
+ if ( !is_null( $retval ) && count( $params ) ) {
+ foreach ( $params as $key => $value ) {
+ $retval = str_replace( '$' . $key, $value, $retval );
+ }
+ }
+ return $retval;
+ }
+
+ function getBool( $setting, $wiki, $suffix ) {
+ return (bool)($this->get( $setting, $wiki, $suffix ));
+ }
+
+ function &getLocalDatabases() {
+ return $this->localDatabases();
+ }
+
+ function initialise() {
+ foreach ( $this->wikis as $db ) {
+ $this->localDatabases[$db] = $db;
+ }
+ }
+
+ function extractVar( $setting, $wiki, $suffix, &$var, $params ) {
+ $value = $this->get( $setting, $wiki, $suffix, $params );
+ if ( !is_null( $value ) ) {
+ $var = $value;
+ }
+ }
+
+ function extractGlobal( $setting, $wiki, $suffix, $params ) {
+ $value = $this->get( $setting, $wiki, $suffix, $params );
+ if ( !is_null( $value ) ) {
+ $GLOBALS[$setting] = $value;
+ }
+ }
+
+ function extractAllGlobals( $wiki, $suffix, $params ) {
+ foreach ( $this->settings as $varName => $setting ) {
+ $this->extractGlobal( $varName, $wiki, $suffix, $params );
+ }
+ }
+}
+
+
+?>
diff --git a/includes/SiteStatsUpdate.php b/includes/SiteStatsUpdate.php
index 4c4b32cde084..900956b6398d 100644
--- a/includes/SiteStatsUpdate.php
+++ b/includes/SiteStatsUpdate.php
@@ -1,4 +1,5 @@
<?php
+# $Id$
# See deferred.doc
class SiteStatsUpdate {
@@ -14,6 +15,7 @@ class SiteStatsUpdate {
function doUpdate()
{
+ global $wgIsMySQL;
$a = array();
if ( $this->mViews < 0 ) { $m = "-1"; }
@@ -30,8 +32,8 @@ class SiteStatsUpdate {
else if ( $this->mGood > 0 ) { $m = "+1"; }
else $m = "";
array_push( $a, "ss_good_articles=(ss_good_articles$m)" );
-
- $sql = "UPDATE LOW_PRIORITY site_stats SET " . implode ( ",", $a ) .
+ $lowpri=$wgIsMySQL?"LOW_PRIORITY":"";
+ $sql = "UPDATE $lowpri site_stats SET " . implode ( ",", $a ) .
" WHERE ss_row_id=1";
wfQuery( $sql, DB_WRITE, "SiteStatsUpdate::doUpdate" );
}
diff --git a/includes/Skin.php b/includes/Skin.php
index 91faf5b5d590..6cec9574ccb5 100644
--- a/includes/Skin.php
+++ b/includes/Skin.php
@@ -1,7 +1,7 @@
<?php
-require_once( "Feed.php" );
-require_once( "Image.php" );
+require_once( 'Feed.php' );
+require_once( 'Image.php' );
# See skin.doc
@@ -10,19 +10,20 @@ require_once( "Image.php" );
# Language class has internationalized names
#
/* private */ $wgValidSkinNames = array(
- 'standard' => "Standard",
- 'nostalgia' => "Nostalgia",
- 'cologneblue' => "CologneBlue"
+ 'standard' => 'Standard',
+ 'nostalgia' => 'Nostalgia',
+ 'cologneblue' => 'CologneBlue'
);
if( $wgUsePHPTal ) {
- #$wgValidSkinNames[] = "PHPTal";
- #$wgValidSkinNames['davinci'] = "DaVinci";
- #$wgValidSkinNames['mono'] = "Mono";
- $wgValidSkinNames['monobook'] = "MonoBook";
- #$wgValidSkinNames['monobookminimal'] = "MonoBookMinimal";
+ #$wgValidSkinNames[] = 'PHPTal';
+ #$wgValidSkinNames['davinci'] = 'DaVinci';
+ #$wgValidSkinNames['mono'] = 'Mono';
+ $wgValidSkinNames['monobook'] = 'MonoBook';
+ $wgValidSkinNames['myskin'] = 'MySkin';
+ #$wgValidSkinNames['monobookminimal'] = 'MonoBookMinimal';
}
-require_once( "RecentChange.php" );
+require_once( 'RecentChange.php' );
class RCCacheEntry extends RecentChange
{
@@ -49,7 +50,7 @@ class Skin {
function Skin()
{
- $this->linktrail = wfMsg("linktrail");
+ $this->linktrail = wfMsg('linktrail');
}
function getSkinNames()
@@ -60,7 +61,10 @@ class Skin {
function getStylesheet()
{
- return "wikistandard.css";
+ return 'wikistandard.css';
+ }
+ function getSkinName() {
+ return "standard";
}
function qbSetting()
@@ -68,17 +72,17 @@ class Skin {
global $wgOut, $wgUser;
if ( $wgOut->isQuickbarSuppressed() ) { return 0; }
- $q = $wgUser->getOption( "quickbar" );
- if ( "" == $q ) { $q = 0; }
+ $q = $wgUser->getOption( 'quickbar' );
+ if ( '' == $q ) { $q = 0; }
return $q;
}
function initPage( &$out )
{
- $fname = "Skin::initPage";
+ $fname = 'Skin::initPage';
wfProfileIn( $fname );
- $out->addLink( array( "rel" => "shortcut icon", "href" => "/favicon.ico" ) );
+ $out->addLink( array( 'rel' => 'shortcut icon', 'href' => '/favicon.ico' ) );
$this->addMetadataLinks($out);
@@ -95,16 +99,16 @@ class Skin {
$out->addMetadataLink( array(
'title' => 'Creative Commons',
'type' => 'application/rdf+xml',
- 'href' => $wgTitle->getLocalURL( "action=creativecommons") ) );
+ 'href' => $wgTitle->getLocalURL( 'action=creativecommons') ) );
}
if( $wgEnableDublinCoreRdf ) {
$out->addMetadataLink( array(
'title' => 'Dublin Core',
'type' => 'application/rdf+xml',
- 'href' => $wgTitle->getLocalURL( "action=dublincore" ) ) );
+ 'href' => $wgTitle->getLocalURL( 'action=dublincore' ) ) );
}
}
- $copyright = "";
+ $copyright = '';
if( $wgRightsPage ) {
$copy = Title::newFromText( $wgRightsPage );
if( $copy ) {
@@ -116,15 +120,15 @@ class Skin {
}
if( $copyright ) {
$out->addLink( array(
- "rel" => "copyright",
- "href" => $copyright ) );
+ 'rel' => 'copyright',
+ 'href' => $copyright ) );
}
}
function outputPage( &$out ) {
global $wgDebugComments;
- wfProfileIn( "Skin::outputPage" );
+ wfProfileIn( 'Skin::outputPage' );
$this->initPage( $out );
$out->out( $out->headElement() );
@@ -151,20 +155,45 @@ class Skin {
}
function getHeadScripts() {
- global $wgStylePath;
+ global $wgStylePath, $wgUser, $wgLang;
$r = "<script type=\"text/javascript\" src=\"{$wgStylePath}/wikibits.js\"></script>\n";
+ if( $wgUser->getID() != 0 ) { # logged in
+ $userpage = $wgLang->getNsText( Namespace::getUser() ) . ":" . $wgUser->getName();
+ $userjs = htmlspecialchars($this->makeUrl($userpage.'/'.$this->getSkinName().'.js', 'action=raw&ctype=text/javascript'));
+ $r .= '<script type="text/javascript" src="'.$userjs."\"></script>\n";
+ }
return $r;
}
+ # get the user/site-specific stylesheet, SkinPHPTal called from RawPage.php (settings are cached that way)
+ function getUserStylesheet() {
+ global $wgOut, $wgStylePath, $wgLang, $wgUser, $wgRequest, $wgTitle;
+ $sheet = $this->getStylesheet();
+ $action = $wgRequest->getText('action');
+ $s = "@import \"$wgStylePath/$sheet\";\n";
+ if($wgLang->isRTL()) $s .= "@import \"$wgStylePath/common_rtl.css\";\n";
+ if( $wgUser->getID() != 0 ) { # logged in
+ if($wgTitle->isCssSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) {
+ $s .= $wgRequest->getText('wpTextbox1');
+ } else {
+ $userpage = $wgLang->getNsText( Namespace::getUser() ) . ":" . $wgUser->getName();
+ $s.= '@import "'.$this->makeUrl($userpage.'/'.$this->getSkinName().'.css', 'action=raw&ctype=text/css').'";'."\n";
+ }
+ }
+ $s .= $this->doGetUserStyles();
+ return $s."\n";
+ }
+ # placeholder, returns generated js in monobook
+ function getUserJs() {
+ return;
+ }
+
function getUserStyles()
{
global $wgOut, $wgStylePath, $wgLang;
- $sheet = $this->getStylesheet();
$s = "<style type='text/css'>\n";
$s .= "/*/*/\n"; # <-- Hide the styles from Netscape 4 without hiding them from IE/Mac
- $s .= "@import url(\"$wgStylePath/$sheet\");\n";
- if($wgLang->isRTL()) $s .= "@import url(\"$wgStylePath/common_rtl.css\");\n";
- $s .= $this->doGetUserStyles();
+ $s .= $this->getUserStylesheet();
$s .= "/* */\n";
$s .= "</style>\n";
return $s;
@@ -174,19 +203,19 @@ class Skin {
{
global $wgUser;
- $s = "";
- if ( 1 == $wgUser->getOption( "underline" ) ) {
+ $s = '';
+ if ( 1 == $wgUser->getOption( 'underline' ) ) {
# Don't override browser settings
} else {
# CHECK MERGE @@@
# Force no underline
- $s .= "a { " .
+ $s .= 'a { ' .
"text-decoration: none; }\n";
}
- if ( 1 == $wgUser->getOption( "highlightbroken" ) ) {
+ if ( 1 == $wgUser->getOption( 'highlightbroken' ) ) {
$s .= "a.new, #quickbar a.new { color: #CC2200; }\n";
}
- if ( 1 == $wgUser->getOption( "justify" ) ) {
+ if ( 1 == $wgUser->getOption( 'justify' ) ) {
$s .= "#article { text-align: justify; }\n";
}
return $s;
@@ -199,13 +228,13 @@ class Skin {
extract( $wgRequest->getValues( 'oldid', 'redirect', 'diff' ) );
if ( 0 != $wgTitle->getNamespace() ) {
- $a = array( "bgcolor" => "#ffffec" );
+ $a = array( 'bgcolor' => '#ffffec' );
}
- else $a = array( "bgcolor" => "#FFFFFF" );
- if($wgOut->isArticle() && $wgUser->getOption("editondblclick") &&
+ else $a = array( 'bgcolor' => '#FFFFFF' );
+ if($wgOut->isArticle() && $wgUser->getOption('editondblclick') &&
(!$wgTitle->isProtected() || $wgUser->isSysop()) ) {
- $t = wfMsg( "editthispage" );
- $oid = $red = "";
+ $t = wfMsg( 'editthispage' );
+ $oid = $red = '';
if ( !empty($redirect) ) {
$red = "&redirect={$redirect}";
}
@@ -213,26 +242,26 @@ class Skin {
$oid = "&oldid={$oldid}";
}
$s = $wgTitle->getFullURL( "action=edit{$oid}{$red}" );
- $s = "document.location = \"" .$s ."\";";
- $a += array ("ondblclick" => $s);
+ $s = 'document.location = "' .$s .'";';
+ $a += array ('ondblclick' => $s);
}
$a['onload'] = $wgOut->getOnloadHandler();
return $a;
}
- function getExternalLinkAttributes( $link, $text )
+ function getExternalLinkAttributes( $link, $text, $class='' )
{
global $wgUser, $wgOut, $wgLang;
$link = urldecode( $link );
$link = $wgLang->checkTitleEncoding( $link );
- $link = str_replace( "_", " ", $link );
+ $link = str_replace( '_', ' ', $link );
$link = wfEscapeHTML( $link );
- $r = " class='external'";
+ $r = ($class != '') ? " class='$class'" : " class='external'";
- if ( 1 == $wgUser->getOption( "hover" ) ) {
+ if ( 1 == $wgUser->getOption( 'hover' ) ) {
$r .= " title=\"{$link}\"";
}
return $r;
@@ -243,18 +272,18 @@ class Skin {
global $wgUser, $wgOut;
$link = urldecode( $link );
- $link = str_replace( "_", " ", $link );
+ $link = str_replace( '_', ' ', $link );
$link = wfEscapeHTML( $link );
- if ( $broken == "stub" ) {
- $r = " class='stub'";
- } else if ( $broken == "yes" ) {
- $r = " class='new'";
+ if ( $broken == 'stub' ) {
+ $r = ' class="stub"';
+ } else if ( $broken == 'yes' ) {
+ $r = ' class="new"';
} else {
- $r = "";
+ $r = '';
}
- if ( 1 == $wgUser->getOption( "hover" ) ) {
+ if ( 1 == $wgUser->getOption( 'hover' ) ) {
$r .= " title=\"{$link}\"";
}
return $r;
@@ -264,15 +293,15 @@ class Skin {
{
global $wgUser, $wgOut;
- if ( $broken == "stub" ) {
- $r = " class='stub'";
- } else if ( $broken == "yes" ) {
- $r = " class='new'";
+ if ( $broken == 'stub' ) {
+ $r = ' class="stub"';
+ } else if ( $broken == 'yes' ) {
+ $r = ' class="new"';
} else {
- $r = "";
+ $r = '';
}
- if ( 1 == $wgUser->getOption( "hover" ) ) {
+ if ( 1 == $wgUser->getOption( 'hover' ) ) {
$r .= ' title ="' . $nt->getEscapedText() . '"';
}
return $r;
@@ -292,9 +321,9 @@ class Skin {
global $wgUser, $wgOut, $wgSiteNotice;
if( $wgSiteNotice ) {
- $note = "\n<div id='notice' style='font-weight: bold; color: red; text-align: center'>$wgSiteNotice</div>\n";
+ $note = "\n<div id='siteNotice'>$wgSiteNotice</div>\n";
} else {
- $note = "";
+ $note = '';
}
return $this->doBeforeContent() . $note;
}
@@ -302,19 +331,19 @@ class Skin {
function doBeforeContent()
{
global $wgUser, $wgOut, $wgTitle, $wgLang;
- $fname = "Skin::doBeforeContent";
+ $fname = 'Skin::doBeforeContent';
wfProfileIn( $fname );
- $s = "";
+ $s = '';
$qb = $this->qbSetting();
if( $langlinks = $this->otherLanguages() ) {
$rows = 2;
- $borderhack = "";
+ $borderhack = '';
} else {
$rows = 1;
$langlinks = false;
- $borderhack = "class='top'";
+ $borderhack = 'class="top"';
}
$s .= "\n<div id='content'>\n<div id='topbar'>\n" .
@@ -326,11 +355,11 @@ class Skin {
if ( !$shove ) {
$s .= "<td class='top' align='left' valign='top' rowspan='{$rows}'>\n" .
- $this->logoText() . "</td>";
+ $this->logoText() . '</td>';
} elseif( $left ) {
$s .= $this->getQuickbarCompensator( $rows );
}
- $l = $wgLang->isRTL() ? "right" : "left";
+ $l = $wgLang->isRTL() ? 'right' : 'left';
$s .= "<td {$borderhack} align='$l' valign='top'>\n";
$s .= $this->topLinks() ;
@@ -358,18 +387,32 @@ class Skin {
return $s;
}
- function getCategories () {
+ function getCategoryLinks () {
global $wgOut, $wgTitle, $wgUser, $wgParser;
- global $wgUseCategoryMagic;
- if( !$wgUseCategoryMagic ) return "" ;
- if( count( $wgOut->mCategoryLinks ) == 0 ) return "";
- if( !$wgOut->isArticle() ) return "";
+ global $wgUseCategoryMagic, $wgUseCategoryBrowser, $wgLang;
+ if( !$wgUseCategoryMagic ) return '' ;
+ if( count( $wgOut->mCategoryLinks ) == 0 ) return '';
+ if( !$wgOut->isArticle() ) return '';
+
+ $t = implode ( ' | ' , $wgOut->mCategoryLinks ) ;
+ $s = $this->makeKnownLink( 'Special:Categories',
+ wfMsg( 'categories' ), 'article=' . urlencode( $wgTitle->getPrefixedDBkey() ) )
+ . ': ' . $t;
- $t = implode ( " | " , $wgOut->mCategoryLinks ) ;
- $s = $this->makeKnownLink( "Special:Categories",
- wfMsg( "categories" ), "article=" . urlencode( $wgTitle->getPrefixedDBkey() ) )
- . ": " . $t;
- return "<p class='catlinks'>$s</p>";
+ if($wgUseCategoryBrowser) {
+ $s .= '<br/><hr/>';
+ $catstack = array();
+ $s.= $wgTitle->getAllParentCategories($catstack);
+ }
+
+ return $s;
+ }
+
+ function getCategories() {
+ $catlinks=$this->getCategoryLinks();
+ if(!empty($catlinks)) {
+ return "<p class='catlinks'>{$catlinks}</p>";
+ }
}
function getQuickbarCompensator( $rows = 1 )
@@ -398,16 +441,16 @@ class Skin {
function doAfterContent()
{
global $wgUser, $wgOut, $wgLang;
- $fname = "Skin::doAfterContent";
+ $fname = 'Skin::doAfterContent';
wfProfileIn( $fname );
- wfProfileIn( "$fname-1" );
+ wfProfileIn( $fname.'-1' );
$s = "\n</div><br style=\"clear:both\" />\n";
$s .= "\n<div id='footer'>";
- $s .= "<table border='0' cellspacing='0'><tr>";
+ $s .= '<table border="0" cellspacing="0"><tr>';
- wfProfileOut( "$fname-1" );
- wfProfileIn( "$fname-2" );
+ wfProfileOut( $fname.'-1' );
+ wfProfileIn( $fname.'-2' );
$qb = $this->qbSetting();
$shove = ($qb != 0);
@@ -417,17 +460,17 @@ class Skin {
if ( $shove && $left ) { # Left
$s .= $this->getQuickbarCompensator();
}
- wfProfileOut( "$fname-2" );
- wfProfileIn( "$fname-3" );
- $l = $wgLang->isRTL() ? "right" : "left";
+ wfProfileOut( $fname.'-2' );
+ wfProfileIn( $fname.'-3' );
+ $l = $wgLang->isRTL() ? 'right' : 'left';
$s .= "<td class='bottom' align='$l' valign='top'>";
$s .= $this->bottomLinks();
$s .= "\n<br />" . $this->mainPageLink()
- . " | " . $this->aboutLink()
- . " | " . $this->specialLink( "recentchanges" )
- . " | " . $this->searchForm()
- . "<br /><span id='pagestats'>" . $this->pageStats() . "</span>";
+ . ' | ' . $this->aboutLink()
+ . ' | ' . $this->specialLink( 'recentchanges' )
+ . ' | ' . $this->searchForm()
+ . '<br /><span id="pagestats">' . $this->pageStats() . '</span>';
$s .= "</td>";
if ( $shove && !$left ) { # Right
@@ -435,10 +478,10 @@ class Skin {
}
$s .= "</tr></table>\n</div>\n</div>\n";
- wfProfileOut( "$fname-3" );
- wfProfileIn( "$fname-4" );
+ wfProfileOut( $fname.'-3' );
+ wfProfileIn( $fname.'-4' );
if ( 0 != $qb ) { $s .= $this->quickBar(); }
- wfProfileOut( "$fname-4" );
+ wfProfileOut( $fname.'-4' );
wfProfileOut( $fname );
return $s;
}
@@ -451,7 +494,7 @@ class Skin {
$action = $wgRequest->getText( 'action' );
$s = $this->printableLink();
- if ( wfMsg ( "disclaimers" ) != "-" ) $s .= " | " . $this->makeKnownLink( wfMsg( "disclaimerpage" ), wfMsg( "disclaimers" ) ) ;
+ if ( wfMsg ( 'disclaimers' ) != '-' ) $s .= ' | ' . $this->makeKnownLink( wfMsg( 'disclaimerpage' ), wfMsg( 'disclaimers' ) ) ;
if ( $wgOut->isArticleRelated() ) {
if ( $wgTitle->getNamespace() == Namespace::getImage() ) {
@@ -464,16 +507,16 @@ class Skin {
if ( isset ( $wgUseApproval ) && $wgUseApproval )
{
$t = $wgTitle->getDBkey();
- $name = "Approve this article" ;
+ $name = 'Approve this article' ;
$link = "http://test.wikipedia.org/w/magnus/wiki.phtml?title={$t}&action=submit&doit=1" ;
#wfEscapeHTML( wfImageUrl( $name ) );
$style = $this->getExternalLinkAttributes( $link, $name );
$s .= " | <a href=\"{$link}\"{$style}>{$name}</a>" ;
}
}
- if ( "history" == $action || isset( $diff ) || isset( $oldid ) ) {
- $s .= " | " . $this->makeKnownLink( $wgTitle->getPrefixedText(),
- wfMsg( "currentrev" ) );
+ if ( 'history' == $action || isset( $diff ) || isset( $oldid ) ) {
+ $s .= ' | ' . $this->makeKnownLink( $wgTitle->getPrefixedText(),
+ wfMsg( 'currentrev' ) );
}
if ( $wgUser->getNewtalk() ) {
@@ -485,35 +528,45 @@ class Skin {
$n =$wgUser->getName();
$tl = $this->makeKnownLink( $wgLang->getNsText(
Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}",
- wfMsg("newmessageslink") );
- $s.=" | <strong>". wfMsg( "newmessages", $tl ) . "</strong>";
+ wfMsg('newmessageslink') );
+ $s.= ' | <strong>'. wfMsg( 'newmessages', $tl ) . '</strong>';
}
}
- if( $wgUser->isSysop() &&
- (($wgTitle->getArticleId() == 0) || ($action == "history")) &&
- ($n = $wgTitle->isDeleted() ) ) {
- $s .= " | " . wfMsg( "thisisdeleted",
- $this->makeKnownLink(
- $wgLang->SpecialPage( "Undelete/" . $wgTitle->getPrefixedDBkey() ),
- wfMsg( "restorelink", $n ) ) );
+
+ $undelete = $this->getUndeleteLink();
+ if( !empty( $undelete ) ) {
+ $s .= ' | '.$undelete;
}
return $s;
}
+ function getUndeleteLink() {
+ global $wgUser, $wgTitle, $wgLang, $action;
+ if( $wgUser->isSysop() &&
+ (($wgTitle->getArticleId() == 0) || ($action == "history")) &&
+ ($n = $wgTitle->isDeleted() ) ) {
+ return wfMsg( 'thisisdeleted',
+ $this->makeKnownLink(
+ $wgLang->SpecialPage( 'Undelete/' . $wgTitle->getPrefixedDBkey() ),
+ wfMsg( 'restorelink', $n ) ) );
+ }
+ return '';
+ }
+
function printableLink()
{
global $wgOut, $wgFeedClasses, $wgRequest;
$baseurl = $_SERVER['REQUEST_URI'];
- if( strpos( "?", $baseurl ) == false ) {
- $baseurl .= "?";
+ if( strpos( '?', $baseurl ) == false ) {
+ $baseurl .= '?';
} else {
- $baseurl .= "&";
+ $baseurl .= '&';
}
$baseurl = htmlspecialchars( $baseurl );
- $printurl = $wgRequest->escapeAppendQuery( "printable=yes" );
+ $printurl = $wgRequest->escapeAppendQuery( 'printable=yes' );
- $s = "<a href=\"$printurl\">" . wfMsg( "printableversion" ) . "</a>";
+ $s = "<a href=\"$printurl\">" . wfMsg( 'printableversion' ) . '</a>';
if( $wgOut->isSyndicated() ) {
foreach( $wgFeedClasses as $format => $class ) {
$feedurl = $wgRequest->escapeAppendQuery( "feed=$format" );
@@ -527,8 +580,8 @@ class Skin {
{
global $wgOut, $wgTitle, $wgUser;
- $s = "<h1 class='pagetitle'>" . htmlspecialchars( $wgOut->getPageTitle() ) . "</h1>";
- if($wgUser->getOption("editsectiononrightclick") && $wgTitle->userCanEdit()) { $s=$this->editSectionScript(0,$s);}
+ $s = '<h1 class="pagetitle">' . htmlspecialchars( $wgOut->getPageTitle() ) . '</h1>';
+ if($wgUser->getOption( 'editsectiononrightclick' ) && $wgTitle->userCanEdit()) { $s=$this->editSectionScript(0,$s);}
return $s;
}
@@ -537,9 +590,9 @@ class Skin {
global $wgOut;
$sub = $wgOut->getSubtitle();
- if ( "" == $sub ) {
+ if ( '' == $sub ) {
global $wgExtraSubtitle;
- $sub = wfMsg( "fromwikipedia" ) . $wgExtraSubtitle;
+ $sub = wfMsg( 'fromwikipedia' ) . $wgExtraSubtitle;
}
$subpages = $this->subPageSubtitle();
$sub .= !empty($subpages)?"</p><p class='subpages'>$subpages":'';
@@ -553,23 +606,23 @@ class Skin {
$subpages = '';
if($wgOut->isArticle() && !empty($wgNamespacesWithSubpages[$wgTitle->getNamespace()])) {
$ptext=$wgTitle->getPrefixedText();
- if(preg_match("/\//",$ptext)) {
- $links=explode("/",$ptext);
- $c=0;
- $growinglink="";
+ if(preg_match('/\//',$ptext)) {
+ $links = explode('/',$ptext);
+ $c = 0;
+ $growinglink = '';
foreach($links as $link) {
$c++;
if ($c<count($links)) {
$growinglink .= $link;
$getlink = $this->makeLink( $growinglink, $link );
- if(preg_match("/class='new'/i",$getlink)) { break; } # this is a hack, but it saves time
+ if(preg_match('/class="new"/i',$getlink)) { break; } # this is a hack, but it saves time
if ($c>1) {
- $subpages .= " | ";
+ $subpages .= ' | ';
} else {
- $subpages .="&lt; ";
+ $subpages .= '&lt; ';
}
$subpages .= $getlink;
- $growinglink.="/";
+ $growinglink .= '/';
}
}
}
@@ -581,30 +634,30 @@ class Skin {
{
global $wgUser, $wgTitle, $wgLang, $wgShowIPinHeader, $wgIP;
- $li = $wgLang->specialPage( "Userlogin" );
- $lo = $wgLang->specialPage( "Userlogout" );
+ $li = $wgLang->specialPage( 'Userlogin' );
+ $lo = $wgLang->specialPage( 'Userlogout' );
- $s = "";
+ $s = '';
if ( 0 == $wgUser->getID() ) {
- if( $wgShowIPinHeader && isset( $_COOKIE[ini_get("session.name")] ) ) {
+ if( $wgShowIPinHeader && isset( $_COOKIE[ini_get('session.name')] ) ) {
$n = $wgIP;
$tl = $this->makeKnownLink( $wgLang->getNsText(
Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}",
$wgLang->getNsText( Namespace::getTalk( 0 ) ) );
- $s .= $n . " (".$tl.")";
+ $s .= $n . ' ('.$tl.')';
} else {
- $s .= wfMsg("notloggedin");
+ $s .= wfMsg('notloggedin');
}
$rt = $wgTitle->getPrefixedURL();
if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) {
- $q = "";
+ $q = '';
} else { $q = "returnto={$rt}"; }
$s .= "\n<br />" . $this->makeKnownLink( $li,
- wfMsg( "login" ), $q );
+ wfMsg( 'login' ), $q );
} else {
$n = $wgUser->getName();
$rt = $wgTitle->getPrefixedURL();
@@ -616,18 +669,18 @@ class Skin {
$s .= $this->makeKnownLink( $wgLang->getNsText(
Namespace::getUser() ) . ":{$n}", $n ) . "{$tl}<br />" .
- $this->makeKnownLink( $lo, wfMsg( "logout" ),
- "returnto={$rt}" ) . " | " .
- $this->specialLink( "preferences" );
+ $this->makeKnownLink( $lo, wfMsg( 'logout' ),
+ "returnto={$rt}" ) . ' | ' .
+ $this->specialLink( 'preferences' );
}
- $s .= " | " . $this->makeKnownLink( wfMsg( "helppage" ),
- wfMsg( "help" ) );
+ $s .= ' | ' . $this->makeKnownLink( wfMsg( 'helppage' ),
+ wfMsg( 'help' ) );
return $s;
}
function getSearchLink() {
- $searchPage =& Title::makeTitle( NS_SPECIAL, "Search" );
+ $searchPage =& Title::makeTitle( NS_SPECIAL, 'Search' );
return $searchPage->getLocalURL();
}
@@ -640,12 +693,12 @@ class Skin {
global $wgRequest;
$search = $wgRequest->getText( 'search' );
- $s = "<form name='search' class='inline' method='post' action=\""
+ $s = '<form name="search" class="inline" method="post" action="'
. $this->escapeSearchLink() . "\">\n"
- . "<input type='text' name=\"search\" size='19' value=\""
+ . '<input type="text" name="search" size="19" value="'
. htmlspecialchars(substr($search,0,256)) . "\" />\n"
- . "<input type='submit' name=\"go\" value=\"" . wfMsg ("go") . "\" />&nbsp;"
- . "<input type='submit' name=\"fulltext\" value=\"" . wfMsg ("search") . "\" />\n</form>";
+ . '<input type="submit" name="go" value="' . wfMsg ('go') . '" />&nbsp;'
+ . '<input type="submit" name="fulltext" value="' . wfMsg ('search') . "\" />\n</form>";
return $s;
}
@@ -656,7 +709,7 @@ class Skin {
$sep = " |\n";
$s = $this->mainPageLink() . $sep
- . $this->specialLink( "recentchanges" );
+ . $this->specialLink( 'recentchanges' );
if ( $wgOut->isArticleRelated() ) {
$s .= $sep . $this->editThisPage()
@@ -673,9 +726,9 @@ class Skin {
global $wgOut, $wgUser, $wgTitle;
$sep = " |\n";
- $s = "";
+ $s = '';
if ( $wgOut->isArticleRelated() ) {
- $s .= "<strong>" . $this->editThisPage() . "</strong>";
+ $s .= '<strong>' . $this->editThisPage() . '</strong>';
if ( 0 != $wgUser->getID() ) {
$s .= $sep . $this->watchThisPage();
}
@@ -716,21 +769,21 @@ class Skin {
global $wgDisableCounters;
extract( $wgRequest->getValues( 'oldid', 'diff' ) );
- if ( ! $wgOut->isArticle() ) { return ""; }
- if ( isset( $oldid ) || isset( $diff ) ) { return ""; }
- if ( 0 == $wgArticle->getID() ) { return ""; }
+ if ( ! $wgOut->isArticle() ) { return ''; }
+ if ( isset( $oldid ) || isset( $diff ) ) { return ''; }
+ if ( 0 == $wgArticle->getID() ) { return ''; }
- $s = "";
+ $s = '';
if ( !$wgDisableCounters ) {
$count = $wgLang->formatNum( $wgArticle->getCount() );
if ( $count ) {
- $s = wfMsg( "viewcount", $count );
+ $s = wfMsg( 'viewcount', $count );
}
}
- $s .= " " . $this->getCredits();
+ $s .= ' ' . $this->getCredits();
- return $s . " " . $this->getCopyright();
+ return $s . ' ' . $this->getCopyright();
}
function getCredits() {
@@ -743,7 +796,7 @@ class Skin {
} else {
$s = $this->getAuthorCredits();
if ($wgMaxCredits > 1) {
- $s .= " " . $this->getContributorCredits();
+ $s .= ' ' . $this->getContributorCredits();
}
}
@@ -756,13 +809,13 @@ class Skin {
$last_author = $wgArticle->getUser();
if ($last_author == 0) {
- $author_credit = wfMsg("anonymous");
+ $author_credit = wfMsg('anonymous');
} else {
$real_name = User::whoIsReal($last_author);
if (!empty($real_name)) {
$author_credit = $real_name;
} else {
- $author_credit = wfMsg("siteuser", User::whoIs($last_author));
+ $author_credit = wfMsg('siteuser', User::whoIs($last_author));
}
}
@@ -770,9 +823,9 @@ class Skin {
if ( $timestamp ) {
$d = $wgLang->timeanddate( $wgArticle->getTimestamp(), true );
} else {
- $d = "";
+ $d = '';
}
- return wfMsg("lastmodifiedby", $d, $author_credit);
+ return wfMsg('lastmodifiedby', $d, $author_credit);
}
function getContributorCredits() {
@@ -802,23 +855,23 @@ class Skin {
$user = $wgLang->listToText(array_values($user_names));
if (!empty($user)) {
- $user = wfMsg("siteusers", $user);
+ $user = wfMsg('siteusers', $user);
}
if ($contributors[0] && $contributors[0][0] > 0) {
- $anon = wfMsg("anonymous");
+ $anon = wfMsg('anonymous');
} else {
$anon = '';
}
$creds = $wgLang->listToText(array($real, $user, $anon));
- return wfMsg("othercontribs", $creds);
+ return wfMsg('othercontribs', $creds);
}
function getCopyright() {
global $wgRightsPage, $wgRightsUrl, $wgRightsText;
- $out = "";
+ $out = '';
if( $wgRightsPage ) {
$link = $this->makeKnownLink( $wgRightsPage, $wgRightsText );
} elseif( $wgRightsUrl ) {
@@ -827,23 +880,23 @@ class Skin {
# Give up now
return $out;
}
- $out .= wfMsg( "copyright", $link );
+ $out .= wfMsg( 'copyright', $link );
return $out;
}
function getCopyrightIcon() {
global $wgRightsPage, $wgRightsUrl, $wgRightsText, $wgRightsIcon;
- $out = "";
+ $out = '';
if( $wgRightsIcon ) {
$icon = htmlspecialchars( $wgRightsIcon );
if( $wgRightsUrl ) {
$url = htmlspecialchars( $wgRightsUrl );
- $out .= "<a href=\"$url\">";
+ $out .= '<a href="'.$url.'">';
}
$text = htmlspecialchars( $wgRightsText );
$out .= "<img src=\"$icon\" alt='$text' />";
if( $wgRightsUrl ) {
- $out .= "</a>";
+ $out .= '</a>';
}
}
return $out;
@@ -852,7 +905,7 @@ class Skin {
function getPoweredBy() {
global $wgStylePath;
$url = htmlspecialchars( "$wgStylePath/images/poweredby_mediawiki_88x31.png" );
- $img = "<a href='http://www.mediawiki.org/'><img src='$url' alt='MediaWiki' /></a>";
+ $img = '<a href="http://www.mediawiki.org/"><img src="'.$url.'" alt="MediaWiki" /></a>';
return $img;
}
@@ -863,23 +916,23 @@ class Skin {
$timestamp = $wgArticle->getTimestamp();
if ( $timestamp ) {
$d = $wgLang->timeanddate( $wgArticle->getTimestamp(), true );
- $s = " " . wfMsg( "lastmodified", $d );
+ $s = ' ' . wfMsg( 'lastmodified', $d );
} else {
- $s = "";
+ $s = '';
}
return $s;
}
- function logoText( $align = "" )
+ function logoText( $align = '' )
{
- if ( "" != $align ) { $a = " align='{$align}'"; }
- else { $a = ""; }
+ if ( '' != $align ) { $a = ' align="'.$align.'"'; }
+ else { $a = ''; }
- $mp = wfMsg( "mainpage" );
+ $mp = wfMsg( 'mainpage' );
$titleObj = Title::newFromText( $mp );
- $s = "<a href=\"" . $titleObj->escapeLocalURL()
- . "\"><img{$a} src=\""
- . $this->getLogo() . "\" alt=\"" . "[{$mp}]\" /></a>";
+ $s = '<a href="' . $titleObj->escapeLocalURL()
+ . '"><img'.$a.' src="'
+ . $this->getLogo() . '" alt="' . "[{$mp}]\" /></a>";
return $s;
}
@@ -888,7 +941,7 @@ class Skin {
global $wgOut, $wgTitle, $wgUser, $wgRequest, $wgLang;
global $wgDisableUploads, $wgRemoteUploads;
- $fname = "Skin::quickBar";
+ $fname = 'Skin::quickBar';
wfProfileIn( $fname );
$action = $wgRequest->getText( 'action' );
@@ -900,69 +953,69 @@ class Skin {
$sep = "\n<br />";
$s .= $this->mainPageLink()
- . $sep . $this->specialLink( "recentchanges" )
- . $sep . $this->specialLink( "randompage" );
+ . $sep . $this->specialLink( 'recentchanges' )
+ . $sep . $this->specialLink( 'randompage' );
if ($wgUser->getID()) {
- $s.= $sep . $this->specialLink( "watchlist" ) ;
- $s .= $sep .$this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
- wfMsg( "mycontris" ), "target=" . wfUrlencode($wgUser->getName() ) );
+ $s.= $sep . $this->specialLink( 'watchlist' ) ;
+ $s .= $sep .$this->makeKnownLink( $wgLang->specialPage( 'Contributions' ),
+ wfMsg( 'mycontris' ), 'target=' . wfUrlencode($wgUser->getName() ) );
}
// only show watchlist link if logged in
- if ( wfMsg ( "currentevents" ) != "-" ) $s .= $sep . $this->makeKnownLink( wfMsg( "currentevents" ), "" ) ;
+ if ( wfMsg ( 'currentevents' ) != '-' ) $s .= $sep . $this->makeKnownLink( wfMsg( 'currentevents' ), '' ) ;
$s .= "\n<br /><hr class='sep' />";
$articleExists = $wgTitle->getArticleId();
- if ( $wgOut->isArticle() || $action =="edit" || $action =="history" || $wpPreview) {
+ if ( $wgOut->isArticle() || $action =='edit' || $action =='history' || $wpPreview) {
if($wgOut->isArticle()) {
- $s .= "<strong>" . $this->editThisPage() . "</strong>";
+ $s .= '<strong>' . $this->editThisPage() . '</strong>';
} else { # backlink to the article in edit or history mode
if($articleExists){ # no backlink if no article
switch($tns) {
case 0:
- $text = wfMsg("articlepage");
+ $text = wfMsg('articlepage');
break;
case 1:
- $text = wfMsg("viewtalkpage");
+ $text = wfMsg('viewtalkpage');
break;
case 2:
- $text = wfMsg("userpage");
+ $text = wfMsg('userpage');
break;
case 3:
- $text = wfMsg("viewtalkpage");
+ $text = wfMsg('viewtalkpage');
break;
case 4:
- $text = wfMsg("wikipediapage");
+ $text = wfMsg('wikipediapage');
break;
case 5:
- $text = wfMsg("viewtalkpage");
+ $text = wfMsg('viewtalkpage');
break;
case 6:
- $text = wfMsg("imagepage");
+ $text = wfMsg('imagepage');
break;
case 7:
- $text = wfMsg("viewtalkpage");
+ $text = wfMsg('viewtalkpage');
break;
default:
- $text= wfMsg("articlepage");
+ $text= wfMsg('articlepage');
}
$link = $wgTitle->getText();
if ($nstext = $wgLang->getNsText($tns) ) { # add namespace if necessary
- $link = $nstext . ":" . $link ;
+ $link = $nstext . ':' . $link ;
}
$s .= $this->makeLink( $link, $text );
} elseif( $wgTitle->getNamespace() != Namespace::getSpecial() ) {
# we just throw in a "New page" text to tell the user that he's in edit mode,
# and to avoid messing with the separator that is prepended to the next item
- $s .= "<strong>" . wfMsg("newpage") . "</strong>";
+ $s .= '<strong>' . wfMsg('newpage') . '</strong>';
}
}
- if( $tns%2 && $action!="edit" && !$wpPreview) {
- $s.="<br />".$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg("postcomment"),"action=edit&section=new");
+ if( $tns%2 && $action!='edit' && !$wpPreview) {
+ $s.= '<br />'.$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('postcomment'),'action=edit&section=new');
}
/*
@@ -972,7 +1025,7 @@ class Skin {
unwatched. Therefore we do not show the "Watch this page" link in edit mode
*/
if ( 0 != $wgUser->getID() && $articleExists) {
- if($action!="edit" && $action != "submit" )
+ if($action!='edit' && $action != 'submit' )
{
$s .= $sep . $this->watchThisPage();
}
@@ -984,7 +1037,7 @@ class Skin {
$sep . $this->protectThisPage();
}
$s .= $sep . $this->talkLink();
- if ($articleExists && $action !="history") {
+ if ($articleExists && $action !='history') {
$s .= $sep . $this->historyLink();
}
$s.=$sep . $this->whatLinksHere();
@@ -1013,15 +1066,15 @@ class Skin {
}
if ( 0 != $wgUser->getID() && ( !$wgDisableUploads || $wgRemoteUploads ) ) {
- $s .= $this->specialLink( "upload" ) . $sep;
+ $s .= $this->specialLink( 'upload' ) . $sep;
}
- $s .= $this->specialLink( "specialpages" )
+ $s .= $this->specialLink( 'specialpages' )
. $sep . $this->bugReportsLink();
global $wgSiteSupportPage;
if( $wgSiteSupportPage ) {
$s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
- "\" class=\"internal\">" . wfMsg( "sitesupport" ) . "</a>";
+ '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
}
$s .= "\n<br /></div>\n";
@@ -1035,27 +1088,27 @@ class Skin {
$a = array();
$pages = SpecialPage::getPages();
- foreach ( $pages[""] as $name => $page ) {
+ foreach ( $pages[''] as $name => $page ) {
$a[$name] = $page->getDescription();
}
if ( $wgUser->isSysop() )
{
- foreach ( $pages["sysop"] as $name => $page ) {
+ foreach ( $pages['sysop'] as $name => $page ) {
$a[$name] = $page->getDescription();
}
}
if ( $wgUser->isDeveloper() )
{
- foreach ( $pages["developer"] as $name => $page ) {
+ foreach ( $pages['developer'] as $name => $page ) {
$a[$name] = $page->getDescription() ;
}
}
- $go = wfMsg( "go" );
- $sp = wfMsg( "specialpages" );
- $spp = $wgLang->specialPage( "Specialpages" );
+ $go = wfMsg( 'go' );
+ $sp = wfMsg( 'specialpages' );
+ $spp = $wgLang->specialPage( 'Specialpages' );
- $s = "<form id=\"specialpages\" method=\"get\" class=\"inline\" " .
- "action=\"" . htmlspecialchars( "{$wgServer}{$wgRedirectScript}" ) . "\">\n";
+ $s = '<form id="specialpages" method="get" class="inline" ' .
+ 'action="' . htmlspecialchars( "{$wgServer}{$wgRedirectScript}" ) . "\">\n";
$s .= "<select name=\"wpDropdown\">\n";
$s .= "<option value=\"{$spp}\">{$sp}</option>\n";
@@ -1071,30 +1124,30 @@ class Skin {
function mainPageLink()
{
- $mp = wfMsg( "mainpage" );
+ $mp = wfMsg( 'mainpage' );
$s = $this->makeKnownLink( $mp, $mp );
return $s;
}
function copyrightLink()
{
- $s = $this->makeKnownLink( wfMsg( "copyrightpage" ),
- wfMsg( "copyrightpagename" ) );
+ $s = $this->makeKnownLink( wfMsg( 'copyrightpage' ),
+ wfMsg( 'copyrightpagename' ) );
return $s;
}
function aboutLink()
{
- $s = $this->makeKnownLink( wfMsg( "aboutpage" ),
- wfMsg( "aboutwikipedia" ) );
+ $s = $this->makeKnownLink( wfMsg( 'aboutpage' ),
+ wfMsg( 'aboutwikipedia' ) );
return $s;
}
function disclaimerLink()
{
- $s = $this->makeKnownLink( wfMsg( "disclaimerpage" ),
- wfMsg( "disclaimers" ) );
+ $s = $this->makeKnownLink( wfMsg( 'disclaimerpage' ),
+ wfMsg( 'disclaimers' ) );
return $s;
}
@@ -1107,16 +1160,16 @@ class Skin {
$redirect = $wgRequest->getVal( 'redirect' );
if ( ! $wgOut->isArticleRelated() ) {
- $s = wfMsg( "protectedpage" );
+ $s = wfMsg( 'protectedpage' );
} else {
$n = $wgTitle->getPrefixedText();
if ( $wgTitle->userCanEdit() ) {
- $t = wfMsg( "editthispage" );
+ $t = wfMsg( 'editthispage' );
} else {
#$t = wfMsg( "protectedpage" );
- $t = wfMsg( "viewsource" );
+ $t = wfMsg( 'viewsource' );
}
- $oid = $red = "";
+ $oid = $red = '';
if ( !is_null( $redirect ) ) { $red = "&redirect={$redirect}"; }
if ( $oldid && ! isset( $diff ) ) {
@@ -1134,11 +1187,11 @@ class Skin {
$diff = $wgRequest->getVal( 'diff' );
if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isSysop() ) {
$n = $wgTitle->getPrefixedText();
- $t = wfMsg( "deletethispage" );
+ $t = wfMsg( 'deletethispage' );
- $s = $this->makeKnownLink( $n, $t, "action=delete" );
+ $s = $this->makeKnownLink( $n, $t, 'action=delete' );
} else {
- $s = "";
+ $s = '';
}
return $s;
}
@@ -1152,15 +1205,15 @@ class Skin {
$n = $wgTitle->getPrefixedText();
if ( $wgTitle->isProtected() ) {
- $t = wfMsg( "unprotectthispage" );
- $q = "action=unprotect";
+ $t = wfMsg( 'unprotectthispage' );
+ $q = 'action=unprotect';
} else {
- $t = wfMsg( "protectthispage" );
- $q = "action=protect";
+ $t = wfMsg( 'protectthispage' );
+ $q = 'action=protect';
}
$s = $this->makeKnownLink( $n, $t, $q );
} else {
- $s = "";
+ $s = '';
}
return $s;
}
@@ -1173,15 +1226,15 @@ class Skin {
$n = $wgTitle->getPrefixedText();
if ( $wgTitle->userIsWatching() ) {
- $t = wfMsg( "unwatchthispage" );
- $q = "action=unwatch";
+ $t = wfMsg( 'unwatchthispage' );
+ $q = 'action=unwatch';
} else {
- $t = wfMsg( "watchthispage" );
- $q = "action=watch";
+ $t = wfMsg( 'watchthispage' );
+ $q = 'action=watch';
}
$s = $this->makeKnownLink( $n, $t, $q );
} else {
- $s = wfMsg( "notanarticle" );
+ $s = wfMsg( 'notanarticle' );
}
return $s;
}
@@ -1191,8 +1244,8 @@ class Skin {
global $wgTitle, $wgLang;
if ( $wgTitle->userCanEdit() ) {
- $s = $this->makeKnownLink( $wgLang->specialPage( "Movepage" ),
- wfMsg( "movethispage" ), "target=" . $wgTitle->getPrefixedURL() );
+ $s = $this->makeKnownLink( $wgLang->specialPage( 'Movepage' ),
+ wfMsg( 'movethispage' ), 'target=' . $wgTitle->getPrefixedURL() );
} // no message if page is protected - would be redundant
return $s;
}
@@ -1202,7 +1255,7 @@ class Skin {
global $wgTitle;
$s = $this->makeKnownLink( $wgTitle->getPrefixedText(),
- wfMsg( "history" ), "action=history" );
+ wfMsg( 'history' ), 'action=history' );
return $s;
}
@@ -1210,8 +1263,8 @@ class Skin {
{
global $wgTitle, $wgLang;
- $s = $this->makeKnownLink( $wgLang->specialPage( "Whatlinkshere" ),
- wfMsg( "whatlinkshere" ), "target=" . $wgTitle->getPrefixedURL() );
+ $s = $this->makeKnownLink( $wgLang->specialPage( 'Whatlinkshere' ),
+ wfMsg( 'whatlinkshere' ), 'target=' . $wgTitle->getPrefixedURL() );
return $s;
}
@@ -1219,8 +1272,8 @@ class Skin {
{
global $wgTitle, $wgLang;
- $s = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
- wfMsg( "contributions" ), "target=" . $wgTitle->getPartialURL() );
+ $s = $this->makeKnownLink( $wgLang->specialPage( 'Contributions' ),
+ wfMsg( 'contributions' ), 'target=' . $wgTitle->getPartialURL() );
return $s;
}
@@ -1228,8 +1281,8 @@ class Skin {
{
global $wgTitle, $wgLang;
- $s = $this->makeKnownLink( $wgLang->specialPage( "Emailuser" ),
- wfMsg( "emailuser" ), "target=" . $wgTitle->getPartialURL() );
+ $s = $this->makeKnownLink( $wgLang->specialPage( 'Emailuser' ),
+ wfMsg( 'emailuser' ), 'target=' . $wgTitle->getPartialURL() );
return $s;
}
@@ -1238,11 +1291,11 @@ class Skin {
global $wgOut, $wgTitle, $wgLang;
if ( ! $wgOut->isArticleRelated() ) {
- $s = "(" . wfMsg( "notanarticle" ) . ")";
+ $s = '(' . wfMsg( 'notanarticle' ) . ')';
} else {
$s = $this->makeKnownLink( $wgLang->specialPage(
- "Recentchangeslinked" ), wfMsg( "recentchangeslinked" ),
- "target=" . $wgTitle->getPrefixedURL() );
+ 'Recentchangeslinked' ), wfMsg( 'recentchangeslinked' ),
+ 'target=' . $wgTitle->getPrefixedURL() );
}
return $s;
}
@@ -1253,56 +1306,56 @@ class Skin {
$a = $wgOut->getLanguageLinks();
if ( 0 == count( $a ) ) {
- if ( !$wgUseNewInterlanguage ) return "";
+ if ( !$wgUseNewInterlanguage ) return '';
$ns = $wgLang->getNsIndex ( $wgTitle->getNamespace () ) ;
- if ( $ns != 0 AND $ns != 1 ) return "" ;
- $pn = "Intl" ;
- $x = "mode=addlink&xt=".$wgTitle->getDBkey() ;
+ if ( $ns != 0 AND $ns != 1 ) return '' ;
+ $pn = 'Intl' ;
+ $x = 'mode=addlink&xt='.$wgTitle->getDBkey() ;
return $this->makeKnownLink( $wgLang->specialPage( $pn ),
- wfMsg( "intl" ) , $x );
+ wfMsg( 'intl' ) , $x );
}
if ( !$wgUseNewInterlanguage ) {
- $s = wfMsg( "otherlanguages" ) . ": ";
+ $s = wfMsg( 'otherlanguages' ) . ': ';
} else {
global $wgLanguageCode ;
- $x = "mode=zoom&xt=".$wgTitle->getDBkey() ;
- $x .= "&xl=".$wgLanguageCode ;
- $s = $this->makeKnownLink( $wgLang->specialPage( "Intl" ),
- wfMsg( "otherlanguages" ) , $x ) . ": " ;
+ $x = 'mode=zoom&xt='.$wgTitle->getDBkey() ;
+ $x .= '&xl='.$wgLanguageCode ;
+ $s = $this->makeKnownLink( $wgLang->specialPage( 'Intl' ),
+ wfMsg( 'otherlanguages' ) , $x ) . ': ' ;
}
- $s = wfMsg( "otherlanguages" ) . ": ";
+ $s = wfMsg( 'otherlanguages' ) . ': ';
$first = true;
- if($wgLang->isRTL()) $s .= "<span dir='LTR'>";
+ if($wgLang->isRTL()) $s .= '<span dir="LTR">';
foreach( $a as $l ) {
- if ( ! $first ) { $s .= " | "; }
+ if ( ! $first ) { $s .= ' | '; }
$first = false;
$nt = Title::newFromText( $l );
$url = $nt->getFullURL();
$text = $wgLang->getLanguageName( $nt->getInterwiki() );
- if ( "" == $text ) { $text = $l; }
+ if ( '' == $text ) { $text = $l; }
$style = $this->getExternalLinkAttributes( $l, $text );
$s .= "<a href=\"{$url}\"{$style}>{$text}</a>";
}
- if($wgLang->isRTL()) $s .= "</span>";
+ if($wgLang->isRTL()) $s .= '</span>';
return $s;
}
function bugReportsLink()
{
- $s = $this->makeKnownLink( wfMsg( "bugreportspage" ),
- wfMsg( "bugreports" ) );
+ $s = $this->makeKnownLink( wfMsg( 'bugreportspage' ),
+ wfMsg( 'bugreports' ) );
return $s;
}
function dateLink()
{
global $wgLinkCache;
- $t1 = Title::newFromText( gmdate( "F j" ) );
- $t2 = Title::newFromText( gmdate( "Y" ) );
+ $t1 = Title::newFromText( gmdate( 'F j' ) );
+ $t2 = Title::newFromText( gmdate( 'Y' ) );
$wgLinkCache->suspend();
$id = $t1->getArticleID();
@@ -1313,7 +1366,7 @@ class Skin {
} else {
$s = $this->makeKnownLink( $t1->getText() );
}
- $s .= ", ";
+ $s .= ', ';
$wgLinkCache->suspend();
$id = $t2->getArticleID();
@@ -1332,27 +1385,27 @@ class Skin {
global $wgLang, $wgTitle, $wgLinkCache;
$tns = $wgTitle->getNamespace();
- if ( -1 == $tns ) { return ""; }
+ if ( -1 == $tns ) { return ''; }
$pn = $wgTitle->getText();
- $tp = wfMsg( "talkpage" );
+ $tp = wfMsg( 'talkpage' );
if ( Namespace::isTalk( $tns ) ) {
$lns = Namespace::getSubject( $tns );
switch($tns) {
case 1:
- $text = wfMsg("articlepage");
+ $text = wfMsg('articlepage');
break;
case 3:
- $text = wfMsg("userpage");
+ $text = wfMsg('userpage');
break;
case 5:
- $text = wfMsg("wikipediapage");
+ $text = wfMsg('wikipediapage');
break;
case 7:
- $text = wfMsg("imagepage");
+ $text = wfMsg('imagepage');
break;
default:
- $text= wfMsg("articlepage");
+ $text= wfMsg('articlepage');
}
} else {
@@ -1360,8 +1413,8 @@ class Skin {
$text=$tp;
}
$n = $wgLang->getNsText( $lns );
- if ( "" == $n ) { $link = $pn; }
- else { $link = "{$n}:{$pn}"; }
+ if ( '' == $n ) { $link = $pn; }
+ else { $link = $n.':'.$pn; }
$wgLinkCache->suspend();
$s = $this->makeLink( $link, $text );
@@ -1375,7 +1428,7 @@ class Skin {
global $wgLang, $wgTitle, $wgLinkCache;
$tns = $wgTitle->getNamespace();
- if ( -1 == $tns ) { return ""; }
+ if ( -1 == $tns ) { return ''; }
$lns = ( Namespace::isTalk( $tns ) ) ? $tns : Namespace::getTalk( $tns );
@@ -1384,10 +1437,10 @@ class Skin {
$n = $wgLang->getNsText( $lns );
$pn = $wgTitle->getText();
- $link = "{$n}:{$pn}";
+ $link = $n.':'.$pn;
$wgLinkCache->suspend();
- $s = $this->makeKnownLink($link, wfMsg("postcomment"), "action=edit&section=new");
+ $s = $this->makeKnownLink($link, wfMsg('postcomment'), 'action=edit&section=new');
$wgLinkCache->resume();
return $s;
@@ -1404,63 +1457,63 @@ class Skin {
# Note: This function MUST call getArticleID() on the link,
# otherwise the cache won't get updated properly. See LINKCACHE.DOC.
#
- function makeLink( $title, $text = "", $query = "", $trail = "" ) {
- wfProfileIn( "Skin::makeLink" );
+ function makeLink( $title, $text = '', $query = '', $trail = '' ) {
+ wfProfileIn( 'Skin::makeLink' );
$nt = Title::newFromText( $title );
if ($nt) {
$result = $this->makeLinkObj( Title::newFromText( $title ), $text, $query, $trail );
} else {
- wfDebug( "Invalid title passed to Skin::makeLink(): \"$title\"\n" );
+ wfDebug( 'Invalid title passed to Skin::makeLink(): "'.$title."\"\n" );
$result = $text == "" ? $title : $text;
}
- wfProfileOut( "Skin::makeLink" );
+ wfProfileOut( 'Skin::makeLink' );
return $result;
}
- function makeKnownLink( $title, $text = "", $query = "", $trail = "", $prefix = '',$aprops = '') {
+ function makeKnownLink( $title, $text = '', $query = '', $trail = '', $prefix = '',$aprops = '') {
$nt = Title::newFromText( $title );
if ($nt) {
return $this->makeKnownLinkObj( Title::newFromText( $title ), $text, $query, $trail, $prefix , $aprops );
} else {
- wfDebug( "Invalid title passed to Skin::makeKnownLink(): \"$title\"\n" );
- return $text == "" ? $title : $text;
+ wfDebug( 'Invalid title passed to Skin::makeKnownLink(): "'.$title."\"\n" );
+ return $text == '' ? $title : $text;
}
}
- function makeBrokenLink( $title, $text = "", $query = "", $trail = "" ) {
+ function makeBrokenLink( $title, $text = '', $query = '', $trail = '' ) {
$nt = Title::newFromText( $title );
if ($nt) {
return $this->makeBrokenLinkObj( Title::newFromText( $title ), $text, $query, $trail );
} else {
- wfDebug( "Invalid title passed to Skin::makeBrokenLink(): \"$title\"\n" );
- return $text == "" ? $title : $text;
+ wfDebug( 'Invalid title passed to Skin::makeBrokenLink(): "'.$title."\"\n" );
+ return $text == '' ? $title : $text;
}
}
- function makeStubLink( $title, $text = "", $query = "", $trail = "" ) {
+ function makeStubLink( $title, $text = '', $query = '', $trail = '' ) {
$nt = Title::newFromText( $title );
if ($nt) {
return $this->makeStubLinkObj( Title::newFromText( $title ), $text, $query, $trail );
} else {
- wfDebug( "Invalid title passed to Skin::makeStubLink(): \"$title\"\n" );
- return $text == "" ? $title : $text;
+ wfDebug( 'Invalid title passed to Skin::makeStubLink(): "'.$title."\"\n" );
+ return $text == '' ? $title : $text;
}
}
# Pass a title object, not a title string
- function makeLinkObj( &$nt, $text= "", $query = "", $trail = "", $prefix = "" )
+ function makeLinkObj( &$nt, $text= '', $query = '', $trail = '', $prefix = '' )
{
global $wgOut, $wgUser;
if ( $nt->isExternal() ) {
$u = $nt->getFullURL();
$link = $nt->getPrefixedURL();
- if ( "" == $text ) { $text = $nt->getPrefixedText(); }
- $style = $this->getExternalLinkAttributes( $link, $text );
+ if ( '' == $text ) { $text = $nt->getPrefixedText(); }
+ $style = $this->getExternalLinkAttributes( $link, $text, 'extiw' );
- $inside = "";
- if ( "" != $trail ) {
- if ( preg_match( "/^([a-z]+)(.*)$$/sD", $trail, $m ) ) {
+ $inside = '';
+ if ( '' != $trail ) {
+ if ( preg_match( '/^([a-z]+)(.*)$$/sD', $trail, $m ) ) {
$inside = $m[1];
$trail = $m[2];
}
@@ -1476,7 +1529,7 @@ class Skin {
if ( 0 == $aid ) {
$retVal = $this->makeBrokenLinkObj( $nt, $text, $query, $trail, $prefix );
} else {
- $threshold = $wgUser->getOption("stubthreshold") ;
+ $threshold = $wgUser->getOption('stubthreshold') ;
if ( $threshold > 0 ) {
$res = wfQuery ( "SELECT LENGTH(cur_text) AS x, cur_namespace, cur_is_redirect FROM cur WHERE cur_id='{$aid}'", DB_READ ) ;
@@ -1504,33 +1557,38 @@ class Skin {
}
# Pass a title object, not a title string
- function makeKnownLinkObj( &$nt, $text = "", $query = "", $trail = "", $prefix = "" , $aprops = '')
+ function makeKnownLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' , $aprops = '')
{
- global $wgOut, $wgTitle;
+ global $wgOut, $wgTitle, $wgInputEncoding;
- $fname = "Skin::makeKnownLinkObj";
+ $fname = 'Skin::makeKnownLinkObj';
wfProfileIn( $fname );
$link = $nt->getPrefixedURL();
- if ( "" == $link ) {
- $u = "";
- if ( "" == $text ) {
+ if ( '' == $link ) {
+ $u = '';
+ if ( '' == $text ) {
$text = htmlspecialchars( $nt->getFragment() );
}
} else {
$u = $nt->escapeLocalURL( $query );
}
- if ( "" != $nt->getFragment() ) {
- $u .= "#" . htmlspecialchars( $nt->getFragment() );
+ if ( '' != $nt->getFragment() ) {
+ $anchor = urlencode( do_html_entity_decode( str_replace(' ', '_', $nt->getFragment()), ENT_COMPAT, $wgInputEncoding ) );
+ $replacearray = array(
+ '%3A' => ':',
+ '%' => '.'
+ );
+ $u .= '#' . str_replace(array_keys($replacearray),array_values($replacearray),$anchor);
}
- if ( "" == $text ) {
+ if ( '' == $text ) {
$text = htmlspecialchars( $nt->getPrefixedText() );
}
$style = $this->getInternalLinkAttributesObj( $nt, $text );
- $inside = "";
- if ( "" != $trail ) {
+ $inside = '';
+ if ( '' != $trail ) {
if ( preg_match( $this->linktrail, $trail, $m ) ) {
$inside = $m[1];
$trail = $m[2];
@@ -1542,33 +1600,33 @@ class Skin {
}
# Pass a title object, not a title string
- function makeBrokenLinkObj( &$nt, $text = "", $query = "", $trail = "", $prefix = "" )
+ function makeBrokenLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' )
{
global $wgOut, $wgUser;
- $fname = "Skin::makeBrokenLinkObj";
+ $fname = 'Skin::makeBrokenLinkObj';
wfProfileIn( $fname );
- if ( "" == $query ) {
- $q = "action=edit";
+ if ( '' == $query ) {
+ $q = 'action=edit';
} else {
- $q = "action=edit&{$query}";
+ $q = 'action=edit&'.$query;
}
$u = $nt->escapeLocalURL( $q );
- if ( "" == $text ) {
+ if ( '' == $text ) {
$text = htmlspecialchars( $nt->getPrefixedText() );
}
$style = $this->getInternalLinkAttributesObj( $nt, $text, "yes" );
- $inside = "";
- if ( "" != $trail ) {
+ $inside = '';
+ if ( '' != $trail ) {
if ( preg_match( $this->linktrail, $trail, $m ) ) {
$inside = $m[1];
$trail = $m[2];
}
}
- if ( $wgUser->getOption( "highlightbroken" ) ) {
+ if ( $wgUser->getOption( 'highlightbroken' ) ) {
$s = "<a href=\"{$u}\"{$style}>{$prefix}{$text}{$inside}</a>{$trail}";
} else {
$s = "{$prefix}{$text}{$inside}<a href=\"{$u}\"{$style}>?</a>{$trail}";
@@ -1579,7 +1637,7 @@ class Skin {
}
# Pass a title object, not a title string
- function makeStubLinkObj( &$nt, $text = "", $query = "", $trail = "", $prefix = "" )
+ function makeStubLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' )
{
global $wgOut, $wgUser;
@@ -1587,19 +1645,19 @@ class Skin {
$u = $nt->escapeLocalURL( $query );
- if ( "" == $text ) {
+ if ( '' == $text ) {
$text = htmlspecialchars( $nt->getPrefixedText() );
}
- $style = $this->getInternalLinkAttributesObj( $nt, $text, "stub" );
+ $style = $this->getInternalLinkAttributesObj( $nt, $text, 'stub' );
- $inside = "";
- if ( "" != $trail ) {
+ $inside = '';
+ if ( '' != $trail ) {
if ( preg_match( $this->linktrail, $trail, $m ) ) {
$inside = $m[1];
$trail = $m[2];
}
}
- if ( $wgUser->getOption( "highlightbroken" ) ) {
+ if ( $wgUser->getOption( 'highlightbroken' ) ) {
$s = "<a href=\"{$u}\"{$style}>{$prefix}{$text}{$inside}</a>{$trail}";
} else {
$s = "{$prefix}{$text}{$inside}<a href=\"{$u}\"{$style}>!</a>{$trail}";
@@ -1607,14 +1665,14 @@ class Skin {
return $s;
}
- function makeSelfLinkObj( &$nt, $text = "", $query = "", $trail = "", $prefix = "" )
+ function makeSelfLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' )
{
$u = $nt->escapeLocalURL( $query );
- if ( "" == $text ) {
+ if ( '' == $text ) {
$text = htmlspecialchars( $nt->getPrefixedText() );
}
- $inside = "";
- if ( "" != $trail ) {
+ $inside = '';
+ if ( '' != $trail ) {
if ( preg_match( $this->linktrail, $trail, $m ) ) {
$inside = $m[1];
$trail = $m[2];
@@ -1651,6 +1709,12 @@ class Skin {
$this->checkTitle($title, $name);
return $title->getLocalURL( $urlaction );
}
+ # this can be passed the NS number as defined in Language.php
+ /*static*/ function makeNSUrl( $name, $urlaction='', $namespace=0 ) {
+ $title = Title::makeTitle( $namespace, $name );
+ $this->checkTitle($title, $name);
+ return $title->getLocalURL( $urlaction );
+ }
/* these return an array with the 'href' and boolean 'exists' */
/*static*/ function makeUrlDetails ( $name, $urlaction='' ) {
@@ -1700,33 +1764,33 @@ class Skin {
function fnamePart( $url )
{
- $basename = strrchr( $url, "/" );
+ $basename = strrchr( $url, '/' );
if ( false === $basename ) { $basename = $url; }
else { $basename = substr( $basename, 1 ); }
return wfEscapeHTML( $basename );
}
- function makeImage( $url, $alt = "" )
+ function makeImage( $url, $alt = '' )
{
global $wgOut;
- if ( "" == $alt ) { $alt = $this->fnamePart( $url ); }
- $s = "<img src=\"{$url}\" alt=\"{$alt}\" />";
+ if ( '' == $alt ) { $alt = $this->fnamePart( $url ); }
+ $s = '<img src="'.$url.'" alt="'.$alt.'" />';
return $s;
}
- function makeImageLink( $name, $url, $alt = "" ) {
+ function makeImageLink( $name, $url, $alt = '' ) {
$nt = Title::makeTitle( Namespace::getImage(), $name );
return $this->makeImageLinkObj( $nt, $alt );
}
- function makeImageLinkObj( $nt, $alt = "" ) {
+ function makeImageLinkObj( $nt, $alt = '' ) {
global $wgLang, $wgUseImageResize;
$img = Image::newFromTitle( $nt );
$url = $img->getURL();
- $align = "";
- $prefix = $postfix = "";
+ $align = '';
+ $prefix = $postfix = '';
if ( $wgUseImageResize ) {
# Check if the alt text is of the form "options|alt text"
@@ -1739,7 +1803,7 @@ class Skin {
# * center center the image
# * framed Keep original image size, no magnify-button.
- $part = explode( "|", $alt);
+ $part = explode( '|', $alt);
$mwThumb =& MagicWord::get( MAG_IMG_THUMBNAIL );
$mwLeft =& MagicWord::get( MAG_IMG_LEFT );
@@ -1757,19 +1821,19 @@ class Skin {
$thumb=true;
} elseif ( ! is_null( $mwRight->matchVariableStartToEnd($val) ) ) {
# remember to set an alignment, don't render immediately
- $align = "right";
+ $align = 'right';
} elseif ( ! is_null( $mwLeft->matchVariableStartToEnd($val) ) ) {
# remember to set an alignment, don't render immediately
- $align = "left";
+ $align = 'left';
} elseif ( ! is_null( $mwCenter->matchVariableStartToEnd($val) ) ) {
# remember to set an alignment, don't render immediately
- $align = "center";
+ $align = 'center';
} elseif ( ! is_null( $mwNone->matchVariableStartToEnd($val) ) ) {
# remember to set an alignment, don't render immediately
- $align = "none";
+ $align = 'none';
} elseif ( ! is_null( $match = $mwWidth->matchVariableStartToEnd($val) ) ) {
# $match is the image width in pixels
- if ( preg_match( "/^([0-9]*)x([0-9]*)$/", $match, $m ) ) {
+ if ( preg_match( '/^([0-9]*)x([0-9]*)$/', $match, $m ) ) {
$width = intval( $m[1] );
$height = intval( $m[2] );
} else {
@@ -1779,11 +1843,11 @@ class Skin {
$framed=true;
}
}
- if ( "center" == $align )
+ if ( 'center' == $align )
{
$prefix = '<span style="text-align: center">';
$postfix = '</span>';
- $align = "none";
+ $align = 'none';
}
if ( $thumb || $framed ) {
@@ -1795,8 +1859,8 @@ class Skin {
#
# If thumbnail width has not been provided, it is set
# here to 180 pixels
- if ( $align == "" ) {
- $align = $wgLang->isRTL() ? "left" : "right";
+ if ( $align == '' ) {
+ $align = $wgLang->isRTL() ? 'left' : 'right';
}
if ( ! isset($width) ) {
$width = 180;
@@ -1811,7 +1875,7 @@ class Skin {
if ( ( ! $height === false )
&& ( $img->getHeight() * $width / $img->getWidth() > $height ) ) {
print "height=$height<br>\nimg->getHeight() = ".$img->getHeight()."<br>\n";
- print "rescaling by factor ". $height / $img->getHeight() . "<br>\n";
+ print 'rescaling by factor '. $height / $img->getHeight() . "<br>\n";
$width = $img->getWidth() * $height / $img->getHeight();
}
$url = $img->createThumb( $width );
@@ -1824,28 +1888,28 @@ class Skin {
$alt = htmlspecialchars( $alt );
$u = $nt->escapeLocalURL();
- if ( $url == "" )
+ if ( $url == '' )
{
- $s = str_replace( "$1", $img->getName(), wfMsg("missingimage") );
+ $s = str_replace( "$1", $img->getName(), wfMsg('missingimage') );
$s .= "<br>{$alt}<br>{$url}<br>\n";
} else {
- $s = "<a href=\"{$u}\" class='image' title=\"{$alt}\">" .
- "<img src=\"{$url}\" alt=\"{$alt}\" /></a>";
+ $s = '<a href="'.$u.'" class="image" title="'.$alt.'">' .
+ '<img src="'.$url.'" alt="'.$alt.'" /></a>';
}
- if ( "" != $align ) {
- $s = "<div class=\"float{$align}\"><span>{$s}</span>\n</div>";
+ if ( '' != $align ) {
+ $s = "<div class=\"float{$align}\"><span>{$s}</span></div>";
}
- return $prefix.$s.$postfix;
+ return str_replace("\n", ' ',$prefix.$s.$postfix);
}
- function makeThumbLinkObj( $img, $label = "", $align = "right", $boxwidth = 180, $boxheight=false, $framed=false ) {
+ function makeThumbLinkObj( $img, $label = '', $align = 'right', $boxwidth = 180, $boxheight=false, $framed=false ) {
global $wgStylePath, $wgLang;
# $image = Title::makeTitle( Namespace::getImage(), $name );
$url = $img->getURL();
#$label = htmlspecialchars( $label );
- $alt = preg_replace( "/<[^>]*>/", "", $label);
+ $alt = preg_replace( '/<[^>]*>/', '', $label);
$alt = htmlspecialchars( $alt );
if ( $img->exists() )
@@ -1876,13 +1940,13 @@ class Skin {
$u = $img->getEscapeLocalURL();
- $more = htmlspecialchars( wfMsg( "thumbnail-more" ) );
- $magnifyalign = $wgLang->isRTL() ? "left" : "right";
- $textalign = $wgLang->isRTL() ? ' style="text-align:right"' : "";
+ $more = htmlspecialchars( wfMsg( 'thumbnail-more' ) );
+ $magnifyalign = $wgLang->isRTL() ? 'left' : 'right';
+ $textalign = $wgLang->isRTL() ? ' style="text-align:right"' : '';
$s = "<div class=\"thumb t{$align}\"><div style=\"width:{$oboxwidth}px;\">";
- if ( $thumbUrl == "" ) {
- $s .= str_replace( "$1", $img->getName(), wfMsg("missingimage") );
+ if ( $thumbUrl == '' ) {
+ $s .= str_replace( "$1", $img->getName(), wfMsg('missingimage') );
$zoomicon = '';
} else {
$s .= '<a href="'.$u.'" class="internal" title="'.$alt.'">'.
@@ -1897,8 +1961,8 @@ class Skin {
'width="15" height="11" alt="'.$more.'" /></a></div>';
}
}
- $s .= ' <div class="thumbcaption" '.$textalign.'>'.$zoomicon.$label."</div></div>\n</div>";
- return $s;
+ $s .= ' <div class="thumbcaption" '.$textalign.'>'.$zoomicon.$label."</div></div></div>";
+ return str_replace("\n", ' ', $s);
}
function makeMediaLink( $name, $url, $alt = "" ) {
@@ -1908,14 +1972,20 @@ class Skin {
function makeMediaLinkObj( $nt, $alt = "" )
{
- $name = $nt->getDBKey();
- $url = Image::wfImageUrl( $name );
- if ( empty( $alt ) ) {
- $alt = preg_replace( '/\.(.+?)^/', '', $name );
+ if ( ! isset( $nt ) )
+ {
+ ### HOTFIX. Instead of breaking, return empry string.
+ $s = $alt;
+ } else {
+ $name = $nt->getDBKey();
+ $url = Image::wfImageUrl( $name );
+ if ( empty( $alt ) ) {
+ $alt = preg_replace( '/\.(.+?)^/', '', $name );
+ }
+
+ $u = htmlspecialchars( $url );
+ $s = "<a href=\"{$u}\" class='internal' title=\"{$alt}\">{$alt}</a>";
}
-
- $u = htmlspecialchars( $url );
- $s = "<a href=\"{$u}\" class='internal' title=\"{$alt}\">{$alt}</a>";
return $s;
}
@@ -1923,7 +1993,7 @@ class Skin {
{
global $wgLang;
- if ( "" == $key ) { $key = strtolower( $name ); }
+ if ( '' == $key ) { $key = strtolower( $name ); }
$pn = $wgLang->ucfirst( $name );
return $this->makeKnownLink( $wgLang->specialPage( $pn ),
wfMsg( $key ) );
@@ -1935,7 +2005,7 @@ class Skin {
if( $escape ) {
$text = htmlspecialchars( $text );
}
- return "<a href=\"$url\"$style>$text</a>";
+ return '<a href="'.$url.'"'.$style.'>'.$text.'</a>';
}
# Called by history lists and recent changes
@@ -1947,15 +2017,15 @@ class Skin {
$this->rc_cache = array() ;
$this->rcMoveIndex = 0;
$this->rcCacheIndex = 0 ;
- $this->lastdate = "";
+ $this->lastdate = '';
$this->rclistOpen = false;
- return "";
+ return '';
}
function beginImageHistoryList()
{
- $s = "\n<h2>" . wfMsg( "imghistory" ) . "</h2>\n" .
- "<p>" . wfMsg( "imghistlegend" ) . "</p>\n<ul class='special'>";
+ $s = "\n<h2>" . wfMsg( 'imghistory' ) . "</h2>\n" .
+ "<p>" . wfMsg( 'imghistlegend' ) . "</p>\n".'<ul class="special">';
return $s;
}
@@ -1977,57 +2047,58 @@ class Skin {
# Get rc_xxxx variables
extract( $rcObj->mAttribs ) ;
- $curIdEq = "curid=$rc_cur_id";
+ $curIdEq = 'curid='.$rc_cur_id;
# Spacer image
- $r = "" ;
+ $r = '' ;
- $r .= "<img src='{$wgStylePath}/images/Arr_.png' width='12' height='12' border='0' />" ; $r .= "<tt>" ;
+ $r .= '<img src="'.$wgStylePath.'/images/Arr_.png" width="12" height="12" border="0" />' ;
+ $r .= '<tt>' ;
if ( $rc_type == RC_MOVE ) {
- $r .= "&nbsp;&nbsp;";
+ $r .= '&nbsp;&nbsp;';
} else {
# M & N (minor & new)
- $M = wfMsg( "minoreditletter" );
- $N = wfMsg( "newpageletter" );
+ $M = wfMsg( 'minoreditletter' );
+ $N = wfMsg( 'newpageletter' );
if ( $rc_type == RC_NEW ) {
$r .= $N ;
} else {
- $r .= "&nbsp;" ;
+ $r .= '&nbsp;' ;
}
if ( $rc_minor ) {
$r .= $M ;
} else {
- $r .= "&nbsp;" ;
+ $r .= '&nbsp;' ;
}
}
# Timestamp
- $r .= " ".$rcObj->timestamp." " ;
- $r .= "</tt>" ;
+ $r .= ' '.$rcObj->timestamp.' ' ;
+ $r .= '</tt>' ;
# Article link
$link = $rcObj->link ;
- if ( $rcObj->watched ) $link = "<strong>{$link}</strong>" ;
+ if ( $rcObj->watched ) $link = '<strong>'.$link.'</strong>' ;
$r .= $link ;
# Cur
- $r .= " (" ;
+ $r .= ' (' ;
$r .= $rcObj->curlink ;
- $r .= "; " ;
+ $r .= '; ' ;
# Hist
- $r .= $this->makeKnownLinkObj( $rcObj->getTitle(), wfMsg( "hist" ), "{$curIdEq}&action=history" );
+ $r .= $this->makeKnownLinkObj( $rcObj->getTitle(), wfMsg( 'hist' ), $curIdEq.'&action=history' );
# User/talk
- $r .= ") . . ".$rcObj->userlink ;
+ $r .= ') . . '.$rcObj->userlink ;
$r .= $rcObj->usertalklink ;
# Comment
- if ( $rc_comment != "" && $rc_type != RC_MOVE ) {
+ if ( $rc_comment != '' && $rc_type != RC_MOVE ) {
$rc_comment=$this->formatComment($rc_comment);
- $r .= $wgLang->emphasize( " (".$rc_comment.")" );
+ $r .= $wgLang->emphasize( ' ('.$rc_comment.')' );
}
$r .= "<br />\n" ;
@@ -2039,9 +2110,9 @@ class Skin {
{
global $wgStylePath, $wgLang ;
- $r = "" ;
- $M = wfMsg( "minoreditletter" );
- $N = wfMsg( "newpageletter" );
+ $r = '' ;
+ $M = wfMsg( 'minoreditletter' );
+ $N = wfMsg( 'newpageletter' );
# Collate list of users
$isnew = false ;
@@ -2063,86 +2134,86 @@ class Skin {
if ( $count > 1 ) $text .= " ({$count}&times;)" ;
array_push ( $users , $text ) ;
}
- $users = " <font size='-1'>[".implode("; ",$users)."]</font>" ;
+ $users = ' <font size="-1">['.implode('; ',$users).']</font>' ;
# Arrow
- $rci = "RCI{$this->rcCacheIndex}" ;
- $rcl = "RCL{$this->rcCacheIndex}" ;
- $rcm = "RCM{$this->rcCacheIndex}" ;
- $toggleLink = "javascript:toggleVisibility(\"{$rci}\",\"{$rcm}\",\"{$rcl}\")" ;
- $arrowdir = $wgLang->isRTL() ? "l" : "r";
- $tl = "<span id='{$rcm}'><a href='$toggleLink'><img src='{$wgStylePath}/images/Arr_{$arrowdir}.png' width='12' height='12' /></a></span>" ;
- $tl .= "<span id='{$rcl}' style='display:none'><a href='$toggleLink'><img src='{$wgStylePath}/images/Arr_d.png' width='12' height='12' /></a></span>" ;
+ $rci = 'RCI'.$this->rcCacheIndex ;
+ $rcl = 'RCL'.$this->rcCacheIndex ;
+ $rcm = 'RCM'.$this->rcCacheIndex ;
+ $toggleLink = "javascript:toggleVisibility('$rci','$rcm','$rcl')" ;
+ $arrowdir = $wgLang->isRTL() ? 'l' : 'r';
+ $tl = '<span id="'.$rcm.'"><a href="'.$toggleLink.'"><img src="'.$wgStylePath.'/images/Arr_'.$arrowdir.'.png" width="12" height="12" /></a></span>' ;
+ $tl .= '<span id="'.$rcl.'" style="display:none"><a href="'.$toggleLink.'"><img src="'.$wgStylePath.'/images/Arr_d.png" width="12" height="12" /></a></span>' ;
$r .= $tl ;
# Main line
# M/N
- $r .= "<tt>" ;
+ $r .= '<tt>' ;
if ( $isnew ) $r .= $N ;
- else $r .= "&nbsp;" ;
- $r .= "&nbsp;" ; # Minor
+ else $r .= '&nbsp;' ;
+ $r .= '&nbsp;' ; # Minor
# Timestamp
- $r .= " ".$block[0]->timestamp." " ;
- $r .= "</tt>" ;
+ $r .= ' '.$block[0]->timestamp.' ' ;
+ $r .= '</tt>' ;
# Article link
$link = $block[0]->link ;
- if ( $block[0]->watched ) $link = "<strong>{$link}</strong>" ;
+ if ( $block[0]->watched ) $link = '<strong>'.$link.'</strong>' ;
$r .= $link ;
- $curIdEq = "curid=" . $block[0]->mAttribs['rc_cur_id'];
+ $curIdEq = 'curid=' . $block[0]->mAttribs['rc_cur_id'];
if ( $block[0]->mAttribs['rc_type'] != RC_LOG ) {
# Changes
- $r .= " (".count($block)." " ;
- if ( $isnew ) $r .= wfMsg("changes");
- else $r .= $this->makeKnownLinkObj( $block[0]->getTitle() , wfMsg("changes") ,
- "{$curIdEq}&diff=0&oldid=".$oldid ) ;
- $r .= "; " ;
+ $r .= ' ('.count($block).' ' ;
+ if ( $isnew ) $r .= wfMsg('changes');
+ else $r .= $this->makeKnownLinkObj( $block[0]->getTitle() , wfMsg('changes') ,
+ $curIdEq.'&diff=0&oldid='.$oldid ) ;
+ $r .= '; ' ;
# History
- $r .= $this->makeKnownLinkObj( $block[0]->getTitle(), wfMsg( "history" ), "{$curIdEq}&action=history" );
- $r .= ")" ;
+ $r .= $this->makeKnownLinkObj( $block[0]->getTitle(), wfMsg( 'history' ), $curIdEq.'&action=history' );
+ $r .= ')' ;
}
$r .= $users ;
$r .= "<br />\n" ;
# Sub-entries
- $r .= "<div id='{$rci}' style='display:none'>" ;
+ $r .= '<div id="'.$rci.'" style="display:none">' ;
foreach ( $block AS $rcObj ) {
# Get rc_xxxx variables
extract( $rcObj->mAttribs );
- $r .= "<img src='{$wgStylePath}/images/Arr_.png' width=12 height=12 />";
- $r .= "<tt>&nbsp; &nbsp; &nbsp; &nbsp;" ;
+ $r .= '<img src="'.$wgStylePath.'/images/Arr_.png" width="12" height="12" />';
+ $r .= '<tt>&nbsp; &nbsp; &nbsp; &nbsp;' ;
if ( $rc_new ) $r .= $N ;
- else $r .= "&nbsp;" ;
+ else $r .= '&nbsp;' ;
if ( $rc_minor ) $r .= $M ;
- else $r .= "&nbsp;" ;
- $r .= "</tt>" ;
+ else $r .= '&nbsp;' ;
+ $r .= '</tt>' ;
- $o = "" ;
+ $o = '' ;
if ( $rc_last_oldid != 0 ) {
- $o = "oldid=".$rc_last_oldid ;
+ $o = 'oldid='.$rc_last_oldid ;
}
if ( $rc_type == RC_LOG ) {
$link = $rcObj->timestamp ;
} else {
$link = $this->makeKnownLinkObj( $rcObj->getTitle(), $rcObj->timestamp , "{$curIdEq}&$o" ) ;
}
- $link = "<tt>{$link}</tt>" ;
+ $link = '<tt>'.$link.'</tt>' ;
$r .= $link ;
- $r .= " (" ;
+ $r .= ' (' ;
$r .= $rcObj->curlink ;
- $r .= "; " ;
+ $r .= '; ' ;
$r .= $rcObj->lastlink ;
- $r .= ") . . ".$rcObj->userlink ;
+ $r .= ') . . '.$rcObj->userlink ;
$r .= $rcObj->usertalklink ;
- if ( $rc_comment != "" ) {
+ if ( $rc_comment != '' ) {
$rc_comment=$this->formatComment($rc_comment);
- $r .= $wgLang->emphasize( " (".$rc_comment.")" ) ;
+ $r .= $wgLang->emphasize( ' ('.$rc_comment.')' ) ;
}
$r .= "<br />\n" ;
}
@@ -2157,8 +2228,8 @@ class Skin {
function recentChangesBlock ()
{
global $wgStylePath ;
- if ( count ( $this->rc_cache ) == 0 ) return "" ;
- $blockOut = "";
+ if ( count ( $this->rc_cache ) == 0 ) return '' ;
+ $blockOut = '';
foreach ( $this->rc_cache AS $secureName => $block ) {
if ( count ( $block ) < 2 ) {
$blockOut .= $this->recentChangesBlockLine ( array_shift ( $block ) ) ;
@@ -2167,7 +2238,7 @@ class Skin {
}
}
- return "<div>{$blockOut}</div>" ;
+ return '<div>'.$blockOut.'</div>' ;
}
# Called in a loop over all displayed RC entries
@@ -2175,7 +2246,7 @@ class Skin {
function recentChangesLine( &$rc, $watched = false )
{
global $wgUser ;
- $usenew = $wgUser->getOption( "usenewrc" );
+ $usenew = $wgUser->getOption( 'usenewrc' );
if ( $usenew )
$line = $this->recentChangesLineNew ( $rc, $watched ) ;
else
@@ -2189,70 +2260,70 @@ class Skin {
# Extract DB fields into local scope
extract( $rc->mAttribs );
- $curIdEq = "curid=" . $rc_cur_id;
+ $curIdEq = 'curid=' . $rc_cur_id;
# Make date header if necessary
$date = $wgLang->date( $rc_timestamp, true);
- $s = "";
+ $s = '';
if ( $date != $this->lastdate ) {
- if ( "" != $this->lastdate ) { $s .= "</ul>\n"; }
+ if ( '' != $this->lastdate ) { $s .= "</ul>\n"; }
$s .= "<h4>{$date}</h4>\n<ul class='special'>";
$this->lastdate = $date;
$this->rclistOpen = true;
}
- $s .= "<li> ";
+ $s .= '<li> ';
if ( $rc_type == RC_MOVE ) {
# Diff
- $s .= "(" . wfMsg( "diff" ) . ") (";
+ $s .= '(' . wfMsg( 'diff' ) . ') (';
# Hist
- $s .= $this->makeKnownLinkObj( $rc->getMovedToTitle(), wfMsg( "hist" ), "action=history" ) .
- ") . . ";
+ $s .= $this->makeKnownLinkObj( $rc->getMovedToTitle(), wfMsg( 'hist' ), 'action=history' ) .
+ ') . . ';
# "[[x]] moved to [[y]]"
- $s .= wfMsg( "1movedto2", $this->makeKnownLinkObj( $rc->getTitle(), "", "redirect=no" ),
- $this->makeKnownLinkObj( $rc->getMovedToTitle(), "" ) );
+ $s .= wfMsg( '1movedto2', $this->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ),
+ $this->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) );
} else {
# Diff link
if ( $rc_type == RC_NEW || $rc_type == RC_LOG ) {
- $diffLink = wfMsg( "diff" );
+ $diffLink = wfMsg( 'diff' );
} else {
- $diffLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( "diff" ),
- "{$curIdEq}&diff={$rc_this_oldid}&oldid={$rc_last_oldid}" ,'' ,'' , ' tabindex="'.$rc->counter.'"');
+ $diffLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( 'diff' ),
+ $curIdEq.'&diff='.$rc_this_oldid.'&oldid='.$rc_last_oldid ,'' ,'' , ' tabindex="'.$rc->counter.'"');
}
- $s .= "($diffLink) (";
+ $s .= '('.$diffLink.') (';
# History link
- $s .= $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( "hist" ), "{$curIdEq}&action=history" );
- $s .= ") . . ";
+ $s .= $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( 'hist' ), $curIdEq.'&action=history' );
+ $s .= ') . . ';
# M and N (minor and new)
- $M = wfMsg( "minoreditletter" );
- $N = wfMsg( "newpageletter" );
- if ( $rc_minor ) { $s .= " <strong>{$M}</strong>"; }
- if ( $rc_type == RC_NEW ) { $s .= "<strong>{$N}</strong>"; }
+ $M = wfMsg( 'minoreditletter' );
+ $N = wfMsg( 'newpageletter' );
+ if ( $rc_minor ) { $s .= ' <strong>'.$M.'</strong>'; }
+ if ( $rc_type == RC_NEW ) { $s .= '<strong>'.$N.'</strong>'; }
# Article link
- $articleLink = $this->makeKnownLinkObj( $rc->getTitle(), "" );
+ $articleLink = $this->makeKnownLinkObj( $rc->getTitle(), '' );
if ( $watched ) {
- $articleLink = "<strong>{$articleLink}</strong>";
+ $articleLink = '<strong>'.$articleLink.'</strong>';
}
- $s .= " $articleLink";
+ $s .= ' '.$articleLink;
}
# Timestamp
- $s .= "; " . $wgLang->time( $rc_timestamp, true, $wgRCSeconds ) . " . . ";
+ $s .= '; ' . $wgLang->time( $rc_timestamp, true, $wgRCSeconds ) . ' . . ';
# User link (or contributions for unregistered users)
if ( 0 == $rc_user ) {
- $userLink = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
- $rc_user_text, "target=" . $rc_user_text );
+ $userLink = $this->makeKnownLink( $wgLang->specialPage( 'Contributions' ),
+ $rc_user_text, 'target=' . $rc_user_text );
} else {
- $userLink = $this->makeLink( $wgLang->getNsText( NS_USER ) . ":{$rc_user_text}", $rc_user_text );
+ $userLink = $this->makeLink( $wgLang->getNsText( NS_USER ) . ':'.$rc_user_text, $rc_user_text );
}
$s .= $userLink;
@@ -2260,28 +2331,28 @@ class Skin {
$talkname=$wgLang->getNsText(NS_TALK); # use the shorter name
global $wgDisableAnonTalk;
if( 0 == $rc_user && $wgDisableAnonTalk ) {
- $userTalkLink = "";
+ $userTalkLink = '';
} else {
$utns=$wgLang->getNsText(NS_USER_TALK);
- $userTalkLink= $this->makeLink($utns . ":{$rc_user_text}", $talkname );
+ $userTalkLink= $this->makeLink($utns . ':'.$rc_user_text, $talkname );
}
# Block link
- $blockLink="";
+ $blockLink='';
if ( ( 0 == $rc_user ) && $wgUser->isSysop() ) {
$blockLink = $this->makeKnownLink( $wgLang->specialPage(
- "Blockip" ), wfMsg( "blocklink" ), "ip={$rc_user_text}" );
+ 'Blockip' ), wfMsg( 'blocklink' ), 'ip='.$rc_user_text );
}
if($blockLink) {
- if($userTalkLink) $userTalkLink .= " | ";
+ if($userTalkLink) $userTalkLink .= ' | ';
$userTalkLink .= $blockLink;
}
- if($userTalkLink) $s.=" ({$userTalkLink})";
+ if($userTalkLink) $s.=' ('.$userTalkLink.')';
# Add comment
- if ( "" != $rc_comment && "*" != $rc_comment && $rc_type != RC_MOVE ) {
+ if ( '' != $rc_comment && '*' != $rc_comment && $rc_type != RC_MOVE ) {
$rc_comment=$this->formatComment($rc_comment);
- $s .= $wgLang->emphasize(" (" . $rc_comment . ")");
+ $s .= $wgLang->emphasize(' (' . $rc_comment . ')');
}
$s .= "</li>\n";
@@ -2298,11 +2369,11 @@ class Skin {
# Extract fields from DB into the function scope (rc_xxxx variables)
extract( $rc->mAttribs );
- $curIdEq = "curid=" . $rc_cur_id;
+ $curIdEq = 'curid=' . $rc_cur_id;
# If it's a new day, add the headline and flush the cache
$date = $wgLang->date( $rc_timestamp, true);
- $ret = "" ;
+ $ret = '' ;
if ( $date != $this->lastdate ) {
# Process current cache
$ret = $this->recentChangesBlock () ;
@@ -2313,11 +2384,11 @@ class Skin {
# Make article link
if ( $rc_type == RC_MOVE ) {
- $clink = $this->makeKnownLinkObj( $rc->getTitle(), "", "redirect=no" );
- $clink .= " " . wfMsg("movedto") . " ";
- $clink .= $this->makeKnownLinkObj( $rc->getMovedToTitle(), "" );
+ $clink = $this->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' );
+ $clink .= ' ' . wfMsg('movedto') . ' ';
+ $clink .= $this->makeKnownLinkObj( $rc->getMovedToTitle(), '' );
} else {
- $clink = $this->makeKnownLinkObj( $rc->getTitle(), "" ) ;
+ $clink = $this->makeKnownLinkObj( $rc->getTitle(), '' ) ;
}
$time = $wgLang->time( $rc_timestamp, true, $wgRCSeconds );
@@ -2327,28 +2398,28 @@ class Skin {
# Make "cur" link
if ( ( $rc_type == RC_NEW && $rc_this_oldid == 0 ) || $rc_type == RC_LOG || $rc_type == RC_MOVE) {
- $curLink = wfMsg( "cur" );
+ $curLink = wfMsg( 'cur' );
} else {
- $curLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( "cur" ),
- "{$curIdEq}&diff=0&oldid={$rc_this_oldid}" ,'' ,'' , ' tabindex="'.$baseRC->counter.'"' );
+ $curLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( 'cur' ),
+ $curIdEq.'&diff=0&oldid='.$rc_this_oldid ,'' ,'' , ' tabindex="'.$baseRC->counter.'"' );
}
# Make "last" link
$titleObj = $rc->getTitle();
if ( $rc_last_oldid == 0 || $rc_type == RC_LOG || $rc_type == RC_MOVE ) {
- $lastLink = wfMsg( "last" );
+ $lastLink = wfMsg( 'last' );
} else {
- $lastLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( "last" ),
- "{$curIdEq}&diff={$rc_this_oldid}&oldid={$rc_last_oldid}" );
+ $lastLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( 'last' ),
+ $curIdEq.'&diff='.$rc_this_oldid.'&oldid='.$rc_last_oldid );
}
# Make user link (or user contributions for unregistered users)
if ( 0 == $rc_user ) {
- $userLink = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
- $rc_user_text, "target=" . $rc_user_text );
+ $userLink = $this->makeKnownLink( $wgLang->specialPage( 'Contributions' ),
+ $rc_user_text, 'target=' . $rc_user_text );
} else {
$userLink = $this->makeLink( $wgLang->getNsText(
- Namespace::getUser() ) . ":{$rc_user_text}", $rc_user_text );
+ Namespace::getUser() ) . ':'.$rc_user_text, $rc_user_text );
}
$rc->userlink = $userLink ;
@@ -2358,21 +2429,21 @@ class Skin {
# Make user talk link
$utns=$wgLang->getNsText(NS_USER_TALK);
$talkname=$wgLang->getNsText(NS_TALK); # use the shorter name
- $userTalkLink= $this->makeLink($utns . ":{$rc_user_text}", $talkname );
+ $userTalkLink= $this->makeLink($utns . ':'.$rc_user_text, $talkname );
global $wgDisableAnonTalk;
if ( ( 0 == $rc_user ) && $wgUser->isSysop() ) {
$blockLink = $this->makeKnownLink( $wgLang->specialPage(
- "Blockip" ), wfMsg( "blocklink" ), "ip={$rc_user_text}" );
+ 'Blockip' ), wfMsg( 'blocklink' ), 'ip='.$rc_user_text );
if( $wgDisableAnonTalk )
- $rc->usertalklink = " ({$blockLink})";
+ $rc->usertalklink = ' ('.$blockLink.')';
else
- $rc->usertalklink = " ({$userTalkLink} | {$blockLink})";
+ $rc->usertalklink = ' ('.$userTalkLink.' | '.$blockLink.')';
} else {
if( $wgDisableAnonTalk && ($rc_user == 0) )
- $rc->usertalklink = "";
+ $rc->usertalklink = '';
else
- $rc->usertalklink = " ({$userTalkLink})";
+ $rc->usertalklink = ' ('.$userTalkLink.')';
}
# Put accumulated information into the cache, for later display
@@ -2381,7 +2452,7 @@ class Skin {
$secureName = $title->getPrefixedDBkey();
if ( $rc_type == RC_MOVE ) {
# Use an @ character to prevent collision with page names
- $this->rc_cache["@@" . ($this->rcMoveIndex++)] = array($rc);
+ $this->rc_cache['@@' . ($this->rcMoveIndex++)] = array($rc);
} else {
if ( !isset ( $this->rc_cache[$secureName] ) ) $this->rc_cache[$secureName] = array() ;
array_push ( $this->rc_cache[$secureName] , $rc ) ;
@@ -2410,33 +2481,34 @@ class Skin {
# some nasty regex.
# We look for all comments, match any text before and after the comment,
# add a separator where needed and format the comment itself with CSS
- while (preg_match("/(.*)\/\*\s*(.*?)\s*\*\/(.*)/", $comment,$match)) {
+ while (preg_match('/(.*)\/\*\s*(.*?)\s*\*\/(.*)/', $comment,$match)) {
$pre=$match[1];
$auto=$match[2];
$post=$match[3];
- $sep="-";
- if($pre) { $auto="$sep ".$auto; }
- if($post) { $auto.=" $sep"; }
- $auto="<span class=\"autocomment\">".$auto."</span>";
+ $sep='-';
+ if($pre) { $auto = $sep.' '.$auto; }
+ if($post) { $auto .= ' '.$sep; }
+ $auto='<span class="autocomment">'.$auto.'</span>';
$comment=$pre.$auto.$post;
}
# format regular and media links - all other wiki formatting
# is ignored
- while(preg_match("/\[\[(.*?)(\|(.*?))*\]\]/",$comment,$match)) {
+ while(preg_match('/\[\[(.*?)(\|(.*?))*\]\]/',$comment,$match)) {
- $medians = $wgLang->getNsText(Namespace::getMedia());
- $func="makeLink";
- if(preg_match("/^".$medians."/i",$match[1])) {
- $func="makeMediaLink";
+ $medians = $wgLang->getNsText(Namespace::getMedia()).':';
+ $func='makeLink';
+ if(preg_match('/^'.$medians.'/i',$match[1])) {
+ $func='makeMediaLink';
}
+ # Handle link renaming [[foo|text]] will show link as "text"
if(isset($match[3]) ) {
$comment=
- preg_replace("/\[\[(.*?)\]\]/",
+ preg_replace('/\[\[(.*?)\]\]/',
$this->$func($match[1],$match[3]),$comment,1);
} else {
$comment=
- preg_replace("/\[\[(.*?)\]\]/",
+ preg_replace('/\[\[(.*?)\]\]/',
$this->$func($match[1],$match[1]),$comment,1);
}
}
@@ -2450,18 +2522,18 @@ class Skin {
global $wgUser, $wgLang, $wgTitle;
$datetime = $wgLang->timeanddate( $timestamp, true );
- $del = wfMsg( "deleteimg" );
- $cur = wfMsg( "cur" );
+ $del = wfMsg( 'deleteimg' );
+ $cur = wfMsg( 'cur' );
if ( $iscur ) {
$url = Image::wfImageUrl( $img );
$rlink = $cur;
if ( $wgUser->isSysop() ) {
- $link = $wgTitle->escapeLocalURL( "image=" . $wgTitle->getPartialURL() .
- "&action=delete" );
+ $link = $wgTitle->escapeLocalURL( 'image=' . $wgTitle->getPartialURL() .
+ '&action=delete' );
$style = $this->getInternalLinkAttributes( $link, $del );
- $dlink = "<a href=\"{$link}\"{$style}>{$del}</a>";
+ $dlink = '<a href="'.$link.'"'.$style.'>'.$del.'</a>';
} else {
$dlink = $del;
}
@@ -2469,15 +2541,15 @@ class Skin {
$url = wfEscapeHTML( wfImageArchiveUrl( $img ) );
if( $wgUser->getID() != 0 ) {
$rlink = $this->makeKnownLink( $wgTitle->getPrefixedText(),
- wfMsg( "revertimg" ), "action=revert&oldimage=" .
+ wfMsg( 'revertimg' ), 'action=revert&oldimage=' .
urlencode( $img ) );
$dlink = $this->makeKnownLink( $wgTitle->getPrefixedText(),
- $del, "action=delete&oldimage=" . urlencode( $img ) );
+ $del, 'action=delete&oldimage=' . urlencode( $img ) );
} else {
# Having live active links for non-logged in users
# means that bots and spiders crawling our site can
# inadvertently change content. Baaaad idea.
- $rlink = wfMsg( "revertimg" );
+ $rlink = wfMsg( 'revertimg' );
$dlink = $del;
}
}
@@ -2485,24 +2557,24 @@ class Skin {
$userlink = $usertext;
} else {
$userlink = $this->makeLink( $wgLang->getNsText( Namespace::getUser() ) .
- ":{$usertext}", $usertext );
+ ':'.$usertext, $usertext );
}
- $nbytes = wfMsg( "nbytes", $size );
+ $nbytes = wfMsg( 'nbytes', $size );
$style = $this->getInternalLinkAttributes( $url, $datetime );
$s = "<li> ({$dlink}) ({$rlink}) <a href=\"{$url}\"{$style}>{$datetime}</a>"
. " . . {$userlink} ({$nbytes})";
- if ( "" != $description && "*" != $description ) {
+ if ( '' != $description && '*' != $description ) {
$sk=$wgUser->getSkin();
- $s .= $wgLang->emphasize(" (" . $sk->formatComment($description) . ")");
+ $s .= $wgLang->emphasize(' (' . $sk->formatComment($description) . ')');
}
$s .= "</li>\n";
return $s;
}
function tocIndent($level) {
- return str_repeat( "<div class='tocindent'>\n", $level>0 ? $level : 0 );
+ return str_repeat( '<div class="tocindent">'."\n", $level>0 ? $level : 0 );
}
function tocUnindent($level) {
@@ -2511,11 +2583,11 @@ class Skin {
# parameter level defines if we are on an indentation level
function tocLine( $anchor, $tocline, $level ) {
- $link = "<a href=\"#$anchor\">$tocline</a><br />";
+ $link = '<a href="#'.$anchor.'">'.$tocline.'</a><br />';
if($level) {
- return "$link\n";
+ return $link."\n";
} else {
- return "<div class='tocline'>$link</div>\n";
+ return '<div class="tocline">'.$link."</div>\n";
}
}
@@ -2523,45 +2595,45 @@ class Skin {
function tocTable($toc) {
# note to CSS fanatics: putting this in a div does not work -- div won't auto-expand
# try min-width & co when somebody gets a chance
- $hideline = " <script type='text/javascript'>showTocToggle(\"" . addslashes( wfMsg("showtoc") ) . "\",\"" . addslashes( wfMsg("hidetoc") ) . "\")</script>";
+ $hideline = ' <script type="text/javascript">showTocToggle("' . addslashes( wfMsg('showtoc') ) . '","' . addslashes( wfMsg('hidetoc') ) . '")</script>';
return
- "<table border=\"0\" id=\"toc\"><tr><td align=\"center\">\n".
- "<b>".wfMsg("toc")."</b>" .
+ '<table border="0" id="toc"><tr id="toctitle"><td align="center">'."\n".
+ '<b>'.wfMsg('toc').'</b>' .
$hideline .
- "</td></tr><tr id='tocinside'><td>\n".
+ '</td></tr><tr id="tocinside"><td>'."\n".
$toc."</td></tr></table>\n";
}
# These two do not check for permissions: check $wgTitle->userCanEdit before calling them
function editSectionScript( $section, $head ) {
global $wgTitle, $wgRequest;
- if( $wgRequest->getInt( "oldid" ) && ( $wgRequest->getVal( "diff" ) != "0" ) ) {
+ if( $wgRequest->getInt( 'oldid' ) && ( $wgRequest->getVal( 'diff' ) != '0' ) ) {
return $head;
}
- $url = $wgTitle->escapeLocalURL( "action=edit&section=$section" );
- return "<span oncontextmenu='document.location=\"$url\";return false;'>{$head}</span>";
+ $url = $wgTitle->escapeLocalURL( 'action=edit&section='.$section );
+ return '<span oncontextmenu=\'document.location="'.$url.'";return false;\'>'.$head.'</span>';
}
function editSectionLink( $section ) {
global $wgRequest;
global $wgTitle, $wgUser, $wgLang;
- if( $wgRequest->getInt( "oldid" ) && ( $wgRequest->getVal( "diff" ) != "0" ) ) {
+ if( $wgRequest->getInt( 'oldid' ) && ( $wgRequest->getVal( 'diff' ) != '0' ) ) {
# Section edit links would be out of sync on an old page.
# But, if we're diffing to the current page, they'll be
# correct.
- return "";
+ return '';
}
- $editurl = "&section={$section}";
- $url = $this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg("editsection"),"action=edit".$editurl);
+ $editurl = '&section='.$section;
+ $url = $this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('editsection'),'action=edit'.$editurl);
if( $wgLang->isRTL() ) {
- $farside = "left";
- $nearside = "right";
+ $farside = 'left';
+ $nearside = 'right';
} else {
- $farside = "right";
- $nearside = "left";
+ $farside = 'right';
+ $nearside = 'left';
}
return "<div class=\"editsection\" style=\"float:$farside;margin-$nearside:5px;\">[".$url."]</div>";
@@ -2583,12 +2655,12 @@ class Skin {
// can figure out a way to make them work in IE. However, we should make
// sure these keys are not defined on the edit page.
$toolarray=array(
- array( "image"=>"button_bold.png",
- "open"=>"\'\'\'",
- "close"=>"\'\'\'",
- "sample"=>wfMsg("bold_sample"),
- "tip"=>wfMsg("bold_tip"),
- "key"=>"B"
+ array( 'image'=>'button_bold.png',
+ 'open'=>"\'\'\'",
+ 'close'=>"\'\'\'",
+ 'sample'=>wfMsg('bold_sample'),
+ 'tip'=>wfMsg('bold_tip'),
+ 'key'=>'B'
),
array( "image"=>"button_italic.png",
"open"=>"\'\'",
@@ -2666,16 +2738,16 @@ class Skin {
$toolbar.="document.writeln(\"<div id='toolbar'>\");\n";
foreach($toolarray as $tool) {
- $image=$wgStylePath."/images/".$tool["image"];
- $open=$tool["open"];
- $close=$tool["close"];
- $sample = addslashes( $tool["sample"] );
+ $image=$wgStylePath.'/images/'.$tool['image'];
+ $open=$tool['open'];
+ $close=$tool['close'];
+ $sample = addslashes( $tool['sample'] );
// Note that we use the tip both for the ALT tag and the TITLE tag of the image.
// Older browsers show a "speedtip" type message only for ALT.
// Ideally these should be different, realistically they
// probably don't need to be.
- $tip = addslashes( $tool["tip"] );
+ $tip = addslashes( $tool['tip'] );
#$key = $tool["key"];
@@ -2691,12 +2763,12 @@ class Skin {
}
-require_once( "SkinStandard.php" );
-require_once( "SkinNostalgia.php" );
-require_once( "SkinCologneBlue.php" );
+require_once( 'SkinStandard.php' );
+require_once( 'SkinNostalgia.php' );
+require_once( 'SkinCologneBlue.php' );
if( $wgUsePHPTal ) {
- require_once( "SkinPHPTal.php" );
+ require_once( 'SkinPHPTal.php' );
}
diff --git a/includes/SkinCologneBlue.php b/includes/SkinCologneBlue.php
index 09336459db17..212e3939fddd 100644
--- a/includes/SkinCologneBlue.php
+++ b/includes/SkinCologneBlue.php
@@ -7,6 +7,9 @@ class SkinCologneBlue extends Skin {
{
return "cologneblue.css";
}
+ function getSkinName() {
+ return "cologneblue";
+ }
function doBeforeContent()
{
@@ -32,7 +35,9 @@ class SkinCologneBlue extends Skin {
$s .= "</td><td align='right'>" ;
$s .= "<font size='-1'><span id='langlinks'>" ;
- $s .= str_replace ( "<br>" , "" , $this->otherLanguages() ) ;
+ $s .= str_replace ( "<br>" , "" , $this->otherLanguages() );
+ $cat = $this->getCategoryLinks();
+ if( $cat ) $s .= "<br />$cat\n";
$s .= "<br />" . $this->pageTitleLinks();
$s .= "</span></font>";
@@ -79,8 +84,7 @@ class SkinCologneBlue extends Skin {
function doGetUserStyles()
{
global $wgUser, $wgOut, $wgStyleSheetPath;
-
- $s = parent::doGetUserStyles();
+ $s = '';
$qb = $this->qbSetting();
if ( 2 == $qb ) { # Right
@@ -95,6 +99,7 @@ class SkinCologneBlue extends Skin {
"#article { margin-left:148px; margin-right: 4px; } \n" .
"body>#quickbar { position:fixed; left:4px; top:4px; overflow:auto ;bottom:4px;} \n"; # Hides from IE
}
+ $s .= parent::doGetUserStyles();
return $s;
}
function sysLinks()
diff --git a/includes/SkinNostalgia.php b/includes/SkinNostalgia.php
index 3d990ee6705e..c97c681ddd9b 100644
--- a/includes/SkinNostalgia.php
+++ b/includes/SkinNostalgia.php
@@ -12,6 +12,9 @@ class SkinNostalgia extends Skin {
{
return "nostalgia.css";
}
+ function getSkinName() {
+ return "nostalgia";
+ }
function doBeforeContent()
{
@@ -28,6 +31,9 @@ class SkinNostalgia extends Skin {
$ol = $this->otherLanguages();
if($ol) $s .= "<br />" . $ol;
+
+ $cat = $this->getCategoryLinks();
+ if($cat) $s .= "<br />" . $cat;
$s .= "<br clear='all' /><hr />\n</div>\n";
$s .= "\n<div id='article'>";
diff --git a/includes/SkinPHPTal.php b/includes/SkinPHPTal.php
index bf39da259933..53e33ad6bfca 100644
--- a/includes/SkinPHPTal.php
+++ b/includes/SkinPHPTal.php
@@ -62,7 +62,7 @@
global $wgTitle, $wgArticle, $wgUser, $wgLang, $wgOut;
global $wgScript, $wgStylePath, $wgLanguageCode, $wgUseNewInterlanguage;
global $wgMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest;
- global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses;
+ global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses, $wgSiteNotice;
extract( $wgRequest->getValues( 'oldid', 'diff' ) );
@@ -83,20 +83,27 @@
$this->userpageUrlDetails = $this->makeUrlDetails($this->userpage);
$this->usercss = $this->userjs = $this->userjsprev = false;
- if( $this->loggedin ) { $this->setupUserCssJs(); }
+ $this->setupUserCssJs();
$this->titletxt = $wgTitle->getPrefixedText();
$tpl->set( "title", $wgOut->getPageTitle() );
$tpl->set( "pagetitle", $wgOut->getHTMLTitle() );
- $tpl->setRef( "thispage", &$this->thispage );
+ $tpl->setRef( "thispage", $this->thispage );
$subpagestr = $this->subPageSubtitle();
$tpl->set(
"subtitle", !empty($subpagestr)?
'<span class="subpages">'.$subpagestr.'</span>'.$out->getSubtitle():
$out->getSubtitle()
);
+ $undelete = $this->getUndeleteLink();
+ $tpl->set(
+ "undelete", !empty($undelete)?
+ '<span class="subpages">'.$undelete.'</span>':
+ ''
+ );
+
$tpl->set( 'catlinks', $this->getCategories());
if( $wgOut->isSyndicated() ) {
$feeds = array();
@@ -107,13 +114,14 @@
'ttip' => wfMsg('tooltip-'.$format)
);
}
- $tpl->setRef( 'feeds', &$feeds );
+ $tpl->setRef( 'feeds', $feeds );
}
- $tpl->setRef( 'mimetype', &$wgMimeType );
- $tpl->setRef( 'charset', &$wgOutputEncoding );
+ $tpl->setRef( 'mimetype', $wgMimeType );
+ $tpl->setRef( 'charset', $wgOutputEncoding );
$tpl->set( 'headlinks', $out->getHeadLinks() );
- $tpl->setRef( 'skinname', &$this->skinname );
- $tpl->setRef( "loggedin", &$this->loggedin );
+ $tpl->setRef( 'skinname', $this->skinname );
+ $tpl->setRef( "loggedin", $this->loggedin );
+ $tpl->set('nsclass', 'ns-'.$wgTitle->getNamespace());
/* XXX currently unused, might get useful later
$tpl->set( "editable", ($wgTitle->getNamespace() != NS_SPECIAL ) );
$tpl->set( "exists", $wgTitle->getArticleID() != 0 );
@@ -123,18 +131,23 @@
$tpl->set( "sysop", $wgUser->isSysop() );
*/
$tpl->set( "searchaction", $this->escapeSearchLink() );
- $tpl->setRef( "stylepath", &$wgStylePath );
- $tpl->setRef( "logopath", &$wgLogo );
- $tpl->setRef( "lang", &$wgLanguageCode );
+ $tpl->setRef( "stylepath", $wgStylePath );
+ $tpl->setRef( "logopath", $wgLogo );
+ $tpl->setRef( "lang", $wgLanguageCode );
$tpl->set( "dir", $wgLang->isRTL() ? "rtl" : "ltr" );
$tpl->set( "rtl", $wgLang->isRTL() );
$tpl->set( "langname", $wgLang->getLanguageName( $wgLanguageCode ) );
- $tpl->setRef( "username", &$this->username );
- $tpl->setRef( "userpage", &$this->userpage);
- $tpl->setRef( "userpageurl", &$this->userpageUrlDetails['href']);
- $tpl->setRef( "usercss", &$this->usercss);
- $tpl->setRef( "userjs", &$this->userjs);
- $tpl->setRef( "userjsprev", &$this->userjsprev);
+ $tpl->setRef( "username", $this->username );
+ $tpl->setRef( "userpage", $this->userpage);
+ $tpl->setRef( "userpageurl", $this->userpageUrlDetails['href']);
+ $tpl->setRef( "usercss", $this->usercss);
+ $tpl->setRef( "userjs", $this->userjs);
+ $tpl->setRef( "userjsprev", $this->userjsprev);
+ if($this->loggedin) {
+ $tpl->set( "jsvarurl", $this->makeUrl('-','action=raw&gen=js&smaxage=0') );
+ } else {
+ $tpl->set( "jsvarurl", $this->makeUrl('-','action=raw&gen=js') );
+ }
if( $wgUser->getNewtalk() ) {
$usertitle = Title::newFromText( $this->userpage );
$usertalktitle = $usertitle->getTalkPage();
@@ -151,8 +164,8 @@
$ntl = "";
}
- $tpl->setRef( "newtalk", &$ntl );
- $tpl->setRef( "skin", &$this);
+ $tpl->setRef( "newtalk", $ntl );
+ $tpl->setRef( "skin", $this);
$tpl->set( "logo", $this->logoText() );
if ( $wgOut->isArticle() and (!isset( $oldid ) or isset( $diff )) and 0 != $wgArticle->getID() ) {
if ( !$wgDisableCounters ) {
@@ -169,10 +182,11 @@
$tpl->set( "disclaimer", $this->disclaimerLink() );
$tpl->set( "about", $this->aboutLink() );
- $tpl->setRef( "debug", &$out->mDebugtext );
+ $tpl->setRef( "debug", $out->mDebugtext );
$tpl->set( "reporttime", $out->reportTime() );
-
- $tpl->setRef( "bodytext", &$out->mBodytext );
+ $tpl->set( "sitenotice", $wgSiteNotice );
+
+ $tpl->setRef( "bodytext", $out->mBodytext );
$language_urls = array();
foreach( $wgOut->getLanguageLinks() as $l ) {
@@ -182,13 +196,13 @@
'class' => $wgLang->isRTL() ? 'rtl' : 'ltr');
}
if(count($language_urls)) {
- $tpl->setRef( 'language_urls', &$language_urls);
+ $tpl->setRef( 'language_urls', $language_urls);
} else {
$tpl->set('language_urls', false);
}
$tpl->set('personal_urls', $this->buildPersonalUrls());
$content_actions = $this->buildContentActionUrls();
- $tpl->setRef('content_actions', &$content_actions);
+ $tpl->setRef('content_actions', $content_actions);
// XXX: attach this from javascript, same with section editing
if($this->iseditable && $wgUser->getOption("editondblclick") )
{
@@ -218,72 +232,52 @@
$personal_urls['userpage'] = array(
'text' => $this->username,
'href' => &$this->userpageUrlDetails['href'],
- 'class' => $this->userpageUrlDetails['exists']?false:'new',
- 'ttip' => wfMsg('tooltip-userpage'),
- 'akey' => wfMsg('accesskey-userpage')
+ 'class' => $this->userpageUrlDetails['exists']?false:'new'
);
$usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage);
$personal_urls['mytalk'] = array(
'text' => wfMsg('mytalk'),
'href' => &$usertalkUrlDetails['href'],
- 'class' => $usertalkUrlDetails['exists']?false:'new',
- 'ttip' => wfMsg('tooltip-mytalk'),
- 'akey' => wfMsg('accesskey-mytalk')
+ 'class' => $usertalkUrlDetails['exists']?false:'new'
);
$personal_urls['preferences'] = array(
'text' => wfMsg('preferences'),
- 'href' => $this->makeSpecialUrl('Preferences'),
- 'ttip' => wfMsg('tooltip-preferences'),
- 'akey' => wfMsg('accesskey-preferences')
+ 'href' => $this->makeSpecialUrl('Preferences')
);
$personal_urls['watchlist'] = array(
'text' => wfMsg('watchlist'),
- 'href' => $this->makeSpecialUrl('Watchlist'),
- 'ttip' => wfMsg('tooltip-watchlist'),
- 'akey' => wfMsg('accesskey-watchlist')
+ 'href' => $this->makeSpecialUrl('Watchlist')
);
$personal_urls['mycontris'] = array(
'text' => wfMsg('mycontris'),
- 'href' => $this->makeSpecialUrl('Contributions','target=' . $this->username),
- 'ttip' => wfMsg('tooltip-mycontris'),
- 'akey' => wfMsg('accesskey-mycontris')
+ 'href' => $this->makeSpecialUrl('Contributions','target=' . urlencode( $this->username ) )
);
$personal_urls['logout'] = array(
'text' => wfMsg('userlogout'),
- 'href' => $this->makeSpecialUrl('Userlogout','returnto=' . $this->thisurl),
- 'ttip' => wfMsg('tooltip-logout'),
- 'akey' => wfMsg('accesskey-logout')
+ 'href' => $this->makeSpecialUrl('Userlogout','returnto=' . $this->thisurl )
);
} else {
if( $wgShowIPinHeader && isset( $_COOKIE[ini_get("session.name")] ) ) {
$personal_urls['anonuserpage'] = array(
'text' => $this->username,
'href' => &$this->userpageUrlDetails['href'],
- 'class' => $this->userpageUrlDetails['exists']?false:'new',
- 'ttip' => wfMsg('tooltip-anonuserpage'),
- 'akey' => wfMsg('accesskey-anonuserpage')
+ 'class' => $this->userpageUrlDetails['exists']?false:'new'
);
$usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage);
$personal_urls['anontalk'] = array(
'text' => wfMsg('anontalk'),
'href' => &$usertalkUrlDetails['href'],
- 'class' => $usertalkUrlDetails['exists']?false:'new',
- 'ttip' => wfMsg('tooltip-anontalk'),
- 'akey' => wfMsg('accesskey-anontalk')
+ 'class' => $usertalkUrlDetails['exists']?false:'new'
);
$personal_urls['anonlogin'] = array(
'text' => wfMsg('userlogin'),
- 'href' => $this->makeSpecialUrl('Userlogin', 'returnto='.$this->thisurl),
- 'ttip' => wfMsg('tooltip-login'),
- 'akey' => wfMsg('accesskey-login')
+ 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl )
);
} else {
$personal_urls['login'] = array(
'text' => wfMsg('userlogin'),
- 'href' => $this->makeSpecialUrl('Userlogin', 'returnto='.$this->thisurl),
- 'ttip' => wfMsg('tooltip-login'),
- 'akey' => wfMsg('accesskey-login')
+ 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl )
);
}
}
@@ -302,32 +296,27 @@
if( $this->iscontent ) {
- $content_actions['article'] = array('class' => (!Namespace::isTalk( $wgTitle->getNamespace())) ? 'selected' : false,
- 'text' => $this->getNameSpaceWord(),
- 'href' => $this->makeArticleUrl($this->thispage),
- 'ttip' => wfMsg('tooltip-article'),
- 'akey' => wfMsg('accesskey-article'));
+ $nskey = $this->getNameSpaceKey();
+ $content_actions[$nskey] = array('class' => (!Namespace::isTalk( $wgTitle->getNamespace())) ? 'selected' : false,
+ 'text' => wfMsg($nskey),
+ 'href' => $this->makeArticleUrl($this->thispage));
/* set up the classes for the talk link */
$talk_class = (Namespace::isTalk( $wgTitle->getNamespace()) ? 'selected' : false);
$talktitle = Title::newFromText( $this->titletxt );
$talktitle = $talktitle->getTalkPage();
- $this->checkTitle(&$talktitle, &$this->titletxt);
+ $this->checkTitle($talktitle, $this->titletxt);
if($talktitle->getArticleId() != 0) {
$content_actions['talk'] = array(
'class' => $talk_class,
'text' => wfMsg('talk'),
- 'href' => $this->makeTalkUrl($this->titletxt),
- 'ttip' => wfMsg('tooltip-talk'),
- 'akey' => wfMsg('accesskey-talk')
+ 'href' => $this->makeTalkUrl($this->titletxt)
);
} else {
$content_actions['talk'] = array(
'class' => $talk_class?$talk_class.' new':'new',
'text' => wfMsg('talk'),
- 'href' => $this->makeTalkUrl($this->titletxt,'action=edit'),
- 'ttip' => wfMsg('tooltip-talk'),
- 'akey' => wfMsg('accesskey-talk')
+ 'href' => $this->makeTalkUrl($this->titletxt,'action=edit')
);
}
@@ -338,35 +327,27 @@
$content_actions['edit'] = array(
'class' => ((($action == 'edit' or $action == 'submit') and $section != 'new') ? 'selected' : '').$istalkclass,
'text' => wfMsg('edit'),
- 'href' => $this->makeUrl($this->thispage, 'action=edit'.$oid),
- 'ttip' => wfMsg('tooltip-edit'),
- 'akey' => wfMsg('accesskey-edit')
+ 'href' => $this->makeUrl($this->thispage, 'action=edit'.$oid)
);
if ( $istalk ) {
$content_actions['addsection'] = array(
'class' => $section == 'new'?'selected':false,
'text' => wfMsg('addsection'),
- 'href' => $this->makeUrl($this->thispage, 'action=edit&section=new'),
- 'ttip' => wfMsg('tooltip-addsection'),
- 'akey' => wfMsg('accesskey-addsection')
+ 'href' => $this->makeUrl($this->thispage, 'action=edit&section=new')
);
}
} else {
$oid = ( $oldid && ! isset( $diff ) ) ? "&oldid={$oldid}" : '';
- $content_actions['edit'] = array('class' => ($action == 'edit') ? 'selected' : false,
+ $content_actions['viewsource'] = array('class' => ($action == 'edit') ? 'selected' : false,
'text' => wfMsg('viewsource'),
- 'href' => $this->makeUrl($this->thispage, 'action=edit'.$oid),
- 'ttip' => wfMsg('tooltip-viewsource'),
- 'akey' => wfMsg('accesskey-viewsource'));
+ 'href' => $this->makeUrl($this->thispage, 'action=edit'.$oid));
}
if ( $wgTitle->getArticleId() ) {
$content_actions['history'] = array('class' => ($action == 'history') ? 'selected' : false,
'text' => wfMsg('history_short'),
- 'href' => $this->makeUrl($this->thispage, 'action=history'),
- 'ttip' => wfMsg('tooltip-history'),
- 'akey' => wfMsg('accesskey-history'));
+ 'href' => $this->makeUrl($this->thispage, 'action=history'));
# XXX: is there a rollback action anywhere or is it planned?
# Don't recall where i got this from...
@@ -383,41 +364,32 @@
$content_actions['protect'] = array(
'class' => ($action == 'protect') ? 'selected' : false,
'text' => wfMsg('protect'),
- 'href' => $this->makeUrl($this->thispage, 'action=protect'),
- 'ttip' => wfMsg('tooltip-protect'),
- 'akey' => wfMsg('accesskey-protect')
+ 'href' => $this->makeUrl($this->thispage, 'action=protect')
);
} else {
$content_actions['unprotect'] = array(
'class' => ($action == 'unprotect') ? 'selected' : false,
'text' => wfMsg('unprotect'),
- 'href' => $this->makeUrl($this->thispage, 'action=unprotect'),
- 'ttip' => wfMsg('tooltip-protect'),
- 'akey' => wfMsg('accesskey-protect')
+ 'href' => $this->makeUrl($this->thispage, 'action=unprotect')
);
}
$content_actions['delete'] = array(
'class' => ($action == 'delete') ? 'selected' : false,
'text' => wfMsg('delete'),
- 'href' => $this->makeUrl($this->thispage, 'action=delete'),
- 'ttip' => wfMsg('tooltip-delete'),
- 'akey' => wfMsg('accesskey-delete')
+ 'href' => $this->makeUrl($this->thispage, 'action=delete')
);
}
if ( $wgUser->getID() != 0 ) {
if ( $wgTitle->userCanEdit()) {
$content_actions['move'] = array('class' => ($wgTitle->getDbKey() == 'Movepage' and $wgTitle->getNamespace == Namespace::getSpecial()) ? 'selected' : false,
'text' => wfMsg('move'),
- 'href' => $this->makeSpecialUrl('Movepage', 'target='.$this->thispage),
- 'ttip' => wfMsg('tooltip-move'),
- 'akey' => wfMsg('accesskey-move'));
+ 'href' => $this->makeSpecialUrl('Movepage', 'target='. urlencode( $this->thispage ))
+ );
} else {
$content_actions['move'] = array('class' => 'inactive',
'text' => wfMsg('move'),
- 'href' => false,
- 'ttip' => wfMsg('tooltip-nomove'),
- 'akey' => false);
+ 'href' => false);
}
}
@@ -428,9 +400,7 @@
$content_actions['delete'] = array(
'class' => false,
'text' => wfMsg( "undelete_short", $n ),
- 'href' => $this->makeSpecialUrl('Undelete/'.$this->thispage),
- 'ttip' => wfMsg('tooltip-undelete', $n),
- 'akey' => wfMsg('accesskey-undelete')
+ 'href' => $this->makeSpecialUrl('Undelete/'.$this->thispage)
);
}
}
@@ -440,16 +410,11 @@
if( !$wgTitle->userIsWatching()) {
$content_actions['watch'] = array('class' => ($action == 'watch' or $action == 'unwatch') ? 'selected' : false,
'text' => wfMsg('watch'),
- 'href' => $this->makeUrl($this->thispage, 'action=watch'),
- 'ttip' => wfMsg('tooltip-watch'),
- 'akey' => wfMsg('accesskey-watch'));
+ 'href' => $this->makeUrl($this->thispage, 'action=watch'));
} else {
$content_actions['watch'] = array('class' => ($action == 'unwatch' or $action == 'watch') ? 'selected' : false,
'text' => wfMsg('unwatch'),
- 'href' => $this->makeUrl($this->thispage, 'action=unwatch'),
- 'ttip' => wfMsg('tooltip-unwatch'),
- 'akey' => wfMsg('accesskey-unwatch'));
-
+ 'href' => $this->makeUrl($this->thispage, 'action=unwatch'));
}
}
} else {
@@ -457,9 +422,7 @@
$content_actions['article'] = array('class' => 'selected',
'text' => wfMsg('specialpage'),
- 'href' => false,
- 'ttip' => wfMsg('tooltip-specialpage'),
- 'akey' => false);
+ 'href' => false);
}
return $content_actions;
@@ -478,10 +441,10 @@
$nav_urls['mainpage'] = array('href' => htmlspecialchars( $this->makeI18nUrl('mainpage')));
$nav_urls['randompage'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Randompage')));
$nav_urls['recentchanges'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Recentchanges')));
- $nav_urls['whatlinkshere'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Whatlinkshere', 'target='.$this->thispage)));
+ $nav_urls['whatlinkshere'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Whatlinkshere', 'target='.urlencode( $this->thispage ))));
$nav_urls['currentevents'] = (wfMsg('currentevents') != '-') ? array('href' => htmlspecialchars( $this->makeI18nUrl('currentevents'))) : false;
$nav_urls['portal'] = (wfMsg('portal') != '-') ? array('href' => htmlspecialchars( $this->makeI18nUrl('portal-url'))) : false;
- $nav_urls['recentchangeslinked'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Recentchangeslinked', 'target='.$this->thispage)));
+ $nav_urls['recentchangeslinked'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Recentchangeslinked', 'target='.urlencode( $this->thispage ))));
$nav_urls['bugreports'] = array('href' => htmlspecialchars( $this->makeI18nUrl('bugreportspage')));
// $nav_urls['sitesupport'] = array('href' => htmlspecialchars( $this->makeI18nUrl('sitesupportpage')));
$nav_urls['sitesupport'] = array('href' => htmlspecialchars( $wgSiteSupportPage));
@@ -489,9 +452,13 @@
$nav_urls['upload'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Upload')));
$nav_urls['specialpages'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Specialpages')));
-
- $id=User::idFromName($wgTitle->getText());
- $ip=User::isIP($wgTitle->getText());
+ if( $wgTitle->getNamespace() == NS_USER || $wgTitle->getNamespace() == NS_USER_TALK ) {
+ $id = User::idFromName($wgTitle->getText());
+ $ip = User::isIP($wgTitle->getText());
+ } else {
+ $id = 0;
+ $ip = false;
+ }
if($id || $ip) { # both anons and non-anons have contri list
$nav_urls['contributions'] = array(
@@ -510,58 +477,101 @@
return $nav_urls;
}
- function getNameSpaceWord () {
+ function getNameSpaceKey () {
global $wgTitle;
switch ($wgTitle->getNamespace()) {
case NS_MAIN:
case NS_TALK:
- return wfMsg('nstab-main');
+ return 'nstab-main';
case NS_USER:
case NS_USER_TALK:
- return wfMsg('nstab-user');
+ return 'nstab-user';
case NS_MEDIA:
- return wfMsg('nstab-media');
+ return 'nstab-media';
case NS_SPECIAL:
- return wfMsg('nstab-special');
+ return 'nstab-special';
case NS_WP:
case NS_WP_TALK:
- return wfMsg('nstab-wp');
+ return 'nstab-wp';
case NS_IMAGE:
case NS_IMAGE_TALK:
- return wfMsg('nstab-image');
+ return 'nstab-image';
case NS_MEDIAWIKI:
case NS_MEDIAWIKI_TALK:
- return wfMsg('nstab-mediawiki');
+ return 'nstab-mediawiki';
case NS_TEMPLATE:
case NS_TEMPLATE_TALK:
- return wfMsg('nstab-template');
+ return 'nstab-template';
case NS_HELP:
case NS_HELP_TALK:
- return wfMsg('nstab-help');
+ return 'nstab-help';
case NS_CATEGORY:
case NS_CATEGORY_TALK:
- return wfMsg('nstab-category');
+ return 'nstab-category';
default:
- return wfMsg('nstab-main');
+ return 'nstab-main';
}
}
/* private */ function setupUserCssJs () {
global $wgRequest, $wgTitle;
$action = $wgRequest->getText('action');
- if($wgTitle->isCssSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) {
- // css preview
- $this->usercss = $wgRequest->getText('wpTextbox1');
- } else {
- $this->usercss = '@import url('.
- $this->makeUrl($this->userpage.'/'.$this->skinname.'.css', 'action=raw&ctype=text/css').');';
+ # generated css
+ $this->usercss = '@import "'.$this->makeUrl('-','action=raw&gen=css').'";'."\n";
+
+ if( $this->loggedin ) {
+ if($wgTitle->isCssSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) {
+ # generated css
+ $this->usercss = '@import "'.$this->makeUrl('-','action=raw&gen=css&smaxage=0&maxage=0').');'."\n";
+ // css preview
+ $this->usercss .= $wgRequest->getText('wpTextbox1');
+ } else {
+ # generated css
+ $this->usercss .= '@import "'.$this->makeUrl('-','action=raw&gen=css&smaxage=0').'";'."\n";
+ # import user stylesheet
+ $this->usercss .= '@import "'.
+ $this->makeUrl($this->userpage.'/'.$this->skinname.'.css', 'action=raw&ctype=text/css').'";'."\n";
+ }
+ if($wgTitle->isJsSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) {
+ # XXX: additional security check/prompt?
+ $this->userjsprev = $wgRequest->getText('wpTextbox1');
+ } else {
+ $this->userjs = $this->makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype=text/javascript');
+ }
}
- if($wgTitle->isJsSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) {
- # XXX: additional security check/prompt?
- $this->userjsprev = $wgRequest->getText('wpTextbox1');
- } else {
- $this->userjs = $this->makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype=text/javascript');
+ }
+ # returns css with user-specific options
+ function getUserStylesheet() {
+ global $wgUser, $wgRequest, $wgTitle, $wgLang, $wgSquidMaxage, $wgStylePath;
+ $action = $wgRequest->getText('action');
+ $maxage = $wgRequest->getText('maxage');
+ $s = "/* generated user stylesheet */\n";
+ if($wgLang->isRTL()) $s .= '@import "'.$wgStylePath.'/'.$this->skinname.'/rtl.css";'."\n";
+ $s .= '@import "'.
+ $this->makeNSUrl(ucfirst($this->skinname).'.css', 'action=raw&ctype=text/css&smaxage='.$wgSquidMaxage, NS_MEDIAWIKI)."\";\n";
+ if($wgUser->getID() != 0) {
+ if ( 1 == $wgUser->getOption( "underline" ) ) {
+ $s .= "a { text-decoration: underline; }\n";
+ } else {
+ $s .= "a { text-decoration: none; }\n";
+ }
+ }
+ if ( 1 != $wgUser->getOption( "highlightbroken" ) ) {
+ $s .= "a.new, #quickbar a.new { color: #CC2200; }\n";
+ }
+ if ( 1 == $wgUser->getOption( "justify" ) ) {
+ $s .= "#bodyContent { text-align: justify; }\n";
}
+ return $s;
}
+ function getUserJs() {
+ global $wgUser, $wgStylePath;
+ $s = "/* generated javascript */";
+ $s .= "var skin = '{$this->skinname}';\nvar stylepath = '{$wgStylePath}';";
+ $s .= '/* MediaWiki:'.ucfirst($this->skinname)." */\n";
+ $s .= wfMsg(ucfirst($this->skinname).'.js');
+ return $s;
+ }
+
}
class SkinDaVinci extends SkinPHPTal {
@@ -584,5 +594,12 @@
$this->skinname = "monobook";
}
}
+
+ class SkinMySkin extends SkinPHPTal {
+ function initPage( &$out ) {
+ SkinPHPTal::initPage( $out );
+ $this->skinname = "myskin";
+ }
+ }
?>
diff --git a/includes/SkinStandard.php b/includes/SkinStandard.php
index 929fc3e91827..ba367a370d85 100644
--- a/includes/SkinStandard.php
+++ b/includes/SkinStandard.php
@@ -18,12 +18,12 @@ class SkinStandard extends Skin {
function getUserStyles()
{
global $wgStylePath;
-
- $s = parent::getUserStyles();
+ $s = '';
if ( 3 == $this->qbSetting() ) { # Floating left
$s .= "<style type='text/css'>\n" .
"@import '{$wgStylePath}/quickbar.css';\n</style>\n";
}
+ $s .= parent::getUserStyles();
return $s;
}
diff --git a/includes/SpecialAllpages.php b/includes/SpecialAllpages.php
index 67246e447f01..ccac741ebd28 100644
--- a/includes/SpecialAllpages.php
+++ b/includes/SpecialAllpages.php
@@ -52,7 +52,7 @@ function indexShowToplevel()
# There's got to be a cleaner way to do this!
for( $i = 1; $i < $sections; $i++ ) {
$from = $i * $indexMaxperpage;
- $sql = "SELECT cur_title $fromwhere $order LIMIT $from,2";
+ $sql = "SELECT cur_title $fromwhere $order ".wfLimitResult(2,$from);
$res = wfQuery( $sql, DB_READ, $fname );
$s = wfFetchObject( $res );
@@ -66,7 +66,7 @@ function indexShowToplevel()
}
$from = $i * $indexMaxperpage;
- $sql = "SELECT cur_title $fromwhere $order LIMIT " . ($count-1) . ",1";
+ $sql = "SELECT cur_title $fromwhere $order ".wfLimitResult(1,$count-1);
$res = wfQuery( $sql, DB_READ, $fname );
$s = wfFetchObject( $res );
$outpoint = $s->cur_title;
diff --git a/includes/SpecialAncientpages.php b/includes/SpecialAncientpages.php
index 52bc0058b3b2..3aa93a54a47d 100644
--- a/includes/SpecialAncientpages.php
+++ b/includes/SpecialAncientpages.php
@@ -13,12 +13,14 @@ class AncientPagesPage extends QueryPage {
}
function getSQL() {
+ global $wgIsMySQL;
+ $use_index=$wgIsMySQL?"USE INDEX (cur_timestamp)":"";
return
"SELECT 'Ancientpages' as type,
cur_namespace as namespace,
cur_title as title,
UNIX_TIMESTAMP(cur_timestamp) as value
- FROM cur USE INDEX (cur_timestamp)
+ FROM cur $use_index
WHERE cur_namespace=0 AND cur_is_redirect=0";
}
diff --git a/includes/SpecialCategories.php b/includes/SpecialCategories.php
index 1a3efca0ccee..6cc493e7ccdf 100644
--- a/includes/SpecialCategories.php
+++ b/includes/SpecialCategories.php
@@ -1,45 +1,44 @@
<?php
+require_once("QueryPage.php");
+
+class CategoriesPage extends QueryPage {
+
+ function getName() {
+ return "Categories";
+ }
+
+ function isExpensive() {
+ return false;
+ }
+
+ function getSQL() {
+ $NScat = NS_CATEGORY;
+ return "SELECT DISTINCT 'Categories' as type,
+ {$NScat} as namespace,
+ cl_to as title,
+ 1 as value
+ FROM categorylinks";
+ }
+
+ function sortDescending() {
+ return false;
+ }
+
+ function formatResult( $skin, $result ) {
+ global $wgLang;
+ $title = Title::makeTitle( NS_CATEGORY, $result->title );
+ return $skin->makeLinkObj( $title, $title->getText() );
+ }
+}
+
function wfSpecialCategories()
{
- global $wgUser, $wgOut , $wgLang;
-
- $sk = $wgUser->getSkin() ;
- $sc = "Special:Categories" ;
-
- # List all existant categories.
- # Note: this list could become *very large*
- $r = "<ol>\n" ;
- $sql = "SELECT cur_title FROM cur WHERE cur_namespace=".Namespace::getCategory() ;
- $res = wfQuery ( $sql, DB_READ ) ;
- while ( $x = wfFetchObject ( $res ) ) {
- $title =& Title::makeTitle( NS_CATEGORY, $x->cur_title );
- $r .= "<li>" ;
- $r .= $sk->makeKnownLinkObj ( $title, $title->getText() ) ;
- $r .= "</li>\n" ;
- }
- wfFreeResult ( $res ) ;
- $r .= "</ol>\n" ;
-
- $r .= "<hr />\n" ;
-
- # Links to category pages that haven't been created.
- # FIXME: This could be slow if there are a lot, but the title index should
- # make it reasonably snappy since we're using an index.
- $cat = wfStrencode( $wgLang->getNsText( NS_CATEGORY ) );
- $sql = "SELECT DISTINCT bl_to FROM brokenlinks WHERE bl_to LIKE \"{$cat}:%\"" ;
- $res = wfQuery ( $sql, DB_READ ) ;
- $r .= "<ol>\n" ;
- while ( $x = wfFetchObject ( $res ) ) {
- $title = Title::newFromDBkey( $x->bl_to );
- $r .= "<li>" ;
- $r .= $sk->makeBrokenLinkObj( $title, $title->getText() ) ;
- $r .= "</li>\n" ;
- }
- wfFreeResult ( $res ) ;
- $r .= "</ol>\n" ;
-
- $wgOut->addHTML ( $r ) ;
+ list( $limit, $offset ) = wfCheckLimits();
+
+ $cap = new CategoriesPage();
+
+ return $cap->doQuery( $offset, $limit );
}
?>
diff --git a/includes/SpecialContributions.php b/includes/SpecialContributions.php
index ad9b5acb5e06..04cca8c99ebd 100644
--- a/includes/SpecialContributions.php
+++ b/includes/SpecialContributions.php
@@ -2,7 +2,7 @@
function wfSpecialContributions( $par = "" )
{
- global $wgUser, $wgOut, $wgLang, $wgRequest;
+ global $wgUser, $wgOut, $wgLang, $wgRequest, $wgIsPg;
$fname = "wfSpecialContributions";
$sysop = $wgUser->isSysop();
@@ -53,13 +53,14 @@ function wfSpecialContributions( $par = "" )
"&offset={$offset}&limit={$limit}&hideminor=1" );
}
+ $oldtable=$wgIsPg?'"old"':'old';
if ( 0 == $id ) {
$sql = "SELECT cur_namespace,cur_title,cur_timestamp,cur_comment,cur_minor_edit,cur_is_new FROM cur " .
"WHERE cur_user_text='" . wfStrencode( $nt->getText() ) . "' {$cmq} " .
"ORDER BY inverse_timestamp LIMIT {$querylimit}";
$res1 = wfQuery( $sql, DB_READ, $fname );
- $sql = "SELECT old_namespace,old_title,old_timestamp,old_comment,old_minor_edit FROM old " .
+ $sql = "SELECT old_namespace,old_title,old_timestamp,old_comment,old_minor_edit FROM $oldtable " .
"WHERE old_user_text='" . wfStrencode( $nt->getText() ) . "' {$omq} " .
"ORDER BY inverse_timestamp LIMIT {$querylimit}";
$res2 = wfQuery( $sql, DB_READ, $fname );
@@ -68,7 +69,7 @@ function wfSpecialContributions( $par = "" )
"WHERE cur_user={$id} {$cmq} ORDER BY inverse_timestamp LIMIT {$querylimit}";
$res1 = wfQuery( $sql, DB_READ, $fname );
- $sql = "SELECT old_namespace,old_title,old_timestamp,old_comment,old_minor_edit FROM old " .
+ $sql = "SELECT old_namespace,old_title,old_timestamp,old_comment,old_minor_edit FROM $oldtable " .
"WHERE old_user={$id} {$omq} ORDER BY inverse_timestamp LIMIT {$querylimit}";
$res2 = wfQuery( $sql, DB_READ, $fname );
}
diff --git a/includes/SpecialDeadendpages.php b/includes/SpecialDeadendpages.php
index 84641a5d51fd..a571d68388db 100644
--- a/includes/SpecialDeadendpages.php
+++ b/includes/SpecialDeadendpages.php
@@ -4,22 +4,26 @@ require_once( "QueryPage.php" );
class DeadendPagesPage extends PageQueryPage {
- function getName( ) {
- return "Deadendpages";
- }
+ function getName( ) {
+ return "Deadendpages";
+ }
- # LEFT JOIN is expensive
+ # LEFT JOIN is expensive
- function isExpensive( ) {
- return 1;
- }
+ function isExpensive( ) {
+ return 1;
+ }
+
+ function sortDescending() {
+ return false;
+ }
- function getSQL( $offset, $limit ) {
- return "SELECT cur_title as title, 0 as value " .
- "FROM cur LEFT JOIN links ON cur_id = l_from " .
- "WHERE l_from IS NULL " .
- "AND cur_namespace = 0 " .
- "AND cur_is_redirect = 0";
+ function getSQL() {
+ return "SELECT 'Deadendpages' as type, cur_namespace AS namespace, cur_title as title, cur_title AS value " .
+ "FROM cur LEFT JOIN links ON cur_id = l_from " .
+ "WHERE l_from IS NULL " .
+ "AND cur_namespace = 0 " .
+ "AND cur_is_redirect = 0";
}
}
diff --git a/includes/SpecialListadmins.php b/includes/SpecialListadmins.php
new file mode 100644
index 000000000000..6e67fc86c63e
--- /dev/null
+++ b/includes/SpecialListadmins.php
@@ -0,0 +1,34 @@
+<?php
+
+require_once("QueryPage.php");
+
+class ListAdminsPage extends PageQueryPage {
+
+ function getName() {
+ return 'Listadmins';
+ }
+
+ function sortDescending() {
+ return false;
+ }
+
+ function getSQL() {
+ global $wgIsPg;
+ $usertable = $wgIsPg?'"user"':'user';
+ $userspace = Namespace::getUser();
+ return 'SELECT user_rights as type,'.$userspace.' as namespace,'.
+ 'user_name as title, user_name as value '.
+ "FROM $usertable ".
+ 'WHERE user_rights LIKE "%sysop%"';
+ }
+}
+
+function wfSpecialListadmins() {
+ list( $limit, $offset ) = wfCheckLimits();
+
+ $sla = new ListAdminsPage();
+
+ return $sla->doQuery( $offset, $limit );
+}
+
+?>
diff --git a/includes/SpecialListusers.php b/includes/SpecialListusers.php
index f87852f48297..08229f8d653a 100644
--- a/includes/SpecialListusers.php
+++ b/includes/SpecialListusers.php
@@ -1,38 +1,44 @@
<?php
-function wfSpecialListusers()
-{
- global $wgUser, $wgOut, $wgLang;
+require_once("QueryPage.php");
- list( $limit, $offset ) = wfCheckLimits();
+class ListUsersPage extends QueryPage {
- $top = wfShowingResults( $offset, $limit );
- $wgOut->addHTML( "<p>{$top}\n" );
+ function getName() {
+ return "Listusers";
+ }
- $sl = wfViewPrevNext( $offset, $limit,
- $wgLang->specialPage( "Listusers" ) );
- $wgOut->addHTML( "<br />{$sl}</p>\n<ol start='" . ( $offset + 1 ) . "'>" );
+ function getSQL() {
+ global $wgIsPg;
+ $usertable = $wgIsPg?'"user"':'user';
+ $userspace = Namespace::getUser();
+ return "SELECT user_rights as type, $userspace as namespace, user_name as title, user_name as value FROM $usertable";
+ }
+
+ function sortDescending() {
+ return false;
+ }
- $sql = "SELECT user_name,user_rights FROM user ORDER BY " .
- "user_name LIMIT {$offset}, {$limit}";
- $res = wfQuery( $sql, DB_READ, "wfSpecialListusers" );
+ function formatResult( $skin, $result ) {
+ global $wgLang;
+ $name = $skin->makeKnownLink( $wgLang->getNsText($result->namespace) . ':' . $result->title, $result->title );
+ if( '' != $result->type ) {
+ $name .= ' (' .
+ $skin->makeKnownLink( wfMsg( "administrators" ), $result->type) .
+ ')';
+ }
+ return $name;
+ }
+}
- $sk = $wgUser->getSkin();
- while ( $s = wfFetchObject( $res ) ) {
- $n = $s->user_name;
- $r = $s->user_rights;
+function wfSpecialListusers() {
+ global $wgUser, $wgOut, $wgLang, $wgIsPg;
- $l = $sk->makeLink( $wgLang->getNsText(
- Namespace::getUser() ) . ":{$n}", $n );
+ list( $limit, $offset ) = wfCheckLimits();
- if ( "" != $r ) {
- $link = $sk->makeKnownLink( wfMsg( "administrators" ), $r );
- $l .= " ({$link})";
- }
- $wgOut->addHTML( "<li>{$l}</li>\n" );
- }
- wfFreeResult( $res );
- $wgOut->addHTML( "</ol>\n<p>{$sl}</p>\n" );
+ $slu = new ListUsersPage();
+
+ return $slu->doQuery( $offset, $limit );
}
?>
diff --git a/includes/SpecialLonelypages.php b/includes/SpecialLonelypages.php
index bd5286414c6f..ebb4f0b034ac 100644
--- a/includes/SpecialLonelypages.php
+++ b/includes/SpecialLonelypages.php
@@ -3,30 +3,28 @@
require_once( "QueryPage.php" );
class LonelyPagesPage extends PageQueryPage {
-
- function getName() {
- return "Lonelypages";
- }
-
- function isExpensive() {
- return 1;
- }
-
- function getSQL( $offset, $limit ) {
- return "SELECT cur_title FROM cur LEFT JOIN links ON " .
- "cur_id=l_to WHERE l_to IS NULL AND cur_namespace=0 AND " .
- "cur_is_redirect=0 ORDER BY cur_title LIMIT {$offset}, {$limit}";
- }
+ function getName() {
+ return "Lonelypages";
+ }
+
+ function isExpensive() {
+ return true;
+ }
+
+ function getSQL() {
+ return "SELECT 'Lonelypages' as type, cur_namespace AS namespace, cur_title AS title, cur_title AS value " .
+ "FROM cur LEFT JOIN links ON cur_id=l_to ".
+ "WHERE l_to IS NULL AND cur_namespace=0 AND cur_is_redirect=0";
+ }
}
-function wfSpecialLonelypages()
-{
- list( $limit, $offset ) = wfCheckLimits();
-
- $lpp = new LonelyPagesPage();
-
- return $lpp->doQuery( $offset, $limit );
+function wfSpecialLonelypages() {
+ list( $limit, $offset ) = wfCheckLimits();
+
+ $lpp = new LonelyPagesPage();
+
+ return $lpp->doQuery( $offset, $limit );
}
?>
diff --git a/includes/SpecialPage.php b/includes/SpecialPage.php
index 5b013bffe1fc..165ef040bf54 100644
--- a/includes/SpecialPage.php
+++ b/includes/SpecialPage.php
@@ -9,11 +9,17 @@ $wgSpecialPages = array(
"Upload" => new SpecialPage( "Upload" ),
"Imagelist" => new SpecialPage( "Imagelist" ),
"Listusers" => new SpecialPage( "Listusers" ),
+ "Listadmins" => new SpecialPage( "Listadmins" ),
"Statistics" => new SpecialPage( "Statistics" ),
"Randompage" => new SpecialPage( "Randompage" ),
"Lonelypages" => new SpecialPage( "Lonelypages" ),
- "Unusedimages" => new SpecialPage( "Unusedimages" ),
- "Popularpages" => new SpecialPage( "Popularpages" ),
+ "Unusedimages" => new SpecialPage( "Unusedimages" )
+);
+if( !$wgDisableCounters )
+{
+ $wgSpecialPages["Popularpages"] = new SpecialPage( "Popularpages" );
+}
+$wgSpecialPages = array_merge($wgSpecialPages, array (
"Wantedpages" => new SpecialPage( "Wantedpages" ),
"Shortpages" => new SpecialPage( "Shortpages" ),
"Longpages" => new SpecialPage( "Longpages" ),
@@ -43,7 +49,7 @@ $wgSpecialPages = array(
"Import" => new SpecialPage( "Import", "sysop" ),
"Lockdb" => new SpecialPage( "Lockdb", "developer" ),
"Unlockdb" => new SpecialPage( "Unlockdb", "developer" )
-);
+));
class SpecialPage
{
diff --git a/includes/SpecialPreferences.php b/includes/SpecialPreferences.php
index 11696a02efa7..e060dcb06b52 100644
--- a/includes/SpecialPreferences.php
+++ b/includes/SpecialPreferences.php
@@ -14,7 +14,7 @@ class PreferencesForm {
var $mReset, $mPosted, $mToggles, $mSearchNs, $mRealName;
function PreferencesForm( &$request ) {
- global $wgLang;
+ global $wgLang, $wgAllowRealName;
$this->mQuickbar = $request->getVal( 'wpQuickbar' );
$this->mOldpass = $request->getVal( 'wpOldpass' );
@@ -27,7 +27,7 @@ class PreferencesForm {
$this->mMath = $request->getVal( 'wpMath' );
$this->mDate = $request->getVal( 'wpDate' );
$this->mUserEmail = $request->getVal( 'wpUserEmail' );
- $this->mRealName = $request->getVal( 'wpRealName' );
+ $this->mRealName = ($wgAllowRealName) ? $request->getVal( 'wpRealName' ) : '';
$this->mEmailFlag = $request->getCheck( 'wpEmailFlag' ) ? 1 : 0;
$this->mNick = $request->getVal( 'wpNick' );
$this->mSearch = $request->getVal( 'wpSearch' );
@@ -180,11 +180,11 @@ class PreferencesForm {
/* private */ function resetPrefs()
{
- global $wgUser, $wgLang;
+ global $wgUser, $wgLang, $wgAllowRealName;
$this->mOldpass = $this->mNewpass = $this->mRetypePass = "";
$this->mUserEmail = $wgUser->getEmail();
- $this->mRealName = $wgUser->getRealName();
+ $this->mRealName = ($wgAllowRealName) ? $wgUser->getRealName() : '';
if ( 1 == $wgUser->getOption( "disablemail" ) ) { $this->mEmailFlag = 1; }
else { $this->mEmailFlag = 0; }
$this->mNick = $wgUser->getOption( "nickname" );
@@ -265,7 +265,8 @@ class PreferencesForm {
/* private */ function mainPrefsForm( $err )
{
global $wgUser, $wgOut, $wgLang, $wgUseDynamicDates, $wgValidSkinNames;
-
+ global $wgAllowRealName;
+
$wgOut->setPageTitle( wfMsg( "preferences" ) );
$wgOut->setArticleRelated( false );
$wgOut->setRobotpolicy( "noindex,nofollow" );
@@ -277,6 +278,7 @@ class PreferencesForm {
$uid = $wgUser->getID();
$wgOut->addWikiText( wfMsg( "prefslogintext", $uname, $uid ) );
+ $wgOut->addWikiText( wfMsg('clearyourcache'));
$qbs = $wgLang->getQuickbarSettings();
$skinNames = $wgLang->getSkinNames();
@@ -301,12 +303,13 @@ class PreferencesForm {
$tbr = wfMsg( "rows" );
$tbc = wfMsg( "columns" );
$ltz = wfMsg( "localtime" );
+ $timezone = wfMsg( "timezonelegend" );
$tzt = wfMsg( "timezonetext" );
$tzo = wfMsg( "timezoneoffset" );
$tzGuess = wfMsg( "guesstimezone" );
$tzServerTime = wfMsg( "servertime" );
$yem = wfMsg( "youremail" );
- $yrn = wfMsg( "yourrealname" );
+ $yrn = ($wgAllowRealName) ? wfMsg( "yourrealname" ) : '';
$emf = wfMsg( "emailflag" );
$ynn = wfMsg( "yournick" );
$stt = wfMsg ( "stubthreshold" ) ;
@@ -332,12 +335,15 @@ class PreferencesForm {
$ps = $this->namespacesCheckboxes();
$wgOut->addHTML( "<fieldset>
- <legend>".wfMsg('prefs-personal')."</legend>
- <div><label>$yrn: <input type='text' name=\"wpRealName\" value=\"{$this->mRealName}\" size='20' /></label></div>
+ <legend>".wfMsg('prefs-personal')."</legend>");
+ if ($wgAllowRealName) {
+ $wgOut->addHTML("<div><label>$yrn: <input type='text' name=\"wpRealName\" value=\"{$this->mRealName}\" size='20' /></label></div>");
+ }
+ $wgOut->addHTML("
<div><label>$yem: <input type='text' name=\"wpUserEmail\" value=\"{$this->mUserEmail}\" size='20' /></label></div>
<div><label><input type='checkbox' $emfc value=\"1\" name=\"wpEmailFlag\" /> $emf</label></div>
<div><label>$ynn: <input type='text' name=\"wpNick\" value=\"{$this->mNick}\" size='12' /></label></div>\n" );
-
+
# Fields for changing password
#
$this->mOldpass = wfEscapeHTML( $this->mOldpass );
@@ -363,6 +369,7 @@ class PreferencesForm {
$wgOut->addHTML( "<div><label><input type='radio' name=\"wpQuickbar\"
value=\"$i\"$checked /> {$qbs[$i]}</label></div>\n" );
}
+ $wgOut->addHtml('<div class="prefsectiontip">'.wfMsg('qbsettingsnote').'</div>');
$wgOut->addHtml( "</fieldset>\n\n" );
# Skin setting
@@ -426,7 +433,7 @@ class PreferencesForm {
</fieldset>
<fieldset>
- <legend>$dateFormat</legend>
+ <legend>$timezone</legend>
<div><b>$tzServerTime:</b> $nowserver</div>
<div><b>$ltz:</b> $nowlocal</div>
<div><label>$tzo*: <input type='text' name=\"wpHourDiff\" value=\"{$this->mHourDiff}\" size='6' /></label></div>
diff --git a/includes/SpecialRandompage.php b/includes/SpecialRandompage.php
index a442623f1b18..bf6a7fa9a03e 100644
--- a/includes/SpecialRandompage.php
+++ b/includes/SpecialRandompage.php
@@ -1,16 +1,18 @@
<?php
+# $Id$
function wfSpecialRandompage()
{
- global $wgOut, $wgTitle, $wgArticle;
+ global $wgOut, $wgTitle, $wgArticle, $wgIsMySQL;
$fname = "wfSpecialRandompage";
wfSeedRandom();
$rand = mt_rand() / mt_getrandmax();
# interpolation and sprintf() can muck up with locale-specific decimal separator
$randstr = number_format( $rand, 12, ".", "" );
+ $use_index=$wgIsMySQL?"USE INDEX (cur_random)":"";
$sqlget = "SELECT cur_id,cur_title
- FROM cur USE INDEX (cur_random)
+ FROM cur $use_index
WHERE cur_namespace=0 AND cur_is_redirect=0
AND cur_random>$randstr
ORDER BY cur_random
diff --git a/includes/SpecialRecentchanges.php b/includes/SpecialRecentchanges.php
index 127678528581..4470c7622c2b 100644
--- a/includes/SpecialRecentchanges.php
+++ b/includes/SpecialRecentchanges.php
@@ -111,11 +111,11 @@ function wfSpecialRecentchanges( $par )
} else {
$note = wfMsg( "rcnote", $wgLang->formatNum( $limit ), $wgLang->formatNum( $days ) );
}
- $wgOut->addHTML( "\n<hr/>\n{$note}\n<br/>" );
+ $wgOut->addHTML( "\n<hr />\n{$note}\n<br />" );
$note = rcDayLimitLinks( $days, $limit, "Recentchanges", $hideparams, false, $minorLink, $botLink, $liuLink );
- $note .= "<br/>\n" . wfMsg( "rclistfrom",
+ $note .= "<br />\n" . wfMsg( "rclistfrom",
$sk->makeKnownLink( $wgLang->specialPage( "Recentchanges" ),
$wgLang->timeanddate( $now, true ), "{$hideparams}&from=$now" ) );
diff --git a/includes/SpecialShortpages.php b/includes/SpecialShortpages.php
index 560b02b8c1af..c3eafc41187f 100644
--- a/includes/SpecialShortpages.php
+++ b/includes/SpecialShortpages.php
@@ -1,4 +1,8 @@
<?php
+#
+# SpecialShortpages extends QueryPage. It is used to return the shortest
+# pages in the database.
+#
require_once("QueryPage.php");
@@ -34,8 +38,7 @@ class ShortPagesPage extends QueryPage {
}
}
-function wfSpecialShortpages()
-{
+function wfSpecialShortpages() {
list( $limit, $offset ) = wfCheckLimits();
$spp = new ShortPagesPage();
diff --git a/includes/SpecialStatistics.php b/includes/SpecialStatistics.php
index a6433aaeb6a9..b842e52525f6 100644
--- a/includes/SpecialStatistics.php
+++ b/includes/SpecialStatistics.php
@@ -2,7 +2,7 @@
function wfSpecialStatistics()
{
- global $wgUser, $wgOut, $wgLang;
+ global $wgUser, $wgOut, $wgLang, $wgIsPg;
$fname = "wfSpecialStatistics";
$wgOut->addHTML( "<h2>" . wfMsg( "sitestats" ) . "</h2>\n" );
@@ -31,12 +31,13 @@ function wfSpecialStatistics()
$wgOut->addWikiText( $text );
$wgOut->addHTML( "<h2>" . wfMsg( "userstats" ) . "</h2>\n" );
- $sql = "SELECT COUNT(user_id) AS total FROM user";
+ $usertable=$wgIsPg?'"user"':'user';
+ $sql = "SELECT COUNT(user_id) AS total FROM $usertable";
$res = wfQuery( $sql, DB_READ, $fname );
$row = wfFetchObject( $res );
$total = $row->total;
- $sql = "SELECT COUNT(user_id) AS total FROM user " .
+ $sql = "SELECT COUNT(user_id) AS total FROM $usertable " .
"WHERE user_rights LIKE '%sysop%'";
$res = wfQuery( $sql, DB_READ, $fname );
$row = wfFetchObject( $res );
diff --git a/includes/SpecialUnusedimages.php b/includes/SpecialUnusedimages.php
index 09075f5be1e2..4bc8d7bbf886 100644
--- a/includes/SpecialUnusedimages.php
+++ b/includes/SpecialUnusedimages.php
@@ -8,7 +8,7 @@ function wfSpecialUnusedimages() {
$sql = "SELECT img_name,img_user,img_user_text,img_timestamp,img_description " .
"FROM image LEFT JOIN imagelinks ON img_name=il_to WHERE il_to IS NULL " .
- "ORDER BY img_timestamp LIMIT {$offset}, {$limit}";
+ "ORDER BY img_timestamp ".wfLimitResult($limit,$offset);
$res = wfQuery( $sql, DB_READ, $fname );
$sk = $wgUser->getSkin();
diff --git a/includes/SpecialUpload.php b/includes/SpecialUpload.php
index eeff3989881d..ef70a19a83fa 100644
--- a/includes/SpecialUpload.php
+++ b/includes/SpecialUpload.php
@@ -75,7 +75,7 @@ class UploadForm {
global $wgSavedFile, $wgUploadOldVersion;
global $wgUseCopyrightUpload;
global $wgCheckFileExtensions, $wgStrictFileExtensions;
- global $wgFileExtensions, $wgFileBlacklist;
+ global $wgFileExtensions, $wgFileBlacklist, $wgUploadSizeWarning;
if ( $wgUseCopyrightUpload ) {
$this->mUploadAffirm = 1;
@@ -126,7 +126,8 @@ class UploadForm {
return $this->uploadWarning( wfMsg( "badfiletype", $ext ) );
}
}
- if ( ( ! $this->mIgnoreWarning ) && ( $this->mUploadSize > 150000 ) ) {
+ if ( $wgUploadSizeWarning && ( ! $this->mIgnoreWarning ) &&
+ ( $this->mUploadSize > $wgUploadSizeWarning ) ) {
return $this->uploadWarning( wfMsg( "largefile" ) );
}
}
diff --git a/includes/SpecialUserlogin.php b/includes/SpecialUserlogin.php
index c950ed5f150a..e68f66e2e04e 100644
--- a/includes/SpecialUserlogin.php
+++ b/includes/SpecialUserlogin.php
@@ -20,7 +20,7 @@ class LoginForm {
var $mLoginattempt, $mRemember, $mEmail;
function LoginForm( &$request ) {
- global $wgLang;
+ global $wgLang, $wgAllowRealName;
$this->mName = $request->getText( 'wpName' );
$this->mPassword = $request->getText( 'wpPassword' );
@@ -35,8 +35,12 @@ class LoginForm {
$this->mAction = $request->getVal( 'action' );
$this->mRemember = $request->getCheck( 'wpRemember' );
$this->mEmail = $request->getText( 'wpEmail' );
- $this->mRealName = $request->getText( 'wpRealName' );
-
+ if ($wgAllowRealName) {
+ $this->mRealName = $request->getText( 'wpRealName' );
+ } else {
+ $this->mRealName = '';
+ }
+
# When switching accounts, it sucks to get automatically logged out
if( $this->mReturnto == $wgLang->specialPage( "Userlogout" ) ) {
$this->mReturnto = "";
@@ -301,7 +305,7 @@ class LoginForm {
/* private */ function mainLoginForm( $err )
{
global $wgUser, $wgOut, $wgLang;
- global $wgDBname;
+ global $wgDBname, $wgAllowRealName;
$le = wfMsg( "loginerror" );
$yn = wfMsg( "yourname" );
@@ -313,7 +317,11 @@ class LoginForm {
$ca = wfMsg( "createaccount" );
$cam = wfMsg( "createaccountmail" );
$ye = wfMsg( "youremail" );
- $yrn = wfMsg( "yourrealname" );
+ if ($wgAllowRealName) {
+ $yrn = wfMsg( "yourrealname" );
+ } else {
+ $yrn = '';
+ }
$efl = wfMsg( "emailforlost" );
$mmp = wfMsg( "mailmypassword" );
$endText = wfMsg( "loginend" );
@@ -401,20 +409,23 @@ class LoginForm {
<td align='right'>$ye:</td>
<td align='left'>
<input tabindex='6' type='text' name=\"wpEmail\" value=\"{$encEmail}\" size='20' />
- </td>
- <td>&nbsp;</td>
- </tr>
- <tr>
- <td align='right'>$yrn:</td>
- <td align='left'>
- <input tabindex='6' type='text' name=\"wpRealName\" value=\"{$encRealName}\" size='20' />
- </td>
- <td align='left'>
+ </td>");
+
+ if ($wgAllowRealName) {
+ $wgOut->addHTML("<td>&nbsp;</td>
+ </tr><tr>
+ <td align='right'>$yrn:</td>
+ <td align='left'>
+ <input tabindex='6' type='text' name=\"wpRealName\" value=\"{$encRealName}\" size='20' />
+ </td>");
+ }
+
+ $wgOut->addHTML("<td align='left'>
<input tabindex='7' type='submit' name=\"wpCreateaccount\" value=\"{$ca}\" />
$cambutton
</td></tr>");
}
-
+
$wgOut->addHTML("
<tr><td colspan='3'>&nbsp;</td></tr><tr>
<td colspan='3' align='left'>
diff --git a/includes/SpecialWatchlist.php b/includes/SpecialWatchlist.php
index 619dc38445f9..806eff0e9673 100644
--- a/includes/SpecialWatchlist.php
+++ b/includes/SpecialWatchlist.php
@@ -5,7 +5,7 @@ require_once( "WatchedItem.php" );
function wfSpecialWatchlist()
{
global $wgUser, $wgOut, $wgLang, $wgTitle, $wgMemc;
- global $wgUseWatchlistCache, $wgWLCacheTimeout, $wgDBname;
+ global $wgUseWatchlistCache, $wgWLCacheTimeout, $wgDBname, $wgIsMySQL;
global $days, $limit, $target; # From query string
$fname = "wfSpecialWatchlist";
@@ -102,10 +102,14 @@ function wfSpecialWatchlist()
$sk = $wgUser->getSkin();
while( $s = wfFetchObject( $res ) ) {
$t = Title::makeTitle( $s->wl_namespace, $s->wl_title );
- $t = $t->getPrefixedText();
- $wgOut->addHTML( "<li><input type='checkbox' name='id[]' value=\"" . htmlspecialchars($t) . "\" />" .
- $sk->makeKnownLink( $t, $t ) .
- "</li>\n" );
+ if( is_null( $t ) ) {
+ $wgOut->addHTML( '<!-- bad title "' . htmlspecialchars( $s->wl_title ) . '" in namespace ' . IntVal( $s->wl_namespace ) . " -->\n" );
+ } else {
+ $t = $t->getPrefixedText();
+ $wgOut->addHTML( "<li><input type='checkbox' name='id[]' value=\"" . htmlspecialchars($t) . "\" />" .
+ $sk->makeKnownLink( $t, $t ) .
+ "</li>\n" );
+ }
}
$wgOut->addHTML( "</ul>\n" .
"<input type='submit' name='remove' value='" .
@@ -137,11 +141,11 @@ function wfSpecialWatchlist()
$wgLang->formatNum( $nitems ), $wgLang->formatNum( $npages ), $y,
$specialTitle->escapeLocalUrl( "magic=yes" ) ) . "</i><br />\n" );
-
+ $use_index=$wgIsMySQL?"USE INDEX ($x)":"";
$sql = "SELECT
cur_namespace,cur_title,cur_comment, cur_id,
cur_user,cur_user_text,cur_timestamp,cur_minor_edit,cur_is_new
- FROM watchlist,cur USE INDEX ($x)
+ FROM watchlist,cur $use_index
WHERE wl_user=$uid
AND $z
AND wl_title=cur_title
diff --git a/includes/SpecialWhatlinkshere.php b/includes/SpecialWhatlinkshere.php
index 900f9e7db294..d8770bb4383a 100644
--- a/includes/SpecialWhatlinkshere.php
+++ b/includes/SpecialWhatlinkshere.php
@@ -27,7 +27,7 @@ function wfSpecialWhatlinkshere($par = NULL)
$sk = $wgUser->getSkin();
$isredir = " (" . wfMsg( "isredirect" ) . ")\n";
- $wgOut->addHTML("&lt; ".$sk->makeKnownLinkObj($nt, "", "redirect=no" )."<br/>\n");
+ $wgOut->addHTML("&lt; ".$sk->makeKnownLinkObj($nt, "", "redirect=no" )."<br />\n");
if ( 0 == $id ) {
$sql = "SELECT cur_id,cur_namespace,cur_title,cur_is_redirect FROM brokenlinks,cur WHERE bl_to='" .
diff --git a/includes/Title.php b/includes/Title.php
index 255cc157bc38..8d44acae30a7 100644
--- a/includes/Title.php
+++ b/includes/Title.php
@@ -88,13 +88,13 @@ class Title {
# From a URL-encoded title
/* static */ function newFromURL( $url )
{
- global $wgLang, $wgServer;
+ global $wgLang, $wgServer, $wgIsMySQL, $wgIsPg;
$t = new Title();
- $s = urldecode( $url ); # This is technically wrong, as anything
- # we've gotten is already decoded by PHP.
- # Kept for backwards compatibility with
- # buggy URLs we had for a while...
- $s = $url;
+
+ # For compatibility with old buggy URLs. "+" is not valid in titles,
+ # but some URLs used it as a space replacement and they still come
+ # from some external search tools.
+ $s = str_replace( "+", " ", $url );
# For links that came from outside, check for alternate/legacy
# character encoding.
@@ -109,14 +109,20 @@ class Title {
$t->mDbkeyform = str_replace( " ", "_", $s );
if( $t->secureAndSplit() ) {
-
# check that lenght of title is < cur_title size
- $sql = "SHOW COLUMNS FROM cur LIKE \"cur_title\";";
- $cur_title_object = wfFetchObject(wfQuery( $sql, DB_READ ));
+ if ($wgIsMySQL) {
+ $sql = "SHOW COLUMNS FROM cur LIKE \"cur_title\";";
+ $cur_title_object = wfFetchObject(wfQuery( $sql, DB_READ ));
- preg_match( "/\((.*)\)/", $cur_title_object->Type, $cur_title_size);
+ preg_match( "/\((.*)\)/", $cur_title_object->Type, $cur_title_type);
+ $cur_title_size=$cur_title_type[1];
+ } else {
+ /* midom:FIXME pg_field_type does not return varchar length
+ assume 255 */
+ $cur_title_size=255;
+ }
- if (strlen($t->mDbkeyform) > $cur_title_size[1] ) {
+ if (strlen($t->mDbkeyform) > $cur_title_size ) {
return NULL;
}
@@ -182,11 +188,12 @@ class Title {
# Missing characters:
# * []|# Needed for link syntax
# * % and + are corrupted by Apache when they appear in the path
+ # * % seems to work though
#
# Theoretically 0x80-0x9F of ISO 8859-1 should be disallowed, but
# this breaks interlanguage links
- $set = " !\"$&'()*,\\-.\\/0-9:;<=>?@A-Z\\\\^_`a-z{}~\\x80-\\xFF";
+ $set = " %!\"$&'()*,\\-.\\/0-9:;<=>?@A-Z\\\\^_`a-z{}~\\x80-\\xFF";
return $set;
}
@@ -228,8 +235,7 @@ class Title {
# The URL contains $1, which is replaced by the title
function getInterwikiLink( $key )
{
- global $wgMemc, $wgDBname, $wgInterwikiExpiry;
- static $wgTitleInterwikiCache = array();
+ global $wgMemc, $wgDBname, $wgInterwikiExpiry, $wgTitleInterwikiCache;
$k = "$wgDBname:interwiki:$key";
@@ -486,15 +492,20 @@ class Title {
# Can $wgUser edit this page?
function userCanEdit()
{
-
+ global $wgUser;
if ( -1 == $this->mNamespace ) { return false; }
+ if ( NS_MEDIAWIKI == $this->mNamespace && !$wgUser->isSysop() ) { return false; }
# if ( 0 == $this->getArticleID() ) { return false; }
if ( $this->mDbkeyform == "_" ) { return false; }
+ # protect global styles and js
+ if ( NS_MEDIAWIKI == $this->mNamespace
+ && preg_match("/\\.(css|js)$/", $this->mTextform )
+ && !$wgUser->isSysop() )
+ { return false; }
//if ( $this->isCssJsSubpage() and !$this->userCanEditCssJsSubpage() ) { return false; }
# protect css/js subpages of user pages
# XXX: this might be better using restrictions
# XXX: Find a way to work around the php bug that prevents using $this->userCanEditCssJsSubpage() from working
- global $wgUser;
if( Namespace::getUser() == $this->mNamespace
and preg_match("/\\.(css|js)$/", $this->mTextform )
and !$wgUser->isSysop()
@@ -638,6 +649,7 @@ class Title {
# Initialisation
if ( $imgpre === false ) {
$imgpre = ":" . $wgLang->getNsText( Namespace::getImage() ) . ":";
+ # % is needed as well
$rxTc = "/[^" . Title::legalChars() . "]/";
}
@@ -716,8 +728,8 @@ class Title {
return false;
}
- # "." and ".." conflict with the directories of those names
- if ( $r === "." || $r === ".." ) {
+ # "." and ".." conflict with the directories of those namesa
+ if ( $r === "." || $r === ".." || strpos( $r, "./" ) !== false ) {
return false;
}
@@ -756,9 +768,10 @@ class Title {
$retVal = array();
if ( wfNumRows( $res ) ) {
while ( $row = wfFetchObject( $res ) ) {
- $titleObj = Title::makeTitle( $row->cur_namespace, $row->cur_title );
- $wgLinkCache->addGoodLink( $row->cur_id, $titleObj->getPrefixedDBkey() );
- $retVal[] = $titleObj;
+ if ( $titleObj = Title::makeTitle( $row->cur_namespace, $row->cur_title ) ) {
+ $wgLinkCache->addGoodLink( $row->cur_id, $titleObj->getPrefixedDBkey() );
+ $retVal[] = $titleObj;
+ }
}
}
wfFreeResult( $res );
@@ -777,7 +790,7 @@ class Title {
if ( wfNumRows( $res ) ) {
while ( $row = wfFetchObject( $res ) ) {
$titleObj = Title::makeTitle( $row->cur_namespace, $row->cur_title );
- $wgLinkCache->addGoodLink( $titleObj->getPrefixedDBkey(), $row->cur_id );
+ $wgLinkCache->addGoodLink( $row->cur_id, $titleObj->getPrefixedDBkey() );
$retVal[] = $titleObj;
}
}
@@ -935,34 +948,51 @@ class Title {
$linksToOld = $this->getLinksTo();
$linksToNew = $nt->getLinksTo();
- # Make function to convert Titles to IDs
- $titleToID = create_function('$t', 'return $t->getArticleID();');
-
- # Reassign links to old title
- if ( count( $linksToOld ) ) {
- $sql = "UPDATE links SET l_to=$newid WHERE l_from IN (";
- $sql .= implode( ",", array_map( $titleToID, $linksToOld ) );
- $sql .= ")";
- wfQuery( $sql, DB_WRITE, $fname );
- }
-
- # Reassign links to new title
- if ( count( $linksToNew ) ) {
- $sql = "UPDATE links SET l_to=$oldid WHERE l_from IN (";
- $sql .= implode( ",", array_map( $titleToID, $linksToNew ) );
- $sql .= ")";
+ # Delete them all
+ $sql = "DELETE FROM links WHERE l_to=$oldid OR l_to=$newid";
+ wfQuery( $sql, DB_WRITE, $fname );
+
+ # Reinsert
+ if ( count( $linksToOld ) || count( $linksToNew )) {
+ $sql = "INSERT INTO links (l_from,l_to) VALUES ";
+ $first = true;
+
+ # Insert links to old title
+ foreach ( $linksToOld as $linkTitle ) {
+ if ( $first ) {
+ $first = false;
+ } else {
+ $sql .= ",";
+ }
+ $id = $linkTitle->getArticleID();
+ $sql .= "($id,$newid)";
+ }
+
+ # Insert links to new title
+ foreach ( $linksToNew as $linkTitle ) {
+ if ( $first ) {
+ $first = false;
+ } else {
+ $sql .= ",";
+ }
+ $id = $linkTitle->getArticleID();
+ $sql .= "($id, $oldid)";
+ }
+
wfQuery( $sql, DB_WRITE, $fname );
}
- # Note: the insert below must be after the updates above!
-
# Now, we record the link from the redirect to the new title.
# It should have no other outgoing links...
$sql = "DELETE FROM links WHERE l_from={$newid}";
wfQuery( $sql, DB_WRITE, $fname );
$sql = "INSERT INTO links (l_from,l_to) VALUES ({$newid},{$oldid})";
wfQuery( $sql, DB_WRITE, $fname );
-
+
+ # Clear linkscc
+ LinkCache::linksccClearLinksTo( $oldid );
+ LinkCache::linksccClearLinksTo( $newid );
+
# Purge squid
if ( $wgUseSquid ) {
$urls = array_merge( $nt->getSquidURLs(), $this->getSquidURLs() );
@@ -1029,14 +1059,16 @@ class Title {
), $fname
);
- # Miscellaneous updates
-
+ # Record in RC
RecentChange::notifyMove( $now, $this, $nt, $wgUser, $comment );
+
+ # Purge squid and linkscc as per article creation
Article::onArticleCreate( $nt );
# Any text links to the old title must be reassigned to the redirect
$sql = "UPDATE links SET l_to={$newid} WHERE l_to={$oldid}";
wfQuery( $sql, DB_WRITE, $fname );
+ LinkCache::linksccClearLinksTo( $oldid );
# Record the just-created redirect's linking to the page
$sql = "INSERT INTO links (l_from,l_to) VALUES ({$newid},{$oldid})";
@@ -1140,5 +1172,84 @@ class Title {
return true;
}
+ # Get categories to wich belong this title and return an array of
+ # categories names.
+ function getParentCategories( )
+ {
+ global $wgLang,$wgUser;
+
+ #$titlekey = wfStrencode( $this->getArticleID() );
+ $titlekey = $this->getArticleId();
+ $cns = Namespace::getCategory();
+ $sk =& $wgUser->getSkin();
+ $parents = array();
+
+ # get the parents categories of this title from the database
+ $sql = "SELECT DISTINCT cur_id FROM cur,categorylinks
+ WHERE cl_from='$titlekey' AND cl_to=cur_title AND cur_namespace='$cns'
+ ORDER BY cl_sortkey" ;
+ $res = wfQuery ( $sql, DB_READ ) ;
+
+ if(wfNumRows($res) > 0) {
+ while ( $x = wfFetchObject ( $res ) ) $data[] = $x ;
+ wfFreeResult ( $res ) ;
+ } else {
+ $data = '';
+ }
+ return $data;
+ }
+
+ # will get the parents and grand-parents
+ # TODO : not sure what's happening when a loop happen like:
+ # Encyclopedia > Astronomy > Encyclopedia
+ function getAllParentCategories(&$stack)
+ {
+ global $wgUser,$wgLang;
+ $result = '';
+
+ # getting parents
+ $parents = $this->getParentCategories( );
+
+ if($parents == '')
+ {
+ # The current element has no more parent so we dump the stack
+ # and make a clean line of categories
+ $sk =& $wgUser->getSkin() ;
+
+ foreach ( array_reverse($stack) as $child => $parent )
+ {
+ # make a link of that parent
+ $result .= $sk->makeLink($wgLang->getNSText ( Namespace::getCategory() ).":".$parent,$parent);
+ $result .= ' &gt; ';
+ $lastchild = $child;
+ }
+ # append the last child.
+ # TODO : We should have a last child unless there is an error in the
+ # "categorylinks" table.
+ if(isset($lastchild)) { $result .= $lastchild; }
+
+ $result .= "<br/>\n";
+
+ # now we can empty the stack
+ $stack = array();
+
+ } else {
+ # look at parents of current category
+ foreach($parents as $parent)
+ {
+ # create a title object for the parent
+ $tpar = Title::newFromID($parent->cur_id);
+ # add it to the stack
+ $stack[$this->getText()] = $tpar->getText();
+ # grab its parents
+ $result .= $tpar->getAllParentCategories($stack);
+ }
+ }
+
+ if(isset($result)) { return $result; }
+ else { return ''; };
+ }
+
+
}
?>
diff --git a/includes/User.php b/includes/User.php
index 111bebff1a78..686963c9fdaf 100644
--- a/includes/User.php
+++ b/includes/User.php
@@ -468,10 +468,14 @@ class User {
if ( !isset( $skinNames[$s] ) ) {
$fallback = array(
- 'standard' => "Standard",
- 'nostalgia' => "Nostalgia",
- 'cologneblue' => "Cologne Blue");
- if(is_int($s) && isset( $fallback[$s]) ){
+ 0 => "SkinStandard",
+ 1 => "SkinNostalgia",
+ 2 => "SkinCologneBlue");
+ if ( isset( $skinNames['monobook'] ) ) {
+ $fallback[0] = "SkinMonoBook";
+ }
+
+ if(is_numeric($s) && isset( $fallback[$s]) ){
$sn = $fallback[$s];
} else {
$sn = "SkinStandard";
@@ -646,7 +650,7 @@ class User {
}
# Make a new block object with the desired properties
- wfDebug( "Autoblocking {$this->mUserName}@{$wgIP}\n" );
+ wfDebug( "Autoblocking {$this->mName}@{$wgIP}\n" );
$ipblock->mAddress = $wgIP;
$ipblock->mUser = 0;
$ipblock->mBy = $userblock->mBy;
diff --git a/includes/UserTalkUpdate.php b/includes/UserTalkUpdate.php
index 306cd3c80d81..66ea7a9aee25 100644
--- a/includes/UserTalkUpdate.php
+++ b/includes/UserTalkUpdate.php
@@ -33,6 +33,7 @@ class UserTalkUpdate {
} else {
# Not ours. If writing, mark it as modified.
+ $sql = false;
if ( 1 == $this->mAction ) {
$user = new User();
$user->setID(User::idFromName($this->mTitle));
diff --git a/includes/ViewCountUpdate.php b/includes/ViewCountUpdate.php
index 84a03991f8ce..16976f11b0f2 100644
--- a/includes/ViewCountUpdate.php
+++ b/includes/ViewCountUpdate.php
@@ -1,6 +1,6 @@
<?php
+# $Id$
# See deferred.doc
-
class ViewCountUpdate {
var $mPageID;
@@ -12,13 +12,12 @@ class ViewCountUpdate {
function doUpdate()
{
- global $wgDisableCounters;
+ global $wgDisableCounters, $wgIsMySQL;
if ( $wgDisableCounters ) { return; }
-
- $sql = "UPDATE LOW_PRIORITY cur SET cur_counter=(1+cur_counter)," .
+ $lowpri=$wgIsMySQL?"LOW_PRIORITY":"";
+ $sql = "UPDATE $lowpri cur SET cur_counter=(1+cur_counter)," .
"cur_timestamp=cur_timestamp WHERE cur_id={$this->mPageID}";
$res = wfQuery( $sql, DB_WRITE, "ViewCountUpdate::doUpdate" );
}
}
-
?>
diff --git a/includes/WatchedItem.php b/includes/WatchedItem.php
index 74371be4bf25..23ad2804e1de 100644
--- a/includes/WatchedItem.php
+++ b/includes/WatchedItem.php
@@ -36,10 +36,22 @@ class WatchedItem {
function addWatch()
{
+ global $wgIsMySQL;
# REPLACE instead of INSERT because occasionally someone
# accidentally reloads a watch-add operation.
- $sql = "REPLACE INTO watchlist (wl_user, wl_namespace,wl_title) VALUES ($this->id,$this->ns,'$this->eti')";
- $res = wfQuery( $sql, DB_WRITE );
+ if ($wgIsMySQL) {
+ $sql = "REPLACE INTO watchlist (wl_user, wl_namespace,wl_title) ".
+ "VALUES ($this->id,$this->ns,'$this->eti')";
+ $res = wfQuery( $sql, DB_WRITE );
+ } else {
+ $sql = "DELETE FROM watchlist WHERE wl_user=$this->id AND
+ wl_namespace=$this->ns AND wl_title='$this->eti'";
+ wfQuery( $sql, DB_WRITE);
+ $sql = "INSERT INTO watchlist (wl_user, wl_namespace,wl_title) ".
+ "VALUES ($this->id,$this->ns,'$this->eti')";
+ $res = wfQuery( $sql, DB_WRITE );
+ }
+
if( $res === false ) return false;
global $wgMemc;
@@ -49,7 +61,7 @@ class WatchedItem {
function removeWatch()
{
- $sql = "DELETE FROM watchlist WHERE wl_user=$this->id AND wl_namespace=$this->ns AND wl_title='$this->eti' LIMIT 1";
+ $sql = "DELETE FROM watchlist WHERE wl_user=$this->id AND wl_namespace=$this->ns AND wl_title='$this->eti'";
$res = wfQuery( $sql, DB_WRITE );
if( $res === false ) return false;
diff --git a/includes/memcached-client.php b/includes/memcached-client.php
index 3f0eb44f9e0f..17d9ecbecd3d 100644
--- a/includes/memcached-client.php
+++ b/includes/memcached-client.php
@@ -667,7 +667,7 @@ class memcached
function _dead_sock ($sock)
{
$host = array_search($sock, $this->_cache_sock);
- list ($ip, $port) = explode(":", $host);
+ @list ($ip, $port) = explode(":", $host);
$this->_host_dead[$ip] = time() + 30 + intval(rand(0, 10));
$this->_host_dead[$host] = $this->_host_dead[$ip];
unset($this->_cache_sock[$host]);
@@ -737,13 +737,7 @@ class memcached
*/
function _hashfunc ($key)
{
- $hash = 0;
- for ($i=0; $i<strlen($key); $i++)
- {
- $hash = $hash*33 + ord($key[$i]);
- }
-
- return $hash;
+ return crc32($key);
}
// }}}
diff --git a/index.php b/index.php
index b52395b056c5..3eb25720a69c 100644
--- a/index.php
+++ b/index.php
@@ -48,7 +48,7 @@ wfProfileOut( "main-misc-setup" );
# If the user is not logged in, the Namespace:title of the article must be in
# the Read array in order for the user to see it. (We have to check here to
# catch special pages etc. We check again in Article::view())
-if ( !$wgTitle->userCanRead() ) {
+if ( !is_null( $wgTitle ) && !$wgTitle->userCanRead() ) {
$wgOut->loginToUse();
$wgOut->output();
exit;
@@ -67,7 +67,7 @@ if ( $search = $wgRequest->getText( 'search' ) ) {
} else if ( $wgTitle->getInterwiki() != "" ) {
$url = $wgTitle->getFullURL();
# Check for a redirect loop
- if ( !preg_match( "/^" . preg_quote( $wgServer ) . "/", $url ) && $wgTitle->isLocal() ) {
+ if ( !preg_match( "/^" . preg_quote( $wgServer, "/" ) . "/", $url ) && $wgTitle->isLocal() ) {
$wgOut->redirect( $url );
} else {
$wgTitle = Title::newFromText( wfMsg( "badtitle" ) );
@@ -77,6 +77,9 @@ if ( $search = $wgRequest->getText( 'search' ) ) {
/* redirect to canonical url, make it a 301 to allow caching */
$wgOut->redirect( $wgTitle->getFullURL(), '301');
} else if ( Namespace::getSpecial() == $wgTitle->getNamespace() ) {
+ # actions that need to be made when we have a special pages
+ require_once( 'includes/SpecialPage.php' );
+ if ( !$wgAllowSysopQueries ) {SpecialPage::removePage( 'Asksql' ); }
SpecialPage::executePath( $wgTitle );
} else {
if ( Namespace::getMedia() == $wgTitle->getNamespace() ) {
@@ -151,6 +154,7 @@ if ( $search = $wgRequest->getText( 'search' ) ) {
case "purge":
wfPurgeSquidServers(array($wgTitle->getInternalURL()));
$wgOut->setSquidMaxage( $wgSquidMaxage );
+ $wgTitle->invalidateCache();
$wgArticle->view();
break;
default:
diff --git a/install-utils.inc b/install-utils.inc
index 73f4e38171a6..040c34dc8191 100644
--- a/install-utils.inc
+++ b/install-utils.inc
@@ -55,14 +55,18 @@ function copydirectory( $source, $dest ) {
}
}
-function readconsole() {
- $fp = fopen( "php://stdin", "r" );
- $resp = trim( fgets( $fp, 1024 ) );
- fclose( $fp );
- return $resp;
+function readconsole( $prompt = "" ) {
+ if ( function_exists( "readline" ) ) {
+ return readline( $prompt );
+ } else {
+ print $prompt;
+ $fp = fopen( "php://stdin", "r" );
+ $resp = trim( fgets( $fp, 1024 ) );
+ fclose( $fp );
+ return $resp;
+ }
}
-
function replacevars( $ins ) {
$varnames = array(
"wgDBserver", "wgDBname", "wgDBintlname", "wgDBuser",
diff --git a/irc/rc2irc.php b/irc/rc2irc.php
index 811a01f4e16e..2422687f1b5a 100644
--- a/irc/rc2irc.php
+++ b/irc/rc2irc.php
@@ -2,7 +2,7 @@
$ircNick = "wikipedia_rc";
$rooms = array("en" => 1, "fr" => 1, "de" => 1);
-$ircServer = "irc.freenode.net"
+$ircServer = "irc.freenode.net";
$ircSockName = "tcp://$ircServer";
$ircPort = 6667;
$minDelay = 0.5;
diff --git a/irc/rcdumper.php b/irc/rcdumper.php
index 11555a2cf4cb..0c8077589410 100644
--- a/irc/rcdumper.php
+++ b/irc/rcdumper.php
@@ -1,12 +1,13 @@
<?php
-
+ini_set( "display_errors", 1 );
$wgCommandLineMode = true;
$fmB = chr(2);
$fmU = chr(31);
-
+/*
$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
if ( $argv[1] ) {
$lang = $argv[1];
+ $site = "wikipedia";
putenv( "wikilang=$lang");
$settingsFile = "/apache/htdocs/{$argv[1]}/w/LocalSettings.php";
$newpath = "/apache/common/php$sep";
@@ -31,8 +32,11 @@ ini_set( "include_path", "$newpath$IP$sep$include_path" );
$wgCommandLineMode = true;
$DP = "../includes";
-require_once( $settingsFile );
-require_once( "Setup.php" );
+include_once( $settingsFile );
+include_once( "Setup.php" );*/
+
+require_once("../maintenance/liveCmdLine.inc" );
+
$wgTitle = Title::newFromText( "RC dumper" );
$wgCommandLineMode = true;
set_time_limit(0);
@@ -42,11 +46,15 @@ sleep(30);
$res = wfQuery( "SELECT rc_timestamp FROM recentchanges ORDER BY rc_timestamp DESC LIMIT 1", DB_READ );
$row = wfFetchObject( $res );
$oldTimestamp = $row->rc_timestamp;
+$serverCount = 0;
while (1) {
$res = wfQuery( "SELECT * FROM recentchanges WHERE rc_timestamp>'$oldTimestamp' ORDER BY rc_timestamp", DB_READ );
$rowIndex = 0;
while ( $row = wfFetchObject( $res ) ) {
+ if ( ++$serverCount % 20 == 0 ) {
+ print "/server irc.freenode.net\n";
+ }
$ns = $wgLang->getNsText( $row->rc_namespace ) ;
if ( $ns ) {
$title = "$ns:{$row->rc_title}";
diff --git a/languages/Language.php b/languages/Language.php
index 82adf4431c50..0f0448558dde 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -21,51 +21,52 @@
#
if($wgMetaNamespace === FALSE)
- $wgMetaNamespace = str_replace( " ", "_", $wgSitename );
+ $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
/* private */ $wgNamespaceNamesEn = array(
- NS_MEDIA => "Media",
- NS_SPECIAL => "Special",
- NS_MAIN => "",
- NS_TALK => "Talk",
- NS_USER => "User",
- NS_USER_TALK => "User_talk",
+ NS_MEDIA => 'Media',
+ NS_SPECIAL => 'Special',
+ NS_MAIN => '',
+ NS_TALK => 'Talk',
+ NS_USER => 'User',
+ NS_USER_TALK => 'User_talk',
NS_WIKIPEDIA => $wgMetaNamespace,
- NS_WIKIPEDIA_TALK => $wgMetaNamespace . "_talk",
- NS_IMAGE => "Image",
- NS_IMAGE_TALK => "Image_talk",
- NS_MEDIAWIKI => "MediaWiki",
- NS_MEDIAWIKI_TALK => "MediaWiki_talk",
- NS_TEMPLATE => "Template",
- NS_TEMPLATE_TALK => "Template_talk",
- NS_HELP => "Help",
- NS_HELP_TALK => "Help_talk",
- NS_CATEGORY => "Category",
- NS_CATEGORY_TALK => "Category_talk"
+ NS_WIKIPEDIA_TALK => $wgMetaNamespace . '_talk',
+ NS_IMAGE => 'Image',
+ NS_IMAGE_TALK => 'Image_talk',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_talk',
+ NS_TEMPLATE => 'Template',
+ NS_TEMPLATE_TALK => 'Template_talk',
+ NS_HELP => 'Help',
+ NS_HELP_TALK => 'Help_talk',
+ NS_CATEGORY => 'Category',
+ NS_CATEGORY_TALK => 'Category_talk'
);
/* private */ $wgDefaultUserOptionsEn = array(
- "quickbar" => 1, "underline" => 1, "hover" => 1,
- "cols" => 80, "rows" => 25, "searchlimit" => 20,
- "contextlines" => 5, "contextchars" => 50,
- "skin" => $wgDefaultSkin, "math" => 1, "rcdays" => 7, "rclimit" => 50,
- "highlightbroken" => 1, "stubthreshold" => 0,
- "previewontop" => 1, "editsection"=>1,"editsectiononrightclick"=>0, "showtoc"=>1,
- "showtoolbar" =>1,
- "date" => 0
+ 'quickbar' => 1, 'underline' => 1, 'hover' => 1,
+ 'cols' => 80, 'rows' => 25, 'searchlimit' => 20,
+ 'contextlines' => 5, 'contextchars' => 50,
+ 'skin' => $wgDefaultSkin, 'math' => 1, 'rcdays' => 7, 'rclimit' => 50,
+ 'highlightbroken' => 1, 'stubthreshold' => 0,
+ 'previewontop' => 1, 'editsection'=>1,'editsectiononrightclick'=>0, 'showtoc'=>1,
+ 'showtoolbar' =>1,
+ 'date' => 0
);
/* private */ $wgQuickbarSettingsEn = array(
- "None", "Fixed left", "Fixed right", "Floating left"
+ 'None', 'Fixed left', 'Fixed right', 'Floating left'
);
/* private */ $wgSkinNamesEn = array(
- 'standard' => "Standard",
- 'nostalgia' => "Nostalgia",
- 'cologneblue' => "Cologne Blue",
- 'davinci' => "DaVinci",
- 'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'standard' => 'Standard',
+ 'nostalgia' => 'Nostalgia',
+ 'cologneblue' => 'Cologne Blue',
+ 'davinci' => 'DaVinci',
+ 'mono' => 'Mono',
+ 'monobook' => 'MonoBook',
+ 'myskin' => 'MySkin'
);
define( "MW_MATH_PNG", 0 );
@@ -76,42 +77,42 @@ define( "MW_MATH_MODERN", 4 );
define( "MW_MATH_MATHML", 5 );
/* 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 => '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)',
);
/* private */ $wgDateFormatsEn = array(
- "No preference",
- "January 15, 2001",
- "15 January 2001",
- "2001 January 15",
- "2001-01-15"
+ 'No preference',
+ 'January 15, 2001',
+ '15 January 2001',
+ '2001 January 15',
+ '2001-01-15'
);
/* 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 articles 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' => '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'
);
/* private */ $wgBookstoreListEn = array(
@@ -121,224 +122,27 @@ this</a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
"Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1"
);
-/* The following list is in native languages, not in English */
-/* private */ $wgLanguageNames = array(
- "aa" => "Afar", # Afar
- "ab" => "Abkhazian", # Abkhazian - FIXME
- "af" => "Afrikaans", # Afrikaans
- "ak" => "Akana", # Akan
- "an" => "Aragon&eacute;s", # Aragonese
- "als" => "Els&auml;ssisch", # Alsatian
- "am" => "&#4768;&#4635;&#4653;&#4763;", # Amharic
- "ar" => "&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;", # Arabic
- "arc" => "&#1813;&#1829;&#1810;&#1834;&#1848;&#1821;&#1819;", # Aramaic
- "as" => "&#2437;&#2488;&#2478;&#2496;&#2527;&#2494;", # Assamese
- "ast" => "Asturleon&eacute;s", # Asturian
- "av" => "&#1040;&#1074;&#1072;&#1088;", # Avar
- "ay" => "Aymar", # Aymara
- "az" => "Az&#601;rbaycan", # Azerbaijani
- "ba" => "&#1041;&#1072;&#1096;&#1185;&#1086;&#1088;&#1090;", # Bashkir
- "be" => "&#1041;&#1077;&#1083;&#1072;&#1088;&#1091;&#1089;&#1082;&#1072;&#1103;", # Belarusian ''or'' Byelarussian
- "bg" => "&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;", # Bulgarian
- "bh" => "&#2349;&#2379;&#2332;&#2346;&#2369;&#2352;&#2368;", # Bihara
- "bi" => "Bislama", # Bislama
- "bn" => "&#2476;&#2494;&#2434;&#2482;&#2494; - (Bangla)", # Bengali
- "bm" => "Bambara",
- "bo" => "Bod skad", # Tibetan
- "br" => "Brezhoneg", # Breton
- "bs" => "Bosanski", # Bosnian
- "ca" => "Catal&agrave;", # Catalan
- "ce" => "&#1053;&#1086;&#1093;&#1095;&#1080;&#1081;&#1085;", # Chechen
- "ch" => "Chamoru", # Chamorro
- "chy" => "Tsets&ecirc;hest&acirc;hese", # Cheyenne
- "co" => "Corsu", # Corsican
- "cr" => "Nehiyaw", # Cree
- "cs" => "&#268;esky", # Czech
- "csb" => "Kasz&euml;bscziej", # Cassubian - FIXME
- "cv" => "&#1063;&#1233;&#1074;&#1072;&#1096; - (&#264;&#259;va&#349;)", # Chuvash
- "cy" => "Cymraeg", # Welsh
- "da" => "Dansk", # Danish
- "de" => "Deutsch", # German
- "dk" => "Dansk", # 'da' is correct for the language.
- "dv" => "Dhivehi", # Dhivehi
- "dz" => "Dzongkha", # Bhutani
- "ee" => "Eve", # Eve
- "el" => "&#917;&#955;&#955;&#951;&#957;&#953;&#954;&#940;", # Greek
- "en" => "English", # English
- "eo" => "Esperanto", # Esperanto
- "es" => "Espa&ntilde;ol", # Spanish
- "et" => "Eesti", # Estonian
- "eu" => "Euskara", # Basque
- "fa" => "&#1601;&#1575;&#1585;&#1587;&#1740;", # Persian
- "ff" => "Fulfulde", # Fulfulde
- "fi" => "Suomi", # Finnish
- "fj" => "Na Vosa Vakaviti", # Fijian
- "fo" => "F&oslash;royskt", # Faroese
- "fr" => "Fran&ccedil;ais", # French
- "fy" => "Frysk", # Frisian
- "ga" => "Gaeilge", # Irish
- "gd" => "G&agrave;idhlig", # Scots Gaelic
- "gl" => "Galego", # Gallegan
- "gn" => "Ava&ntilde;e'&#7869;", # Guarani
- "gu" => "&#2711;&#2753;&#2716;&#2736;&#2750;&#2724;&#2752;", # Gujarati
- "gv" => "Gaelg", # Manx
- "ha" => "&#1607;&#1614;&#1608;&#1615;&#1587;&#1614;", # Hausa
- "haw" => "Hawai`i", # Hawaiian
- "he" => "&#1506;&#1489;&#1512;&#1497;&#1514;", # Hebrew
- "hi" => "&#2361;&#2367;&#2344;&#2381;&#2342;&#2368;", # Hindi
- "ho" => "Hiri Motu",
- "hr" => "Hrvatski", # Croatian
- "ht" => "Haitian", # Haitian (FIXME!)
- "hu" => "Magyar", # Hungarian
- "hy" => "&#1344;&#1377;&#1397;&#1381;&#1408;&#1381;&#1398;", # Armenian
- "hz" => "Otsiherero", # Herero
- "ia" => "Interlingua", # Interlingua (IALA)
- "id" => "Bahasa Indonesia", # Indonesian
- "ie" => "Interlingue", # Interlingue (Occidental)
- "ig" => "Igbo", # Igbo
- "ii" => "Yi", # Sichuan Yi (FIXME!)
- "ik" => "I&ntilde;upiak", # Inupiak
- "io" => "Ido", # Ido
- "is" => "&Iacute;slensk", # Icelandic
- "it" => "Italiano", # Italian
- "iu" => "&#5123;&#5316;&#5251;&#5198;&#5200;&#5222;", # Inuktitut
- "ja" => "&#26085;&#26412;&#35486;", # Japanese
- "jv" => "Bahasa Jawa", # Javanese
- "ka" => "&#4325;&#4304;&#4320;&#4311;&#4323;&#4314;&#4312;", # Georgian
- "kg" => "Kongo", # Kongo (FIXME!)
- "ki" => "Kikuyu", # Kikuyu (FIXME!)
- "kj" => "Kuanyama", # Kuanyama (FIXME!)
- "kk" => "&#1179;&#1072;&#1079;&#1072;&#1179;&#1096;&#1072;", # Kazakh
- "kl" => "Kalaallisut", # Greenlandic
- "km" => "&#6039;&#6070;&#6047;&#6070;&#6017;&#6098;&#6040;&#6082;&#6042;", # Cambodian
- "kn" => "&#3221;&#3240;&#3277;&#3240;&#3233;", # Kannada
- "ko" => "&#54620;&#44397;&#50612;", # Korean
- "kr" => "Kanuri",
- "ks" => "&#2325;&#2358;&#2381;&#2350;&#2368;&#2352;&#2368; - (&#1603;&#1588;&#1605;&#1610;&#1585;&#1610;)", # Kashmiri
- "ku" => "Kurd&icirc;", # Kurdish
- "kv" => "Komi",
- "kw" => "Kernewek", # Cornish
- "ky" => "K&#305;rg&#305;zca", # Kirghiz
- "la" => "Latina", # Latin
- "lb" => "L&euml;tzebuergesch", # Luxemburguish
- "lg" => "Luganda", # Ganda
- "li" => "Limburgs", # Limburgian
- "ln" => "Lingala", # Lingala
- "lo" => "Pha xa lao", # Laotian
- "lt" => "Lietuvi&#371;", # Lithuanian
- "lv" => "Latvie&scaron;u", # Latvian
- "mg" => "Malagasy", # Malagasy - FIXME
- "mh" => "Ebon", # Marshallese
- "mi" => "M&#257;ori", # Maori
- "mk" => "&#1052;&#1072;&#1082;&#1077;&#1076;&#1086;&#1085;&#1089;&#1082;&#1080;", # Macedonian
- "ml" => "&#3374;&#3378;&#3375;&#3390;&#3379;&#3330;", # Malayalam
- "mn" => "&#1052;&#1086;&#1085;&#1075;&#1086;&#1083;", # Mongoloian
- "mo" => "Moldoveana", # Moldovan
- "mr" => "&#2350;&#2352;&#2366;&#2336;&#2368;", # Marathi
- "ms" => "Bahasa Melayu", # Malay
- "mt" => "bil-Malti", # Maltese
- "my" => "Myanmasa", # Burmese
- "na" => "Nauru", # Nauruan
- "nb" => "Bokm&aring;l", # Norwegian (Bokmal)
- "nah" => "Nahuatl",
- "nds" => "Platd&uuml;&uuml;tsch", # Low German ''or'' Low Saxon
- "ne" => "&#2344;&#2375;&#2346;&#2366;&#2354;&#2368;", # Nepali
- "ng" => "Ndonga",
- "nl" => "Nederlands", # Dutch
- "nb" => "Norsk", # Norwegian [currently using old '''no''' code]
- "ne" => "&#2344;&#2375;&#2346;&#2366;&#2354;&#2368;", # Nepali
- "nn" => "Nynorsk" , # (Norwegian) Nynorsk
- "no" => "Norsk", # Norwegian
- "nv" => "Din&eacute; bizaad", # Navajo
- "ny" => "Chi-Chewa", # Chichewa
- "oc" => "Occitan", # Occitan
- "om" => "Oromoo", # Oromo
- "or" => "Oriya", # Oriya - FIXME
- "pa" => "&#2346;&#2306;&#2332;&#2366;&#2348;&#2368; / &#2602;&#2588;&#2622;&#2604;&#2624; / &#1662;&#1606;&#1580;&#1575;&#1576;&#1610;", # Punjabi
- "pi" => "&#2346;&#2366;&#2367;&#2356;", # Pali
- "pl" => "Polski", # Polish
- "ps" => "&#1662;&#1690;&#1578;&#1608;", # Pashto
- "pt" => "Portugu&ecirc;s", # Portuguese
- "qu" => "Runa Simi", # Quechua
- "rm" => "Rumantsch", # Raeto-Romance
- "rn" => "Kirundi", # Kirundi
- "ro" => "Rom&acirc;n&#259;", # Romanian
- "ru" => "&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;", # Russian
- "rw" => "Kinyarwanda",
- "sa" => "&#2360;&#2306;&#2360;&#2381;&#2325;&#2371;&#2340;", # Sanskrit
- "sc" => "Sardu", # Sardinian
- "sd" => "&#2360;&#2367;&#2344;&#2343;&#2367;", # Sindhi
- "se" => "S&aacute;megiella", # (Northern) Sami
- "sg" => "Sangro",
-# "sh" => "&#1057;&#1088;&#1087;&#1089;&#1082;&#1086;&#1093;&#1088;&#1074;&#1072;&#1090;&#1089;&#1082;&#1080; (Srbskohrvatski)", ## Serbocroatian -- Obsolete
- "si" => "Simhala", # Sinhalese
- "simple" => "Simple English",
- "sk" => "Sloven&#269;ina", # Slovak
- "sl" => "Sloven&scaron;&#269;ina", # Slovenian
- "sm" => "Gagana Samoa", # Samoan
- "sn" => "chiShona", # Shona
- "so" => "Soomaaliga", # Somali
- "sq" => "Shqip", # Albanian
- "sr" => "&#1057;&#1088;&#1087;&#1089;&#1082;&#1080; / Srpski", # Serbian
- "ss" => "SiSwati", # Swati
- "st" => "seSotho", # (Southern) Sotho
- "su" => "Bahasa Sunda", # Sundanese
- "sv" => "Svenska", # Swedish
- "sw" => "Kiswahili", # Swahili
- "ta" => "&#2980;&#2990;&#3007;&#2996;&#3021;", # Tamil
- "te" => "&#3108;&#3142;&#3122;&#3137;&#3095;&#3137;", # Telugu
- "tg" => "&#1058;&#1086;&#1207;&#1080;&#1082;&#1251;", # Tajik
- "th" => "&#3652;&#3607;&#3618;", # Thai
- "ti" => "Tigrinya", # Tigrinya - FIXME
- "tk" => "&#1578;&#1585;&#1603;&#1605;&#1606; / &#1058;&#1091;&#1088;&#1082;&#1084;&#1077;&#1085;", # Turkmen
- "tl" => "Tagalog", # Tagalog (Filipino)
- "tlh" => "tlhIngan-Hol", # Klingon
- "tn" => "Setswana", # Setswana
- "to" => "Tonga", # Tonga - FIXME
- "tokipona" => "Toki Pona", # Toki Pona
- "tp" => "Toki Pona", # Toki Pona - non-standard language code
- "tpi" => "Tok Pisin", # Tok Pisin
- "tr" => "T&uuml;rk&ccedil;e", # Turkish
- "ts" => "Xitsonga", # Tsonga
- "tt" => "Tatar", # Tatar
- "tw" => "Twi", # Twi -- FIXME
- "ty" => "Reo M&#257;`ohi", # Tahitian
- "ug" => "Oyghurque", # Uyghur
- "uk" => "&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;", # Ukrainian
- "ur" => "&#1575;&#1585;&#1583;&#1608;", # Urdu
- "uz" => "&#1038;&#1079;&#1073;&#1077;&#1082;", # Uzbek
- "ve" => "Venda", # Venda
- "vi" => "Ti&#7871;ng Vi&#7879;t", # Vietnamese
- "vo" => "Volap&uuml;k", # Volapük
- "wa" => "Walon", # Walloon
- "wo" => "Wollof", # Wolof
- "xh" => "isiXhosa", # Xhosan
- "yi" => "&#1497;&#1497;&#1460;&#1491;&#1497;&#1513;", # Yiddish
- "yo" => "Yor&ugrave;b&aacute;", # Yoruba
- "za" => "(Cuengh)", # Zhuang
- "zh" => "&#20013;&#25991;", # (Zh&#333;ng Wén) - Chinese
- "zh-cn" => "&#20013;&#25991;(&#31616;&#20307;)", # Simplified
- "zh-tw" => "&#20013;&#25991;(&#32321;&#20307;)", # Traditional
- "zu" => "isiZulu", # Zulu
-);
+# Read language names
+global $wgLanguageNames;
+require_once( "Names.php" );
$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', 'June',
+ 'July', 'August', 'September', 'October', 'November',
+ 'December'
);
/* 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:
@@ -347,38 +151,38 @@ $wgLanguageNamesEn =& $wgLanguageNames;
#
/* private */ $wgMagicWordsEn = array(
# ID CASE SYNONYMS
- MAG_REDIRECT => array( 0, "#redirect" ),
- MAG_NOTOC => array( 0, "__NOTOC__" ),
- MAG_FORCETOC => array( 0, "__FORCETOC__" ),
- MAG_NOEDITSECTION => array( 0, "__NOEDITSECTION__" ),
- 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_PAGENAME => array( 1, "PAGENAME" ),
- MAG_NAMESPACE => array( 1, "NAMESPACE" ),
- MAG_MSG => array( 0, "MSG:" ),
- MAG_SUBST => array( 0, "SUBST:" ),
- MAG_MSGNW => array( 0, "MSGNW:" ),
- MAG_END => array( 0, "__END__" ),
- MAG_IMG_THUMBNAIL => array( 1, "thumbnail", "thumb" ),
- MAG_IMG_RIGHT => array( 1, "right" ),
- MAG_IMG_LEFT => array( 1, "left" ),
- MAG_IMG_NONE => array( 1, "none" ),
- MAG_IMG_WIDTH => array( 1, "$1px" ),
- MAG_IMG_CENTER => array( 1, "center", "centre" ),
- MAG_IMG_FRAMED => array( 1, "framed", "enframed", "frame" ),
- MAG_INT => array( 0, "INT:" ),
- MAG_SITENAME => array( 1, "SITENAME" ),
- MAG_NS => array( 0, "NS:" ),
- MAG_LOCALURL => array( 0, "LOCALURL:" ),
- MAG_LOCALURLE => array( 0, "LOCALURLE:" ),
- MAG_SERVER => array( 0, "SERVER" )
+ MAG_REDIRECT => array( 0, '#redirect' ),
+ MAG_NOTOC => array( 0, '__NOTOC__' ),
+ MAG_FORCETOC => array( 0, '__FORCETOC__' ),
+ MAG_NOEDITSECTION => array( 0, '__NOEDITSECTION__' ),
+ 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_PAGENAME => array( 1, 'PAGENAME' ),
+ MAG_NAMESPACE => array( 1, 'NAMESPACE' ),
+ MAG_MSG => array( 0, 'MSG:' ),
+ MAG_SUBST => array( 0, 'SUBST:' ),
+ MAG_MSGNW => array( 0, 'MSGNW:' ),
+ MAG_END => array( 0, '__END__' ),
+ MAG_IMG_THUMBNAIL => array( 1, 'thumbnail', 'thumb' ),
+ MAG_IMG_RIGHT => array( 1, 'right' ),
+ MAG_IMG_LEFT => array( 1, 'left' ),
+ MAG_IMG_NONE => array( 1, 'none' ),
+ MAG_IMG_WIDTH => array( 1, '$1px' ),
+ MAG_IMG_CENTER => array( 1, 'center', 'centre' ),
+ MAG_IMG_FRAMED => array( 1, 'framed', 'enframed', 'frame' ),
+ MAG_INT => array( 0, 'INT:' ),
+ MAG_SITENAME => array( 1, 'SITENAME' ),
+ MAG_NS => array( 0, 'NS:' ),
+ MAG_LOCALURL => array( 0, 'LOCALURL:' ),
+ MAG_LOCALURLE => array( 0, 'LOCALURLE:' ),
+ MAG_SERVER => array( 0, 'SERVER' )
);
#-------------------------------------------------------------------
@@ -402,117 +206,118 @@ $wgLanguageNamesEn =& $wgLanguageNames;
# Bits of text used by many pages:
#
-"categories" => "Categories",
-"category" => "category",
-"category_header" => "Articles in category \"$1\"",
-"subcategories" => "Subcategories",
+'categories' => 'Categories',
+'category' => 'category',
+'category_header' => 'Articles in category "$1"',
+'subcategories' => 'Subcategories',
-"linktrail" => "/^([a-z]+)(.*)\$/sD",
-"mainpage" => "Main Page",
-"mainpagetext" => "Wiki software successfully installed.",
+'linktrail' => '/^([a-z]+)(.*)\$/sD',
+'mainpage' => 'Main Page',
+'mainpagetext' => 'Wiki software successfully installed.',
"mainpagedocfooter" => "Please see [http://meta.wikipedia.org/wiki/MediaWiki_i18n documentation on customizing the interface]
and the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] for usage and configuration help.",
'portal' => 'Community portal',
'portal-url' => '{{ns:4}}:Community Portal',
-"about" => "About",
+'about' => 'About',
"aboutwikipedia" => "About {{SITENAME}}",
"aboutpage" => "{{ns:4}}:About",
-'article' => 'Article',
-"help" => "Help",
+'article' => 'Content page',
+'help' => 'Help',
"helppage" => "{{ns:12}}:Contents",
"wikititlesuffix" => "{{SITENAME}}",
"bugreports" => "Bug reports",
"bugreportspage" => "{{ns:4}}:Bug_reports",
-"sitesupport" => "Donations", # Set a URL in $wgSiteSupportPage in LocalSettings.php
-"faq" => "FAQ",
+'sitesupport' => 'Donations', # Set a URL in $wgSiteSupportPage in LocalSettings.php
+'faq' => 'FAQ',
"faqpage" => "{{ns:4}}:FAQ",
"edithelp" => "Editing help",
+"newwindow" => "(opens in new window)",
"edithelppage" => "{{ns:12}}:Editing",
-"cancel" => "Cancel",
-"qbfind" => "Find",
-"qbbrowse" => "Browse",
-"qbedit" => "Edit",
-"qbpageoptions" => "This page",
-"qbpageinfo" => "Context",
-"qbmyoptions" => "My pages",
-"qbspecialpages" => "Special pages",
-"moredotdotdot" => "More...",
-"mypage" => "My page",
-"mytalk" => "My talk",
-"anontalk" => "Talk for this IP",
+'cancel' => 'Cancel',
+'qbfind' => 'Find',
+'qbbrowse' => 'Browse',
+'qbedit' => 'Edit',
+'qbpageoptions' => 'This page',
+'qbpageinfo' => 'Context',
+'qbmyoptions' => 'My pages',
+'qbspecialpages' => 'Special pages',
+'moredotdotdot' => 'More...',
+'mypage' => 'My page',
+'mytalk' => 'My talk',
+'anontalk' => 'Talk for this IP',
'navigation' => 'Navigation',
-"currentevents" => "Current events",
-"disclaimers" => "Disclaimers",
+'currentevents' => 'Current events',
+'disclaimers' => 'Disclaimers',
"disclaimerpage" => "{{ns:4}}:General_disclaimer",
"errorpagetitle" => "Error",
"returnto" => "Return to $1.",
-"fromwikipedia" => "From {{SITENAME}}, the free encyclopedia.",
-"whatlinkshere" => "Pages that link here",
-"help" => "Help",
-"search" => "Search",
-"go" => "Go",
-"history" => "Page history",
+"fromwikipedia" => "From {{SITENAME}}",
+'whatlinkshere' => 'Pages that link here',
+'help' => 'Help',
+'search' => 'Search',
+'go' => 'Go',
+"history" => 'Page history',
'history_short' => 'History',
-"printableversion" => "Printable version",
+'printableversion' => 'Printable version',
'edit' => 'Edit',
-"editthispage" => "Edit this page",
+'editthispage' => 'Edit this page',
'delete' => 'Delete',
"deletethispage" => "Delete this page",
-"undelete_short" => "Undelete",
+"undelete_short" => "Undelete $1 edits",
'protect' => 'Protect',
-"protectthispage" => "Protect this page",
+'protectthispage' => 'Protect this page',
'unprotect' => 'Unprotect',
-"unprotectthispage" => "Unprotect this page",
-"newpage" => "New page",
-"talkpage" => "Discuss this page",
+'unprotectthispage' => 'Unprotect this page',
+'newpage' => 'New page',
+'talkpage' => 'Discuss this page',
'specialpage' => 'Special Page',
'personaltools' => 'Personal tools',
-"postcomment" => "Post a comment",
-"addsection" => "+",
-"articlepage" => "View article",
-"subjectpage" => "View subject", # For compatibility
+'postcomment' => 'Post a comment',
+'addsection' => '+',
+'articlepage' => 'View content page',
+'subjectpage' => 'View subject', # For compatibility
'talk' => 'Discussion',
'toolbox' => 'Toolbox',
-"userpage" => "View user page",
-"wikipediapage" => "View meta page",
-"imagepage" => "View image page",
-"viewtalkpage" => "View discussion",
-"otherlanguages" => "Other languages",
-"redirectedfrom" => "(Redirected from $1)",
-"lastmodified" => "This page was last modified $1.",
-"viewcount" => "This page has been accessed $1 times.",
-"copyright" => "Content is available under $1.",
-"poweredby" => "{{SITENAME}} is powered by [http://www.mediawiki.org/ MediaWiki], an open source wiki engine.",
-"printsubtitle" => "(From {{SERVER}})",
-"protectedpage" => "Protected page",
-"administrators" => "{{ns:4}}:Administrators",
-"sysoptitle" => "Sysop access required",
-"sysoptext" => "The action you have requested can only be
+'userpage' => 'View user page',
+'wikipediapage' => 'View project page',
+'imagepage' => 'View image page',
+'viewtalkpage' => 'View discussion',
+'otherlanguages' => 'Other languages',
+'redirectedfrom' => "(Redirected from $1)",
+'lastmodified' => "This page was last modified $1.",
+'viewcount' => "This page has been accessed $1 times.",
+'copyright' => "Content is available under $1.",
+'poweredby' => "{{SITENAME}} is powered by [http://www.mediawiki.org/ MediaWiki], an open source wiki engine.",
+'printsubtitle' => "(From {{SERVER}})",
+'protectedpage' => 'Protected page',
+'administrators' => "{{ns:4}}:Administrators",
+'sysoptitle' => 'Sysop access required',
+'sysoptext' => "The action you have requested can only be
performed by users with \"sysop\" status.
See $1.",
-"developertitle" => "Developer access required",
+'developertitle' => 'Developer access required',
"developertext" => "The action you have requested can only be
performed by users with \"developer\" status.
See $1.",
-"bureaucrattitle" => "Bureaucrat access required",
+'bureaucrattitle' => 'Bureaucrat access required',
"bureaucrattext" => "The action you have requested can only be
performed by sysops with \"bureaucrat\" status.",
-"nbytes" => "$1 bytes",
-"go" => "Go",
-"ok" => "OK",
-"sitetitle" => "{{SITENAME}}",
-"pagetitle" => "$1 - {{SITENAME}}",
-"sitesubtitle" => "The Free Encyclopedia", # FIXME
-"retrievedfrom" => "Retrieved from \"$1\"",
-"newmessages" => "You have $1.",
-"newmessageslink" => "new messages",
-"editsection"=>"edit",
-"toc" => "Table of contents",
-"showtoc" => "show",
-"hidetoc" => "hide",
-"thisisdeleted" => "View or restore $1?",
-"restorelink" => "$1 deleted edits",
+'nbytes' => "$1 bytes",
+'go' => 'Go',
+'ok' => 'OK',
+'sitetitle' => "{{SITENAME}}",
+'pagetitle' => "$1 - {{SITENAME}}",
+'sitesubtitle' => 'The Free Encyclopedia', # FIXME
+'retrievedfrom' => "Retrieved from \"$1\"",
+'newmessages' => "You have $1.",
+'newmessageslink' => 'new messages',
+'editsection'=>'edit',
+'toc' => 'Table of contents',
+'showtoc' => 'show',
+'hidetoc' => 'hide',
+'thisisdeleted' => "View or restore $1?",
+'restorelink' => "$1 deleted edits",
'feedlinks' => 'Feed:',
# Short words for each namespace, by default used in the 'article' tab in monobook
@@ -529,41 +334,42 @@ performed by sysops with \"bureaucrat\" status.",
# Main script and global functions
#
-"nosuchaction" => "No such action",
-"nosuchactiontext" => "The action specified by the URL is not
-recognized by the wiki",
-"nosuchspecialpage" => "No such special page",
-"nospecialpagetext" => "You have requested a special page that is not
-recognized by the wiki.",
+'nosuchaction' => 'No such action',
+'nosuchactiontext' => 'The action specified by the URL is not
+recognized by the wiki',
+'nosuchspecialpage' => 'No such special page',
+'nospecialpagetext' => 'You have requested a special page that is not
+recognized by the wiki.',
# General errors
#
-"error" => "Error",
-"databaseerror" => "Database error",
-"dberrortext" => "A database query syntax error has occurred.
+'error' => 'Error',
+'databaseerror' => 'Database error',
+'dberrortext' => "A database query syntax error has occurred.
This could be because of an illegal search query (see $5),
or it may indicate a bug in the software.
The last attempted database query was:
<blockquote><tt>$1</tt></blockquote>
from within function \"<tt>$2</tt>\".
MySQL returned error \"<tt>$3: $4</tt>\".",
-"dberrortextcl" => "A database query syntax error has occurred.
+'dberrortextcl' => "A database query syntax error has occurred.
The last attempted database query was:
\"$1\"
from within function \"$2\".
MySQL returned error \"$3: $4\".\n",
-"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",
-"readonlytext" => "The database is currently locked to new
+'noconnect' => 'Sorry! The wiki is experiencing some technical difficulties, and cannot contact the database server. <br />
+$1',
+'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',
+'readonlytext' => "The database is currently locked to new
entries and other modifications, probably for routine database maintenance,
after which it will be back to normal.
The administrator who locked it offered this explanation:
<p>$1",
-"missingarticle" => "The database did not find the text of a page
+'missingarticle' => "The database did not find the text of a page
that it should have found, named \"$1\".
<p>This is usually caused by following an outdated diff or history link to a
@@ -571,29 +377,29 @@ page that has been deleted.
<p>If this is not the case, you may have found a bug in the software.
Please report this to an administrator, making note of the URL.",
-"internalerror" => "Internal error",
-"filecopyerror" => "Could not copy file \"$1\" to \"$2\".",
-"filerenameerror" => "Could not rename file \"$1\" to \"$2\".",
-"filedeleteerror" => "Could not delete file \"$1\".",
-"filenotfound" => "Could not find file \"$1\".",
-"unexpected" => "Unexpected value: \"$1\"=\"$2\".",
-"formerror" => "Error: could not submit form",
-"badarticleerror" => "This action cannot be performed on this page.",
-"cannotdelete" => "Could not delete the page or image specified. (It may have already been deleted by someone else.)",
-"badtitle" => "Bad title",
-"badtitletext" => "The requested page title was invalid, empty, or
+'internalerror' => 'Internal error',
+'filecopyerror' => "Could not copy file \"$1\" to \"$2\".",
+'filerenameerror' => "Could not rename file \"$1\" to \"$2\".",
+'filedeleteerror' => "Could not delete file \"$1\".",
+'filenotfound' => "Could not find file \"$1\".",
+'unexpected' => "Unexpected value: \"$1\"=\"$2\".",
+'formerror' => 'Error: could not submit form',
+'badarticleerror' => 'This action cannot be performed on this page.',
+'cannotdelete' => 'Could not delete the page or image specified. (It may have already been deleted by someone else.)',
+'badtitle' => 'Bad title',
+'badtitletext' => "The requested page title was invalid, empty, or
an incorrectly linked inter-language or inter-wiki title.",
-"perfdisabled" => "Sorry! This feature has been temporarily disabled
+'perfdisabled' => 'Sorry! This feature has been temporarily disabled
because it slows the database down to the point that no one can use
-the wiki.",
-"perfdisabledsub" => "Here's a saved copy from $1:", # obsolete?
-"perfcached" => "The following data is cached and may not be completely up to date:",
-"wrong_wfQuery_params" => "Incorrect parameters to wfQuery()<br />
+the wiki.',
+'perfdisabledsub' => "Here's a saved copy from $1:", # obsolete?
+'perfcached' => 'The following data is cached and may not be completely up to date:',
+'wrong_wfQuery_params' => "Incorrect parameters to wfQuery()<br />
Function: $1<br />
Query: $2
",
-"viewsource" => "View source",
-"protectedtext" => "This page has been locked to prevent editing; there are
+'viewsource' => 'View source',
+'protectedtext' => "This page has been locked to prevent editing; there are
a number of reasons why this may be so, please see
[[{{ns:4}}:Protected page]].
@@ -602,101 +408,101 @@ You can view and copy the source of this page:",
# Login and logout pages
#
-"logouttitle" => "User logout",
+"logouttitle" => 'User logout',
"logouttext" => "You are now logged out.
You can continue to use {{SITENAME}} anonymously, or you can log in
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.
+'welcomecreation' => "<h2>Welcome, $1!</h2><p>Your account has been created.
Don't forget to change your {{SITENAME}} preferences.",
-"loginpagetitle" => "User login",
-"yourname" => "Your user name",
-"yourpassword" => "Your password",
-"yourpasswordagain" => "Retype password",
-"newusersonly" => " (new users only)",
-"remembermypassword" => "Remember my password across sessions.",
-"loginproblem" => "<b>There has been a problem with your login.</b><br />Try again!",
-"alreadyloggedin" => "<font color=red><b>User $1, you are already logged in!</b></font><br />\n",
-
-"login" => "Log in",
-"loginprompt" => "You must have cookies enabled to log in to {{SITENAME}}.",
-"userlogin" => "Log in",
-"logout" => "Log out",
-"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 email*",
-"yourrealname" => "Your real name*",
-"yournick" => "Your nickname (for signatures)",
-"emailforlost" => "Fields marked with a star (*) are optional. Storing an email address enables people to contact you through the website without you having to reveal your
+'loginpagetitle' => 'User login',
+'yourname' => 'Your user name',
+'yourpassword' => 'Your password',
+'yourpasswordagain' => 'Retype password',
+'newusersonly' => ' (new users only)',
+'remembermypassword' => 'Remember my password across sessions.',
+'loginproblem' => '<b>There has been a problem with your login.</b><br />Try again!',
+'alreadyloggedin' => "<font color=red><b>User $1, you are already logged in!</b></font><br />\n",
+
+'login' => 'Log in',
+'loginprompt' => "You must have cookies enabled to log in to {{SITENAME}}.",
+'userlogin' => 'Log in',
+'logout' => 'Log out',
+'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 email*',
+'yourrealname' => 'Your real name*',
+'yournick' => 'Your nickname (for signatures)',
+'emailforlost' => "Fields marked with a star (*) are optional. Storing an email address enables people to contact you through the website without you having to reveal your
email address to them, and it can be used to send you a new password if you forget it.<br /><br />Your real name, if you choose to provide it, will be used for giving you attribution for your work.",
'prefs-help-userdata' => '* <strong>Real name</strong> (optional): if you choose to provide it this will be used for giving you attribution for your work.<br/>
* <strong>Email</strong> (optional): Enables people to contact you through the website without you having to reveal your
email address to them, and it can be used to send you a new password if you forget it.',
-"loginerror" => "Login error",
-"nocookiesnew" => "The user account was created, but you are not logged in. {{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.",
+'loginerror' => 'Login error',
+'nocookiesnew' => "The user account was created, but you are not logged in. {{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.",
"nocookieslogin" => "{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them and try again.",
-"noname" => "You have not specified a valid user name.",
-"loginsuccesstitle" => "Login successful",
-"loginsuccess" => "You are now logged in to {{SITENAME}} as \"$1\".",
-"nosuchuser" => "There is no user by the name \"$1\".
+'noname' => 'You have not specified a valid user name.',
+'loginsuccesstitle' => 'Login successful',
+'loginsuccess' => "You are now logged in to {{SITENAME}} as \"$1\".",
+'nosuchuser' => "There is no user by the name \"$1\".
Check your spelling, or use the form below to create a new user account.",
-"wrongpassword" => "The password you entered is incorrect. Please try again.",
-"mailmypassword" => "Mail me a new password",
-"passwordremindertitle" => "Password reminder from {{SITENAME}}",
-"passwordremindertext" => "Someone (probably you, from IP address $1)
+'wrongpassword' => 'The password you entered is incorrect. Please try again.',
+'mailmypassword' => 'Mail me a new password',
+'passwordremindertitle' => "Password reminder from {{SITENAME}}",
+'passwordremindertext' => "Someone (probably you, from IP address $1)
requested that we send you a new {{SITENAME}} login password.
The password for user \"$2\" is now \"$3\".
You should log in and change your password now.",
-"noemail" => "There is no e-mail address recorded for user \"$1\".",
-"passwordsent" => "A new password has been sent to the e-mail address
+'noemail' => "There is no e-mail address recorded for user \"$1\".",
+'passwordsent' => "A new password has been sent to the e-mail address
registered for \"$1\".
Please log in again after you receive it.",
-"loginend" => "&nbsp;",
-"mailerror" => "Error sending mail: $1",
+'loginend' => '&nbsp;',
+'mailerror' => "Error sending mail: $1",
# Edit page toolbar
-"bold_sample"=>"Bold text",
-"bold_tip"=>"Bold text",
-"italic_sample"=>"Italic text",
-"italic_tip"=>"Italic text",
-"link_sample"=>"Link title",
-"link_tip"=>"Internal link",
-"extlink_sample"=>"http://www.example.com link title",
-"extlink_tip"=>"External link (remember http:// prefix)",
-"headline_sample"=>"Headline text",
-"headline_tip"=>"Level 2 headline",
-"math_sample"=>"Insert formula here",
-"math_tip"=>"Mathematical formula (LaTeX)",
-"nowiki_sample"=>"Insert non-formatted text here",
-"nowiki_tip"=>"Ignore wiki formatting",
-"image_sample"=>"Example.jpg",
-"image_tip"=>"Embedded image",
-"media_sample"=>"Example.mp3",
-"media_tip"=>"Media file link",
-"sig_tip"=>"Your signature with timestamp",
-"hr_tip"=>"Horizontal line (use sparingly)",
-"infobox"=>"Click a button to get an example text",
+'bold_sample'=>'Bold text',
+'bold_tip'=>'Bold text',
+'italic_sample'=>'Italic text',
+'italic_tip'=>'Italic text',
+'link_sample'=>'Link title',
+'link_tip'=>'Internal link',
+'extlink_sample'=>'http://www.example.com link title',
+'extlink_tip'=>'External link (remember http:// prefix)',
+'headline_sample'=>'Headline text',
+'headline_tip'=>'Level 2 headline',
+'math_sample'=>'Insert formula here',
+'math_tip'=>'Mathematical formula (LaTeX)',
+'nowiki_sample'=>'Insert non-formatted text here',
+'nowiki_tip'=>'Ignore wiki formatting',
+'image_sample'=>'Example.jpg',
+'image_tip'=>'Embedded image',
+'media_sample'=>'Example.mp3',
+'media_tip'=>'Media file link',
+'sig_tip'=>'Your signature with timestamp',
+'hr_tip'=>'Horizontal line (use sparingly)',
+'infobox'=>'Click a button to get an example text',
# alert box shown in browsers where text selection does not work, test e.g. with mozilla or konqueror
-"infobox_alert"=>"Please enter the text you want to be formatted.\\n It will be shown in the infobox for copy and pasting.\\nExample:\\n$1\\nwill become:\\n$2",
+'infobox_alert'=>"Please enter the text you want to be formatted.\\n It will be shown in the infobox for copy and pasting.\\nExample:\\n$1\\nwill become:\\n$2",
# Edit pages
#
-"summary" => "Summary",
-"subject" => "Subject/headline",
-"minoredit" => "This is a minor edit",
-"watchthis" => "Watch this article",
-"savearticle" => "Save page",
-"preview" => "Preview",
-"showpreview" => "Show preview",
-"blockedtitle" => "User is blocked",
-"blockedtext" => "Your user name or IP address has been blocked by $1.
+'summary' => 'Summary',
+'subject' => 'Subject/headline',
+'minoredit' => 'This is a minor edit',
+'watchthis' => 'Watch this page',
+'savearticle' => 'Save page',
+'preview' => 'Preview',
+'showpreview' => 'Show preview',
+'blockedtitle' => 'User is blocked',
+'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
[[{{ns:4}}:Administrators|administrators]] to discuss the block.
@@ -704,53 +510,53 @@ Note that you may not use the \"email this user\" feature unless you have a vali
Your IP address is $3. Please include this address in any queries you make.
",
-"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.",
-"loginreqtitle" => "Login Required",
-"loginreqtext" => "You must [[special:Userlogin|login]] to view other pages.",
-"accmailtitle" => "Password sent.",
-"accmailtext" => "The Password for '$1' has been sent to $2.",
-"newarticle" => "(New)",
-"newarticletext" =>
+'whitelistedittitle' => 'Login required to edit',
+'whitelistedittext' => 'You have to [[Special:Userlogin|login]] to edit pages.',
+'whitelistreadtitle' => 'Login required to read',
+'whitelistreadtext' => 'You have to [[Special:Userlogin|login]] to read pages.',
+'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.',
+'loginreqtitle' => 'Login Required',
+'loginreqtext' => 'You must [[special:Userlogin|login]] to view other pages.',
+'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.
To create the page, start typing in the box below
(see the [[{{ns:4}}:Help|help page]] for more info).
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)",
-'usercssjs' => "'''Note:''' After saving, you have to tell your bowser to get the new version: '''Mozilla:''' click ''reload''(or ''ctrl-r''), '''IE / Opera:''' ''ctrl-f5'', '''Safari:''' ''cmd-r'', '''Konqueror''' ''ctrl-r''.",
+'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!'''",
-"updated" => "(Updated)",
-"note" => "<strong>Note:</strong> ",
-"previewnote" => "Remember that this is only a preview, and has not yet been saved!",
-"previewconflict" => "This preview reflects the text in the upper
-text editing area as it will appear if you choose to save.",
-"editing" => "Editing $1",
+'updated' => '(Updated)',
+'note' => '<strong>Note:</strong> ',
+'previewnote' => 'Remember that this is only a preview, and has not yet been saved!',
+'previewconflict' => 'This preview reflects the text in the upper
+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
+'commentedit' => ' (comment)',
+'editconflict' => 'Edit conflict: $1',
+'explainconflict' => "Someone else has changed this page since you
started editing it.
The upper text area contains the page text as it currently exists.
Your changes are shown in the lower text area.
You will have to merge your changes into the existing text.
<b>Only</b> the text in the upper text area will be saved when you
press \"Save page\".\n<p>",
-"yourtext" => "Your text",
-"storedversion" => "Stored version",
-"editingold" => "<strong>WARNING: You are editing an out-of-date
+'yourtext' => 'Your text',
+'storedversion' => 'Stored version',
+'editingold' => '<strong>WARNING: You are editing an out-of-date
revision of this page.
-If you save it, any changes made since this revision will be lost.</strong>\n",
-"yourdiff" => "Differences",
+If you save it, any changes made since this revision will be lost.</strong>\n',
+'yourdiff' => 'Differences',
# FIXME: This is inappropriate for third-party use!
-"copyrightwarning" => "Please note that all contributions to {{SITENAME}} are
+'copyrightwarning' => "Please note that all contributions to {{SITENAME}} are
considered to be released under the GNU Free Documentation License
(see $1 for details).
If you don't want your writing to be edited mercilessly and redistributed
@@ -758,82 +564,82 @@ at will, then don't submit it here.<br />
You are also promising us that you wrote this yourself, or copied it from a
public domain or similar free resource.
<strong>DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!</strong>",
-"longpagewarning" => "WARNING: This page is $1 kilobytes long; some
+'longpagewarning' => "WARNING: This page is $1 kilobytes long; some
browsers may have problems editing pages approaching or longer than 32kb.
Please consider breaking the page into smaller sections.",
-"readonlywarning" => "WARNING: The database has been locked for maintenance,
+'readonlywarning' => 'WARNING: The database has been locked for maintenance,
so you will not be able to save your edits right now. You may wish to cut-n-paste
-the text into a text file and save it for later.",
-"protectedpagewarning" => "WARNING: This page has been locked so that only
+the text into a text file and save it for later.',
+'protectedpagewarning' => "WARNING: This page has been locked so that only
users with sysop privileges can edit it. Be sure you are following the
<a href='$wgScript/{{ns:4}}:Protected_page_guidelines'>protected page
guidelines</a>.",
# History pages
#
-"revhistory" => "Revision history",
-"nohistory" => "There is no edit history for this page.",
-"revnotfound" => "Revision not found",
-"revnotfoundtext" => "The old revision of the page you asked for could not be found.
+'revhistory' => 'Revision history',
+'nohistory' => 'There is no edit history for this page.',
+'revnotfound' => 'Revision not found',
+'revnotfoundtext' => "The old revision of the page you asked for could not be found.
Please check the URL you used to access this page.\n",
-"loadhist" => "Loading page history",
-"currentrev" => "Current revision",
-"revisionasof" => "Revision as of $1",
-"cur" => "cur",
-"next" => "next",
-"last" => "last",
-"orig" => "orig",
-"histlegend" => "Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br/>
+'loadhist' => 'Loading page history',
+'currentrev' => 'Current revision',
+'revisionasof' => "Revision as of $1",
+'cur' => 'cur',
+'next' => 'next',
+'last' => 'last',
+'orig' => 'orig',
+'histlegend' => 'Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br/>
Legend: (cur) = difference with current version,
-(last) = difference with preceding version, M = minor edit.",
+(last) = difference with preceding version, M = minor edit.',
# Diffs
#
-"difference" => "(Difference between revisions)",
-"loadingrev" => "loading revision for diff",
-"lineno" => "Line $1:",
-"editcurrent" => "Edit the current version of this page",
+'difference' => '(Difference between revisions)',
+'loadingrev' => 'loading revision for diff',
+'lineno' => "Line $1:",
+'editcurrent' => 'Edit the current version of this page',
'selectnewerversionfordiff' => 'Select a newer version for comparison',
'selectolderversionfordiff' => 'Select an older version for comparison',
'compareselectedversions' => 'Compare selected versions',
# Search results
#
-"searchresults" => "Search results",
-"searchhelppage" => "{{ns:4}}:Searching",
-"searchingwikipedia" => "Searching {{SITENAME}}",
-"searchresulttext" => "For more information about searching {{SITENAME}}, see $1.",
-"searchquery" => "For query \"$1\"",
-"badquery" => "Badly formed search query",
-"badquerytext" => "We could not process your query.
+'searchresults' => 'Search results',
+'searchhelppage' => "{{ns:4}}:Searching",
+'searchingwikipedia' => "Searching {{SITENAME}}",
+'searchresulttext' => "For more information about searching {{SITENAME}}, see $1.",
+'searchquery' => "For query \"$1\"",
+'badquery' => 'Badly formed search query',
+'badquerytext' => 'We could not process your query.
This is probably because you have attempted to search for a
word fewer than three letters long, which is not yet supported.
It could also be that you have mistyped the expression, for
-example \"fish and and scales\".
-Please try another query.",
-"matchtotals" => "The query \"$1\" matched $2 article titles
-and the text of $3 articles.",
-"nogomatch" => "No page with this exact title exists, trying full text search.",
-"titlematches" => "Article title matches",
-"notitlematches" => "No article title matches",
-"textmatches" => "Article text matches",
-"notextmatches" => "No article text matches",
-"prevn" => "previous $1",
-"nextn" => "next $1",
-"viewprevnext" => "View ($1) ($2) ($3).",
-"showingresults" => "Showing below <b>$1</b> results starting with #<b>$2</b>.",
-"showingresultsnum" => "Showing below <b>$3</b> results starting with #<b>$2</b>.",
-"nonefound" => "<strong>Note</strong>: unsuccessful searches are
+example "fish and and scales".
+Please try another query.',
+'matchtotals' => "The query \"$1\" matched $2 page titles
+and the text of $3 pages.",
+'nogomatch' => 'No page with this exact title exists, trying full text search.',
+'titlematches' => 'Article title matches',
+'notitlematches' => 'No page title matches',
+'textmatches' => 'Page text matches',
+'notextmatches' => 'No page text matches',
+'prevn' => "previous $1",
+'nextn' => "next $1",
+'viewprevnext' => "View ($1) ($2) ($3).",
+'showingresults' => "Showing below <b>$1</b> results starting with #<b>$2</b>.",
+'showingresultsnum' => "Showing below <b>$3</b> results starting with #<b>$2</b>.",
+'nonefound' => "<strong>Note</strong>: unsuccessful searches are
often caused by searching for common words like \"have\" and \"from\",
which are not indexed, or by specifying more than one search term (only pages
containing all of the search terms will appear in the result).",
-"powersearch" => "Search",
-"powersearchtext" => "
+'powersearch' => 'Search',
+'powersearchtext' => "
Search in namespaces :<br />
$1<br />
$2 List redirects &nbsp; 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>",
-"googlesearch" => "
+'googlesearch' => "
<!-- SiteSearch Google -->
<FORM method=GET action=\"http://www.google.com/search\">
<TABLE bgcolor=\"#FFFFFF\"><tr><td>
@@ -852,98 +658,100 @@ border=\"0\" ALT=\"Google\"></A>
</td></tr></TABLE>
</FORM>
<!-- SiteSearch Google -->",
-"blanknamespace" => "(Main)",
+'blanknamespace' => '(Main)',
# Preferences page
#
-"preferences" => "Preferences",
-"prefsnologin" => "Not logged in",
-"prefsnologintext" => "You must be <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
+'preferences' => 'Preferences',
+'prefsnologin' => 'Not logged in',
+'prefsnologintext' => "You must be <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
to set user preferences.",
-"prefslogintext" => "You are logged in as \"$1\".
+'prefslogintext' => "You are logged in as \"$1\".
Your internal ID number is $2.
See [[{{ns:4}}:User preferences help]] for help deciphering the options.",
-"prefsreset" => "Preferences have been reset from storage.",
-"qbsettings" => "Quickbar settings",
-"changepassword" => "Change password",
-"skin" => "Skin",
-"math" => "Rendering math",
-"dateformat" => "Date format",
-"math_failure" => "Failed to parse",
-"math_unknown_error" => "unknown error",
-"math_unknown_function" => "unknown function ",
-"math_lexing_error" => "lexing error",
-"math_syntax_error" => "syntax error",
-"math_image_error" => "PNG conversion failed; check for correct installation of latex, dvips, gs, and convert",
-"math_bad_tmpdir" => "Can't write to or create math temp directory",
-"math_bad_output" => "Can't write to or create math output directory",
-"math_notexvc" => "Missing texvc executable; please see math/README to configure.",
+'prefsreset' => 'Preferences have been reset from storage.',
+'qbsettings' => 'Quickbar settings',
+'qbsettingsnote' => 'This preference only works in the \'Standard\' and the \'CologneBlue\' skin.',
+'changepassword' => 'Change password',
+'skin' => 'Skin',
+'math' => 'Rendering math',
+'dateformat' => 'Date format',
+'math_failure' => 'Failed to parse',
+'math_unknown_error' => 'unknown error',
+'math_unknown_function' => 'unknown function ',
+'math_lexing_error' => 'lexing error',
+'math_syntax_error' => 'syntax error',
+'math_image_error' => 'PNG conversion failed; check for correct installation of latex, dvips, gs, and convert',
+'math_bad_tmpdir' => 'Can\'t write to or create math temp directory',
+'math_bad_output' => 'Can\'t write to or create math output directory',
+'math_notexvc' => 'Missing texvc executable; please see math/README to configure.',
'prefs-personal' => 'User data',
'prefs-rc' => 'Recent changes and stub display',
'prefs-misc' => 'Misc settings',
-"saveprefs" => "Save preferences",
-"resetprefs" => "Reset preferences",
-"oldpassword" => "Old password",
-"newpassword" => "New password",
-"retypenew" => "Retype new password",
-"textboxsize" => "Textbox dimensions",
-"rows" => "Rows",
-"columns" => "Columns",
-"searchresultshead" => "Search result settings",
-"resultsperpage" => "Hits to show per page",
-"contextlines" => "Lines to show per hit",
-"contextchars" => "Characters of context per line",
-"stubthreshold" => "Threshold for stub display",
-"recentchangescount" => "Number of titles in recent changes",
-"savedprefs" => "Your preferences have been saved.",
-"timezonetext" => "Enter number of hours your local time differs
-from server time (UTC).",
-"localtime" => "Local time display",
-"timezoneoffset" => "Offset",
-"servertime" => "Server time is now",
-"guesstimezone" => "Fill in from browser",
-"emailflag" => "Disable e-mail from other users",
-"defaultns" => "Search in these namespaces by default:",
+'saveprefs' => 'Save preferences',
+'resetprefs' => 'Reset preferences',
+'oldpassword' => 'Old password',
+'newpassword' => 'New password',
+'retypenew' => 'Retype new password',
+'textboxsize' => 'Textbox dimensions',
+'rows' => 'Rows',
+'columns' => 'Columns',
+'searchresultshead' => 'Search result settings',
+'resultsperpage' => 'Hits to show per page',
+'contextlines' => 'Lines to show per hit',
+'contextchars' => 'Characters of context per line',
+'stubthreshold' => 'Threshold for stub display',
+'recentchangescount' => 'Number of titles in recent changes',
+'savedprefs' => 'Your preferences have been saved.',
+'timezonelegend' => 'Time zone',
+'timezonetext' => 'Enter number of hours your local time differs
+from server time (UTC).',
+'localtime' => 'Local time display',
+'timezoneoffset' => 'Offset',
+'servertime' => 'Server time is now',
+'guesstimezone' => 'Fill in from browser',
+'emailflag' => 'Disable e-mail from other users',
+'defaultns' => 'Search in these namespaces by default:',
# Recent changes
#
-"changes" => "changes",
-"recentchanges" => "Recent changes",
-"recentchangestext" => "Track the most recent changes to the wiki on this page.",
-"rcloaderr" => "Loading recent changes",
-"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",
+'changes' => 'changes',
+'recentchanges' => 'Recent changes',
+'recentchangestext' => 'Track the most recent changes to the wiki on this page.',
+'rcloaderr' => 'Loading recent changes',
+'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 ",
-"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",
-"diff" => "diff",
-"hist" => "hist",
-"hide" => "hide",
-"show" => "show",
-"tableform" => "table",
-"listform" => "list",
-"nchanges" => "$1 changes",
-"minoreditletter" => "M",
-"newpageletter" => "N",
+'showhideminor' => "$1 minor edits | $2 bots | $3 logged in users ",
+'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",
+'diff' => 'diff',
+'hist' => 'hist',
+'hide' => 'hide',
+'show' => 'show',
+'tableform' => 'table',
+'listform' => 'list',
+'nchanges' => "$1 changes",
+'minoreditletter' => 'M',
+'newpageletter' => 'N',
# Upload
#
-"upload" => "Upload file",
-"uploadbtn" => "Upload file",
-"uploadlink" => "Upload images",
-"reupload" => "Re-upload",
-"reuploaddesc" => "Return to the upload form.",
-"uploadnologin" => "Not logged in",
-"uploadnologintext" => "You must be <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
+'upload' => 'Upload file',
+'uploadbtn' => 'Upload file',
+'uploadlink' => 'Upload images',
+'reupload' => 'Re-upload',
+'reuploaddesc' => 'Return to the upload form.',
+'uploadnologin' => 'Not logged in',
+'uploadnologintext' => "You must be <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
to upload files.",
-"uploadfile" => "Upload images, sounds, documents etc.",
-"uploaderror" => "Upload error",
-"uploadtext" => "<strong>STOP!</strong> Before you upload here,
+'uploadfile' => 'Upload images, sounds, documents etc.',
+'uploaderror' => 'Upload error',
+'uploadtext' => "<strong>STOP!</strong> Before you upload here,
make sure to read and follow the <a href=\"{{localurle:Special:Image_use_policy}}\">image use policy</a>.
<p>If a file with the name you are specifying already
exists on the wiki, it'll be replaced without warning.
@@ -954,7 +762,7 @@ go to the <a href=\"{{localurle:Special:Imagelist}}\">list of uploaded images</a
Uploads and deletions are logged on the " .
"<a href=\"{{localurle:Project:Upload_log}}\">upload log</a>.
</p><p>Use the form below to upload new image files for use in
-illustrating your articles.
+illustrating your pages.
On most browsers, you will see a \"Browse...\" button, which will
bring up your operating system's standard file open dialog.
Choosing a file will fill the name of that file into the text
@@ -966,418 +774,418 @@ This may take some time if you have a slow internet connection.
<p>The preferred formats are JPEG for photographic images, PNG
for drawings and other iconic images, and OGG for sounds.
Please name your files descriptively to avoid confusion.
-To include the image in an article, use a link in the form
+To include the image in a page, use a link in the form
<b>[[{{ns:6}}:file.jpg]]</b> or <b>[[{{ns:6}}:file.png|alt text]]</b>
or <b>[[{{ns:-2}}:file.ogg]]</b> for sounds.
<p>Please note that as with wiki pages, others may edit or
-delete your uploads if they think it serves the encyclopedia, and
+delete your uploads if they think it serves the project, and
you may be blocked from uploading if you abuse the system.",
-"uploadlog" => "upload log",
-"uploadlogpage" => "Upload_log",
-"uploadlogpagetext" => "Below is a list of the most recent file uploads.
+'uploadlog' => 'upload log',
+'uploadlogpage' => 'Upload_log',
+'uploadlogpagetext' => 'Below is a list of the most recent file uploads.
All times shown are server time (UTC).
<ul>
</ul>
-",
-"filename" => "Filename",
-"filedesc" => "Summary",
-"filestatus" => "Copyright status",
-"filesource" => "Source",
-"affirmation" => "I affirm that the copyright holder of this file
+',
+'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" => "{{ns:4}}:Copyrights",
-"copyrightpagename" => "{{SITENAME}} copyright",
-"uploadedfiles" => "Uploaded files",
-"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.",
-"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.",
-"successfulupload" => "Successful upload",
-"fileuploaded" => "File \"$1\" uploaded successfully.
+'copyrightpage' => "{{ns:4}}:Copyrights",
+'copyrightpagename' => "{{SITENAME}} copyright",
+'uploadedfiles' => 'Uploaded files',
+'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.',
+'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.',
+'successfulupload' => 'Successful upload',
+'fileuploaded' => "File \"$1\" uploaded successfully.
Please follow this link: $2 to the description page and fill
in information about the file, such as where it came from, when it was
created and by whom, and anything else you may know about it.",
-"uploadwarning" => "Upload warning",
-"savefile" => "Save file",
-"uploadedimage" => "uploaded \"$1\"",
-"uploaddisabled" => "Sorry, uploading is disabled.",
+'uploadwarning' => 'Upload warning',
+'savefile' => 'Save file',
+'uploadedimage' => "uploaded \"$1\"",
+'uploaddisabled' => 'Sorry, uploading is disabled.',
# Image list
#
-"imagelist" => "Image list",
-"imagelisttext" => "Below is a list of $1 images sorted $2.",
-"getimagelist" => "fetching image list",
-"ilshowmatch" => "Show all images with names matching",
-"ilsubmit" => "Search",
-"showlast" => "Show last $1 images sorted $2.",
-"all" => "all",
-"byname" => "by name",
-"bydate" => "by date",
-"bysize" => "by size",
-"imgdelete" => "del",
-"imgdesc" => "desc",
-"imglegend" => "Legend: (desc) = show/edit image description.",
-"imghistory" => "Image history",
-"revertimg" => "rev",
-"deleteimg" => "del",
-"imghistlegend" => "Legend: (cur) = this is the current image, (del) = delete
+'imagelist' => 'Image list',
+'imagelisttext' => "Below is a list of $1 images sorted $2.",
+'getimagelist' => 'fetching image list',
+'ilshowmatch' => 'Show all images with names matching',
+'ilsubmit' => 'Search',
+'showlast' => "Show last $1 images sorted $2.",
+'all' => 'all',
+'byname' => 'by name',
+'bydate' => 'by date',
+'bysize' => 'by size',
+'imgdelete' => 'del',
+'imgdesc' => 'desc',
+'imglegend' => 'Legend: (desc) = show/edit image description.',
+'imghistory' => 'Image history',
+'revertimg' => 'rev',
+'deleteimg' => 'del',
+'imghistlegend' => 'Legend: (cur) = this is the current image, (del) = delete
this old version, (rev) = revert to this old version.
-<br /><i>Click on date to see image uploaded on that date</i>.",
-"imagelinks" => "Image links",
-"linkstoimage" => "The following pages link to this image:",
-"nolinkstoimage" => "There are no pages that link to this image.",
+<br /><i>Click on date to see image uploaded on that date</i>.',
+'imagelinks' => 'Image links',
+'linkstoimage' => 'The following pages link to this image:',
+'nolinkstoimage' => 'There are no pages that link to this image.',
# Statistics
#
-"statistics" => "Statistics",
-"sitestats" => "Site statistics",
-"userstats" => "User statistics",
-"sitestatstext" => "There are '''$1''' total pages in the database.
+'statistics' => 'Statistics',
+'sitestats' => 'Site statistics',
+'userstats' => 'User statistics',
+'sitestatstext' => "There are '''$1''' total pages in the database.
This includes \"talk\" pages, pages about {{SITENAME}}, minimal \"stub\"
-pages, redirects, and others that probably don't qualify as articles.
+pages, redirects, and others that probably don't qualify as content pages.
Excluding those, there are '''$2''' pages that are probably legitimate
-articles.
+content pages.
There have been a total of '''$3''' page views, and '''$4''' page edits
since the wiki was setup.
That comes to '''$5''' average edits per page, and '''$6''' views per edit.",
-"userstatstext" => "There are '''$1''' registered users.
+'userstatstext' => "There are '''$1''' registered users.
'''$2''' of these are administrators (see $3).",
# Maintenance Page
#
-"maintenance" => "Maintenance page",
-"maintnancepagetext" => "This page includes several handy tools for everyday maintenance. Some of these functions tend to stress the database, so please do not hit reload after every item you fixed ;-)",
-"maintenancebacklink" => "Back to Maintenance Page",
-"disambiguations" => "Disambiguation pages",
-"disambiguationspage" => "{{ns:4}}:Links_to_disambiguating_pages",
-"disambiguationstext" => "The following articles link to a <i>disambiguation page</i>. They should link to the appropriate topic instead.<br />A page is treated as dismbiguation if it is linked from $1.<br />Links from other namespaces are <i>not</i> listed here.",
-"doubleredirects" => "Double Redirects",
-"doubleredirectstext" => "<b>Attention:</b> This list may contain false positives. That usually means there is additional text with links below the first #REDIRECT.<br />\nEach row contains links to the first and second redirect, as well as the first line of the second redirect text, usually giving the \"real\" taget article, which the first redirect should point to.",
-"brokenredirects" => "Broken Redirects",
-"brokenredirectstext" => "The following redirects link to a non-existing article.",
-"selflinks" => "Pages with Self Links",
-"selflinkstext" => "The following pages contain a link to themselves, which they should not.",
-"mispeelings" => "Pages with misspellings",
-"mispeelingstext" => "The following pages contain a common misspelling, which are listed on $1. The correct spelling might be given (like this).",
-"mispeelingspage" => "List of common misspellings",
-"missinglanguagelinks" => "Missing Language Links",
-"missinglanguagelinksbutton" => "Find missing language links for",
-"missinglanguagelinkstext" => "These articles do <i>not</i> link to their counterpart in $1. Redirects and subpages are <i>not</i> shown.",
+'maintenance' => 'Maintenance page',
+'maintnancepagetext' => 'This page includes several handy tools for everyday maintenance. Some of these functions tend to stress the database, so please do not hit reload after every item you fixed ;-)',
+'maintenancebacklink' => 'Back to Maintenance Page',
+'disambiguations' => 'Disambiguation pages',
+'disambiguationspage' => "{{ns:4}}:Links_to_disambiguating_pages",
+'disambiguationstext' => "The following pages link to a <i>disambiguation page</i>. They should link to the appropriate topic instead.<br />A page is treated as dismbiguation if it is linked from $1.<br />Links from other namespaces are <i>not</i> listed here.",
+'doubleredirects' => 'Double Redirects',
+'doubleredirectstext' => "<b>Attention:</b> This list may contain false positives. That usually means there is additional text with links below the first #REDIRECT.<br />\nEach row contains links to the first and second redirect, as well as the first line of the second redirect text, usually giving the \"real\" target page, which the first redirect should point to.",
+'brokenredirects' => 'Broken Redirects',
+'brokenredirectstext' => 'The following redirects link to a non-existing pages.',
+'selflinks' => 'Pages with Self Links',
+'selflinkstext' => 'The following pages contain a link to themselves, which they should not.',
+'mispeelings' => 'Pages with misspellings',
+'mispeelingstext' => "The following pages contain a common misspelling, which are listed on $1. The correct spelling might be given (like this).",
+'mispeelingspage' => 'List of common misspellings',
+'missinglanguagelinks' => 'Missing Language Links',
+'missinglanguagelinksbutton' => 'Find missing language links for',
+'missinglanguagelinkstext' => "These pages do <i>not</i> link to their counterpart in $1. Redirects and subpages are <i>not</i> shown.",
# Miscellaneous special pages
#
-"orphans" => "Orphaned pages",
-"lonelypages" => "Orphaned pages",
-"unusedimages" => "Unused images",
-"popularpages" => "Popular pages",
-"nviews" => "$1 views",
-"wantedpages" => "Wanted pages",
-"nlinks" => "$1 links",
-"allpages" => "All pages",
-"randompage" => "Random page",
-"shortpages" => "Short pages",
-"longpages" => "Long pages",
-"deadendpages" => "Dead-end pages",
-"listusers" => "User list",
-"specialpages" => "Special pages",
-"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\")",
-"debug" => "Debug",
-"newpages" => "New pages",
-"ancientpages" => "Oldest articles",
-"intl" => "Interlanguage links",
+'orphans' => 'Orphaned pages',
+'lonelypages' => 'Orphaned pages',
+'unusedimages' => 'Unused images',
+'popularpages' => 'Popular pages',
+'nviews' => '$1 views',
+'wantedpages' => 'Wanted pages',
+'nlinks' => '$1 links',
+'allpages' => 'All pages',
+'randompage' => 'Random page',
+'shortpages' => 'Short pages',
+'longpages' => 'Long pages',
+'deadendpages' => 'Dead-end pages',
+'listusers' => 'User list',
+'listadmins' => 'Admins list',
+'specialpages' => 'Special pages',
+'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\")",
+'debug' => 'Debug',
+'newpages' => 'New pages',
+'ancientpages' => 'Oldest pages',
+'intl' => 'Interlanguage links',
'move' => 'Move',
-"movethispage" => "Move this page",
-"unusedimagestext" => "<p>Please note that other web sites may link to an image with
+'movethispage' => 'Move this page',
+'unusedimagestext' => '<p>Please note that other web sites may link to an image with
a direct URL, and so may still be listed here despite being
-in active use.",
-"booksources" => "Book sources",
+in active use.',
+'booksources' => 'Book sources',
# FIXME: Other sites, of course, may have affiliate relations with the booksellers list
-"booksourcetext" => "Below is a list of links to other sites that
+'booksourcetext' => "Below is a list of links to other sites that
sell new and used books, and may also have further information
about books you are looking for.
{{SITENAME}} is not affiliated with any of these businesses, and
this list should not be construed as an endorsement.",
-"isbn" => "ISBN",
-"rfcurl" => "http://www.faqs.org/rfcs/rfc$1.html",
-"alphaindexline" => "$1 to $2",
-"version" => "Version",
+'isbn' => 'ISBN',
+'rfcurl' => "http://www.faqs.org/rfcs/rfc$1.html",
+'alphaindexline' => "$1 to $2",
+'version' => 'Version',
# Email this user
#
-"mailnologin" => "No send address",
-"mailnologintext" => "You must be <a href=\"{{localurl:Special:Userlogin\">logged in</a>
+'mailnologin' => 'No send address',
+'mailnologintext' => "You must be <a href=\"{{localurl:Special:Userlogin\">logged in</a>
and have a valid e-mail address in your <a href=\"{{localurl:Special:Preferences}}\">preferences</a>
to send e-mail to other users.",
-"emailuser" => "E-mail this user",
-"emailpage" => "E-mail user",
-"emailpagetext" => "If this user has entered a valid e-mail address in
+'emailuser' => 'E-mail this user',
+'emailpage' => 'E-mail user',
+'emailpagetext' => 'If this user has entered a valid e-mail address in
his or her user preferences, the form below will send a single message.
The e-mail address you entered in your user preferences will appear
-as the \"From\" address of the mail, so the recipient will be able
-to reply.",
-"usermailererror" => "Mail object returned error: ",
-"defemailsubject" => "{{SITENAME}} e-mail",
-"noemailtitle" => "No e-mail address",
-"noemailtext" => "This user has not specified a valid e-mail address,
-or has chosen not to receive e-mail from other users.",
-"emailfrom" => "From",
-"emailto" => "To",
-"emailsubject" => "Subject",
-"emailmessage" => "Message",
-"emailsend" => "Send",
-"emailsent" => "E-mail sent",
-"emailsenttext" => "Your e-mail message has been sent.",
+as the "From" address of the mail, so the recipient will be able
+to reply.',
+'usermailererror' => 'Mail object returned error: ',
+'defemailsubject' => "{{SITENAME}} e-mail",
+'noemailtitle' => 'No e-mail address',
+'noemailtext' => 'This user has not specified a valid e-mail address,
+or has chosen not to receive e-mail from other users.',
+'emailfrom' => 'From',
+'emailto' => 'To',
+'emailsubject' => 'Subject',
+'emailmessage' => 'Message',
+'emailsend' => 'Send',
+'emailsent' => 'E-mail sent',
+'emailsenttext' => 'Your e-mail message has been sent.',
# Watchlist
#
-"watchlist" => "My watchlist",
-"watchlistsub" => "(for user \"$1\")",
-"nowatchlist" => "You have no items on your watchlist.",
-"watchnologin" => "Not logged in",
-"watchnologintext" => "You must be <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
+'watchlist' => 'My watchlist',
+'watchlistsub' => "(for user \"$1\")",
+'nowatchlist' => 'You have no items on your watchlist.',
+'watchnologin' => 'Not logged in',
+'watchnologintext' => "You must be <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
to modify your watchlist.",
-"addedwatch" => "Added to watchlist",
-"addedwatchtext" => "The page \"$1\" has been added to your [[{{ns:-1}}:Watchlist|watchlist]].
+'addedwatch' => 'Added to watchlist',
+'addedwatchtext' => "The page \"$1\" has been added to your [[{{ns:-1}}:Watchlist|watchlist]].
Future changes to this page and its associated Talk page will be listed there,
and the page will appear '''bolded''' in the [[Special:Recentchanges|list of recent changes]] to
make it easier to pick out.
<p>If you want to remove the page from your watchlist later, click \"Stop watching\" in the sidebar.",
-"removedwatch" => "Removed from watchlist",
-"removedwatchtext" => "The page \"$1\" has been removed from your watchlist.",
+'removedwatch' => 'Removed from watchlist',
+'removedwatchtext' => "The page \"$1\" has been removed from your watchlist.",
'watch' => 'Watch',
-"watchthispage" => "Watch this page",
+'watchthispage' => 'Watch this page',
'unwatch' => 'Unwatch',
-"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;
+'unwatchthispage' => 'Stop watching',
+'notanarticle' => 'Not a content page',
+'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
+'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 $1 hours $2 days $3",
-"wlsaved" => "This is a saved version of your watchlist.",
+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 $1 hours $2 days $3",
+'wlsaved' => 'This is a saved version of your watchlist.',
# Delete/protect/revert
#
-"deletepage" => "Delete page",
-"confirm" => "Confirm",
-"excontent" => "content was:",
-"exbeforeblank" => "content before blanking was:",
-"exblank" => "page was empty",
-"confirmdelete" => "Confirm delete",
-"deletesub" => "(Deleting \"$1\")",
-"historywarning" => "Warning: The page you are about to delete has a history: ",
-"confirmdeletetext" => "You are about to permanently delete a page
+'deletepage' => 'Delete page',
+'confirm' => 'Confirm',
+'excontent' => 'content was:',
+'exbeforeblank' => 'content before blanking was:',
+'exblank' => 'page was empty',
+'confirmdelete' => 'Confirm delete',
+'deletesub' => "(Deleting \"$1\")",
+'historywarning' => 'Warning: The page you are about to delete has a history: ',
+'confirmdeletetext' => "You are about to permanently delete a page
or image along with all of its history from the database.
Please confirm that you intend to do this, that you understand the
consequences, and that you are doing this in accordance with
[[{{ns:4}}:Policy]].",
-"confirmcheck" => "Yes, I really want to delete this.",
-"actioncomplete" => "Action complete",
-"deletedtext" => "\"$1\" has been deleted.
+'confirmcheck' => 'Yes, I really want to delete this.',
+'actioncomplete' => 'Action complete',
+'deletedtext' => "\"$1\" has been deleted.
See $2 for a record of recent deletions.",
-"deletedarticle" => "deleted \"$1\"",
-"dellogpage" => "Deletion_log",
-"dellogpagetext" => "Below is a list of the most recent deletions.
+'deletedarticle' => "deleted \"$1\"",
+'dellogpage' => 'Deletion_log',
+'dellogpagetext' => 'Below is a list of the most recent deletions.
All times shown are server time (UTC).
<ul>
</ul>
-",
-"deletionlog" => "deletion log",
-"reverted" => "Reverted to earlier revision",
-"deletecomment" => "Reason for deletion",
-"imagereverted" => "Revert to earlier version was successful.",
-"rollback" => "Roll back edits",
+',
+'deletionlog' => 'deletion log',
+'reverted' => 'Reverted to earlier revision',
+'deletecomment' => 'Reason for deletion',
+'imagereverted' => 'Revert to earlier version was successful.',
+'rollback' => 'Roll back edits',
'rollback_short' => 'Rollback',
-"rollbacklink" => "rollback",
-"rollbackfailed" => "Rollback failed",
-"cantrollback" => "Cannot revert edit; last contributor is only author of this article.",
-"alreadyrolled" => "Cannot rollback last edit of [[$1]]
-by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the article already.
+'rollbacklink' => 'rollback',
+'rollbackfailed' => 'Rollback failed',
+'cantrollback' => 'Cannot revert edit; last contributor is only author of this page.',
+'alreadyrolled' => "Cannot rollback last edit of [[$1]]
+by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the page already.
Last edit was by [[User:$3|$3]] ([[User talk:$3|Talk]]). ",
# only shown if there is an edit comment
-"editcomment" => "The edit comment was: \"<i>$1</i>\".",
-"revertpage" => "Reverted edit of $2, changed back to last version by $1",
-"protectlogpage" => "Protection_log",
-"protectlogtext" => "Below is a list of page locks/unlocks.
+'editcomment' => "The edit comment was: \"<i>$1</i>\".",
+'revertpage' => "Reverted edit of $2, changed back to last version by $1",
+'protectlogpage' => 'Protection_log',
+'protectlogtext' => "Below is a list of page locks/unlocks.
See [[{{ns:4}}:Protected page]] for more information.",
-"protectedarticle" => "protected [[$1]]",
-"unprotectedarticle" => "unprotected [[$1]]",
-"protectsub" =>"(Protecting \"$1\")",
-"confirmprotecttext" => "Do you really want to protect this page?",
-"confirmprotect" => "Confirm protection",
-"protectcomment" => "Reason for protecting",
-"unprotectsub" =>"(Unprotecting \"$1\")",
-"confirmunprotecttext" => "Do you really want to unprotect this page?",
-"confirmunprotect" => "Confirm unprotection",
-"unprotectcomment" => "Reason for unprotecting",
-"protectreason" => "(give a reason)",
+'protectedarticle' => "protected [[$1]]",
+'unprotectedarticle' => "unprotected [[$1]]",
+'protectsub' =>"(Protecting \"$1\")",
+'confirmprotecttext' => 'Do you really want to protect this page?',
+'confirmprotect' => 'Confirm protection',
+'protectcomment' => 'Reason for protecting',
+'unprotectsub' =>"(Unprotecting \"$1\")",
+'confirmunprotecttext' => 'Do you really want to unprotect this page?',
+'confirmunprotect' => 'Confirm unprotection',
+'unprotectcomment' => 'Reason for unprotecting',
+'protectreason' => '(give a reason)',
# Undelete
-"undelete" => "Restore deleted page",
-"undeletepage" => "View and restore deleted pages",
-"undeletepagetext" => "The following pages have been deleted but are still in the archive and
-can be restored. The archive may be periodically cleaned out.",
-"undeletearticle" => "Restore deleted article",
-"undeleterevisions" => "$1 revisions archived",
-"undeletehistory" => "If you restore the page, all revisions will be restored to the history.
+'undelete' => 'Restore deleted page',
+'undeletepage' => 'View and restore deleted pages',
+'undeletepagetext' => 'The following pages have been deleted but are still in the archive and
+can be restored. The archive may be periodically cleaned out.',
+'undeletearticle' => 'Restore deleted page',
+'undeleterevisions' => "$1 revisions archived",
+'undeletehistory' => 'If you restore the page, all revisions will be restored to the history.
If a new page with the same name has been created since the deletion, the restored
revisions will appear in the prior history, and the current revision of the live page
-will not be automatically replaced.",
-"undeleterevision" => "Deleted revision as of $1",
-"undeletebtn" => "Restore!",
-"undeletedarticle" => "restored \"$1\"",
-"undeletedtext" => "The article [[$1]] has been successfully restored.
+will not be automatically replaced.',
+'undeleterevision' => "Deleted revision as of $1",
+'undeletebtn' => 'Restore!',
+'undeletedarticle' => "restored \"$1\"",
+'undeletedtext' => "[[$1]] has been successfully restored.
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)' ,
# What links here
#
-"whatlinkshere" => "What links here",
-"notargettitle" => "No target",
-"notargettext" => "You have not specified a target page or user
-to perform this function on.",
-"linklistsub" => "(List of links)",
-"linkshere" => "The following pages link to here:",
-"nolinkshere" => "No pages link to here.",
-"isredirect" => "redirect page",
+'whatlinkshere' => 'What links here',
+'notargettitle' => 'No target',
+'notargettext' => 'You have not specified a target page or user
+to perform this function on.',
+'linklistsub' => '(List of links)',
+'linkshere' => 'The following pages link to here:',
+'nolinkshere' => 'No pages link to here.',
+'isredirect' => 'redirect page',
# Block/unblock IP
#
-"blockip" => "Block user",
-"blockiptext" => "Use the form below to block write access
+'blockip' => 'Block user',
+'blockiptext' => "Use the form below to block write access
from a specific IP address or username.
This should be done only only to prevent vandalism, and in
accordance with [[{{ns:4}}:Policy|policy]].
Fill in a specific reason below (for example, citing particular
pages that were vandalized).",
-"ipaddress" => "IP Address/username",
-"ipbexpiry" => "Expiry",
-"ipbreason" => "Reason",
-"ipbsubmit" => "Block this user",
-"badipaddress" => "Invalid IP address",
-"noblockreason" => "You must supply a reason for the block.",
-"blockipsuccesssub" => "Block succeeded",
-"blockipsuccesstext" => "\"$1\" has been blocked.
+'ipaddress' => 'IP Address/username',
+'ipbexpiry' => 'Expiry',
+'ipbreason' => 'Reason',
+'ipbsubmit' => 'Block this user',
+'badipaddress' => 'Invalid IP address',
+'noblockreason' => 'You must supply a reason for the block.',
+'blockipsuccesssub' => 'Block succeeded',
+'blockipsuccesstext' => "\"$1\" has been blocked.
<br />See [[Special:Ipblocklist|IP block list]] to review blocks.",
-"unblockip" => "Unblock user",
-"unblockiptext" => "Use the form below to restore write access
-to a previously blocked IP address or username.",
-"ipusubmit" => "Unblock this address",
-"ipusuccess" => "\"$1\" unblocked",
-"ipblocklist" => "List of blocked IP addresses and usernames",
-"blocklistline" => "$1, $2 blocked $3 (expires $4)",
-"blocklink" => "block",
-"unblocklink" => "unblock",
-"contribslink" => "contribs",
-"autoblocker" => "Autoblocked because you share an IP address with \"$1\". Reason \"$2\".",
-"blocklogpage" => "Block_log",
-"blocklogentry" => 'blocked "$1" with an expiry time of $2',
-"blocklogtext" => "This is a log of user blocking and unblocking actions. Automatically
+'unblockip' => 'Unblock user',
+'unblockiptext' => 'Use the form below to restore write access
+to a previously blocked IP address or username.',
+'ipusubmit' => 'Unblock this address',
+'ipusuccess' => "\"$1\" unblocked",
+'ipblocklist' => 'List of blocked IP addresses and usernames',
+'blocklistline' => "$1, $2 blocked $3 (expires $4)",
+'blocklink' => 'block',
+'unblocklink' => 'unblock',
+'contribslink' => 'contribs',
+'autoblocker' => "Autoblocked because you share an IP address with \"$1\". Reason \"$2\".",
+'blocklogpage' => 'Block_log',
+'blocklogentry' => 'blocked "$1" with an expiry time of $2',
+'blocklogtext' => 'This is a log of user blocking and unblocking actions. Automatically
blocked IP addresses are not be listed. See the [[Special:Ipblocklist|IP block list]] for
-the list of currently operational bans and blocks.",
-"unblocklogentry" => 'unblocked "$1"',
-"range_block_disabled" => "The sysop ability to create range blocks is disabled.",
-"ipb_expiry_invalid" => "Expiry time invalid.",
-"ip_range_invalid" => "Invalid IP range.\n",
-"proxyblocker" => "Proxy blocker",
-"proxyblockreason" => "Your IP address has been blocked because it is an open proxy. Please contact your Internet service provider or tech support and inform them of this serious security problem.",
-"proxyblocksuccess" => "Done.\n",
+the list of currently operational bans and blocks.',
+'unblocklogentry' => 'unblocked "$1"',
+'range_block_disabled' => 'The sysop ability to create range blocks is disabled.',
+'ipb_expiry_invalid' => 'Expiry time invalid.',
+'ip_range_invalid' => "Invalid IP range.\n",
+'proxyblocker' => 'Proxy blocker',
+'proxyblockreason' => 'Your IP address has been blocked because it is an open proxy. Please contact your Internet service provider or tech support and inform them of this serious security problem.',
+'proxyblocksuccess' => "Done.\n",
# Developer tools
#
-"lockdb" => "Lock database",
-"unlockdb" => "Unlock database",
-"lockdbtext" => "Locking the database will suspend the ability of all
+'lockdb' => 'Lock database',
+'unlockdb' => 'Unlock database',
+'lockdbtext' => 'Locking the database will suspend the ability of all
users to edit pages, change their preferences, edit their watchlists, and
other things requiring changes in the database.
Please confirm that this is what you intend to do, and that you will
-unlock the database when your maintenance is done.",
-"unlockdbtext" => "Unlocking the database will restore the ability of all
+unlock the database when your maintenance is done.',
+'unlockdbtext' => 'Unlocking the database will restore the ability of all
users to edit pages, change their preferences, edit their watchlists, and
other things requiring changes in the database.
-Please confirm that this is what you intend to do.",
-"lockconfirm" => "Yes, I really want to lock the database.",
-"unlockconfirm" => "Yes, I really want to unlock the database.",
-"lockbtn" => "Lock database",
-"unlockbtn" => "Unlock database",
-"locknoconfirm" => "You did not check the confirmation box.",
-"lockdbsuccesssub" => "Database lock succeeded",
-"unlockdbsuccesssub" => "Database lock removed",
-"lockdbsuccesstext" => "The database has been locked.
-<br />Remember to remove the lock after your maintenance is complete.",
-"unlockdbsuccesstext" => "The database has been unlocked.",
+Please confirm that this is what you intend to do.',
+'lockconfirm' => 'Yes, I really want to lock the database.',
+'unlockconfirm' => 'Yes, I really want to unlock the database.',
+'lockbtn' => 'Lock database',
+'unlockbtn' => 'Unlock database',
+'locknoconfirm' => 'You did not check the confirmation box.',
+'lockdbsuccesssub' => 'Database lock succeeded',
+'unlockdbsuccesssub' => 'Database lock removed',
+'lockdbsuccesstext' => 'The database has been locked.
+<br />Remember to remove the lock after your maintenance is complete.',
+'unlockdbsuccesstext' => 'The database has been unlocked.',
# SQL query
#
-"asksql" => "SQL query",
-"asksqltext" => "Use the form below to make a direct query of the
+'asksql' => 'SQL query',
+'asksqltext' => "Use the form below to make a direct query of the
database.
Use single quotes ('like this') to delimit string literals.
This can often add considerable load to the server, so please use
this function sparingly.",
-"sqlislogged" => "Please note that all queries are logged.",
-"sqlquery" => "Enter query",
-"querybtn" => "Submit query",
-"selectonly" => "Only read-only queries are allowed.",
-"querysuccessful" => "Query successful",
+'sqlislogged' => 'Please note that all queries are logged.',
+'sqlquery' => 'Enter query',
+'querybtn' => 'Submit query',
+'selectonly' => 'Only read-only queries are allowed.',
+'querysuccessful' => 'Query successful',
# Make sysop
-"makesysoptitle" => "Make a user into a sysop",
-"makesysoptext" => "This form is used by bureaucrats to turn ordinary users into administrators.
-Type the name of the user in the box and press the button to make the user an administrator",
-"makesysopname" => "Name of the user:",
-"makesysopsubmit" => "Make this user into a sysop",
-"makesysopok" => "<b>User \"$1\" is now a sysop</b>",
-"makesysopfail" => "<b>User \"$1\" could not be made into a sysop. (Did you enter the name correctly?)</b>",
-"setbureaucratflag" => "Set bureaucrat flag",
-"bureaucratlog" => "Bureaucrat_log",
-"bureaucratlogentry" => "Rights for user \"$1\" set \"$2\"",
-"rights" => "Rights:",
-"set_user_rights" => "Set user rights",
-"user_rights_set" => "<b>User rights for \"$1\" updated</b>",
-"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",
+'makesysoptitle' => 'Make a user into a sysop',
+'makesysoptext' => 'This form is used by bureaucrats to turn ordinary users into administrators.
+Type the name of the user in the box and press the button to make the user an administrator',
+'makesysopname' => 'Name of the user:',
+'makesysopsubmit' => 'Make this user into a sysop',
+'makesysopok' => "<b>User \"$1\" is now a sysop</b>",
+'makesysopfail' => "<b>User \"$1\" could not be made into a sysop. (Did you enter the name correctly?)</b>",
+'setbureaucratflag' => 'Set bureaucrat flag',
+'bureaucratlog' => 'Bureaucrat_log',
+'bureaucratlogentry' => "Rights for user \"$1\" set \"$2\"",
+'rights' => 'Rights:',
+'set_user_rights' => 'Set user rights',
+'user_rights_set' => "<b>User rights for \"$1\" updated</b>",
+'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',
# Move page
#
-"movepage" => "Move page",
-"movepagetext" => "Using the form below will rename a page, moving all
+'movepage' => 'Move page',
+'movepagetext' => 'Using the form below will rename a page, moving all
of its history to the new name.
The old title will become a redirect page to the new title.
Links to the old page title will not be changed; be sure to
@@ -1385,7 +1193,7 @@ Links to the old page title will not be changed; be sure to
You are responsible for making sure that links continue to
point where they are supposed to go.
-Note that the page will '''not''' be moved if there is already
+Note that the page will \'\'\'not\'\'\' be moved if there is already
a page at the new title, unless it is empty or a redirect and has no
past edit history. This means that you can rename a page back to where
it was just renamed from if you make a mistake, and you cannot overwrite
@@ -1394,160 +1202,154 @@ an existing page.
<b>WARNING!</b>
This can be a drastic and unexpected change for a popular page;
please be sure you understand the consequences of this before
-proceeding.",
-"movepagetalktext" => "The associated talk page, if any, will be automatically moved along with it '''unless:'''
+proceeding.',
+'movepagetalktext' => 'The associated talk page, if any, will be automatically moved along with it \'\'\'unless:\'\'\'
*You are moving the page across namespaces,
*A non-empty talk page already exists under the new name, or
*You uncheck the box below.
-In those cases, you will have to move or merge the page manually if desired.",
-"movearticle" => "Move page",
-"movenologin" => "Not logged in",
-"movenologintext" => "You must be a registered user and <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
+In those cases, you will have to move or merge the page manually if desired.',
+'movearticle' => 'Move page',
+'movenologin' => 'Not logged in',
+'movenologintext' => "You must be a registered user and <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
to move a page.",
-"newtitle" => "To new title",
-"movepagebtn" => "Move page",
-"pagemovedsub" => "Move succeeded",
-"pagemovedtext" => "Page \"[[$1]]\" moved to \"[[$2]]\".",
-"articleexists" => "A page of that name already exists, or the
+'newtitle' => 'To new title',
+'movepagebtn' => 'Move page',
+'pagemovedsub' => 'Move succeeded',
+'pagemovedtext' => "Page \"[[$1]]\" moved to \"[[$2]]\".",
+'articleexists' => 'A page of that name already exists, or the
name you have chosen is not valid.
-Please choose another name.",
-"talkexists" => "The page itself was moved successfully, but the
+Please choose another name.',
+'talkexists' => 'The page itself was moved successfully, but the
talk page could not be moved because one already exists at the new
-title. Please merge them manually.",
-"movedto" => "moved to",
-"movetalk" => "Move \"talk\" page as well, if applicable.",
-"talkpagemoved" => "The corresponding talk page was also moved.",
-"talkpagenotmoved" => "The corresponding talk page was <strong>not</strong> moved.",
-"1movedto2" => "$1 moved to $2",
+title. Please merge them manually.',
+'movedto' => 'moved to',
+'movetalk' => 'Move "talk" page as well, if applicable.',
+'talkpagemoved' => 'The corresponding talk page was also moved.',
+'talkpagenotmoved' => 'The corresponding talk page was <strong>not</strong> moved.',
+'1movedto2' => "$1 moved to $2",
# Export
-"export" => "Export pages",
-"exporttext" => "You can export the text and editing history of a particular
+'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",
+amusement.',
+'exportcuronly' => 'Include only the current revision, not the full history',
# Namespace 8 related
-"allmessages" => "All system messages",
-"allmessagestext" => "This is a list of all system messages available in the MediaWiki: namespace.",
+'allmessages' => 'All system messages',
+'allmessagestext' => 'This is a list of all system messages available in the MediaWiki: namespace.',
# Thumbnails
-"thumbnail-more" => "Enlarge",
-"missingimage" => "<b>Missing image</b><br /><i>$1</i>\n",
+'thumbnail-more' => 'Enlarge',
+'missingimage' => "<b>Missing image</b><br /><i>$1</i>\n",
# Special:Import
-"import" => "Import pages",
-"importtext" => "Please export the file from the source wiki using the Special:Export utility, save it to your disk and upload it here.",
-"importfailed" => "Import failed: $1",
-"importnotext" => "Empty or no text",
-"importsuccess" => "Import succeeded!",
-"importhistoryconflict" => "Conflicting history revision exists (may have imported this page before)",
+'import' => 'Import pages',
+'importtext' => 'Please export the file from the source wiki using the Special:Export utility, save it to your disk and upload it here.',
+'importfailed' => "Import failed: $1",
+'importnotext' => 'Empty or no text',
+'importsuccess' => 'Import succeeded!',
+'importhistoryconflict' => 'Conflicting history revision exists (may have imported this page before)',
# Keyboard access keys for power users
-'accesskey-article' => 'a',
-'accesskey-talk' => 't',
-'accesskey-edit' => 'e',
-'accesskey-addsection' => '+',
-'accesskey-viewsource' => 'e',
-'accesskey-history' => 'h',
-'accesskey-protect' => '=',
-'accesskey-delete' => 'd',
-'accesskey-undelete' => 'd',
-'accesskey-move' => 'm',
-'accesskey-watch' => 'w',
-'accesskey-unwatch' => 'w',
-'accesskey-watchlist' => 'l',
-'accesskey-userpage' => '.',
-'accesskey-anonuserpage' => '.',
-'accesskey-mytalk' => 'n',
-'accesskey-anontalk' => 'n',
-'accesskey-preferences' => '',
-'accesskey-mycontris' => 'y',
-'accesskey-login' => 'o',
-'accesskey-logout' => 'o',
'accesskey-search' => 'f',
-'accesskey-mainpage' => 'z',
-'accesskey-portal' => '',
-'accesskey-randompage' => 'x',
-'accesskey-currentevents' => '',
-'accesskey-sitesupport' => '',
-'accesskey-help' => '',
-'accesskey-recentchanges' => 'r',
-'accesskey-recentchangeslinked' => 'c',
-'accesskey-whatlinkshere' => 'b',
-'accesskey-specialpages' => 'q',
-'accesskey-specialpage' => '',
-'accesskey-upload' => 'u',
'accesskey-minoredit' => 'i',
'accesskey-save' => 's',
'accesskey-preview' => 'p',
-'accesskey-contributions' => '',
-'accesskey-emailuser' => '',
'accesskey-compareselectedversions' => 'v',
-# tooltip help for the main actions
-'tooltip-atom' => 'Atom feed for this page',
-'tooltip-article' => 'View the article [alt-a]',
-'tooltip-talk' => 'Discussion about the article [alt-t]',
-'tooltip-edit' => 'You can edit this page. Please use the preview button before saving. [alt-e]',
-'tooltip-addsection' => 'Add a comment to this page. [alt-+]',
-'tooltip-viewsource' => 'This page is protected. You can view it\'s source. [alt-e]',
-'tooltip-history' => 'Past versions of this page, [alt-h]',
-'tooltip-protect' => 'Protect this page [alt-=]',
-'tooltip-delete' => 'Delete this page [alt-d]',
-'tooltip-undelete' => "Restore $1 deleted edits to this page [alt-d]",
-'tooltip-move' => 'Move this page [alt-m]',
-'tooltip-nomove' => 'You don\'t have the permissions to move this page',
-'tooltip-watch' => 'Add this page to your watchlist [alt-w]',
-'tooltip-unwatch' => 'Remove this page from your watchlist [alt-w]',
-'tooltip-watchlist' => 'The list of pages you\'re monitoring for changes. [alt-l]',
-'tooltip-userpage' => 'My user page [alt-.]',
-'tooltip-anonuserpage' => 'The user page for the ip you\'re editing as [alt-.]',
-'tooltip-mytalk' => 'My talk page [alt-n]',
-'tooltip-anontalk' => 'Discussion about edits from this ip address [alt-n]',
-'tooltip-preferences' => 'My preferences',
-'tooltip-mycontris' => 'List of my contributions [alt-y]',
-'tooltip-login' => 'You are encouraged to log in, it is not mandatory however. [alt-o]',
-'tooltip-logout' => 'Log out [alt-o]',
+# tooltip help for some actions, most are in Monobook.js
'tooltip-search' => 'Search this wiki [alt-f]',
-'tooltip-mainpage' => 'Visit the Main Page [alt-z]',
-'tooltip-portal' => 'About the project, what you can do, where to find things',
-'tooltip-randompage' => 'Load a random page [alt-x]',
-'tooltip-currentevents' => 'Find background information on current events',
-'tooltip-sitesupport' => 'Support {{SITENAME}}',
-'tooltip-help' => 'The place to find out.',
-'tooltip-recentchanges' => 'The list of recent changes in the wiki. [alt-r]',
-'tooltip-recentchangeslinked' => 'Recent changes in pages linking to this page [alt-c]',
-'tooltip-whatlinkshere' => 'List of all wiki pages that link here [alt-b]',
-'tooltip-specialpages' => 'List of all special pages [alt-q]',
-'tooltip-upload' => 'Upload images or media files [alt-u]',
-'tooltip-specialpage' => 'This is a special page, you can\'t edit the page itself.',
'tooltip-minoredit' => 'Mark this as a minor edit [alt-i]',
-'tooltip-save' => 'Save you changes [alt-s]',
+'tooltip-save' => 'Save your changes [alt-s]',
'tooltip-preview' => 'Preview your changes, please use this before saving! [alt-p]',
-'tooltip-contributions' => 'View the list of contributions of this user',
-'tooltip-emailuser' => 'Send a mail to this user',
-'tooltip-rss' => 'RSS feed for this page',
'tooltip-compareselectedversions' => 'See the differences between the two selected versions of this page. [alt-v]',
+# stylesheets
+
+'Monobook.css' => '/* edit this file to customize the monobook skin for the entire site */',
+#'Monobook.js' => '/* edit this file to change js things in the monobook skin */',
+
# Metadata
-"nodublincore" => "Dublin Core RDF metadata disabled for this server.",
-"nocreativecommons" => "Creative Commons RDF metadata disabled for this server.",
-"notacceptable" => "The wiki server can't provide data in a format your client can read.",
+'nodublincore' => 'Dublin Core RDF metadata disabled for this server.',
+'nocreativecommons' => 'Creative Commons RDF metadata disabled for this server.',
+'notacceptable' => 'The wiki server can\'t provide data in a format your client can read.',
# Attribution
-"anonymous" => "Anonymous user(s) of $wgSitename",
-"siteuser" => "$wgSitename user $1",
-"lastmodifiedby" => "This page was last modified $1 by $2.",
-"and" => "and",
-"othercontribs" => "Based on work by $1.",
-"siteusers" => "$wgSitename user(s) $1"
+'anonymous' => "Anonymous user(s) of $wgSitename",
+'siteuser' => "$wgSitename user $1",
+'lastmodifiedby' => "This page was last modified $1 by $2.",
+'and' => 'and',
+'othercontribs' => "Based on work by $1.",
+'siteusers' => "$wgSitename user(s) $1",
+'spamprotectiontitle' => 'Spam protection filter',
+'spamprotectiontext' => 'The page you wanted to save was blocked by the spam filter. This is probably caused by a link to an external site.
+
+You might want to check the following regular expression for patterns that are currently blocked:',
+'subcategorycount' => "There are $1 subcategories to this category.",
+'categoryarticlecount' => "There are $1 articles in this category.",
+'usenewcategorypage' => "1\n\nSet first character to \"0\" to disable the new category page layout.",
+
+# Monobook.js: tooltips and access keys for monobook
+'Monobook.js' => '/* tooltips and access keys */
+ta = new Object();
+ta[\'pt-userpage\'] = new Array(\'.\',\'My user page\');
+ta[\'pt-anonuserpage\'] = new Array(\'.\',\'The user page for the ip you\\\'re editing as\');
+ta[\'pt-mytalk\'] = new Array(\'n\',\'My talk page\');
+ta[\'pt-anontalk\'] = new Array(\'n\',\'Discussion about edits from this ip address\');
+ta[\'pt-preferences\'] = new Array(\'\',\'My preferences\');
+ta[\'pt-watchlist\'] = new Array(\'l\',\'The list of pages you\\\'re monitoring for changes.\');
+ta[\'pt-mycontris\'] = new Array(\'y\',\'List of my contributions\');
+ta[\'pt-login\'] = new Array(\'o\',\'You are encouraged to log in, it is not mandatory however.\');
+ta[\'pt-anonlogin\'] = new Array(\'o\',\'You are encouraged to log in, it is not mandatory however.\');
+ta[\'pt-logout\'] = new Array(\'o\',\'Log out\');
+ta[\'ca-talk\'] = new Array(\'t\',\'Discussion about the content page\');
+ta[\'ca-edit\'] = new Array(\'e\',\'You can edit this page. Please use the preview button before saving.\');
+ta[\'ca-addsection\'] = new Array(\'+\',\'Add a comment to this discussion.\');
+ta[\'ca-viewsource\'] = new Array(\'e\',\'This page is protected. You can view its source.\');
+ta[\'ca-history\'] = new Array(\'h\',\'Past versions of this page.\');
+ta[\'ca-protect\'] = new Array(\'=\',\'Protect this page\');
+ta[\'ca-delete\'] = new Array(\'d\',\'Delete this page\');
+ta[\'ca-undelete\'] = new Array(\'d\',\'Restore the edits done to this page before it was deleted\');
+ta[\'ca-move\'] = new Array(\'m\',\'Move this page\');
+ta[\'ca-nomove\'] = new Array(\'\',\'You don\\\'t have the permissions to move this page\');
+ta[\'ca-watch\'] = new Array(\'w\',\'Add this page to your watchlist\');
+ta[\'ca-unwatch\'] = new Array(\'w\',\'Remove this page from your watchlist\');
+ta[\'search\'] = new Array(\'f\',\'Search this wiki\');
+ta[\'p-logo\'] = new Array(\'\',\'Main Page\');
+ta[\'n-mainpage\'] = new Array(\'z\',\'Visit the Main Page\');
+ta[\'n-portal\'] = new Array(\'\',\'About the project, what you can do, where to find things\');
+ta[\'n-currentevents\'] = new Array(\'\',\'Find background information on current events\');
+ta[\'n-recentchanges\'] = new Array(\'r\',\'The list of recent changes in the wiki.\');
+ta[\'n-randompage\'] = new Array(\'x\',\'Load a random page\');
+ta[\'n-help\'] = new Array(\'\',\'The place to find out.\');
+ta[\'n-sitesupport\'] = new Array(\'\',\'Support us\');
+ta[\'t-whatlinkshere\'] = new Array(\'j\',\'List of all wiki pages that link here\');
+ta[\'t-recentchangeslinked\'] = new Array(\'k\',\'Recent changes in pages linking to this page\');
+ta[\'feed-rss\'] = new Array(\'\',\'RSS feed for this page\');
+ta[\'feed-atom\'] = new Array(\'\',\'Atom feed for this page\');
+ta[\'t-contributions\'] = new Array(\'\',\'View the list of contributions of this user\');
+ta[\'t-emailuser\'] = new Array(\'\',\'Send a mail to this user\');
+ta[\'t-upload\'] = new Array(\'u\',\'Upload images or media files\');
+ta[\'t-specialpages\'] = new Array(\'q\',\'List of all special pages\');
+ta[\'ca-nstab-main\'] = new Array(\'c\',\'View the content page\');
+ta[\'ca-nstab-user\'] = new Array(\'c\',\'View the user page\');
+ta[\'ca-nstab-media\'] = new Array(\'c\',\'View the media page\');
+ta[\'ca-nstab-special\'] = new Array(\'\',\'This is a special page, you can\\\'t edit the page itself.\');
+ta[\'ca-nstab-wp\'] = new Array(\'a\',\'View the project page\');
+ta[\'ca-nstab-image\'] = new Array(\'c\',\'View the image page\');
+ta[\'ca-nstab-mediawiki\'] = new Array(\'c\',\'View the system message\');
+ta[\'ca-nstab-template\'] = new Array(\'c\',\'View the template\');
+ta[\'ca-nstab-help\'] = new Array(\'c\',\'View the help page\');
+ta[\'ca-nstab-category\'] = new Array(\'c\',\'View the category page\');
+'
+
);
@@ -1558,9 +1360,9 @@ amusement.",
class Language {
function Language(){
# Copies any missing values in the specified arrays from En to the current language
- $fillin = array( "wgSysopSpecialPages", "wgValidSpecialPages", "wgDeveloperSpecialPages" );
+ $fillin = array( 'wgSysopSpecialPages', 'wgValidSpecialPages', 'wgDeveloperSpecialPages' );
$name = get_class( $this );
- if( strpos( $name, "language" ) == 0){
+ if( strpos( $name, 'language' ) == 0){
$lang = ucfirst( substr( $name, 8 ) );
foreach( $fillin as $arrname ){
$langver = "{$arrname}{$lang}";
@@ -1605,7 +1407,7 @@ class Language {
}
function specialPage( $name ) {
- return $this->getNsText( Namespace::getSpecial() ) . ":" . $name;
+ return $this->getNsText( Namespace::getSpecial() ) . ':' . $name;
}
function getQuickbarSettings() {
@@ -1679,8 +1481,8 @@ class Language {
{
global $wgUser, $wgLocalTZoffset;
- $tz = $wgUser->getOption( "timecorrection" );
- if ( $tz === "" ) {
+ $tz = $wgUser->getOption( 'timecorrection' );
+ if ( $tz === '' ) {
$hrDiff = isset( $wgLocalTZoffset ) ? $wgLocalTZoffset : 0;
$minDiff = 0;
} elseif ( strpos( $tz, ":" ) !== false ) {
@@ -1699,7 +1501,7 @@ class Language {
(int)substr( $ts, 4, 2 ), # Month
(int)substr( $ts, 6, 2 ), # Day
(int)substr( $ts, 0, 4 ) ); #Year
- return date( "YmdHis", $t );
+ return date( 'YmdHis', $t );
}
function date( $ts, $adj = false )
@@ -1732,21 +1534,21 @@ class Language {
{
if ( $adj ) { $ts = $this->userAdjust( $ts ); }
- $t = substr( $ts, 8, 2 ) . ":" . substr( $ts, 10, 2 );
+ $t = substr( $ts, 8, 2 ) . ':' . substr( $ts, 10, 2 );
if ( $seconds ) {
- $t .= ":" . substr( $ts, 12, 2 );
+ $t .= ':' . substr( $ts, 12, 2 );
}
return $this->formatNum( $t );
}
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 date( "D, d M Y H:i:s T", $ts );
+ return date( 'D, d M Y H:i:s T', $ts );
}
function getValidSpecialPages()
@@ -1770,7 +1572,7 @@ class Language {
function getMessage( $key )
{
global $wgAllMessagesEn;
- return $wgAllMessagesEn[$key];
+ return @$wgAllMessagesEn[$key];
}
function getAllMessages()
@@ -1802,10 +1604,10 @@ class Language {
$isutf = ($ishigh ? preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
'[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s ) : true );
- if( ($wgInputEncoding != "utf-8") and $ishigh and $isutf )
- return @iconv( "UTF-8", $wgInputEncoding, $s );
+ if( ($wgInputEncoding != 'utf-8') and $ishigh and $isutf )
+ return @iconv( 'UTF-8', $wgInputEncoding, $s );
- if( ($wgInputEncoding == "utf-8") and $ishigh and !$isutf )
+ if( ($wgInputEncoding == 'utf-8') and $ishigh and !$isutf )
return utf8_encode( $s );
# Other languages can safely leave this function, or replace
@@ -1820,6 +1622,12 @@ class Language {
return $in;
}
+ function firstChar( $s ) {
+ # Get the first character of a string. In ASCII, return
+ # first byte of the string. UTF8 and others have to
+ # overload this.
+ return $s[0];
+ }
function setAltEncoding() {
# Some languages may have an alternate char encoding option
@@ -1837,7 +1645,7 @@ class Language {
# wgInputEncoding, this text will be further converted
# to wgOutputEncoding.
global $wgInputEncoding, $wgEditEncoding;
- if( $wgEditEncoding == "" or
+ if( $wgEditEncoding == '' or
$wgEditEncoding == $wgInputEncoding ) {
return $s;
} else {
@@ -1877,7 +1685,11 @@ class Language {
function getMagic( &$mw )
{
$raw =& $this->getMagicWords();
- $rawEntry = $raw[$mw->mId];
+ if( !isset( $raw[$mw->mId] ) ) {
+ # Fall back to English if local list is incomplete
+ $raw =& Language::getMagicWords();
+ }
+ $rawEntry = $raw[$mw->mId];
$mw->mCaseSensitive = $rawEntry[0];
$mw->mSynonyms = array_slice( $rawEntry, 1 );
}
@@ -1885,21 +1697,9 @@ class Language {
# Italic is unsuitable for some languages
function emphasize( $text )
{
- return "<em>$text</em>";
- }
-
- # returns additional Regex for the tokenizer. See LanguageFr.php for an example
- function tokenizerRegex()
- {
- return "";
+ return '<em>'.$text.'</em>';
}
- # Process the token generated from the tokenizer by the above regex. Return
- # NULL if the token is unknown, and the text to be added to the output otherwise
- function processToken( &$token , &$tokenStack)
- {
- return NULL;
- }
# Normally we use the plain ASCII digits. Some languages such as Arabic will
# want to output numbers using script-appropriate characters: override this
@@ -1909,15 +1709,15 @@ class Language {
}
function listToText( $l ) {
- $s = "";
+ $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;
+ $s = $l[$i] . ' ' . $this->getMessage('and') . ' ' . $s;
} else {
- $s = $l[$i] . ", " . $s;
+ $s = $l[$i] . ', ' . $s;
}
}
return $s;
@@ -1925,6 +1725,5 @@ class Language {
}
# This should fail gracefully if there's not a localization available
-@include_once( "Language" . ucfirst( $wgLanguageCode ) . ".php" );
-
+@include_once( 'Language' . ucfirst( $wgLanguageCode ) . '.php' );
?>
diff --git a/languages/LanguageAf.php b/languages/LanguageAf.php
index 4f5a7774c366..0475e995d2f2 100644
--- a/languages/LanguageAf.php
+++ b/languages/LanguageAf.php
@@ -36,7 +36,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesAf = array(
diff --git a/languages/LanguageAr.php b/languages/LanguageAr.php
index 95706cf9da84..a031c7091950 100644
--- a/languages/LanguageAr.php
+++ b/languages/LanguageAr.php
@@ -1125,7 +1125,7 @@ require_once("LanguageUtf8.php");
'tooltip-upload' => 'Upload images or media files [alt-u]',
'tooltip-specialpage' => 'This is a special page, you can\'t edit the page itself.',
'tooltip-minoredit' => 'Mark this as a minor edit [alt-i]',
- 'tooltip-save' => 'Save you changes [alt-s]',
+ 'tooltip-save' => 'Save your changes [alt-s]',
'tooltip-preview' => 'Preview your changes, please use this before saving! [alt-p]',
'tooltip-contributions' => 'View the list of contributions of this user',
'tooltip-emailuser' => 'Send a mail to this user',
diff --git a/languages/LanguageBg.php b/languages/LanguageBg.php
index 19e32c2df953..1f3781046b3b 100644
--- a/languages/LanguageBg.php
+++ b/languages/LanguageBg.php
@@ -3,33 +3,30 @@
# Language-specific text
#--------------------------------------------------------------------------
-# NOTE: To turn off "Current Events" in the sidebar,
-# set "currentevents" => "-"
-
# The names of the namespaces can be set here, but the numbers
# are magical, so don't change or move them! The Namespace class
# encapsulates some of the magic-ness.
#
-#$wgMetaNamespace = "УикипедиÑ";
-#$wgSitename = "УикипедиÑ";
-
/* private */ $wgNamespaceNamesBg = array(
- -2 => "МедиÑ",
- -1 => "Специални",
- 0 => "",
- 1 => "БеÑеда",
- 2 => "Потребител",
- 3 => "Потребител_беÑеда",
- 4 => $wgMetaNamespace,
- 5 => $wgMetaNamespace . "_беÑеда",
- 6 => "Картинка",
- 7 => "Картинка_беÑеда",
- 8 => "МедиÑУики",
- 9 => "МедиÑУики_беÑеда",
- 10 => "Template",
- 11 => "Template_talk"
-
+ NS_MEDIA => 'МедиÑ', # -2
+ NS_SPECIAL => 'Специални', # -1
+ NS_MAIN => '', # 0
+ NS_TALK => 'БеÑеда', # 1
+ NS_USER => 'Потребител', # 2
+ NS_USER_TALK => 'Потребител_беÑеда', # 3
+ NS_WIKIPEDIA => $wgMetaNamespace, # 4
+ NS_WIKIPEDIA_TALK => $wgMetaNamespace . '_беÑеда', # 5
+ NS_IMAGE => 'Картинка', # 6
+ NS_IMAGE_TALK => 'Картинка_беÑеда', # 7
+ NS_MEDIAWIKI => 'МедиÑУики', # 8
+ NS_MEDIAWIKI_TALK => 'МедиÑУики_беÑеда', # 9
+ NS_TEMPLATE => 'Шаблон', # 10
+ NS_TEMPLATE_TALK => 'Шаблон_беÑеда', # 11
+ NS_HELP => 'Помощ', # 12
+ NS_HELP_TALK => 'Помощ_беÑеда', # 13
+ NS_CATEGORY => 'КатегориÑ', # 14
+ NS_CATEGORY_TALK => 'КатегориÑ_беÑеда' # 15
);
/* private */ $wgQuickbarSettingsBg = array(
@@ -37,22 +34,24 @@
);
/* private */ $wgSkinNamesBg = array(
- 'standard' => "ОÑновен",
- 'nostalgia' => "ÐоÑталгиÑ",
- 'cologneblue' => "КьолнÑко Ñиньо",
- 'smarty' => "Paddington",
- 'montparnasse' => "Montparnasse",
- 'davinci' => "DaVinci",
- 'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'standard' => 'ОÑновен',
+ 'nostalgia' => 'ÐоÑталгиÑ',
+ 'cologneblue' => 'КьолнÑко Ñиньо',
+ 'smarty' => 'Падингтън',
+ 'montparnasse' => 'МонпарнаÑ',
+ 'davinci' => 'ДаВинчи',
+ 'mono' => 'Mono',
+ 'monobook' => 'MonoBook',
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesBg = array(
- "Използване винаги на PNG",
- "HTML при опроÑтен TeX, иначе PNG",
- "HTML по възможноÑÑ‚, иначе PNG",
- "ОÑтавÑне като TeX (за текÑтови браузъри)",
- "Препоръчително за нови браузъри"
+ MW_MATH_PNG => 'Използване винаги на PNG',
+ MW_MATH_SIMPLE => 'HTML при опроÑтен TeX, иначе PNG',
+ MW_MATH_HTML => 'HTML по възможноÑÑ‚, иначе PNG',
+ MW_MATH_SOURCE => 'ОÑтавÑне като TeX (за текÑтови браузъри)',
+ MW_MATH_MODERN => 'Препоръчително за нови браузъри',
+ MW_MATH_MATHML => 'MathML по възможноÑÑ‚ (екÑпериментално)'
);
/* private */ $wgDateFormatsBg = array(
@@ -60,36 +59,36 @@
'Ñнуари 15, 2001',
'15 Ñнуари 2001',
'2001 Ñнуари 15',
- "2001-01-15"
+ '2001-01-15'
);
/* private */ $wgUserTogglesBg = array(
- "hover" => "Изпъкване на препратките, когато мишката е върху Ñ‚ÑÑ…",
- "underline" => "Подчертаване на препратките",
- "highlightbroken" => "Показване на невалидните препратки <a href=\"\" class=\"new\">така</a> (алтернативно: така<a href=\"\" class=\"internal\">?</a>)",
- "justify" => "ДвуÑтранно подравнÑване на абзаците",
- "hideminor" => "Скриване на малки редакции в поÑледните промени",
- "usenewrc" => "ПодобрÑване на поÑледните промени (не за вÑички браузъри)",
- "numberheadings" => "Ðомериране на заглавиÑта",
- "showtoolbar" => "Показване на лента за редактиране",
- "editondblclick" => "Редактиране при двойно щракване (Javascript)",
- "editsection" =>"ВъзможноÑÑ‚ за редактиране на раздел чрез<br> препратка [редактиране]",
- "editsectiononrightclick" => "ВъзможноÑÑ‚ за редактиране на раздел при щракване<br> Ñ Ð´ÐµÑÐ½Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ върху заглавие на раздел (Javascript)",
- "showtoc" =>"Показване на Ñъдържание<br>(за Ñтатии Ñ Ð¿Ð¾Ð²ÐµÑ‡Ðµ от три раздела)",
- "rememberpassword" => "ЗапомнÑне на паролата между ÑеÑиите",
- "editwidth" => "КутиÑта за редактиране е Ñ Ð¼Ð°ÐºÑимална ширина",
- "watchdefault" => "ДобавÑне на редактираните Ñтраници към ÑпиÑъка<br> за наблюдение",
- "minordefault" => "ОтбелÑзване на вÑички промени като малки<br> по подразбиране",
- "previewontop" => "Показване на Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ³Ð»ÐµÐ´ преди<br> текÑтовата кутиÑ, а не Ñлед неÑ",
- "nocache" => "Без Ñкладиране на Ñтраниците"
+ 'hover' => 'Изпъкване на препратките, когато мишката е върху Ñ‚ÑÑ…',
+ 'underline' => 'Подчертаване на препратките',
+ 'highlightbroken' => 'Показване на невалидните препратки <a href="" class="new">така</a> (алтернативно: така<a href="" class="internal">?</a>)',
+ 'justify' => 'ДвуÑтранно подравнÑване на абзаците',
+ 'hideminor' => 'Скриване на малки редакции в поÑледните промени',
+ 'usenewrc' => 'ПодобрÑване на поÑледните промени (не за вÑички браузъри)',
+ 'numberheadings' => 'Ðомериране на заглавиÑта',
+ 'showtoolbar' => 'Показване на лента за редактиране',
+ 'editondblclick' => 'Редактиране при двойно щракване (Javascript)',
+ 'editsection' =>'ВъзможноÑÑ‚ за редактиране на раздел чрез препратка [редактиране]',
+ 'editsectiononrightclick' => 'ВъзможноÑÑ‚ за редактиране на раздел при щракване Ñ Ð´ÐµÑÐ½Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ върху заглавие на раздел (Javascript)',
+ 'showtoc' =>'Показване на Ñъдържание (за Ñтатии Ñ Ð¿Ð¾Ð²ÐµÑ‡Ðµ от три раздела)',
+ 'rememberpassword' => 'ЗапомнÑне на паролата между ÑеÑиите',
+ 'editwidth' => 'МакÑимална ширина на кутиÑта за редактиране',
+ 'watchdefault' => 'ДобавÑне на редактираните Ñтраници към ÑпиÑъка за наблюдение',
+ 'minordefault' => 'ОтбелÑзване на вÑички промени като малки по подразбиране',
+ 'previewontop' => 'Показване на Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ³Ð»ÐµÐ´ преди текÑтовата кутиÑ, а не Ñлед неÑ',
+ 'nocache' => 'Без Ñкладиране на Ñтраниците'
);
/* private */ $wgBookstoreListBg = array(
- "books.bg" => "http://www.books.bg/ISBN/$1",
- "AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
- "PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
- "Barnes & Noble" => "http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
- "Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1",
+ 'books.bg' => "http://www.books.bg/ISBN/$1",
+ 'AddALL' => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
+ 'PriceSCAN' => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
+ 'Barnes & Noble' => "http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+ 'Amazon.com' => "http://www.amazon.com/exec/obidos/ISBN=$1",
);
/* private */ $wgWeekdayNamesBg = array(
@@ -108,58 +107,104 @@
'Ñеп', 'окт', 'ное', 'дек'
);
+
+# Note to translators:
+# Please include the English words as synonyms. This allows people
+# from other wikis to contribute more easily.
+#
+
+/* private */ $wgMagicWordsBg = array(
+# ID CASE SYNONYMS
+ MAG_REDIRECT => array( 0, '#redirect', '#пренаÑочване', '#виж' ),
+ MAG_NOTOC => array( 0, '__NOTOC__', '__БЕЗСЪДЪРЖÐÐИЕ__' ),
+ MAG_FORCETOC => array( 0, '__FORCETOC__', '__СЪДЪРЖÐÐИЕ__' ),
+ MAG_NOEDITSECTION => array( 0, '__NOEDITSECTION__', '__БЕЗ_РЕДÐКТИРÐÐЕ_ÐÐ_РÐЗДЕЛИ__' ),
+ 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_PAGENAME => array( 1, 'PAGENAME', 'СТРÐÐИЦÐ' ),
+ MAG_NAMESPACE => array( 1, 'NAMESPACE', 'ИМЕÐПРОСТРÐÐСТВО' ),
+ MAG_MSG => array( 0, 'MSG:', 'СЪОБЩ:' ),
+ MAG_SUBST => array( 0, 'SUBST:', 'ЗÐМЕСТ:' ),
+ MAG_MSGNW => array( 0, 'MSGNW:', 'СЪОБЩNW:' ),
+ MAG_END => array( 0, '__END__', '__КРÐЙ__' ),
+ MAG_IMG_THUMBNAIL => array( 1, 'thumbnail', 'thumb', 'мини' ),
+ MAG_IMG_RIGHT => array( 1, 'right', 'влÑво' ),
+ MAG_IMG_LEFT => array( 1, 'left', 'вдÑÑно' ),
+ MAG_IMG_NONE => array( 1, 'none' ),
+ MAG_IMG_WIDTH => array( 1, "$1px", "$1пкÑ" ),
+ MAG_IMG_CENTER => array( 1, 'center', 'centre', 'център' ),
+ MAG_IMG_FRAMED => array( 1, 'framed', 'enframed', 'frame', 'рамка', 'врамка' ),
+ MAG_INT => array( 0, 'INT:' ),
+ MAG_SITENAME => array( 1, 'SITENAME', 'СÐЙТ' ),
+ MAG_NS => array( 0, 'NS:' ),
+ MAG_LOCALURL => array( 0, 'LOCALURL:' ),
+ MAG_LOCALURLE => array( 0, 'LOCALURLE:' ),
+ MAG_SERVER => array( 0, 'SERVER', 'СЪРВЪР' )
+);
+
# 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).
#
/* private */ $wgValidSpecialPagesBg = array(
- "Userlogin" => "Влизане",
- "Userlogout" => "Излизане",
- "Preferences" => "ПотребителÑки наÑтройки",
- "Watchlist" => "Ðаблюдавани Ñтраници",
- "Recentchanges" => "ПоÑледни промени",
- "Upload" => "Качване на картинки",
- "Imagelist" => "СпиÑък на картинките",
- "Listusers" => "РегиÑтрирани потребители",
- "Statistics" => "СтатиÑтика",
- "Randompage" => "Случайна ÑтатиÑ",
-
- "Lonelypages" => "Статии-Ñираци",
- "Unusedimages" => "Картинки-Ñираци",
- "Popularpages" => "ИзвеÑтни Ñтатии",
- "Wantedpages" => "Желани Ñтатии",
- "Shortpages" => "Кратки Ñтатии",
- "Longpages" => "Дълги Ñтатии",
- "Newpages" => "Ðови Ñтатии",
- "Ancientpages" => "Стари Ñтатии",
- "Deadendpages" => "Задънени Ñтраници",
-# "Intl" => "Междуезикови препратки",
- "Allpages" => "Ð’Ñички Ñтраници по заглавие",
-
- "Ipblocklist" => "Блокирани потребители/ИП-адреÑи",
- "Maintenance" => "Страница за поддръжка",
- "Specialpages" => "",
- "Contributions" => "",
- "Emailuser" => "",
- "Whatlinkshere" => "",
- "Recentchangeslinked" => "",
- "Movepage" => "",
- "Booksources" => "Външни източници на книги",
- "Categories" => "Категории Ñтраници",
- "Export" => "Ð˜Ð·Ð½Ð¾Ñ ÐºÐ°Ñ‚Ð¾ XML",
- "Version" => "ВерÑÐ¸Ñ Ð½Ð° МедиÑУики",
+ 'Userlogin' => 'Влизане',
+ 'Userlogout' => 'Излизане',
+ 'Preferences' => 'ПотребителÑки наÑтройки',
+ 'Watchlist' => 'Ðаблюдавани Ñтраници',
+ 'Recentchanges' => 'ПоÑледни промени',
+ 'Upload' => 'Качване на картинки',
+ 'Imagelist' => 'СпиÑък на картинките',
+ 'Listusers' => 'РегиÑтрирани потребители',
+ 'Statistics' => 'СтатиÑтика',
+ 'Randompage' => 'Случайна ÑтатиÑ',
+
+ 'Lonelypages' => 'Статии Ñираци',
+ 'Unusedimages' => 'Картинки Ñираци',
+ 'Popularpages' => 'ИзвеÑтни Ñтатии',
+ 'Wantedpages' => 'Желани Ñтатии',
+ 'Shortpages' => 'Кратки Ñтатии',
+ 'Longpages' => 'Дълги Ñтатии',
+ 'Newpages' => 'Ðови Ñтатии',
+ 'Ancientpages' => 'Стари Ñтатии',
+ 'Deadendpages' => 'Задънени Ñтатии',
+# 'Intl' => 'Междуезикови препратки',
+ 'Allpages' => 'Ð’Ñички Ñтатии по заглавие',
+
+ 'Ipblocklist' => 'Блокирани потребители/IP-адреÑи',
+ 'Maintenance' => 'Страница за поддръжка',
+ 'Specialpages' => '',
+ 'Contributions' => '',
+ 'Emailuser' => '',
+ 'Whatlinkshere' => '',
+ 'Recentchangeslinked' => '',
+ 'Movepage' => '',
+ 'Blockme' => '',
+ 'Booksources' => 'Външни източници на книги',
+ 'Categories' => 'Категории Ñтраници',
+ 'Export' => 'ИзнаÑÑне като XML',
+ 'Version' => 'ВерÑÐ¸Ñ Ð½Ð° МедиÑУики',
+ 'Allmessages' => 'Ð’Ñички ÑиÑтемни ÑъобщениÑ',
+ 'Search' => '',
);
/* private */ $wgSysopSpecialPagesBg = array(
- "Blockip" => "Блокиране на потребител/ИП-адреÑ",
- "Asksql" => "Справка към базата данни",
- "Undelete" => "ВъзÑтановÑване на изтрити Ñтраници",
- "Makesysop" => "Превръщане на потребител в админиÑтратор"
+ 'Blockip' => 'Блокиране на потребител/IP-адреÑ',
+ 'Asksql' => 'Справка към базата данни',
+ 'Undelete' => 'ВъзÑтановÑване на изтрити Ñтраници',
+ 'Makesysop' => 'Превръщане на потребител в админиÑтратор',
+ 'Import' => 'ВнаÑÑне на Ñтраница Ñ Ð¸ÑториÑ',
);
/* private */ $wgDeveloperSpecialPagesBg = array(
- "Lockdb" => "Само доÑтъп за четене към базата данни",
- "Unlockdb" => "Разрешение на доÑтъп за пиÑане към базата данни",
+ 'Lockdb' => 'Забрана на доÑтъп за пиÑане към базата данни',
+ 'Unlockdb' => 'Разрешаване на доÑтъп за пиÑане към базата данни',
);
@@ -171,171 +216,215 @@
# hyphen (-). If you need more characters, you may be able to change
# the regex in MagicWord::initRegex
+# БЕЛЕЖКÐ: За да изключите "Текущите ÑъбитиÑ" в Ñтраничното меню,
+# въведете 'currentevents' => '-'
+
+# БЕЛЕЖКÐ: За да изключите "УÑловиÑта за ползване" в заглавните препратки,
+# въведете 'disclaimers' => ''
+
+# БЕЛЕЖКÐ: За да изключите "Портала" за общноÑтта в заглавните препратки,
+# въведете 'portal' => ''
+
/* private */ $wgAllMessagesBg = array(
# Bits of text used by many pages:
#
-"categories" => "Категории Ñтраници",
-"category" => "категориÑ",
-"category_header" => "Статии в ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ \"$1\"",
-"subcategories" => "Подкатегории",
-"linktrail" => "/^((?:[a-z]|а|б|в|г|д|е|ж|з|и|й|к|л|м|н|о|п|Ñ€|Ñ|Ñ‚|у|Ñ„|Ñ…|ц|ч|ш|щ|ÑŠ|Ñ‹|ÑŒ|Ñ|ÑŽ|Ñ)+)(.*)\$/sD",
-"mainpage" => "Ðачална Ñтраница",
-"mainpagetext" => "СиÑтемата на Уики бе уÑпешно инÑталирана.",
-"about" => "За $wgSitename",
-"aboutwikipedia" => "За $wgSitename",
-"aboutpage" => "$wgMetaNamespace:За $wgSitename",
-"help" => "Помощ",
-"helppage" => "$wgMetaNamespace:Помощ",
-"wikititlesuffix" => "$wgSitename",
-"bugreports" => "Ð¡ÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð° грешки",
-"bugreportspage" => "$wgMetaNamespace:СъобщениÑ_за_грешки",
-"sitesupport" => "ДарениÑ",
-"sitesupportpage" => "", # If not set, won't appear. Can be wiki page or URL
-"faq" => "ЧЗВ",
-"faqpage" => "$wgMetaNamespace:ЧЗВ",
-"edithelp" => "Помощ при редактиране",
-"edithelppage" => "$wgMetaNamespace:Как_Ñе_редактират_Ñтраници",
-"cancel" => "Отказ",
-"qbfind" => "ТърÑене",
-"qbbrowse" => "Избор",
-"qbedit" => "Редактиране",
-"qbpageoptions" => "ÐаÑтройки за Ñтраницата",
-"qbpageinfo" => "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ñтраницата",
-"qbmyoptions" => "Моите наÑтройки",
-"qbspecialpages" => "Специални Ñтраници",
-"moredotdotdot" => "Повече...",
-"mypage" => "МоÑта Ñтраница",
-"mytalk" => "MоÑта беÑеда",
-"currentevents" => "Текущи ÑъбитиÑ",
-"disclaimers" => "Disclaimers",
-"disclaimerpage" => "$wgMetaNamespace:General_disclaimer",
-"errorpagetitle" => "Грешка",
-"returnto" => "Обратно към $1.",
-"fromwikipedia" => "От $wgSitename, Ñвободната енциклопедиÑ",
-"whatlinkshere" => "Какво Ñочи наÑам",
-"help" => "Помощ",
-"search" => "ТърÑене",
-"go" => "ОтварÑне",
-"history" => "ИÑториÑ",
-"printableversion" => "ВерÑÐ¸Ñ Ð·Ð° печат",
-"editthispage" => "Редактиране",
-"deletethispage" => "Изтриване",
-"protectthispage" => "Защита",
-"unprotectthispage" => "СвалÑне на защитата",
-"newpage" => "Ðова Ñтраница",
-"talkpage" => "ДиÑкуÑионна Ñтраница",
-"postcomment" => "ОÑтавÑне на коментар",
-"articlepage" => "Преглед на ÑтатиÑ",
-"subjectpage" => "Преглед на тема", # For compatibility
-"userpage" => "Преглед на потребителÑка Ñтраница",
-"wikipediapage" => "ОÑновна Ñтраница",
-"imagepage" => "Преглед на картинка",
-"viewtalkpage" => "Преглед на беÑеда",
-"otherlanguages" => "Други езици",
-"redirectedfrom" => "(ПренаÑочване от $1)",
-"lastmodified" => "ПоÑледна промÑна на Ñтраницата: $1.",
-"viewcount" => "Страницата е била преглеждана $1 пъти.",
-"gnunote" => "Ð’Ñички текÑтове Ñа доÑтъпни при уÑловиÑта на <a class=internal href='/wiki/Лиценз_за_Ñвободна_документациÑ_на_ГÐУ'>лиценза за Ñвободна Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ð° ГÐУ</a>.",
-"printsubtitle" => "(от http://www.wikipedia.org)",
-"protectedpage" => "Защитена Ñтраница",
-"administrators" => "$wgMetaNamespace:ÐдминиÑтратори",
-"sysoptitle" => "ИзиÑкване на админиÑтраторÑки права",
-"sysoptext" => "Желаното дейÑтвие може да Ñе изпълни Ñамо от админиÑтратори.
+'categories' => 'Категории',
+'category' => 'категориÑ',
+'category_header' => "Статии в ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ \"$1\"",
+'subcategories' => 'Подкатегории',
+'linktrail' => "/^((?:[a-z]|а|б|в|г|д|е|ж|з|и|й|к|л|м|н|о|п|Ñ€|Ñ|Ñ‚|у|Ñ„|Ñ…|ц|ч|ш|щ|ÑŠ|Ñ‹|ÑŒ|Ñ|ÑŽ|Ñ)+)(.*)\$/sD",
+'mainpage' => 'Ðачална Ñтраница',
+'mainpagetext' => 'СиÑтемата на Уики бе уÑпешно инÑталирана.',
+'mainpagedocfooter' => "МолÑ, разгледайте [http://meta.wikipedia.org/wiki/MediaWiki_i18n документациÑта]
+ и [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide ръководÑтвото] за подробна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно МедиÑУики.",
+'portal' => 'Портал за общноÑтта',
+'portal-url' => '{{ns:4}}:Портал',
+'about' => "За {{SITENAME}}",
+'aboutwikipedia' => "За {{SITENAME}}",
+'aboutpage' => "{{ns:4}}:За {{SITENAME}}",
+'article' => 'СтатиÑ',
+'help' => 'Помощ',
+'helppage' => "{{ns:12}}:Помощ",
+'wikititlesuffix' => "{{SITENAME}}",
+'bugreports' => 'Ð¡ÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð° грешки',
+'bugreportspage' => "{{ns:4}}:СъобщениÑ_за_грешки",
+"sitesupport" => "ДарениÑ", # Set a URL in $wgSiteSupportPage in LocalSettings.php
+'sitesupportpage' => '', # If not set, won't appear. Can be wiki page or URL
+'faq' => 'ЧЗВ',
+'faqpage' => "{{ns:4}}:ЧЗВ",
+'edithelp' => 'Помощ при редактиране',
+'edithelppage' => "{{ns:12}}:Как_Ñе_редактират_Ñтраници",
+'cancel' => 'Отказ',
+'qbfind' => 'ТърÑене',
+'qbbrowse' => 'Избор',
+'qbedit' => 'Редактиране',
+'qbpageoptions' => 'ÐаÑтройки за Ñтраницата',
+'qbpageinfo' => 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ñтраницата',
+'qbmyoptions' => 'Моите наÑтройки',
+'qbspecialpages' => 'Специални Ñтраници',
+'moredotdotdot' => 'Повече...',
+'mypage' => 'МоÑта Ñтраница',
+'mytalk' => 'МоÑта беÑеда',
+'anontalk' => 'БеÑеда за адреÑа',
+'navigation' => 'ÐавигациÑ',
+'currentevents' => 'Текущи ÑъбитиÑ',
+'disclaimers' => 'УÑÐ»Ð¾Ð²Ð¸Ñ Ð·Ð° ползване',
+'disclaimerpage' => "{{ns:4}}:УÑловиÑ_за_ползване",
+'errorpagetitle' => 'Грешка',
+'returnto' => "Обратно към $1.",
+'fromwikipedia' => "от {{SITENAME}}, Ñвободната енциклопедиÑ",
+'whatlinkshere' => 'Какво Ñочи наÑам',
+'help' => 'Помощ',
+'search' => 'ТърÑене',
+'go' => 'ОтварÑне',
+'history' => 'ИÑториÑ',
+'history_short' => 'ИÑториÑ',
+'printableversion' => 'ВерÑÐ¸Ñ Ð·Ð° печат',
+'edit' => 'Редактиране',
+'editthispage' => 'Редактиране',
+'delete' => 'Изтриване',
+'deletethispage' => 'Изтриване',
+'undelete_short' => 'ВъзÑтановÑване',
+'protect' => 'Защита',
+'protectthispage' => 'Защита',
+'unprotect' => 'СвалÑне на защитата',
+'unprotectthispage' => 'СвалÑне на защитата',
+'newpage' => 'Ðова Ñтраница',
+'talkpage' => 'ДиÑкуÑионна Ñтраница',
+'specialpage' => 'Специална Ñтраница',
+'personaltools' => 'Лични инÑтрументи',
+'postcomment' => 'ОÑтавÑне на Ñъобщение',
+'addsection' => '+',
+'articlepage' => 'Преглед на ÑтатиÑ',
+'subjectpage' => 'Преглед на тема', # For compatibility
+'talk' => 'БеÑеда',
+'toolbox' => 'ÐšÑƒÑ‚Ð¸Ñ Ñ Ð¸Ð½Ñтрументи',
+'userpage' => 'ПотребителÑка Ñтраница',
+'wikipediapage' => 'ОÑновна Ñтраница',
+'imagepage' => 'Преглед на картинка',
+'viewtalkpage' => 'Преглед на беÑеда',
+'otherlanguages' => 'Други езици',
+'redirectedfrom' => "(пренаÑочване от $1)",
+'lastmodified' => "ПоÑледна промÑна на Ñтраницата: $1.",
+'viewcount' => "Страницата е била преглеждана $1 пъти.",
+# obsolete
+'gnunote' => 'Ð’Ñички текÑтове Ñа доÑтъпни при уÑловиÑта на [[Лиценз_за_Ñвободна_документациÑ_на_ГÐУ|лиценза за Ñвободна Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ð° ГÐУ]].',
+'copyright' => "Съдържанието е доÑтъпно при уÑловиÑта на $1.",
+'poweredby' => "{{SITENAME}} Ñе задвижва от [http://www.mediawiki.org/ МедиÑУики], Ñофтуер за уики Ñ Ð¾Ñ‚Ð²Ð¾Ñ€ÐµÐ½ код.",
+'printsubtitle' => '(от {{SERVER}})',
+'protectedpage' => 'Защитена Ñтраница',
+'administrators' => "{{ns:4}}:ÐдминиÑтратори",
+'sysoptitle' => 'ИзиÑкване на админиÑтраторÑки права',
+'sysoptext' => "Желаното дейÑтвие може да Ñе изпълни Ñамо от админиÑтратори.
Вижте $1.",
-"developertitle" => "ИзиÑкват Ñе права на разработчик",
-"developertext" => "Желаното дейÑтвие може да Ñе изпълни Ñамо от разработчици.
+'developertitle' => 'ИзиÑкват Ñе права на разработчик',
+'developertext' => "Желаното дейÑтвие може да Ñе изпълни Ñамо от разработчици.
Вижте $1.",
-"bureaucrattitle" => "ИзиÑкват Ñе права на бюрократ",
-"bureaucrattext" => "Желаното дейÑтвие може да Ñе изпълни Ñамо от бюрократи.",
+'bureaucrattitle' => 'ИзиÑкват Ñе права на бюрократ',
+'bureaucrattext' => 'Желаното дейÑтвие може да Ñе изпълни Ñамо от бюрократи.',
"nbytes" => "$1 байта",
-"go" => "ОтварÑне",
-"ok" => "Добре",
-"sitetitle" => $wgSitename,
-"sitesubtitle" => "Свободната енциклопедиÑ",
-"retrievedfrom" => "Взето от \"$1\".",
-"newmessages" => "Имате $1.",
-"newmessageslink" => "нови ÑъобщениÑ",
-"editsection"=>"редактиране",
-"toc" => "Съдържание",
-"showtoc" => "показване",
-"hidetoc" => "Ñкриване",
-"thisisdeleted" => "Преглед или възÑтановÑване на $1?",
-"restorelink" => "$1 изтрити редакции",
+'go' => 'ОтварÑне',
+'ok' => 'Добре',
+'sitetitle' => "{{SITENAME}}",
+'pagetitle' => "$1 - {{SITENAME}}",
+'sitesubtitle' => 'Свободната енциклопедиÑ',
+'retrievedfrom' => "Взето от \"$1\".",
+'newmessages' => "Имате $1.",
+'newmessageslink' => 'нови ÑъобщениÑ',
+'editsection' => 'редактиране',
+'toc' => 'Съдържание',
+'showtoc' => 'показване',
+'hidetoc' => 'Ñкриване',
+'thisisdeleted' => "Преглед или възÑтановÑване на $1?",
+'restorelink' => "$1 изтрити редакции",
+'feedlinks' => 'Feed:',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'СтатиÑ',
+'nstab-user' => 'ПотребителÑка Ñтраница',
+'nstab-media' => 'МедиÑ',
+'nstab-special' => 'Специална Ñтраница',
+'nstab-wp' => "За {{SITENAME}}",
+'nstab-image' => 'Картинка',
+'nstab-mediawiki' => 'Съобщение',
+'nstab-template' => 'Шаблон',
+'nstab-help' => 'Помощ',
+'nstab-category' => 'КатегориÑ',
# Main script and global functions
#
-"nosuchaction" => "ÐÑма такова дейÑтвие",
-"nosuchactiontext" => "ДейÑтвието, указано от URL-адреÑа, не Ñе разпознава
-от ÑиÑтемата.",
-"nosuchspecialpage" => "ÐÑма такава Ñпециална Ñтраница",
-"nospecialpagetext" => "Отправихте заÑвка за Ñпециална Ñтраница, коÑто не Ñе разпознава от ÑиÑтемата.",
+'nosuchaction' => 'ÐÑма такова дейÑтвие',
+'nosuchactiontext' => 'ДейÑтвието, указано от Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ð°Ð´Ñ€ÐµÑ, не Ñе разпознава от ÑиÑтемата.',
+'nosuchspecialpage' => 'ÐÑма такава Ñпециална Ñтраница',
+'nospecialpagetext' => 'Отправихте заÑвка за Ñпециална Ñтраница, коÑто не Ñе разпознава от ÑиÑтемата.',
# General errors
#
-"error" => "Грешка",
-"databaseerror" => "Грешка при работа Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни",
-"dberrortext" => "Възникна Ñинтактична грешка при заÑвка към базата данни.
+'error' => 'Грешка',
+'databaseerror' => 'Грешка при работа Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни',
+'dberrortext' => "Възникна Ñинтактична грешка при заÑвка към базата данни.
Това може да е причинено от невалидна заÑвка за Ñ‚ÑŠÑ€Ñене (вижте $5)
или да ÑвидетелÑтва за грешка в Ñитемата.
ПоÑледната заÑвка към базата данни бе:
<blockquote><tt>$1</tt></blockquote>
при функциÑта \"<tt>$2</tt>\".
MySQL дава грешка \"<tt>$3: $4</tt>\".",
-"dberrortextcl" => "Възникна Ñинтактична грешка при заÑвка към базата данни.
+'dberrortextcl' => "Възникна Ñинтактична грешка при заÑвка към базата данни.
ПоÑледната заÑвка към базата данни бе:
\"$1\"
при функциÑта \"$2\".
MySQL дава грешка \"$3: $4\".\n",
-"noconnect" => "Ð’ момента има техничеÑки трудноÑти и не може да Ñе оÑъщеÑтви връзка Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни.",
-"nodb" => "ÐеуÑпех при избиране на база данни $1",
-"cachederror" => "Показано е Ñкладирано копие на желаната Ñтраница, което евентуално може да е оÑтарÑло.",
-"readonly" => "Базата данни е затворена за промени",
-"enterlockreason" => "ПоÑочете причина за затварÑнето, като дадете и
-приблизителна оценка кога базата данни ще бъде отново отворена",
-"readonlytext" => "Базата данни на $wgSitename е временно затворена за
-промени - вероÑтно за рутинна поддръжка,
+'noconnect' => "Ð’ момента има техничеÑки трудноÑти и не може да Ñе оÑъщеÑтви връзка Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни.",
+'nodb' => "ÐеуÑпех при избиране на база данни $1",
+'cachederror' => 'Показано е Ñкладирано копие на желаната Ñтраница, което евентуално може да е оÑтарÑло.',
+'readonly' => 'Базата данни е затворена за промени',
+'enterlockreason' => 'ПоÑочете причина за затварÑнето, като дадете и
+приблизителна оценка кога базата данни ще бъде отново отворена',
+'readonlytext' => "Базата данни е временно затворена за промени - вероÑтно за рутинна поддръжка,
Ñлед коÑто ще бъде отново на разположение.
ÐдминиÑтраторът, който Ñ Ðµ затворил, дава Ñледното обÑÑнение:
<p>$1",
-"missingarticle" => "ТекÑÑ‚ÑŠÑ‚ на Ñтраницата \"$1\" не бе намерен в базата данни.
+'missingarticle' => "ТекÑÑ‚ÑŠÑ‚ на Ñтраницата \"$1\" не бе намерен в базата данни.
<p>Това обикновено е причинено от поÑледване на оÑтарÑла разлика или
препратка от иÑториÑта към изтрита Ñтраница.
<p>Ðко не това е причината, е възможно да Ñте открили грешка в ÑиÑтемата.
МолÑ, Ñъобщете за това на админиÑтратор, като включите и името на ÑтатиÑта.",
-"internalerror" => "Вътрешна грешка",
-"filecopyerror" => "Файлът \"$1\" не можа да бъде копиран като \"$2\".",
-"filerenameerror" => "Файлът \"$1\" не можа да бъде преименуван на \"$2\".",
-"filedeleteerror" => "Файлът \"$1\" не можа да бъде изтрит.",
-"filenotfound" => "Файлът \"$1\" не бе намерен.",
-"unexpected" => "Ðеочаквана ÑтойноÑÑ‚: \"$1\"=\"$2\".",
-"formerror" => "Възникна грешка при изпращане на формулÑра",
-"badarticleerror" => "ДейÑтвието не може да Ñе изпълни върху Ñтраницата.",
-"cannotdelete" => "Указаната Ñтраница или картинка не можа да бъде изтрита. Възможно е вече да е изтрита от нÑкой друг.",
-"badtitle" => "Ðевалидно заглавие",
-"badtitletext" => "Желаното заглавие на ÑÑ‚Ð°Ñ‚Ð¸Ñ Ðµ невалидно, празно или
-неправилна препратка към Ð£Ð¸ÐºÐ¸Ð¿ÐµÐ´Ð¸Ñ Ð½Ð° друг език.",
-"perfdisabled" => "СъжалÑваме! Това ÑвойÑтво е временно изключено,
-защото Ð·Ð°Ð±Ð°Ð²Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни дотам, че никой не може да използва Уики.",
-"perfdisabledsub" => "Съхранен екземплÑÑ€ от $1:",
-"wrong_wfQuery_params" => "Ðевалидни аргументи за wfQuery()<br>
-ФункциÑ: $1<br>
+'internalerror' => 'Вътрешна грешка',
+'filecopyerror' => "Файлът \"$1\" не можа да бъде копиран като \"$2\".",
+'filerenameerror' => "Файлът \"$1\" не можа да бъде преименуван на \"$2\".",
+'filedeleteerror' => "Файлът \"$1\" не можа да бъде изтрит.",
+'filenotfound' => "Файлът \"$1\" не бе намерен.",
+'unexpected' => "Ðеочаквана ÑтойноÑÑ‚: \"$1\"=\"$2\".",
+'formerror' => 'Възникна грешка при изпращане на формулÑра',
+'badarticleerror' => 'ДейÑтвието не може да Ñе изпълни върху Ñтраницата.',
+'cannotdelete' => 'Указаната Ñтраница или картинка не можа да бъде изтрита. Възможно е вече да е изтрита от нÑкой друг.',
+'badtitle' => 'Ðевалидно заглавие',
+'badtitletext' => 'Желаното заглавие на ÑÑ‚Ð°Ñ‚Ð¸Ñ Ðµ невалидно, празно или
+неправилна препратка към Ð£Ð¸ÐºÐ¸Ð¿ÐµÐ´Ð¸Ñ Ð½Ð° друг език.',
+'perfdisabled' => 'СъжалÑваме! Това ÑвойÑтво е временно изключено,
+защото Ð·Ð°Ð±Ð°Ð²Ñ Ð±Ð°Ð·Ð°Ñ‚Ð° данни дотам, че никой не може да използва уикито.',
+'perfdisabledsub' => "Съхранен екземплÑÑ€ от $1:",
+'perfcached' => 'Следните данни Ñа извлечени от Ñклада и затова може да не отговарÑÑ‚ на текущото ÑÑŠÑтоÑние:',
+'wrong_wfQuery_params' => "Ðевалидни аргументи за wfQuery()<br />
+ФункциÑ: $1<br />
ЗаÑвка: $2
",
-"viewsource" => "Изходен код",
-"protectedtext" => "Страницата е затворена за промени. СъщеÑтвуват нÑколко
+'viewsource' => 'Защитена Ñтраница',
+'protectedtext' => "Страницата е затворена за промени. СъщеÑтвуват нÑколко
причини това да е така, молÑ, вижте
-[[$wgMetaNamespace:Защитена_Ñтраница]].
+[[{{ns:4}}:Защитена_Ñтраница]].
Може да прегледате и копирате Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ ÐºÐ¾Ð´ на Ñтраницата:",
+'seriousxhtmlerrors' => 'tidy откри Ñериозни грешки в кода на XHTML.',
# Login and logout pages
#
"logouttitle" => "Излизане на потребител",
"logouttext" => "ИзлÑзохте от ÑиÑтемата.
-Може да продължите да използвате $wgSitename анонимно или да влезете отново
+Може да продължите да използвате {{SITENAME}} анонимно или да влезете отново
като друг потребител. Обърнете внимание, че нÑкои Ñтраници вÑе още
ще Ñе показват така, ÑÑкаш Ñте влезли, докато не изтриете кеш-паметта на браузъра.\n",
@@ -348,120 +437,133 @@ MySQL дава грешка \"$3: $4\".\n",
"yourpasswordagain" => "Въведете повторно парола",
"newusersonly" => " (Ñамо за нови потребители)",
"remembermypassword" => "ЗапомнÑне на паролата между ÑеÑиите.",
-"loginproblem" => "<b>Имаше проблем Ñ Ð’Ð°ÑˆÐµÑ‚Ð¾ влизане.</b><br>Опитайте отново!",
-"alreadyloggedin" => "<font color=\"red\"><b>$1, вече Ñте влезли в ÑиÑтемата!</b></font><br>\n",
+"loginproblem" => "<b>Имаше проблем Ñ Ð’Ð°ÑˆÐµÑ‚Ð¾ влизане.</b><br />Опитайте отново!",
+"alreadyloggedin" => "<font color=\"red\"><b>$1, вече Ñте влезли в ÑиÑтемата!</b></font><br />\n",
-"areyounew" => "Ðко поÑещавате за пръв път $wgSitename и иÑкате да Ñи откриете
+"areyounew" => "Ðко поÑещавате за пръв път {{SITENAME}} и иÑкате да Ñи откриете
потребителÑка Ñметка,
молÑ, въведете потребителÑко име и парола.
ПоÑочването на електронна поща е незадължително, но Ñе препоръчва:
ако Ñи забравите паролата, може да поиÑкате Ñ‚Ñ Ð´Ð° Ви бъде изпратена
-на Ð´Ð°Ð´ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑ.<br>\n",
-
-"login" => "Влизане",
-"loginprompt" => "БиÑквитките Ñ‚Ñ€Ñбва да Ñа разрешени, за да може да влезете в $wgSitename.",
-"userlogin" => "Влизане",
-"logout" => "Излизане",
-"userlogout" => "Излизане",
-"notloggedin" => "Ðе Ñте влезли",
-"createaccount" => "Създаване на Ñметка",
-"createaccountmail" => "Ñ Ð¿Ð¸Ñмо по е-пощата",
-"badretype" => "Въведените пароли не Ñъвпадат.",
-"userexists" => "Въведеното потребителÑко име вече Ñе използва. МолÑ, изберете друго име.",
-"youremail" => "Вашата е-поща*",
-"yournick" => "ВашиÑÑ‚ пÑевдоним (за подпиÑи)",
-"emailforlost" => "* ПоÑочването на електронна поща не е задължително,
-но позволÑва на хората да Ñе Ñвържат Ñ Ð’Ð°Ñ, без да Ñе налага да им Ñъобщавате
- адреÑа Ñи, а Ñъщо помага и на ВаÑ, ако Ñлучайно забравите паролата Ñи.",
-"loginerror" => "Грешка при влизане",
-"nocookiesnew" => "ПотребителÑката Ñметка бе Ñъздадена, но Вие не Ñте влезли. $wgSitename използва биÑквитки за влизане на потребителите. МолÑ, разрешете биÑквитките във Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€, тъй като те Ñа забранени, и Ñлед това влезте Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñкото Ñи име и парола.",
-"nocookieslogin" => "$wgSitename използва биÑквитки за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° влизаниÑта. МолÑ, разрешете биÑквитките във Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€, тъй като те Ñа забранени, и опитайте отново.",
-"noname" => "Ðе указахте валидно потребителÑко име.",
-"loginsuccesstitle" => "УÑпешно влизане",
-"loginsuccess" => "ВлÑзохте в $wgSitename като \"$1\".",
-"nosuchuser" => "ÐÑма потребител Ñ Ð¸Ð¼ÐµÑ‚Ð¾ \"$1\".
+на Ð´Ð°Ð´ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑ.<br />\n",
+
+'login' => 'Влизане',
+'loginprompt' => "БиÑквитките Ñ‚Ñ€Ñбва да Ñа разрешени, за да може да влезете в {{SITENAME}}.",
+'userlogin' => 'Влизане',
+'logout' => 'Излизане',
+'userlogout' => 'Излизане',
+'notloggedin' => 'Ðе Ñте влезли',
+'createaccount' => 'Създаване на Ñметка',
+'createaccountmail' => 'Ñ Ð¿Ð¸Ñмо по електронната поща',
+'badretype' => 'Въведените пароли не Ñъвпадат.',
+'userexists' => 'Въведеното потребителÑко име вече Ñе използва. МолÑ, изберете друго име.',
+'youremail' => 'Вашата е-поща*',
+'yourrealname' => 'Вашето иÑтинÑко име*',
+'yournick' => 'ВашиÑÑ‚ пÑевдоним (за подпиÑи)',
+'emailforlost' => '* Полетата, отбелÑзани ÑÑŠÑ Ð·Ð²ÐµÐ·Ð´Ð° (*), Ñа незадължителни. ПоÑочването на електронна поща позволÑва на хората да Ñе Ñвържат Ñ Ð’Ð°Ñ, без да Ñе налага да им Ñъобщавате адреÑа Ñи, а Ñъщо може да Ñе използва, за да Ви Ñе изпрати нова парола, ако Ñлучайно забравите Ñегашната Ñи.<br /><br /> Ðко поÑочите иÑтинÑкото Ñи име, на него ще бъдат припиÑани Вашите приноÑи.',
+'prefs-help-userdata' => '* <strong>ИÑтинÑко име</strong> (незадължително): ако го поÑочите, на него ще бъдат припиÑани Вашите приноÑи.<br/>
+* <strong>Електронна поща</strong> (незадължително): позволÑва на хората да Ñе Ñвържат Ñ Ð’Ð°Ñ, без да Ñе налага да им Ñъобщавате адреÑа Ñи, а Ñъщо може да Ñе използва, за да Ви Ñе изпрати нова парола, ако Ñлучайно забравите Ñегашната Ñи.',
+'loginerror' => 'Грешка при влизане',
+'nocookiesnew' => "ПотребителÑката Ñметка бе Ñъздадена, но вÑе още не Ñте влезли. {{SITENAME}} използва биÑквитки при влизане на потребителите. МолÑ, разрешете биÑквитките във Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€, тъй като те Ñа забранени, и Ñлед това влезте Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñкото Ñи име и парола.",
+'nocookieslogin' => "{{SITENAME}} използва биÑквитки за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° влизаниÑта. МолÑ, разрешете биÑквитките във Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€, тъй като те Ñа забранени, и опитайте отново.",
+'noname' => 'Ðе указахте валидно потребителÑко име.',
+'loginsuccesstitle' => 'УÑпешно влизане',
+'loginsuccess' => "ВлÑзохте в {{SITENAME}} като \"$1\".",
+'nosuchuser' => "ÐÑма потребител Ñ Ð¸Ð¼ÐµÑ‚Ð¾ \"$1\".
Проверете изпиÑването или Ñе региÑтрирайте, използвайки Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€.",
-"wrongpassword" => "Въведената парола е невалидна. МолÑ, опитайте отново.",
-"mailmypassword" => "Изпращане на нова парола",
-"passwordremindertitle" => "ÐапомнÑне за парола от $wgSitename",
-"passwordremindertext" => "ÐÑкой (най-вероÑтно Вие, от ИП-Ð°Ð´Ñ€ÐµÑ $1)
-помоли да Ви изпратим новата парола за влизане в $wgSitename.
+'wrongpassword' => 'Въведената парола е невалидна. МолÑ, опитайте отново.',
+'mailmypassword' => 'Изпращане на нова парола',
+'passwordremindertitle' => "ÐапомнÑне за парола от {{SITENAME}}",
+'passwordremindertext' => "ÐÑкой (най-вероÑтно Вие, от IP-Ð°Ð´Ñ€ÐµÑ $1)
+помоли да Ви изпратим новата парола за влизане в {{SITENAME}}.
Паролата за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ \"$2\" е \"$3\".
Сега би Ñ‚Ñ€Ñбвало да влезете в ÑиÑтемата и да Ñмените паролата Ñи.",
-"noemail" => "ÐÑма запиÑана е-поща за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ \"$1\".",
-"passwordsent" => "Ðова парола беше изпратена на електронната поща на \"$1\".
+'noemail' => "ÐÑма запиÑана електронна поща за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ \"$1\".",
+'passwordsent' => "Ðова парола беше изпратена на електронната поща на \"$1\".
МолÑ, влезте отново, Ñлед като Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚Ðµ.",
-"loginend" => "За да Ñе региÑтрирате, проÑто въведете потребителÑко име и парола (два пъти) и щракнете върху бутона '<b>Създаване на Ñметка</b>'.<br><br>
+'loginend' => "За да Ñе региÑтрирате, проÑто въведете потребителÑко име и парола (два пъти) и щракнете върху бутона '<b>Създаване на Ñметка</b>'.<br /><br />
-Ð¡Ð»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ð¿ÑŠÑ‚ е доÑтатъчно да попълните Ñамо първите две полета и да щракнете върху '<b>Влизане</b>'.<br><br>",
+Ð¡Ð»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ð¿ÑŠÑ‚ е доÑтатъчно да попълните Ñамо първите две полета и да щракнете върху '<b>Влизане</b>'.<br /><br />",
+'mailerror' => "Грешка при изпращане на пиÑмо: $1",
# Edit page toolbar
-"bold_sample" => "Получер текÑÑ‚",
-"bold_tip" => "Получер (удебелен) текÑÑ‚",
-"italic_sample" => "КурÑивен текÑÑ‚",
-"italic_tip" => "КурÑивен (наклонен) текÑÑ‚",
-"link_sample" => "Име на препратка",
-"link_tip" => "Вътрешна препратка",
-"extlink_sample" => "http://www.primer.com Име на препратката",
-"extlink_tip" => "Външна препратка (не забравÑйте http:// отпред)",
-"headline_sample" => "Заглавен текÑÑ‚",
-"headline_tip" => "Заглавие",
-"math_sample" => "Тук въведете формулата",
-"math_tip" => "МатематичеÑка формула (LaTeX)",
-"nowiki_sample" => "Тук въведете текÑÑ‚",
-"nowiki_tip" => "Пренебрегване на форматиращите команди",
-"image_sample" => "Primer.jpg",
-"image_tip" => "Вмъкване на картинка",
-"media_sample" => "Primer.mp3",
-"media_tip" => "Препратка към файл",
-"sig_tip" => "ВашиÑÑ‚ Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ Ð²Ñ€ÐµÐ¼ÐµÐ²Ð° отметка",
-"hr_tip" => "Хоризонтална Ð»Ð¸Ð½Ð¸Ñ (използвайте пеÑтеливо)",
-"infobox" => "Щракнете върху бутон за демонÑтрациÑ",
+'bold_sample' => 'Получер текÑÑ‚',
+'bold_tip' => 'Получер (удебелен) текÑÑ‚',
+'italic_sample' => 'КурÑивен текÑÑ‚',
+'italic_tip' => 'КурÑивен (наклонен) текÑÑ‚',
+'link_sample' => 'Име на препратка',
+'link_tip' => 'Вътрешна препратка',
+'extlink_sample' => 'http://www.primer.com Име на препратката',
+'extlink_tip' => 'Външна препратка (не забравÑйте http:// отпред)',
+'headline_sample' => 'Заглавен текÑÑ‚',
+'headline_tip' => 'Заглавие',
+'math_sample' => 'Тук въведете формулата',
+'math_tip' => 'МатематичеÑка формула (LaTeX)',
+'nowiki_sample' => 'Тук въведете текÑÑ‚',
+'nowiki_tip' => 'Пренебрегване на форматиращите команди',
+'image_sample' => 'Пример.jpg',
+'image_tip' => 'Вмъкване на картинка',
+'media_sample' => 'Пример.mp3',
+'media_tip' => 'Препратка към файл',
+'sig_tip' => 'ВашиÑÑ‚ Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ Ð²Ñ€ÐµÐ¼ÐµÐ²Ð° отметка',
+'hr_tip' => 'Хоризонтална Ð»Ð¸Ð½Ð¸Ñ (използвайте пеÑтеливо)',
+'infobox' => 'Щракнете върху бутон за демонÑтрациÑ',
+# alert box shown in browsers where text selection does not work, test e.g. with mozilla or konqueror
+'infobox_alert' => "МолÑ, въведете текÑта, който иÑкате да форматирате.\\n Той ще Ñе покаже в информационното поле, откъдето ще може да го изберете.\\nПример:\\n$1\\nще Ñе превърне в:\\n$2",
# Edit pages
#
-"summary" => "Резюме",
-"subject" => "Тема/заглавие",
-"minoredit" => "Това е малка промÑна",
-"watchthis" => "Ðаблюдение на ÑтатиÑта",
-"savearticle" => "Съхранение",
-"preview" => "Предварителен преглед",
-"showpreview" => "Предварителен преглед",
-"blockedtitle" => "ПотребителÑÑ‚ е блокиран",
-"blockedtext" => "Вашето потребителÑко име (или ИП-адреÑ) е блокирано от $1.
-Причината за това е:<br>''$2''<p>Може да Ñе Ñвържете Ñ $1 или Ñ Ð½Ñкой от оÑтаналите
-[[$wgMetaNamespace:ÐдминиÑтратори|админиÑтратори]], за да обÑъдите това.
-
-Може да използвате уÑлугата \"'''Пращане пиÑмо на потребителÑ'''\" единÑтвено, ако Ñте поÑочили валидна е-поща във Вашите [[Специални:Preferences|наÑтройки]].
-
-ВашиÑÑ‚ ИП-Ð°Ð´Ñ€ÐµÑ Ðµ $3. МолÑ, вмъквайте този Ð°Ð´Ñ€ÐµÑ Ð²ÑŠÐ² вÑÑко питане, което правите.",
-"whitelistedittitle" => "ТрÑбва да влезете, за да може да редактирате",
-"whitelistedittext" => "ТрÑбва да влезете [[Специални:Userlogin|влезете]], за да може да редактирате Ñтатии.",
-"whitelistreadtitle" => "ТрÑбва да влезете, за да може да четете",
-"whitelistreadtext" => "ТрÑбва да влезете [[Специални:Userlogin|влезете]], за да може да четете Ñтатии.",
-"whitelistacctitle" => "Ðе ви е позволено да Ñъздавате Ñметка",
-"whitelistacctext" => "За да Ви бъде позволено Ñъздаването на Ñметки, Ñ‚Ñ€Ñбва да [[Специални:Userlogin|влезете]] и да имате подходÑщото разрешение.",
-"accmailtitle" => "Паролата бе изпратена.",
-"accmailtext" => "Паролата за '$1' бе изпратена на $2.",
-"newarticle" => "(Ðова)",
-"newarticletext" => "<div style=\"font-size:small;color:#003333;border-width:1px;border-style:solid;border-color:#aaaaaa;padding:3px\">ПоÑледвали Ñте препратка към Ñтраница, коÑто вÑе още не ÑъщеÑтвува.
+'summary' => '<a href="http://bg.wikipedia.org/wiki/{{ns:4}}:Резюме" title="МолÑ, дайте кратко опиÑание на направените промени">Резюме</a>',
+'subject' => 'Тема/заглавие',
+'minoredit' => 'Това е малка промÑна',
+'watchthis' => 'Ðаблюдение на ÑтатиÑта',
+'savearticle' => 'Съхранение',
+'preview' => 'Предварителен преглед',
+'showpreview' => 'Предварителен преглед',
+'blockedtitle' => 'ПотребителÑÑ‚ е блокиран',
+'blockedtext' => "Вашето потребителÑко име (или IP-адреÑ) е блокирано от $1.
+Причината за това е:<br />''$2''<p>Може да Ñе Ñвържете Ñ $1 или Ñ Ð½Ñкой от оÑтаналите
+[[{{ns:4}}:ÐдминиÑтратори|админиÑтратори]], за да обÑъдите това.
+
+Може да използвате уÑлугата \"'''Пращане пиÑмо на потребителÑ'''\" единÑтвено, ако Ñте поÑочили валидна електронна поща в [[{{ns:-1}}:Preferences|наÑтройки]] Ñи.
+
+ВашиÑÑ‚ IP-Ð°Ð´Ñ€ÐµÑ Ðµ $3. МолÑ, вмъквайте този Ð°Ð´Ñ€ÐµÑ Ð²ÑŠÐ² вÑÑко питане, което правите.",
+'whitelistedittitle' => 'Ðеобходимо е да влезете, за да може да редактирате',
+'whitelistedittext' => 'Ðеобходимо е да [[{{ns:-1}}:Userlogin|влезете]], за да може да редактирате Ñтатии.',
+'whitelistreadtitle' => 'Ðеобходимо е да влезете, за да може да четете',
+'whitelistreadtext' => 'Ðеобходимо е да [[{{ns:-1}}:Userlogin|влезете]], за да може да четете Ñтатии.',
+'whitelistacctitle' => 'Ðе ви е позволено да Ñъздавате Ñметка',
+'whitelistacctext' => 'За да Ви бъде позволено Ñъздаването на Ñметки, Ñ‚Ñ€Ñбва да [[{{ns:-1}}:Userlogin|влезете]] и да имате подходÑщото разрешение.',
+'loginreqtitle' => 'ИзиÑква Ñе влизане',
+'loginreqtext' => 'Ðеобходимо е да [[{{ns:-1}}:Userlogin|влезете]], за да може да разглеждате други Ñтраници.',
+'accmailtitle' => 'Паролата бе изпратена.',
+'accmailtext' => "Паролата за '$1' бе изпратена на $2.",
+'newarticle' => '(нова)',
+'newarticletext' => "<div style=\"font-size:small;color:#033;border-width:1px;border-style:solid;border-color:#aaa;padding:3px\">ПоÑледвали Ñте препратка към Ñтраница, коÑто вÑе още не ÑъщеÑтвува.
За да Ñ Ñъздадете, започнете да пишете в долната текÑтова кутиÑ
-(вижте '''[[$wgMetaNamespace:Помощ|помощната Ñтраница]]''' за повече информациÑ).
-Ðко Ñте дошли тук по погрешка, проÑто натиÑнете '''бутона за връщане''' на Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€.
-
-Вашата добавка към енциклопедиÑта ще бъде видима '''веднага''' Ñлед Ñъхранението, затова ако проÑто иÑкате да изпробвате как работÑÑ‚ нещата, използвайте Ð½Ð°ÑˆÐ¸Ñ '''[[УикипедиÑ:ПÑÑъчник|пÑÑъчник]]'''.</div>",
-"anontalkpagetext" => "----
-''Това е диÑкуÑионната Ñтраница на анонимен потребител, който вÑе още нÑма Ñметка или не Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°. Затова Ñе налага да използваме [[ИП-адреÑ]], за да го/Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸Ñ†Ð¸Ñ€Ð°Ð¼Ðµ. Такъв ИП-Ð°Ð´Ñ€ÐµÑ Ð¼Ð¾Ð¶Ðµ да Ñе ÑÐ¿Ð¾Ð´ÐµÐ»Ñ Ð¾Ñ‚ нÑколко потребителÑ. Ðко Ñте анонимен потребител и миÑлите, че тези неумеÑтни коментари Ñа отправени към ВаÑ, Ð¼Ð¾Ð»Ñ [[Специални:Userlogin|региÑтрирайте Ñе или влезте в ÑиÑтемата]], за да избегнете евентуално бъдещо объркване Ñ Ð´Ñ€ÑƒÐ³Ð¸ анонимни потребители.''",
-"noarticletext" => "(Ð’ момента Ñтраницата не Ñъдържа текÑÑ‚)",
-"updated" => "(актуализирана)",
-"note" => "<strong>Забележка:</strong> ",
-"previewnote" => "Ðе забравÑйте, че това е Ñамо предварителен преглед и Ñтраницата вÑе още не е Ñъхранена!",
-"previewconflict" => "Този предварителен преглед отразÑва текÑта в горната текÑтова ÐºÑƒÑ‚Ð¸Ñ Ñ‚Ð°ÐºÐ°, както би Ñе показал, ако Ñъхраните.",
-"editing" => "Редактиране на $1",
-"sectionedit" => " (раздел)",
-"commentedit" => " (коментар)",
-"editconflict" => "Различна редакциÑ: $1",
-"explainconflict" => "ÐÑкой друг вече е променил тази Ñтраница, откакто започнахте да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ.
+(вижте '''[[{{ns:4}}:Помощ|помощната Ñтраница]]''' за повече информациÑ).
+Ðко Ñте дошли тук по грешка, проÑто натиÑнете '''бутона за връщане''' на Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€.
+
+'''Въведете Ñъдържателен текÑÑ‚, който би обогатил енциклопедиÑта.''' Вашата добавка към Ð£Ð¸ÐºÐ¸Ð¿ÐµÐ´Ð¸Ñ Ñ‰Ðµ бъде видима '''веднага''' Ñлед Ñъхранението, затова ако проÑто иÑкате да изпробвате как работÑÑ‚ нещата, използвайте Ð½Ð°ÑˆÐ¸Ñ '''[[{{ns:4}}:ПÑÑъчник|пÑÑъчник]]'''.</div>",
+'talkpagetext' => '<!-- МедиÑУики:talkpagetext -->',
+'anontalkpagetext' => "----
+''Това е диÑкуÑионната Ñтраница на анонимен потребител, който вÑе още нÑма Ñметка или не Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°. Затова Ñе налага да използваме цифров мрежов Ð°Ð´Ñ€ÐµÑ (IP address), за да го/Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸Ñ†Ð¸Ñ€Ð°Ð¼Ðµ. Такъв Ð°Ð´Ñ€ÐµÑ Ð¼Ð¾Ð¶Ðµ да Ñе ÑÐ¿Ð¾Ð´ÐµÐ»Ñ Ð¾Ñ‚ нÑколко потребителÑ.
+
+Ðко Ñте анонимен потребител и миÑлите, че тези неумеÑтни коментари Ñа отправени към ВаÑ, Ð¼Ð¾Ð»Ñ [[{{ns:-1}}:Userlogin|региÑтрирайте Ñе или влезте в ÑиÑтемата]], за да избегнете евентуално бъдещо объркване Ñ Ð´Ñ€ÑƒÐ³Ð¸ анонимни потребители.''",
+'noarticletext' => "(Тази Ñтраница вÑе още не ÑъщеÑтвува. Може да Ñ Ñъздадете, като щракнете на '''Редактиране'''.)",
+'usercssjs' => "'''Бележка:''' След Ñъхранението е необходимо да укажете на браузъра да вземе новата верÑиÑ: '''Mozilla:''' щракнете върху ''презареждане''(или ''ctrl-r''), '''IE / Opera:''' ''ctrl-f5'', '''Safari:''' ''cmd-r'', '''Konqueror''' ''ctrl-r''.",
+'usercssjsyoucanpreview' => "<strong>Съвет:</strong> Използвайте бутона 'Предварителен преглед', за да изпробвате Ð½Ð¾Ð²Ð¸Ñ ÐºÐ¾Ð´ на css/js преди Ñъхранението.",
+'usercsspreview' => "'''Ðе забравÑйте, че това е Ñамо предварителен преглед на кода на CSS, Ñтраницата вÑе още не е Ñъхранена!'''",
+'userjspreview' => "'''Ðе забравÑйте, че това е Ñамо изпробване/предварителен преглед на кода на Javascript, Ñтраницата вÑе още не е Ñъхранена!'''",
+'updated' => '(актуализирана)',
+'note' => '<strong>Забележка:</strong> ',
+'previewnote' => 'Ðе забравÑйте, че това е Ñамо предварителен преглед и Ñтраницата вÑе още не е Ñъхранена!',
+'previewconflict' => 'Този предварителен преглед отразÑва текÑта в горната текÑтова ÐºÑƒÑ‚Ð¸Ñ Ñ‚Ð°ÐºÐ°, както би Ñе показал, ако Ñъхраните.',
+'editing' => "Редактиране на $1",
+'sectionedit' => ' (раздел)',
+'commentedit' => ' (коментар)',
+'editconflict' => "Различна редакциÑ: $1",
+'explainconflict' => "ÐÑкой друг вече е променил тази Ñтраница, откакто започнахте да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ.
Горната текÑтова ÐºÑƒÑ‚Ð¸Ñ Ñъдържа Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ‚ÐµÐºÑÑ‚ на Ñтраницата без Вашите промени, които Ñа показани в долната кутиÑ. За да бъдат и те Ñъхранени, е необходимо ръчно да ги премеÑтите в горното поле, тъй като <b>единÑтвено</b> текÑÑ‚ÑŠÑ‚ в него ще бъде Ñъхранен при натиÑкането на бутона \"Съхранение\".\n<p>",
"yourtext" => "ВашиÑÑ‚ текÑÑ‚",
"storedversion" => "Съхранена верÑиÑ",
@@ -470,15 +572,20 @@ MySQL дава грешка \"$3: $4\".\n",
Ðко Ñъхраните, вÑÑкакви промени, направени Ñлед тази верÑиÑ, ще бъдат изгубени.</strong>\n",
"yourdiff" => "Разлики",
# REPLACE THE COPYRIGHT WARNING IF YOUR SITE ISN'T GFDL!
-"copyrightwarning" => "МолÑ, обърнете внимание на това, че
-вÑички приноÑи към $wgSitename Ñе публикуват при уÑловиÑта на
-лиценза Ñа Ñвободна Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ð° ГÐУ
+"copyrightwarning" => "<div style=\"border:1px solid #333; padding:0.5em\">
+МолÑ, обърнете внимание на това, че
+вÑички приноÑи към {{SITENAME}} Ñе публикуват при уÑловиÑта на
+лиценза за Ñвободна Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ð° ГÐУ
(за подробноÑти вижте $1).
Ðко не Ñте ÑъглаÑни Вашето произведение да бъде променÑно и
-преразпределÑно от оÑтаналите, не го публикувайте.<br>
-Също потвърждавате, че Вие Ñте напиÑали това или Ñте използвали <b>Ñвободни реÑурÑи</b>
-(public domain или друг подобен източник).
-<strong>ÐЕ ПУБЛИКУВÐЙТЕ ПРОИЗВЕДЕÐИЯ С ÐВТОРСКИ ПРÐВРБЕЗ РÐЗРЕШЕÐИЕ!</strong>",
+преразпределÑно от оÑтаналите, не го публикувайте.
+<br />
+Също потвърждавате, че Вие Ñте напиÑали материала
+или Ñте използвали <b>Ñвободни реÑурÑи</b> -
+<i>общеÑтвено доÑтоÑние</i> или друг Ñвободен източник.
+Ðко Ñте ползвали чужди материали, за които имате разрешение, непременно поÑочете източника.
+<strong>ÐЕ ПУБЛИКУВÐЙТЕ ПРОИЗВЕДЕÐИЯ С ÐВТОРСКИ ПРÐВРБЕЗ РÐЗРЕШЕÐИЕ!</strong>
+</div>",
"longpagewarning" => "Ð’ÐИМÐÐИЕ: Страницата има размер $1 килобайта; нÑкои
браузъри могат да имат проблеми при редактиране на Ñтраници
по-големи от 32Кб.
@@ -488,201 +595,201 @@ MySQL дава грешка \"$3: $4\".\n",
Ðко желаете, може да Ñъхраните Ñтраницата като текÑтов файл и да Ñе
опитате да Ñ Ð¿ÑƒÐ±Ð»Ð¸ÐºÑƒÐ²Ð°Ñ‚Ðµ по-къÑно.",
"protectedpagewarning" => "Ð’ÐИМÐÐИЕ: Страницата е затворена за промени, Ñамо
-ÑиÑтемни оператори могат да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚.
-МолÑ, Ñледвайте
-<a href='/wiki/$wgMetaNamespace:УказаниÑ_за_защитена_Ñтраница'>указаниÑта
-за защитена Ñтраница</a>.",
+админиÑтратори могат да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚.
+МолÑ, Ñледвайте [[{{ns:4}}:Защитена_Ñтраница|указаниÑта за защитена Ñтраница]].",
# History pages
#
-"revhistory" => "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° верÑиите",
-"nohistory" => "ÐÑма редакционна иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð° тази Ñтраница.",
-"revnotfound" => "ВерÑиÑта не е открита",
-"revnotfoundtext" => "Желаната Ñтара верÑÐ¸Ñ Ð½Ð° Ñтраницата не бе открита.
+'revhistory' => 'ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° верÑиите',
+'nohistory' => 'ÐÑма редакционна иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð° тази Ñтраница.',
+'revnotfound' => 'ВерÑиÑта не е открита',
+'revnotfoundtext' => "Желаната Ñтара верÑÐ¸Ñ Ð½Ð° Ñтраницата не бе открита.
МолÑ, проверете адреÑа, който използвахте за доÑтъп към Ñтраницата.\n",
-"loadhist" => "Зареждане иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° Ñтраницата",
-"currentrev" => "Текуща верÑиÑ",
-"revisionasof" => "ВерÑÐ¸Ñ Ð¾Ñ‚ $1",
-"cur" => "тек",
-"next" => "Ñлед",
-"last" => "поÑл",
-"orig" => "ориг",
-"histlegend" => "Легенда: (<b>тек</b>) = разлика Ñ Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ‚Ð° верÑиÑ,
-(<b>поÑл</b>) = разлика Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð°Ñ‚Ð° верÑиÑ, <b>Ðœ</b>&nbsp;=&nbsp;малка промÑна",
+'loadhist' => 'Зареждане иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° Ñтраницата',
+'currentrev' => 'Текуща верÑиÑ',
+'revisionasof' => "ВерÑÐ¸Ñ Ð¾Ñ‚ $1",
+'cur' => 'тек',
+'next' => 'Ñлед',
+'last' => 'поÑл',
+'orig' => 'ориг',
+'histlegend' => 'Разлики: направете отметки в кутийките Ñрещу верÑиите, които желаете да Ñравните, и натиÑнете "Enter" или бутона отдолу.<br/>
+Легенда: (<b>тек</b>) = разлика Ñ Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ‚Ð° верÑиÑ,
+(<b>поÑл</b>) = разлика Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð°Ñ‚Ð° верÑиÑ, <b>Ðœ</b>&nbsp;=&nbsp;малка промÑна',
# Diffs
#
-"difference" => "(Разлики между верÑиите)",
-"loadingrev" => "зареждане на верÑии за diff",
-"lineno" => "Ред $1:",
-"editcurrent" => "Редактиране на текущата верÑÐ¸Ñ Ð½Ð° Ñтраницата",
+'difference' => '(Разлики между верÑиите)',
+'loadingrev' => 'зареждане на верÑии за функциÑта <em>разл</em>',
+'lineno' => "Ред $1:",
+'editcurrent' => 'Редактиране на текущата верÑÐ¸Ñ Ð½Ð° Ñтраницата',
+'selectnewerversionfordiff' => 'Избиране на нова верÑÐ¸Ñ Ð·Ð° Ñравнение',
+'selectolderversionfordiff' => 'Избиране на Ñтара верÑÐ¸Ñ Ð·Ð° Ñравнение',
+'compareselectedversions' => 'Сравнение на избраните верÑии',
# Search results
#
-"searchresults" => "Резултати от Ñ‚ÑŠÑ€Ñенето",
-"searchhelppage" => "$wgMetaNamespace:ТърÑене",
-"searchingwikipedia" => "ТърÑене в $wgSitename",
-"searchresulttext" => "За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно $wgSitename, вижте $1.",
-"searchquery" => "За заÑвка \"$1\"",
-"badquery" => "Лошо формулирана заÑвка за Ñ‚ÑŠÑ€Ñене",
-"badquerytext" => "Вашата заÑвка не можа да бъде обработена.
+'searchresults' => 'Резултати от Ñ‚ÑŠÑ€Ñенето',
+'searchhelppage' => "{{ns:4}}:ТърÑене",
+'searchingwikipedia' => "ТърÑене в {{SITENAME}}",
+'searchresulttext' => "За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно {{SITENAME}}, вижте $1.",
+'searchquery' => "За заÑвка \"$1\"",
+'badquery' => 'Лошо формулирана заÑвка за Ñ‚ÑŠÑ€Ñене',
+'badquerytext' => 'Вашата заÑвка не можа да бъде обработена.
ВероÑтно Ñте Ñе опитали да Ñ‚ÑŠÑ€Ñите дума Ñ Ð¿Ð¾-малко от три букви, което вÑе
още не Ñе поддържа.
-Възможно е и да Ñте Ñгрешили в изпиÑването на израза, например: \"риба и и везни\".
-МолÑ, опитайте Ñ Ð½Ð¾Ð²Ð° заÑвка.",
-"matchtotals" => "ЗаÑвката \"$1\" Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° $2 Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° Ñтатии
+Възможно е и да Ñте Ñгрешили в изпиÑването на израза, например: "риба и и везни".
+МолÑ, опитайте Ñ Ð½Ð¾Ð²Ð° заÑвка.',
+'matchtotals' => "ЗаÑвката \"$1\" Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° $2 Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° Ñтатии
и на текÑта на $3 Ñтатии.",
-"nogomatch" => "Ðе ÑъщеÑтвуват Ñтраници Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾ това заглавие, опит за пълнотекÑтово Ñ‚ÑŠÑ€Ñене.",
-"titlematches" => "СъответÑÑ‚Ð²Ð¸Ñ Ð² заглавиÑта на Ñтатии",
-"notitlematches" => "ÐÑма ÑъответÑÑ‚Ð²Ð¸Ñ Ð² заглавиÑта на Ñтатии",
-"textmatches" => "СъответÑÑ‚Ð²Ð¸Ñ Ð² текÑта на Ñтатии",
-"notextmatches" => "ÐÑма ÑъответÑÑ‚Ð²Ð¸Ñ Ð² текÑта на Ñтатии",
-"prevn" => "предишни $1",
-"nextn" => "Ñледващи $1",
-"viewprevnext" => "Преглед ($1) ($2) ($3).",
-"showingresults" => "Показване на <b>$1</b> резултата, започвайки от #<b>$2</b>.",
-"showingresultsnum" => "Показване на <b>$3</b> резултата, започвайки от #<b>$2</b>.",
-"nonefound" => "<strong>Забележка</strong>: безрезултатните Ñ‚ÑŠÑ€ÑÐµÐ½Ð¸Ñ Ñ‡ÐµÑто Ñа причинени
+'nogomatch' => 'Ðе ÑъщеÑтвуват Ñтраници Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾ това заглавие, опит за пълнотекÑтово Ñ‚ÑŠÑ€Ñене.',
+'titlematches' => 'СъответÑÑ‚Ð²Ð¸Ñ Ð² заглавиÑта на Ñтатии',
+'notitlematches' => 'ÐÑма ÑъответÑÑ‚Ð²Ð¸Ñ Ð² заглавиÑта на Ñтатии',
+'textmatches' => 'СъответÑÑ‚Ð²Ð¸Ñ Ð² текÑта на Ñтатии',
+'notextmatches' => 'ÐÑма ÑъответÑÑ‚Ð²Ð¸Ñ Ð² текÑта на Ñтатии',
+'prevn' => "предишни $1",
+'nextn' => "Ñледващи $1",
+'viewprevnext' => "Преглед ($1) ($2) ($3).",
+'showingresults' => "Показване на <b>$1</b> резултата, започвайки от #<b>$2</b>.",
+'showingresultsnum' => "Показване на <b>$3</b> резултата, започвайки от #<b>$2</b>.",
+'nonefound' => "<strong>Забележка</strong>: безрезултатните Ñ‚ÑŠÑ€ÑÐµÐ½Ð¸Ñ Ñ‡ÐµÑто Ñа причинени
от това, че Ñе Ñ‚ÑŠÑ€ÑÑÑ‚ оÑновни думи като \"има\" или \"от\", които не Ñе индекÑират,
или от това, че Ñе Ñ‚ÑŠÑ€ÑÑÑ‚ повече от една думи (показват Ñе Ñамо Ñтраници, Ñъдържащи вÑички
зададени понÑтиÑ).",
-"powersearch" => "ТърÑене",
-"powersearchtext" => "
-ТърÑене в именни проÑтранÑтва:<br>
-$1<br>
+'powersearch' => 'ТърÑене',
+'powersearchtext' => "
+ТърÑене в именни проÑтранÑтва:<br />
+$1<br />
$2 Показване на пренаÑÐ¾Ñ‡Ð²Ð°Ð½Ð¸Ñ &nbsp; ТърÑене на $3 $9",
-"searchdisabled" => "<p>ПълнотекÑтовото Ñ‚ÑŠÑ€Ñене бе временно изключено поради
+'searchdisabled' => "<p>ПълнотекÑтовото Ñ‚ÑŠÑ€Ñене бе временно изключено поради
голÑмото натоварване на Ñървъра.
Междувременно може да Ñ‚ÑŠÑ€Ñите чрез Google:</p>",
-"googlesearch" => "
-<!-- 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>
+'googlesearch' => "
+<!-- претърÑване на Ñайта чрез 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=\"$1\">
-<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>
+<input type='text' name='q' size='31' maxlength='255' value='$1'/>
+<input type='submit' name='btnG' value='Google Search'/>
+<small>
+<input type='hidden' name='domains' value='{{SERVER}}'/><br />
+<input type='radio' name='sitesearch' value=''/> WWW
+<input type='radio' name='sitesearch' value='{{SERVER}}' checked='checked'/> {{SERVER}} <br />
+<input type='hidden' name='ie' value='$2'/>
+<input type='hidden' name='oe' value='$2'/>
+</small>
</td></tr></table>
</form>
-<!-- SiteSearch Google -->",
-"blanknamespace" => "(ОÑновно)",
+<!-- претърÑване на Ñайта чрез Google -->
+
+Може да използвате Ñледната препратка, за да Ñъздадете или редактирате Ñтраницата: <a href='{{localurl:$1|action=edit}}'>$1</a>",
+'blanknamespace' => '(ОÑновно)',
# Preferences page
#
-"preferences" => "ÐаÑтройки",
-"prefsnologin" => "Ðе Ñте влезли",
-"prefsnologintext" => "Ðеобходимо е да <a href=\"" .
- wfLocalUrl( "Специални:Userlogin" ) . "\">влезете</a>,
-за да може да променÑте потребителÑките наÑтройки.",
+'preferences' => 'ÐаÑтройки',
+'prefsnologin' => 'Ðе Ñте влезли',
+'prefsnologintext' => "Ðеобходимо е да [[{{ns:-1}}:Userlogin|влезете]],
+за да може да променÑте потребителÑките Ñи наÑтройки.",
"prefslogintext" => "ВлÑзохте като \"$1\".
ВашиÑÑ‚ вътрешен номер e $2.
-Вижте
-[[$wgMetaNamespace:Помощ за наÑтройките|помощта за потребителÑките наÑтройки]],
-за да Ñе ориентирате при избора.",
-"prefsreset" => "Стандартните наÑтройки бÑха възÑтановени.",
-"qbsettings" => "ÐаÑтройки на лентата за бърз избор",
-"changepassword" => "СмÑна на парола",
-"skin" => "Облик",
-"math" => "Показване на математичеÑки формули",
-"dateformat" => "Формат на датата",
-"math_failure" => "ÐеуÑпех при разбора",
-"math_unknown_error" => "непозната грешка",
-"math_unknown_function" => "непозната функциÑ",
-"math_lexing_error" => "лекÑикална грешка",
-"math_syntax_error" => "Ñинтактична грешка",
-"math_image_error" => "Превръщането към PNG не Ñполучи",
-"saveprefs" => "Съхранение наÑтройки",
-"resetprefs" => "Стандартни наÑтройки",
-"oldpassword" => "Стара парола",
-"newpassword" => "Ðова парола",
-"retypenew" => "Ðова парола повторно",
-"textboxsize" => "Размери на текÑтовата кутиÑ",
-"rows" => "Редове",
-"columns" => "Колони",
-"searchresultshead" => "ÐаÑтройки за резултати от Ñ‚ÑŠÑ€Ñене",
-"resultsperpage" => "Резултати на Ñтраница",
-"contextlines" => "Редове за резултат",
-"contextchars" => "Знаци от контекÑта на ред",
-"stubthreshold" => "ОпределÑне като къÑи Ñтатии до",
-"recentchangescount" => "Брой Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð² поÑледни промени",
-"savedprefs" => "Вашите наÑтройки бÑха Ñъхранени.",
-"timezonetext" => "Въведете Ð±Ñ€Ð¾Ñ Ñ‡Ð°Ñове, Ñ ÐºÐ¾Ð¸Ñ‚Ð¾ Вашето меÑтно време Ñе
-различава от това на Ñървъра
-(<a href=\"http://en2.wikipedia.org/wiki/Coordinated_Universal_Time\"
- title=\"Coordinated Universal Time\">GMT</a>).",
-"localtime" => "МеÑтно време",
-"timezoneoffset" => "ОтмеÑтване",
-"servertime" => "Време на Ñървъра",
-"guesstimezone" => "Попълване чрез браузъра",
-"emailflag" => "ЗабранÑване на пиÑма от други потребители",
-"defaultns" => "ТърÑене в тези именни проÑтранÑтва по подразбиране:",
+Вижте [[{{ns:4}}:ÐаÑтройки|помощта за потребителÑките наÑтройки]], за да Ñе ориентирате при избора.",
+'prefsreset' => 'Стандартните наÑтройки бÑха възÑтановени.',
+'qbsettings' => 'ÐаÑтройки на лентата за бърз избор',
+'changepassword' => 'СмÑна на парола',
+'skin' => 'Облик',
+'math' => 'Показване на математичеÑки формули',
+'dateformat' => 'Формат на датата',
+'math_failure' => 'ÐеуÑпех при разбора',
+'math_unknown_error' => 'непозната грешка',
+'math_unknown_function' => 'непозната функциÑ',
+'math_lexing_error' => 'лекÑикална грешка',
+'math_syntax_error' => 'Ñинтактична грешка',
+'math_image_error' => 'Превръщането към PNG не Ñполучи. Проверете дали latex, dvips и gs Ñа правилно инÑталирани.',
+'math_bad_tmpdir' => 'Ðевъзможно е пиÑането или Ñъздаването на временна папка за математичеÑките операции',
+'math_bad_output' => 'Ðевъзможно е пиÑането или Ñъздаването на изходÑща папка за математичеÑките операции',
+'math_notexvc' => 'ЛипÑва изпълнимиÑÑ‚ файл на texvc. МолÑ, прегледайте math/README за Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно конфигурирането.',
+'prefs-personal' => 'ПотребителÑки данни',
+'prefs-rc' => 'ПоÑледни промени и мъничета',
+'prefs-misc' => 'Други наÑтройки',
+'saveprefs' => 'Съхранение на наÑтройките',
+'resetprefs' => 'Стандартни наÑтройки',
+'oldpassword' => 'Стара парола',
+'newpassword' => 'Ðова парола',
+'retypenew' => 'Ðова парола повторно',
+'textboxsize' => 'Размери на текÑтовата кутиÑ',
+'rows' => 'Редове',
+'columns' => 'Колони',
+'searchresultshead' => 'ÐаÑтройки за резултати от Ñ‚ÑŠÑ€Ñене',
+'resultsperpage' => 'Резултати на Ñтраница',
+'contextlines' => 'Редове за резултат',
+'contextchars' => 'Знаци от контекÑта на ред',
+'stubthreshold' => 'ОпределÑне като къÑи Ñтатии до',
+'recentchangescount' => 'Брой Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð² поÑледни промени',
+'savedprefs' => 'Вашите наÑтройки бÑха Ñъхранени.',
+'timezonetext' => 'Въведете Ð±Ñ€Ð¾Ñ Ñ‡Ð°Ñове, Ñ ÐºÐ¾Ð¸Ñ‚Ð¾ Вашето меÑтно време Ñе
+различава от това на Ñървъра ([[UTC]]).',
+'localtime' => 'МеÑтно време',
+'timezoneoffset' => 'ОтмеÑтване',
+'servertime' => 'Време на Ñървъра',
+'guesstimezone' => 'Попълване чрез браузъра',
+'emailflag' => 'ЗабранÑване на пиÑма от други потребители',
+'defaultns' => 'ТърÑене в тези именни проÑтранÑтва по подразбиране:',
# Recent changes
#
-"changes" => "промени",
-"recentchanges" => "ПоÑледни промени",
-# This is the default text, and can be overriden by editing [[$wgMetaNamespace::Recentchanges]]
-"recentchangestext" => "ПроÑледÑване на поÑледните промени в $wgSitename.
+'changes' => 'промени',
+'recentchanges' => 'ПоÑледни промени',
+# This is the default text, and can be overriden by editing [[{{SITENAME}}:Recentchanges]]
+'recentchangestext' => "ПроÑледÑване на поÑледните промени в {{SITENAME}}.
Легенда: <b>тек</b> = разлика на текущата верÑиÑ,
<b>иÑÑ‚</b> = иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° верÑиите, <b>Ðœ</b>&nbsp;=&nbsp;малка промÑна, <b>Ð</b>&nbsp;=&nbsp;начало",
-"rcloaderr" => "Зареждане поÑледни промени",
-"rcnote" => "Показани Ñа поÑледните <strong>$1</strong> промени през поÑледните <strong>$2</strong> дни.",
-"rcnotefrom" => "Дадени Ñа промените от <b>$2</b> (до <b>$1</b> показани).",
-"rclistfrom" => "Показване на промени, започвайки от $1.",
-# "rclinks" => "Показване на поÑледните $1 промени през поÑледните $2 чаÑа / поÑледните $3 дни",
-# "rclinks" => "Показване на поÑледните $1 промени през поÑледните $2 дни.",
-"rclinks" => "Показване на поÑледните $1 промени през поÑледните $2 дни<br>$3",
-"showhideminor" => "$1 на малки промени | $2 на ботове | $3 на влезли потребители ",
-"rchide" => "$4; $1 малки промени; $2 вторични именни проÑтранÑтва; $3 многократни редакции.",
-"rcliu" => "; $1 редакции от влезли потребители",
-"diff" => "разл",
-"hist" => "иÑÑ‚",
-"hide" => "Ñкриване",
-"show" => "показване",
-"tableform" => "таблица",
-"listform" => "ÑпиÑък",
-"nchanges" => "$1 промени",
-"minor#editletter" => "М",
-"newpageletter" => "Ð",
+'rcloaderr' => 'Зареждане поÑледни промени',
+'rcnote' => "Показани Ñа поÑледните <strong>$1</strong> промени през поÑледните <strong>$2</strong> дни.",
+'rcnotefrom' => "Дадени Ñа промените от <b>$2</b> (до <b>$1</b> показани).",
+'rclistfrom' => "Показване на промени, започвайки от $1.",
+# 'rclinks' => "Показване на поÑледните $1 промени през поÑледните $2 чаÑа / поÑледните $3 дни",
+# 'rclinks' => "Показване на поÑледните $1 промени през поÑледните $2 дни.",
+'rclinks' => "Показване на поÑледните $1 промени през поÑледните $2 дни<br />$3",
+'showhideminor' => "$1 на малки промени | $2 на ботове | $3 на влезли потребители ",
+'rchide' => "$4; $1 малки промени; $2 вторични именни проÑтранÑтва; $3 многократни редакции.",
+'rcliu' => "; $1 редакции от влезли потребители",
+'diff' => 'разл',
+'hist' => 'иÑÑ‚',
+'hide' => 'Ñкриване',
+'show' => 'показване',
+'tableform' => 'таблица',
+'listform' => 'ÑпиÑък',
+'nchanges' => "$1 промени",
+'minor#editletter' => 'М',
+'newpageletter' => 'Ð',
# Upload
#
-"upload" => "Качване",
-"uploadbtn" => "Качване",
-"uploadlink" => "Качване на картинки",
-"reupload" => "Повторно качване",
-"reuploaddesc" => "Връщане към формулÑра за качване.",
-"uploadnologin" => "Ðе Ñте влезли",
-"uploadnologintext" => "Ðеобходимо е да <a href=\"" .
- wfLocalUrl( "Специални:Userlogin" ) . "\">влезете</a>,
-за да качвате файлове.",
-"uploadfile" => "Качване на картинки, музикални файлове, документи и др.",
-"uploaderror" => "Грешка при качване",
-"uploadtext" => "<strong>Ð’ÐИМÐÐИЕ!</strong> Преди да качите нещо,
-прочетете и Ñе придържайте към <a href=\"" .
-wfLocalUrlE( "$wgMetaNamespace:Политика_за_използване_на_картинки" ) . "\">политиката за използване на картинки</a>
-на $wgSitename.
-<p>Ðко файл Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¾Ñ‚Ð¾ име вече ÑъщеÑтвува в УикипедиÑ, то той ще бъде
-заменен без предупреждение.
-Затова, ако не правите актуализациÑ, първо Ñе убедете,
+'upload' => 'Качване',
+'uploadbtn' => 'Качване',
+'uploadlink' => 'Качване на картинки',
+'reupload' => 'Повторно качване',
+'reuploaddesc' => 'Връщане към формулÑра за качване.',
+'uploadnologin' => 'Ðе Ñте влезли',
+'uploadnologintext' => "Ðеобходимо е да [[{{ns:-1}}:Userlogin|влезете]], за да качвате файлове.",
+'uploadfile' => 'Качване на картинки, музикални файлове, документи и др.',
+'uploaderror' => 'Грешка при качване',
+# TODO $wgMetaNamespace - Project or NS_WIKIPEDIA
+'uploadtext' => "<strong>Ð’ÐИМÐÐИЕ!</strong> Преди да качите нещо,
+прочетете и Ñе придържайте към [[{{ns:-1}}:Политика_за_използване_на_картинки|политиката за използване на картинки]].
+
+<p>Ðко файл Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¾Ñ‚Ð¾ име вече ÑъщеÑтвува в {{SITENAME}}, то той ще бъде
+заменен без предупреждение. Затова, ако не правите актуализациÑ, първо Ñе убедете,
че такъв файл не ÑъщеÑтвува.</p>
<p>За да прегледате ÑъщеÑтвуващите в базата данни картинки,
-разгледайте <a href=\"" . wfLocalUrlE( "Специални:Imagelist" ) .
-"\">ÑпиÑъка Ñ ÐºÐ°Ñ‡ÐµÐ½Ð¸Ñ‚Ðµ картинки</a>.
-КачваниÑта и изтриваниÑта Ñе запиÑват в <a href=\"" .
-wfLocalUrlE( "$wgMetaNamespace:Дневник_на_качваниÑта" ) . "\">дневника на качваниÑта</a>.</p>
+разгледайте [[{{ns:-1}}:Imagelist|ÑпиÑъка Ñ ÐºÐ°Ñ‡ÐµÐ½Ð¸Ñ‚Ðµ картинки]].
+КачваниÑта и изтриваниÑта Ñе запиÑват в [[{{ns:4}}:Дневник_на_качваниÑта|дневника на качваниÑта]].</p>
<p>Използвайте Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€, за да качвате нови картинки,
които да използвате в Ñтатиите Ñи.
В повечето браузъри ще видите бутон \"Browse...\"
@@ -693,412 +800,411 @@ wfLocalUrlE( "$wgMetaNamespace:Дневник_на_качваниÑта" ) . "\"
ТрÑбва Ñъщо да отметнете и кутийката, Ñ ÐºÐ¾Ñто потвърждавате, че не
нарушавате никакви авторÑки права поÑредÑтвом качването на файла.
ÐатиÑнете бутона \"Качване\", за да завършите качването.
-Това може да отнеме извеÑтно време, ако връзката Ви към интернет е бавна.</p>
-<p>Предпочитаните формати Ñа JPEG за фотографии, PNG
-за риÑунки и иконки и OGG за музикални файлове.
-МолÑ, дайте опиÑателно име на файловете, за да Ñе избегне евентуално объркване.
-За да включите картинка в ÑтатиÑ, използвайте една от Ñледните препратки:
-<b>[[image:file.jpg]]</b> или <b>[[image:file.png|алтернативен текÑÑ‚]]</b>
-или <b>[[media:file.ogg]]</b> за музикални файлове.</p>
-<p>МолÑ, обърнете внимание на това, че както при Ñтраниците, оÑтаналите потребители могат
-да редактират или изтриÑÑ‚ Вашите качени неща, ако Ñметнат, че това
-помага на енциклопедиÑта, а на Ð’Ð°Ñ Ð¼Ð¾Ð¶Ðµ да Ви бъде забранено да качвате файлове,
-ако злоупотребÑвате ÑÑŠÑ ÑиÑтемата.</p>",
-"uploadlog" => "дневник на качваниÑта",
-"uploadlogpage" => "Дневник_на_качваниÑта",
-"uploadlogpagetext" => "СпиÑък Ñ Ð¿Ð¾Ñледните качваниÑ.
-Показаните времена Ñа Ñпоред чаÑовата зона на Ñървъра
-(<a href=\"http://en2.wikipedia.org/wiki/Coordinated_Universal_Time\"
- title=\"Coordinated Universal Time\">GMT</a>).
-<ul>
-</ul>
-",
-"filename" => "Име на файл",
-"filedesc" => "ОпиÑание",
-"filestatus" => "ÐвторÑко право",
-"filesource" => "Изходен код",
-"affirmation" => "Потвърждавам, че притежателÑÑ‚ на авторÑкото право за този файл
+Това може да отнеме извеÑтно време, ако връзката Ви към Интернет е бавна.</p>
+<p>Предпочитаните формати Ñа JPEG за фотографии, PNG за риÑунки и иконки и OGG за музикални файлове, като Ñамото име на файла може да Ñъдържа и кирилÑки букви, например ''ВаÑил_ЛевÑки.jpg''. Хубаво е да дадете опиÑателно име на файловете, за да Ñе избегне евентуално объркване.</p>
+<p>За да включите картинка в ÑтатиÑ, използвайте една от Ñледните препратки: <b>[[{{ns:6}}:картинка.jpg]]</b> или <b>[[{{ns:6}}:картинка.png|алтернативен текÑÑ‚]]</b> или <b>[[{{ns:-2}}:звук.ogg]]</b> за музикални файлове.</p>
+<p>МолÑ, обърнете внимание на това, че както при Ñтраниците, оÑтаналите потребители могат да редактират или изтриÑÑ‚ Вашите качени неща, ако Ñметнат, че това помага на енциклопедиÑта, а на Ð’Ð°Ñ Ð¼Ð¾Ð¶Ðµ да Ви бъде забранено да качвате файлове, ако злоупотребÑвате ÑÑŠÑ ÑиÑтемата.</p>",
+'uploadlog' => 'дневник на качваниÑта',
+'uploadlogpage' => 'Дневник_на_качваниÑта',
+'uploadlogpagetext' => 'СпиÑък Ñ Ð¿Ð¾Ñледните качваниÑ.
+Показаните времена Ñа Ñпоред чаÑовата зона на Ñървъра ([[UTC]]).',
+'filename' => 'Име на файл',
+'filedesc' => 'ОпиÑание',
+'filestatus' => 'ÐвторÑко право',
+'filesource' => 'Изходен код',
+'affirmation' => "Потвърждавам, че притежателÑÑ‚ на авторÑкото право за този файл
разрешава той да Ñе използва Ñпоред уÑловиÑта на $1.",
-"copyrightpage" => "$wgMetaNamespace:ÐвторÑки права",
-"copyrightpagename" => "авторÑките права в $wgSitename",
-"uploadedfiles" => "Качени файлове",
-"noaffirmation" => "Потвърдете, че Ñ ÐºÐ°Ñ‡Ð²Ð°Ð½ÐµÑ‚Ð¾ на файла не нарушавате
-авторÑки права.",
-"ignorewarning" => "СъхранÑване на файла въпреки предупреждениÑта.",
-"minlength" => "Имената на картинките Ñ‚Ñ€Ñбва да Ñъдържат поне три знака.",
-"badfilename" => "Картинката бе преименувана на \"$1\".",
-"badfiletype" => "ФайловиÑÑ‚ формат \".$1\" не Ñе препоръчва за картинки.",
-"largefile" => "Препоръчва Ñе картинките да не надвишават 100 килобайта.",
-"successfulupload" => "Качването бе уÑпешно",
-"fileuploaded" => "Файлът \"$1\" бе уÑпешно качен.
+'copyrightpage' => "{{ns:4}}:ÐвторÑки права",
+'copyrightpagename' => "авторÑките права в {{SITENAME}}",
+'uploadedfiles' => 'Качени файлове',
+'noaffirmation' => 'Потвърдете, че Ñ ÐºÐ°Ñ‡Ð²Ð°Ð½ÐµÑ‚Ð¾ на файла не нарушавате
+авторÑки права.',
+'ignorewarning' => 'СъхранÑване на файла въпреки предупреждениÑта.',
+'minlength' => 'Имената на картинките Ñ‚Ñ€Ñбва да Ñъдържат поне три знака.',
+'badfilename' => "Картинката бе преименувана на \"$1\".",
+'badfiletype' => "ФайловиÑÑ‚ формат \".$1\" не Ñе препоръчва за картинки.",
+'largefile' => 'Препоръчва Ñе картинките да не надвишават 100 килобайта.',
+'successfulupload' => 'Качването бе уÑпешно',
+'fileuploaded' => "Файлът \"$1\" бе уÑпешно качен.
МолÑ, поÑледвайте препратката: ($2) към Ñтраницата за опиÑание и
въведете малко Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° файла - кога и от кого е Ñъздаден
и вÑÑкаква друга информациÑ, коÑто имате за него.",
-"uploadwarning" => "Предупреждение при качване",
-"savefile" => "СъхранÑване на файл",
-"uploadedimage" => "качена \"$1\"",
-"uploaddisabled" => "СъжалÑваме, качваниÑта бÑха Ñпрени.",
+'uploadwarning' => 'Предупреждение при качване',
+'savefile' => 'СъхранÑване на файл',
+'uploadedimage' => "качена \"$1\"",
+'uploaddisabled' => 'СъжалÑваме, качваниÑта бÑха Ñпрени.',
# Image list
#
-"imagelist" => "СпиÑък на картинките",
-"imagelisttext" => "СпиÑък от $1 картинки, Ñортирани $2.",
-"getimagelist" => "донаÑÑне на ÑпиÑъка Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ¸",
-"ilshowmatch" => "Показване на вÑички картинки ÑÑŠÑ Ñъвпадащи имена",
-"ilsubmit" => "ТърÑене",
-"showlast" => "Показване на поÑледните $1 картинки, Ñортирани $2.",
-"all" => "вÑички",
-"byname" => "по име",
-"bydate" => "по дата",
-"bysize" => "по размер",
-"imgdelete" => "изтр",
-"imgdesc" => "опиÑ",
-"imglegend" => "Легенда: (опиÑ) = показване/редактиране опиÑание на картинка.",
-"imghistory" => "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° картинката",
-"revertimg" => "връщ",
-"deleteimg" => "изтр",
-"imghistlegend" => "Легенда: (тек) = текущата картинка, (изтр) = изтриване
+'imagelist' => 'СпиÑък на картинките',
+'imagelisttext' => "СпиÑък от $1 картинки, Ñортирани $2.",
+'getimagelist' => 'донаÑÑне на ÑпиÑъка Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ¸',
+'ilshowmatch' => 'Показване на вÑички картинки ÑÑŠÑ Ñъвпадащи имена',
+'ilsubmit' => 'ТърÑене',
+'showlast' => "Показване на поÑледните $1 картинки, Ñортирани $2.",
+'all' => 'вÑички',
+'byname' => 'по име',
+'bydate' => 'по дата',
+'bysize' => 'по размер',
+'imgdelete' => 'изтр',
+'imgdesc' => 'опиÑ',
+'imglegend' => 'Легенда: (опиÑ) = показване/редактиране опиÑание на картинка.',
+'imghistory' => 'ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° картинката',
+'revertimg' => 'връщ',
+'deleteimg' => 'изтр',
+'imghistlegend' => 'Легенда: (тек) = текущата картинка, (изтр) = изтриване
на Ñъответната верÑиÑ, (връщ) = възвръщане към Ñъответната верÑиÑ.
-<br><i>Щракнете върху датата, за да видите картинката, качена на тази дата</i>.",
-"imagelinks" => "Препратки към картинката",
-"linkstoimage" => "Следните Ñтраници Ñочат към картинката:",
-"nolinkstoimage" => "ÐÑма Ñтраници, Ñочещи към картинката.",
+<br /><i>Щракнете върху датата, за да видите картинката, качена на тази дата</i>.',
+'imagelinks' => 'Препратки към картинката',
+'linkstoimage' => 'Следните Ñтраници Ñочат към картинката:',
+'nolinkstoimage' => 'ÐÑма Ñтраници, Ñочещи към картинката.',
# Statistics
#
-"statistics" => "СтатиÑтика",
-"sitestats" => "СтатиÑтика",
-"userstats" => "ПотребителÑка ÑтатиÑтика",
-"sitestatstext" => "Има <b>$1</b> Ñтраници в базата данни.
-Това включва диÑкуÑионни Ñтраници, Ñтраници за УикипедиÑ, изключително къÑи
+'statistics' => 'СтатиÑтика',
+'sitestats' => 'СтатиÑтика',
+'userstats' => 'ПотребителÑка ÑтатиÑтика',
+'sitestatstext' => "Има '''$1''' Ñтраници в базата данни.
+Това включва диÑкуÑионни Ñтраници, Ñтраници за {{SITENAME}}, изключително къÑи
Ñтраници, пренаÑочващи Ñтраници и други, които вероÑтно не Ñа Ñтатии.
-Изключвайки тези, има <b>$2</b> Ñтраници, които може би Ñа дейÑтвителни Ñтатии.<p>
-Имало е <b>$4</b> редакции на Ñтраници от поÑледното подобрÑване на ÑиÑтемата на 20 юли 2002 г.
-Това прави Ñредно по <b>$5</b> редакции на Ñтраница.
+Изключвайки тези, има '''$2''' Ñтраници, които може би Ñа дейÑтвителни Ñтатии.<p>
+Имало е '''$4''' редакции на Ñтраници откакто уикито бе пуÑнато.
+Това прави Ñредно по '''$5''' редакции на Ñтраница.
За по-подробна ÑтатиÑтичеÑка Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð²Ð¸Ð¶Ñ‚Ðµ:
<ul>
-<li><a href=\"http://www.wikipedia.org/wikistats/EN/Sitemap.htm\">Уики-ÑтатиÑтика</a>,</li>
-<li><a href=\"http://www.wikipedia.org/stats\">ПотребителÑка ÑтатиÑтика</a>,</li>
-<li><a href=\"http://www.wikipedia.org/wiki/Wikipedia:Statistics\">ПрираÑÑ‚</a>.</li>
+<li><a href='http://bg.wikipedia.org/stats'>ПотребителÑка ÑтатиÑтика</a>,</li>
+<li><a href='http://www.wikipedia.org/wikistats/EN/Sitemap.htm'>Уики-ÑтатиÑтика</a>,</li>
+<li><a href='http://www.wikipedia.org/wiki/Wikipedia:Statistics'>ПрираÑÑ‚</a>.</li>
</ul>",
+'userstatstext' => "Има '''$1''' региÑтрирани потребителÑ. '''$2''' от Ñ‚ÑÑ… Ñа админиÑтратори (вижте $3).",
# Maintenance Page
#
-"maintenance" => "Страница за поддръжка",
-"maintnancepagetext" => "Тази Ñтраница Ñъдържа нÑколко удобни инÑтрумента за вÑекидневна поддръжка. ÐÑкои от тези функции доÑта натоварват базата данни, затова, молÑ, не обновÑвайте Ñтраницата Ñлед вÑÑка Ваша операциÑ, ;-)",
-"maintenancebacklink" => "Обратно към Ñтраницата за поддръжка",
-"disambiguations" => "Страници за избÑгване на двуÑмиÑлие",
-"disambiguationspage" => "$wgMetaNamespace:Препратки_към_Ñтраници_за_избÑгване_на_двуÑмиÑлие",
-"disambiguationstext" => "Следните Ñтатии Ñочат към <i>Ñтраница за избÑгване на двуÑмиÑлие</i>. ВмеÑто това те би Ñ‚Ñ€Ñбвало да Ñочат Ñъответната ÑтатиÑ.<br>Страница Ñе Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ ÐºÐ°Ñ‚Ð¾ \"избÑгване на двуÑмиÑлие\", ако към Ð½ÐµÑ Ñе Ñочи от $1.<br>Тук <i>не</i> Ñа поÑочени препратки от други именни проÑтранÑтва.",
-"doubleredirects" => "Двойни пренаÑочваниÑ",
-"doubleredirectstext" => "<b>Внимание:</b> Този ÑпиÑък може да Ñъдържа лъжливи запиÑи. Това означава, че една пренаÑочваща Ñтраница Ñъдържа допълнителен текÑÑ‚ Ñ Ð¿Ñ€ÐµÐ¿Ñ€Ð°Ñ‚ÐºÐ¸ Ñлед заповедта #REDIRECT.<br>\nÐ’Ñеки ред Ñъдържа препратки към първото и второто пренаÑочване, както и Ð¿ÑŠÑ€Ð²Ð¸Ñ Ñ€ÐµÐ´ на текÑта на второто пренаÑочване, който обикновено поÑочва \"иÑтинката\" целева ÑтатиÑ, към коÑто първото пренаÑочване би Ñ‚Ñ€Ñбвало да Ñочи.",
-"brokenredirects" => "Ðевалидни пренаÑочваниÑ",
-"brokenredirectstext" => "Следните пренаÑочващи Ñтраници Ñочат към неÑъщеÑтвуващи Ñтатии.",
-"selflinks" => "Страници Ñ Ð¿Ñ€ÐµÐ¿Ñ€Ð°Ñ‚ÐºÐ¸ към Ñебе Ñи",
-"selflinkstext" => "Следните Ñтраници правÑÑ‚ препратки към Ñебе Ñе, което не би Ñ‚Ñ€Ñбвало да е така.",
-"mispeelings" => "Страници Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñни грешки",
-"mispeelingstext" => "Следните Ñтраници Ñъдържат оÑновни правопиÑни грешки, които Ñа
-изброени в $1. Правилните форми може да Ñе поÑочат (като това).",
-"mispeelingspage" => "СпиÑък Ñ Ð¾Ñновните правопиÑни грешки",
-"missinglanguagelinks" => "ЛипÑващи езикови препратки",
-"missinglanguagelinksbutton" => "ТърÑене на липÑващи езикови препратки за",
-"missinglanguagelinkstext" => "Тези Ñтатии <i>не</i> Ñочат към техните ÐºÐ¾Ð¿Ð¸Ñ Ð² $1. ПренаÑочваниÑта и подÑтраниците <i>не Ñа</i> показани.",
+'maintenance' => 'Страница за поддръжка',
+'maintnancepagetext' => 'Тази Ñтраница Ñъдържа нÑколко удобни инÑтрумента за вÑекидневна поддръжка. ÐÑкои от тези функции доÑта натоварват базата данни, затова, молÑ, не обновÑвайте Ñтраницата Ñлед вÑÑка Ваша операциÑ, ;-)',
+'maintenancebacklink' => 'Обратно към Ñтраницата за поддръжка',
+'disambiguations' => 'ПоÑÑнителни Ñтраници',
+'disambiguationspage' => "{{ns:4}}:Препратки_към_поÑÑнителни_Ñтраници",
+'disambiguationstext' => "Следните Ñтатии Ñочат към <i>поÑÑнителна Ñтраница</i>. ВмеÑто това те би Ñ‚Ñ€Ñбвало да Ñочат към Ñъответната ÑтатиÑ.<br /> Страница Ñе Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ ÐºÐ°Ñ‚Ð¾ <i>\"поÑÑнителна\"</i>, ако към Ð½ÐµÑ Ñе Ñочи от $1.<br />Тук <i>не</i> Ñа поÑочени препратки от други именни проÑтранÑтва.",
+'doubleredirects' => 'Двойни пренаÑочваниÑ',
+'doubleredirectstext' => '<b>Внимание:</b> Този ÑпиÑък може да Ñъдържа лъжливи запиÑи. Това означава, че една пренаÑочваща Ñтраница Ñъдържа допълнителен текÑÑ‚ Ñ Ð¿Ñ€ÐµÐ¿Ñ€Ð°Ñ‚ÐºÐ¸ Ñлед заповедта #REDIRECT.<br />\nÐ’Ñеки ред Ñъдържа препратки към първото и второто пренаÑочване, както и Ð¿ÑŠÑ€Ð²Ð¸Ñ Ñ€ÐµÐ´ на текÑта на второто пренаÑочване, който обикновено поÑочва <i>"иÑтинката"</i> целева ÑтатиÑ, към коÑто първото пренаÑочване би Ñ‚Ñ€Ñбвало да Ñочи.',
+'brokenredirects' => 'Ðевалидни пренаÑочваниÑ',
+'brokenredirectstext' => 'Следните пренаÑочващи Ñтраници Ñочат към неÑъщеÑтвуващи Ñтатии.',
+'selflinks' => 'Страници Ñ Ð¿Ñ€ÐµÐ¿Ñ€Ð°Ñ‚ÐºÐ¸ към Ñебе Ñи',
+'selflinkstext' => 'Следните Ñтраници правÑÑ‚ препратки към Ñебе Ñе, което не би Ñ‚Ñ€Ñбвало да е така.',
+'mispeelings' => 'Страници Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñни грешки',
+'mispeelingstext' => "Следните Ñтраници Ñъдържат оÑновни правопиÑни грешки, които Ñа
+изброени в $1. Правилните форми може да Ñе поÑочат в Ñкоби: (ето така).",
+'mispeelingspage' => 'СпиÑък на оÑновните правопиÑни грешки',
+'missinglanguagelinks' => 'ЛипÑващи езикови препратки',
+'missinglanguagelinksbutton' => 'ТърÑене на липÑващи езикови препратки за',
+'missinglanguagelinkstext' => "Тези Ñтатии <i>не</i> Ñочат към техните ÐºÐ¾Ð¿Ð¸Ñ Ð² $1. ПренаÑочваниÑта и подÑтраниците <i>не Ñа</i> показани.",
# Miscellaneous special pages
#
-"orphans" => "Страници-Ñираци",
-"lonelypages" => "Страници-Ñираци",
-"unusedimages" => "Ðеизползвани картинки",
-"popularpages" => "ИзвеÑтни Ñтраници",
-"nviews" => "$1 прегледа",
-"wantedpages" => "Желани Ñтраници",
-"nlinks" => "$1 препратки",
-"allpages" => "Ð’Ñички Ñтраници",
-"randompage" => "Случайна Ñтраница",
-"shortpages" => "Кратки Ñтраници",
-"longpages" => "Дълги Ñтраници",
-"deadendpages" => "Задънени Ñтраници",
-"listusers" => "СпиÑък на потребителите",
-"specialpages" => "Специални Ñтраници",
-"spheading" => "За вÑички потребители",
-"sysopspheading" => "Само за админиÑтратори",
-"developerspheading" => "Само за разработчици",
-"protectpage" => "Защитена Ñтраница",
-"recentchangeslinked" => "Сродни промени",
-"rclsub" => "(на Ñтраници, Ñочени от \"$1\")",
-"debug" => "ОтÑтранÑване на грешки",
-"newpages" => "Ðови Ñтраници",
-"ancientpages" => "Стари Ñтатии",
-"intl" => "Междуезикови препратки",
-"movethispage" => "ПремеÑтване на Ñтраницата",
-"unusedimagestext" => "<p>МолÑ, обърнете внимание на това, че други Ñайтове, като например
-международните Уикипедии, могат да Ñочат към картинката чрез прÑк адреÑ
-и въпреки това Ñ‚Ñ Ð¼Ð¾Ð¶Ðµ да Ñе намира в ÑпиÑъка.",
-"booksources" => "Източници на книги",
-"booksourcetext" => "Показани Ñа препратки към други Ñайтове, които продават нови и
+'orphans' => 'Страници-Ñираци',
+'lonelypages' => 'Страници-Ñираци',
+'unusedimages' => 'Ðеизползвани картинки',
+'popularpages' => 'ИзвеÑтни Ñтраници',
+'nviews' => "$1 прегледа",
+'wantedpages' => 'Желани Ñтраници',
+'nlinks' => "$1 препратки",
+'allpages' => 'Ð’Ñички Ñтраници',
+'randompage' => 'Случайна Ñтраница',
+'shortpages' => 'Кратки Ñтраници',
+'longpages' => 'Дълги Ñтраници',
+'deadendpages' => 'Задънени Ñтраници',
+'listusers' => 'СпиÑък на потребителите',
+'specialpages' => 'Специални Ñтраници',
+'spheading' => 'За вÑички потребители',
+'sysopspheading' => 'Само за админиÑтратори',
+'developerspheading' => 'Само за разработчици',
+'protectpage' => 'Защитена Ñтраница',
+'recentchangeslinked' => 'Сродни промени',
+'rclsub' => "(на Ñтраници, Ñочени от \"$1\")",
+'debug' => 'ОтÑтранÑване на грешки',
+'newpages' => 'Ðови Ñтраници',
+'ancientpages' => 'Стари Ñтатии',
+'intl' => 'Междуезикови препратки',
+'move' => 'ПремеÑтване',
+'movethispage' => 'ПремеÑтване на Ñтраницата',
+'unusedimagestext' => '<p>МолÑ, обърнете внимание на това, че други Ñайтове могат да Ñочат към картинката чрез прÑк Ð°Ð´Ñ€ÐµÑ Ð¸ въпреки това Ñ‚Ñ Ð¼Ð¾Ð¶Ðµ да Ñе намира в ÑпиÑъка.',
+'booksources' => 'Източници на книги',
+'booksourcetext' => 'Показани Ñа препратки към други Ñайтове, които продават нови и
използвани книги и могат да имат допълнителна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° книгите, които Ñ‚ÑŠÑ€Ñите.
-$wgSitename не е Ñвързана Ñ Ð½Ð¸ÐºÐ¾Ñ Ð¾Ñ‚ тези фирми и този ÑпиÑък не Ñ‚Ñ€Ñбва да
-Ñе разглежда като подкрепа към Ñ‚ÑÑ….",
-"alphaindexline" => "от $1 до $2",
-"version" => "ВерÑиÑ",
+{{SITENAME}} не е Ñвързана Ñ Ð½Ð¸ÐºÐ¾Ñ Ð¾Ñ‚ тези фирми и този ÑпиÑък не Ñ‚Ñ€Ñбва да
+Ñе разглежда като подкрепа към Ñ‚ÑÑ….',
+'isbn' => 'ISBN',
+'rfcurl' => "http://www.faqs.org/rfcs/rfc$1.html",
+'alphaindexline' => "от $1 до $2",
+'version' => 'ВерÑиÑ',
# Email this user
#
-"mailnologin" => "ÐÑма е-поща",
-"mailnologintext" => "ТрÑбва да <a href=\"" .
- wfLocalUrl( "Специални:Userlogin" ) . "\">Ñте влезете</a>
-и да Ñте поÑочили валидна е-поща в <a href=\"" .
- wfLocalUrl( "Специални:Preferences" ) . "\">наÑтройките</a> Ñи,
-за да пращате пиÑма на други потребители.",
-"emailuser" => "Пращане пиÑмо на потребителÑ",
-"emailpage" => "Пращане пиÑмо на потребител",
-"emailpagetext" => "Ðко потребителÑÑ‚ е поÑочил валидна електронна поща в
+'mailnologin' => 'ÐÑма електронна поща',
+'mailnologintext' => "Ðеобходмимо е да [[{{ns:-1}}:Userlogin|влезете]] и да поÑочите валидна електронна поща в [[{{ns:-1}}:Preferences|наÑтройките]] Ñи, за да може да пращате пиÑма на други потребители.",
+'emailuser' => 'Пращане пиÑмо на потребителÑ',
+'emailpage' => 'Пращане пиÑмо на потребител',
+'emailpagetext' => 'Ðко потребителÑÑ‚ е поÑочил валидна електронна поща в
наÑтройките Ñи, чрез Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€ може да му Ñе изпрати Ñъобщение.
-ÐдреÑÑŠÑ‚, запиÑан в наÑтройките Ви, ще Ñе поÑви в полето \"От\" на
-изпратеното пиÑмо, така че получателÑÑ‚ ще е в ÑÑŠÑтоÑние да Ви отговори.",
-"defemailsubject" => "ПиÑмо от $wgSitename",
-"noemailtitle" => "ÐÑма електронна поща",
-"noemailtext" => "ПотребителÑÑ‚ не поÑочил валидна електронна поща или е избрал да не получава
-пиÑма от други потребители.",
-"emailfrom" => "От",
-"emailto" => "До",
-"emailsubject" => "ОтноÑно",
-"emailmessage" => "Съобщение",
-"emailsend" => "Изпращане",
-"emailsent" => "ПиÑмото е изпратено",
-"emailsenttext" => "ПиÑмото Ви бе изпратено.",
+ÐдреÑÑŠÑ‚, запиÑан в наÑтройките Ви, ще Ñе поÑви в полето "От" на
+изпратеното пиÑмо, така че получателÑÑ‚ ще е в ÑÑŠÑтоÑние да Ви отговори.',
+'usermailererror' => 'ПощенÑкиÑÑ‚ обект даде грешка: ', # Mail object returned error:
+'defemailsubject' => "ПиÑмо от {{SITENAME}}",
+'noemailtitle' => 'ÐÑма електронна поща',
+'noemailtext' => 'ПотребителÑÑ‚ не поÑочил валидна електронна поща или е избрал да не получава
+пиÑма от други потребители.',
+'emailfrom' => 'От',
+'emailto' => 'До',
+'emailsubject' => 'ОтноÑно',
+'emailmessage' => 'Съобщение',
+'emailsend' => 'Изпращане',
+'emailsent' => 'ПиÑмото е изпратено',
+'emailsenttext' => 'ПиÑмото Ви бе изпратено.',
# Watchlist
#
-"watchlist" => "МоÑÑ‚ ÑпиÑък за наблюдение",
-"watchlistsub" => "(за потребител \"$1\")",
-"nowatchlist" => "СпиÑъкът Ви за наблюдение е празен.",
-"watchnologin" => "Ðе Ñте влезли",
-"watchnologintext" => "ТрÑбва да <a href=\"" .
- wfLocalUrl( "Специални:Userlogin" ) . "\">влезете</a>,
-за да можете да променÑте ÑпиÑъка Ñи за наблюдение.",
-"addedwatch" => "Добавено в ÑпиÑъка за наблюдение",
-"addedwatchtext" => "Страницата \"$1\" бе добавена в <a href=\"" .
- wfLocalUrl( "Специални:Watchlist" ) . "\">ÑпиÑъка Ви за наблюдение</a>.
-Ðейните бъдещи промени, както и на Ñъответната й диÑкуÑионна Ñтраница, ще Ñе опиÑват там, а Ñ‚Ñ Ñ‰Ðµ Ñе поÑвÑва Ñ <b>удебелен шрифт</b> в
-<a href=\"" .
- wfLocalUrl( "Специални:Recentchanges" ) . "\">ÑпиÑъка Ñ Ð¿Ð¾Ñледните промени</a>,
-което ще направи по-леÑно избирането й.</p>
-
-<p>Ðко по-къÑно иÑкате да премахнете Ñтраницата от ÑпиÑъка Ви за наблюдение,
+'watchlist' => 'МоÑÑ‚ ÑпиÑък за наблюдение',
+'watchlistsub' => "(за потребител \"$1\")",
+'nowatchlist' => 'СпиÑъкът Ви за наблюдение е празен.',
+'watchnologin' => 'Ðе Ñте влезли',
+'watchnologintext' => "Ðеобходимо е да [[{{ns:-1}}:Userlogin|влезете]], за да може да променÑте ÑпиÑъка Ñи за наблюдение.",
+'addedwatch' => 'Добавено в ÑпиÑъка за наблюдение',
+'addedwatchtext' => "Страницата \"$1\" бе добавена към [[{{ns:-1}}:Watchlist|ÑпиÑъка Ви за наблюдение]].
+Ðейните бъдещи промени, както и на Ñъответната й диÑкуÑионна Ñтраница, ще Ñе опиÑват там, а Ñ‚Ñ Ñ‰Ðµ Ñе поÑвÑва Ñ '''удебелен шрифт''' в
+[[{{ns:-1}}:Recentchanges|ÑпиÑъка Ñ Ð¿Ð¾Ñледните промени]],
+което ще направи по-леÑно избирането й.
+
+<p>Ðко по-къÑно иÑкате да премахнете Ñтраницата от ÑпиÑъка Ñи за наблюдение,
щракнете на \"Спиране на наблюдение\" в Ñтраничната лента.",
-"removedwatch" => "Премахнато от ÑпиÑъка за наблюдение",
-"removedwatchtext" => "Страницата \"$1\" бе премахната от ÑпиÑъка Ви за наблюдение.",
-"watchthispage" => "Ðаблюдаване на Ñтраницата",
-"unwatchthispage" => "Спиране на наблюдение",
-"notanarticle" => "Ðе е ÑтатиÑ",
-"watchnochange" => "ÐÐ¸ÐºÐ¾Ñ Ð¾Ñ‚ наблюдаваните Ñтраници не е била редактирана в показаното време.",
-"watchdetails" => "($1 наблюдавани Ñтраници (без диÑкуÑионни);
+'removedwatch' => 'Премахнато от ÑпиÑъка за наблюдение',
+'removedwatchtext' => "Страницата \"$1\" бе премахната от ÑпиÑъка Ви за наблюдение.",
+'watch' => 'Ðаблюдаване',
+'watchthispage' => 'Ðаблюдаване на Ñтраницата',
+'unwatch' => 'Спиране на наблюдение',
+'unwatchthispage' => 'Спиране на наблюдение',
+'notanarticle' => 'Ðе е ÑтатиÑ',
+'watchnochange' => 'ÐÐ¸ÐºÐ¾Ñ Ð¾Ñ‚ наблюдаваните Ñтраници не е била редактирана в показаното време.',
+'watchdetails' => "($1 наблюдавани Ñтраници (без диÑкуÑионни);
$2 редактирани Ñтраници в избраното време;
$3...
<a href='$4'>показване и редактиране на Ð¿ÑŠÐ»Ð½Ð¸Ñ ÑпиÑък</a>.)",
-"watchmethod-recent" => "проверка на поÑледните промени за наблюдавани Ñтраници",
-"watchmethod-list" => "проверка на наблюдаваните Ñтраници за Ñкорошни редакции",
-"removechecked" => "Премахване на избраните от ÑпиÑъка за наблюдение",
-"watchlistcontains" => "ВашиÑÑ‚ ÑпиÑък за наблюдение Ñъдържа $1 Ñтраници.",
-"watcheditlist" => "Показани Ñа наблюдаваните Ñтраници в
+'watchmethod-recent' => 'проверка на поÑледните промени за наблюдавани Ñтраници',
+'watchmethod-list' => 'проверка на наблюдаваните Ñтраници за Ñкорошни редакции',
+'removechecked' => 'Премахване на избраните от ÑпиÑъка за наблюдение',
+'watchlistcontains' => "ВашиÑÑ‚ ÑпиÑък за наблюдение Ñъдържа $1 Ñтраници.",
+'watcheditlist' => 'Показани Ñа наблюдаваните Ñтраници в
азбучен ред. Отметнете кутийките на Ñтраниците, които иÑкате да премахнете
-от ÑпиÑъка Ви за наблюдение и натиÑнете бутона 'Премахване на избраните'.",
-"removingchecked" => "Премахване на избраните от ÑпиÑъка за наблюдение...",
-"couldntremove" => "ÐеуÑпех при премахването на '$1'...",
-"iteminvalidname" => "Проблем Ñ '$1', грешно име...",
-"wlnote" => "Показани Ñа поÑледните $1 промени през поÑледните <b>$2</b> чаÑа.",
-"wlshowlast" => "Показване на поÑледните $1 чаÑа $2 дни $3",
-"wlsaved" => "Това е Ñъхранена верÑÐ¸Ñ Ð½Ð° Ð²Ð°ÑˆÐ¸Ñ ÑпиÑък за наблюдение.",
+от ÑпиÑъка Ви за наблюдение и натиÑнете бутона "Премахване на избраните".',
+'removingchecked' => 'Премахване на избраните от ÑпиÑъка за наблюдение...',
+'couldntremove' => "ÐеуÑпех при премахването на '$1'...",
+'iteminvalidname' => "Проблем Ñ '$1', грешно име...",
+'wlnote' => "Показани Ñа поÑледните $1 промени през поÑледните <b>$2</b> чаÑа.",
+'wlshowlast' => "Показване на поÑледните $1 чаÑа $2 дни $3",
+'wlsaved' => 'Това е Ñъхранена верÑÐ¸Ñ Ð½Ð° Ð²Ð°ÑˆÐ¸Ñ ÑпиÑък за наблюдение.',
# Delete/protect/revert
#
-"deletepage" => "Изтриване на Ñтраница",
-"confirm" => "Потвърждение",
-"excontent" => "Ñъдържанието бе:",
-"exbeforeblank" => "Ñъдържанието преди изпразването бе:",
-"exblank" => "Ñтраницата бе празна",
-"confirmdelete" => "Потвърждение за изтриване",
-"deletesub" => "(Изтриване на \"$1\")",
-"historywarning" => "Внимание: Страницата, коÑто ще изтриете, има иÑториÑ: ",
-"confirmdeletetext" => "Ðа път Ñте безвъзвратно да изтриете Ñтраница или картинка заедно Ñ
+'deletepage' => 'Изтриване на Ñтраница',
+'confirm' => 'Потвърждение',
+'excontent' => 'Ñъдържанието бе:',
+'exbeforeblank' => 'Ñъдържанието преди изпразването бе:',
+'exblank' => 'Ñтраницата бе празна',
+'confirmdelete' => 'Потвърждение за изтриване',
+'deletesub' => "(Изтриване на \"$1\")",
+'historywarning' => 'Внимание: Страницата, коÑто ще изтриете, има иÑториÑ: ',
+'confirmdeletetext' => "Ðа път Ñте безвъзвратно да изтриете Ñтраница или картинка заедно Ñ
цÑлата й иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¾Ñ‚ базата данни.
-МолÑ, потвърдете, че иÑкате това, че разбирате поÑледÑтвиÑта и че правите това
-в ÑъответÑтвие Ñ [[$wgMetaNamespace:Политика|нашата политика]].",
-"confirmcheck" => "Да, наиÑтина иÑкам да Ñ Ð¸Ð·Ñ‚Ñ€Ð¸Ñ.",
-"actioncomplete" => "ДейÑтвието бе изпълнено",
-"deletedtext" => "\"$1\" беше изтрита.
+МолÑ, потвърдете, че иÑкате това, разбирате поÑледÑтвиÑта и правите това
+в ÑъответÑтвие Ñ Ð½Ð°ÑˆÐ°Ñ‚Ð° [[{{ns:4}}:Ð›Ð¸Ð½Ð¸Ñ Ð½Ð° поведение|Ð»Ð¸Ð½Ð¸Ñ Ð½Ð° поведение]].",
+'confirmcheck' => 'Да, наиÑтина иÑкам да Ñ Ð¸Ð·Ñ‚Ñ€Ð¸Ñ.',
+'actioncomplete' => 'ДейÑтвието бе изпълнено',
+'deletedtext' => "Страницата \"$1\" беше изтрита.
Вижте $2 за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° поÑледните изтриваниÑ.",
"deletedarticle" => "изтрита \"$1\"",
"dellogpage" => "Дневник_на_изтриваниÑта",
-"dellogpagetext" => "СпиÑък на най-Ñкорошните изтриваниÑ.
-Показаните времена Ñа Ñпоред чаÑовата зона на Ñървъра
-(<a href=\"http://en2.wikipedia.org/wiki/Coordinated_Universal_Time\"
- title=\"Coordinated Universal Time\">GMT</a>).
-<ul>
-</ul>
-",
-"deletionlog" => "дневник на изтриваниÑта",
-"reverted" => "Възвръщане към предишна верÑиÑ",
-"deletecomment" => "Причина за изтриването",
-"imagereverted" => "Възвръщането към предишна верÑÐ¸Ñ Ð±Ðµ уÑпешно.",
-"rollback" => "Връщане назад на промените", #Roll back edits
-"rollbacklink" => "връщане", #rollback
-"rollbackfailed" => "Връщането не Ñполучи", #Rollback failed
-"cantrollback" => "ПромÑната не може да Ñе извърши; поÑледниÑÑ‚ автор е единÑтвениÑÑ‚ ÑобÑтвеник на ÑтатиÑта.",
-"alreadyrolled" => "ПоÑледната Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° [[$1]], направена от [[Потребител:$2|$2]] ([[Потребител беÑеда:$2|БеÑеда]]) не може да Ñе върне назад; нÑкой друг вече е редактирал ÑтатиÑта или е върнал назад промените.
+"dellogpagetext" => 'СпиÑък на най-Ñкорошните изтриваниÑ.
+Показаните времена Ñа Ñпоред чаÑовата зона на Ñървъра ([[UTC]]).',
+'deletionlog' => 'дневника на изтриваниÑта',
+'reverted' => 'Възвръщане към предишна верÑиÑ',
+'deletecomment' => 'Причина за изтриването',
+'imagereverted' => 'Възвръщането към предишна верÑÐ¸Ñ Ð±Ðµ уÑпешно.',
+'rollback' => 'Връщане назад на промените', #Roll back edits
+'rollback_short' => 'Връщане',
+'rollbacklink' => 'връщане', #rollback
+'rollbackfailed' => 'Връщането не Ñполучи', #Rollback failed
+'cantrollback' => 'ПромÑната не може да Ñе извърши; поÑледниÑÑ‚ автор е единÑтвениÑÑ‚ ÑобÑтвеник на ÑтатиÑта.',
+'alreadyrolled' => "ПоÑледната Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° [[$1]], направена от [[Потребител:$2|$2]] ([[Потребител беÑеда:$2|БеÑеда]]) не може да Ñе върне назад; нÑкой друг вече е редактирал ÑтатиÑта или е върнал назад промените.
ПоÑледната Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ðµ на [[Потребител:$3|$3]] ([[Потребител беÑеда:$3|БеÑеда]]). ",
# only shown if there is an edit comment
-"editcomment" => "Коментарът на редакциÑта е бил: \"<i>$1</i>\".",
-"revertpage" => "Възвръщане към поÑледната Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° $1",
-"protectlogpage" => "Дневник_на_защитата",
-"protectlogtext" => "СпиÑък на защитите и техните ÑвалÑÐ½Ð¸Ñ Ð·Ð° Ñтраницата.
-За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð²Ð¸Ð¶Ñ‚Ðµ [[$wgMetaNamespace:Защитена Ñтраница]].",
-"protectedarticle" => "защитена [[$1]]",
-"unprotectedarticle" => "незащитена [[$1]]",
+'editcomment' => "Коментарът на редакциÑта е бил: \"<i>$1</i>\".",
+'revertpage' => "Възвръщане към поÑледната Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° $1",
+'protectlogpage' => 'Дневник_на_защитата',
+'protectlogtext' => "СпиÑък на защитите и техните ÑвалÑÐ½Ð¸Ñ Ð·Ð° Ñтраницата.
+За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð²Ð¸Ð¶Ñ‚Ðµ [[{{ns:4}}:Защитена Ñтраница]].",
+'protectedarticle' => "защитена [[$1]]",
+'unprotectedarticle' => "незащитена [[$1]]",
+'protectsub' => "(Защитаване на \"$1\")",
+'confirmprotecttext' => 'ÐаиÑтина ли иÑкате да защитите Ñтраницата?',
+'confirmprotect' => 'Потвърдете защитата',
+'protectcomment' => 'Причина за защитата',
+'unprotectsub' => "(СвалÑне на защита на \"$1\")",
+'confirmunprotecttext' => 'ÐаиÑтина ли иÑкате да Ñвалите защитата на Ñтраницата?',
+'confirmunprotect' => 'Потвърдете ÑвалÑнето на защитата',
+'unprotectcomment' => 'Причина за ÑвалÑне на защитата',
+'protectreason' => '(поÑочете причина)',
# Undelete
-"undelete" => "ВъзÑтановÑване на изтрита Ñтраница",
-"undeletepage" => "Преглед и възÑтановÑване на изтрити Ñтраници",
-"undeletepagetext" => "Следните Ñтраници бÑха изтрити, но Ñе намират вÑе още
-в архива и могат да бъдат възÑтановени. Ðрхивът може да Ñе почиÑтва от време на време.",
-"undeletearticle" => "ВъзÑтановÑване на изтрита ÑтатиÑ",
-"undeleterevisions" => "$1 верÑии архивирани",
-"undeletehistory" => "Ðко възÑтановите Ñтраницата, вÑички верÑии ще бъдат
+'undelete' => 'ВъзÑтановÑване на изтрита Ñтраница',
+'undeletepage' => 'Преглед и възÑтановÑване на изтрити Ñтраници',
+'undeletepagetext' => 'Следните Ñтраници бÑха изтрити, но Ñе намират вÑе още
+в архива и могат да бъдат възÑтановени. Ðрхивът може да Ñе почиÑтва от време на време.',
+'undeletearticle' => 'ВъзÑтановÑване на изтрита ÑтатиÑ',
+'undeleterevisions' => "$1 верÑии архивирани",
+'undeletehistory' => 'Ðко възÑтановите Ñтраницата, вÑички верÑии ще бъдат
върнати в иÑториÑта.
-Ðко Ñлед изтриването е Ñъздадена Ñтраница ÑÑŠÑ Ñъщото име, въÑзÑтановените
+Ðко Ñлед изтриването е Ñъздадена Ñтраница ÑÑŠÑ Ñъщото име, възÑтановените
верÑии ще Ñе поÑвÑÑ‚ като по-ранна иÑториÑ, а текущата верÑÐ¸Ñ Ð½Ð° Ñтраницата
-нÑма да бъде автоматично заменена.",
-"undeleterevision" => "Изтрита верÑÐ¸Ñ Ð½Ð° $1",
-"undeletebtn" => "ВъзÑтановÑване!",
-"undeletedarticle" => "възÑтановена \"$1\"",
-"undeletedtext" => "СтатиÑта [[$1]] бе уÑпешно възÑтановена.
-Вижте [[$wgMetaNamespace:Дневник_на_изтриваниÑта|дневника на изтриваниÑта]] за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° поÑледните Ð¸Ð·Ñ‚Ñ€Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸ възÑтановÑваниÑ.",
+нÑма да бъде автоматично заменена.',
+'undeleterevision' => "Изтрита верÑÐ¸Ñ Ð½Ð° $1",
+'undeletebtn' => 'ВъзÑтановÑване!',
+'undeletedarticle' => "възÑтановена \"$1\"",
+'undeletedtext' => "СтатиÑта [[$1]] бе уÑпешно възÑтановена.
+Вижте [[{{ns:4}}:Дневник_на_изтриваниÑта|дневника на изтриваниÑта]] за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° поÑледните Ð¸Ð·Ñ‚Ñ€Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸ възÑтановÑваниÑ.",
# Contributions
#
-"contributions" => "ПриноÑи",
-"mycontris" => "Моите приноÑи",
-"contribsub" => "За $1",
-"nocontribs" => "Ðе Ñа намерени промени, отговарÑщи на критериÑ.",
-"ucnote" => "Показани Ñа поÑледните <b>$1</b> промени, извършени от този потребител през поÑледните <b>$2</b> дни.",
-"uclinks" => "Показване на поÑледните $1 промени; показване на поÑледните $2 дни.",
-"uctop" => " (поÑледна)" ,
+'contributions' => 'ПриноÑи',
+'mycontris' => 'Моите приноÑи',
+'contribsub' => "За $1",
+'nocontribs' => 'Ðе Ñа намерени промени, отговарÑщи на критериÑ.',
+'ucnote' => "Показани Ñа поÑледните <b>$1</b> промени, извършени от този потребител през поÑледните <b>$2</b> дни.",
+'uclinks' => "Показване на поÑледните $1 промени; показване на поÑледните $2 дни.",
+'uctop' => ' (поÑледна)' ,
# What links here
#
-"whatlinkshere" => "Какво Ñочи наÑам",
-"notargettitle" => "ÐÑма цел",
-"notargettext" => "Ðе указахте целева Ñтраница или потребител,
-върху коÑто/който да Ñе изпълни дейÑтвието.",
-"linklistsub" => "(СпиÑък Ñ Ð¿Ñ€ÐµÐ¿Ñ€Ð°Ñ‚ÐºÐ¸)",
-"linkshere" => "Следните Ñтраници Ñочат наÑам:",
-"nolinkshere" => "ÐÑма Ñтраници, Ñочещи наÑам.",
-"isredirect" => "пренаÑочваща Ñтраница",
+'whatlinkshere' => 'Какво Ñочи наÑам',
+'notargettitle' => 'ÐÑма цел',
+'notargettext' => 'Ðе указахте целева Ñтраница или потребител,
+върху коÑто/който да Ñе изпълни дейÑтвието.',
+'linklistsub' => '(СпиÑък Ñ Ð¿Ñ€ÐµÐ¿Ñ€Ð°Ñ‚ÐºÐ¸)',
+'linkshere' => 'Следните Ñтраници Ñочат наÑам:',
+'nolinkshere' => 'ÐÑма Ñтраници, Ñочещи наÑам.',
+'isredirect' => 'пренаÑочваща Ñтраница',
# Block/unblock IP
#
-"blockip" => "Блокиране на потребител",
-"blockiptext" => "Използвайте Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€, за да забраните правото на пиÑане
-на определен ИП-Ð°Ð´Ñ€ÐµÑ Ð¸Ð»Ð¸ потребител.
+'blockip' => 'Блокиране на потребител',
+'blockiptext' => "Използвайте Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€, за да забраните правото на пиÑане
+на определен IP-Ð°Ð´Ñ€ÐµÑ Ð¸Ð»Ð¸ потребител.
Това Ñ‚Ñ€Ñбва да Ñе направи Ñамо, за да Ñе предотвратÑÑ‚ проÑви на вандализъм,
-и в ÑъответÑтвие Ñ [[$wgMetaNamespace:ЛиниÑ_на_поведение|политиката на $wgSitename]].
+и в ÑъответÑтвие Ñ [[{{ns:4}}:ЛиниÑ_на_поведение|линиÑта на поведение]] на {{SITENAME}}.
ПоÑочете Ñъщо и причина за блокирането (например, Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° Ñтраници,
-Ñтанали обект на вандализъм).",
-"ipaddress" => "ИП-адреÑ/потребител",
-"ipbexpiry" => "Изтичане на Ñрока",
-"ipbreason" => "Причина",
-"ipbsubmit" => "Блокиране на потребителÑ",
-"badipaddress" => "Ðевалиден ИП-адреÑ",
-"noblockreason" => "ТрÑбва да поÑочите причина за блокирането.",
-"blockipsuccesssub" => "Блокирането уÑпешно",
-"blockipsuccesstext" => "\"$1\" беше блокиран.
-<br>Вижте [[Специални:Ipblocklist|ÑпиÑъка на блокираните ИП-адреÑи]], за да прегледате блокираните.",
-"unblockip" => "Отблокиране на потребител",
-"unblockiptext" => "Използвайте Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€, за да възÑтановите
-правото на пиÑане на по-рано блокиран ИП-Ð°Ð´Ñ€ÐµÑ Ð¸Ð»Ð¸ потребител.",
-"ipusubmit" => "Отблокиране на адреÑа",
-"ipusuccess" => "\"$1\" оÑвободен",
-"ipblocklist" => "СпиÑък на блокирани ИП-адреÑи и потребители",
-"blocklistline" => "$1, $2 е блокирал $3 (изтича на $4)",
-"blocklink" => "блокиране",
-"unblocklink" => "отблокиране",
-"contribslink" => "приноÑи",
-"autoblocker" => "Ðвтоматично блокиране поради взаимно ползване на ИП-Ð°Ð´Ñ€ÐµÑ Ñ \"$1\". Причина \"$2\".",
-"blocklogpage" => "Дневник_на_блокираниÑта",
-"blocklogentry" => 'блокиран "$1" ÑÑŠÑ Ñрок на изтичане $2',
-"blocklogtext" => "Това е дневник на блокираниÑта и отблокираниÑта, извършени от този потребител. Ðвтоматично блокираните ИП-адреÑи не Ñа показани. Вижте [[Специални:Ipblocklist|ÑпиÑъка на блокираните ИП-адреÑи]] за текущото ÑÑŠÑтоÑние
+Ñтанали обект на вандализъм).
+
+Времето за изтичане на блокирането Ñе въвежда Ñпоред уÑÑ‚Ð°Ð½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð“ÐУ-формат, опиÑан в [http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html ръководÑтвото], например: '1 hour', '2 days', 'next Wednesday', '1 January 2017'. Ðеограничено блокиране може да Ñе зададе чрез 'indefinite' или 'infinite'.",
+'ipaddress' => 'IP-адреÑ/потребител',
+'ipbexpiry' => 'Изтичане на Ñрока',
+'ipbreason' => 'Причина',
+'ipbsubmit' => 'Блокиране на потребителÑ',
+'badipaddress' => 'Ðевалиден IP-Ð°Ð´Ñ€ÐµÑ Ð¸Ð»Ð¸ грешно име на потребител',
+'noblockreason' => 'Ðеобходимо е да поÑочите причина за блокирането.',
+'blockipsuccesssub' => 'Блокирането бе уÑпешно',
+'blockipsuccesstext' => "\"$1\" беше блокиран.
+<br />Вижте [[{{ns:-1}}:Ipblocklist|ÑпиÑъка на блокираните IP-адреÑи]], за да прегледате блокираните.",
+'unblockip' => 'Отблокиране на потребител',
+'unblockiptext' => 'Използвайте Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€, за да възÑтановите
+правото на пиÑане на по-рано блокиран IP-Ð°Ð´Ñ€ÐµÑ Ð¸Ð»Ð¸ потребител.',
+'ipusubmit' => 'Отблокиране на адреÑа',
+'ipusuccess' => "\"$1\" бе отблокиран",
+'ipblocklist' => 'СпиÑък на блокирани IP-адреÑи и потребители',
+'blocklistline' => "$1, $2 е блокирал $3 (изтича на $4)",
+'blocklink' => 'блокиране',
+'unblocklink' => 'отблокиране',
+'contribslink' => 'приноÑи',
+'autoblocker' => "Ðвтоматично блокиране поради взаимно ползване на IP-Ð°Ð´Ñ€ÐµÑ Ñ \"$1\". Причина \"$2\".",
+'blocklogpage' => 'Дневник_на_блокираниÑта',
+'blocklogentry' => 'блокиране на "$1" ÑÑŠÑ Ñрок на изтичане $2',
+'blocklogtext' => "Това е дневник на блокираниÑта и отблокираниÑта, извършени от този потребител. Ðвтоматично блокираните IP-адреÑи не Ñа показани. Вижте [[{{ns:-1}}:Ipblocklist|ÑпиÑъка на блокираните IP-адреÑи]] за текущото ÑÑŠÑтоÑние
на блокираниÑта.",
-"unblocklogentry" => 'отблокиран "$1"',
-"range_block_disabled" => "The sysop ability to create range blocks is disabled.",
-"ipb_expiry_invalid" => "Ðевалиден Ñрок на изтичане.",
-"ip_range_invalid" => "Ðевалидни граници на ИП-адреÑ.\n",
+'unblocklogentry' => 'отблокиране на "$1"',
+'range_block_disabled' => 'ВъзможноÑтта на админиÑтраторите да задават интервали (<i>range blocks</i>) е изключена.',
+'ipb_expiry_invalid' => 'Ðевалиден Ñрок на изтичане.',
+'ip_range_invalid' => "Ðевалидни граници за IP-адреÑи.\n",
+'proxyblocker' => 'Блокировач на прокÑита',
+'proxyblockreason' => 'ВашиÑÑ‚ IP-Ð°Ð´Ñ€ÐµÑ Ð±ÐµÑˆÐµ блокиран, тъй като е отворено прокÑи. МолÑ, Ñвържете Ñе Ñ Ð’Ð°ÑˆÐ¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚-доÑтавчик и го информирайте за този Ñериозен проблем в ÑигурноÑтта.',
+'proxyblocksuccess' => "Готово.\n",
# Developer tools
#
-"lockdb" => "Заключване на базата данни",
-"unlockdb" => "Отключване на базата данни",
-"lockdbtext" => "Заключването на базата данни ще попречи на вÑички
+'lockdb' => 'Заключване на базата данни',
+'unlockdb' => 'Отключване на базата данни',
+'lockdbtext' => 'Заключването на базата данни ще попречи на вÑички
потребители да редактират Ñтраници, да ÑменÑÑ‚ Ñвоите наÑтройки, да редактират
Ñвоите ÑпиÑъци за наблюдение и на вÑички други техни дейÑтвиÑ, изиÑкващи
промени в базата данни.
МолÑ, потвърдете, че иÑкате точно това и ще отключите базата данни,
-когато привършите Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚Ð° по подръжката.",
-"unlockdbtext" => "Отключването на базата данни ще възÑтанови ÑпоÑобноÑтта на
+когато привършите Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚Ð° по подръжката.',
+'unlockdbtext' => 'Отключването на базата данни ще възÑтанови ÑпоÑобноÑтта на
потребителите да редактират Ñтраници, да ÑменÑÑ‚ Ñвоите наÑтройки, да редактират
Ñвоите ÑпиÑъци за наблюдение и изпълнението на вÑички други дейÑтвиÑ, изиÑкващи
промени в базата данни.
-МолÑ, потвърдете, че иÑкате точно това.",
-"lockconfirm" => "Да, наиÑтина иÑкам да заключа базата данни.",
-"unlockconfirm" => "Да, наиÑтина иÑкам да отключа базата данни.",
-"lockbtn" => "Заключване на базата данни",
-"unlockbtn" => "Отключване на базата данни",
-"locknoconfirm" => "Ðе Ñте отметнали кутийката за потвърждение.",
-"lockdbsuccesssub" => "Заключване на базата данни уÑпешно",
-"unlockdbsuccesssub" => "Отключване на базата данни уÑпешно",
-"lockdbsuccesstext" => "Базата данни на $wgSitename бе заключена.
-<br>Ðе забравÑйте да отключите базата данни, когато привършите Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚Ð° по поддръжката.",
-"unlockdbsuccesstext" => "Базата данни на $wgSitename бе отключена.",
+МолÑ, потвърдете, че иÑкате точно това.',
+'lockconfirm' => 'Да, наиÑтина иÑкам да заключа базата данни.',
+'unlockconfirm' => 'Да, наиÑтина иÑкам да отключа базата данни.',
+'lockbtn' => 'Заключване на базата данни',
+'unlockbtn' => 'Отключване на базата данни',
+'locknoconfirm' => 'Ðе Ñте отметнали кутийката за потвърждение.',
+'lockdbsuccesssub' => 'Заключване на базата данни уÑпешно',
+'unlockdbsuccesssub' => 'Отключване на базата данни уÑпешно',
+'lockdbsuccesstext' => "Базата данни на {{SITENAME}} бе заключена.
+<br />Ðе забравÑйте да отключите базата данни, когато привършите Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚Ð° по поддръжката.",
+'unlockdbsuccesstext' => "Базата данни на {{SITENAME}} бе отключена.",
# SQL query
#
-"asksql" => "SQL-заÑвка",
-"asksqltext" => "Използвайте Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€, за да отправите прÑка заÑвка
-към базата данни на $wgSitename.
+'asksql' => 'ЗаÑвка на SQL',
+'asksqltext' => "Използвайте Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€, за да отправите прÑка заÑвка
+към базата данни на {{SITENAME}}.
Използвайте апоÑтрофи ('като тези'), за ограничители на низовете.
ЧеÑтите заÑвки доÑта натоварват Ñървъра, затова, молÑ,
използвайте пеÑтеливо тази функциÑ.",
-"sqlislogged" => "МолÑ, забележете, че вÑички заÑвки Ñе запиÑват.",
-"sqlquery" => "ЗаÑвка",
-"querybtn" => "Изпращане на заÑвка",
-"selectonly" => "Позволени Ñа единÑтвено заÑвки за четене.",
-"querysuccessful" => "ЗаÑвката бе уÑпешна",
+'sqlislogged' => 'МолÑ, обърнете внимание, че вÑички заÑвки Ñе запиÑват.',
+'sqlquery' => 'ЗаÑвка',
+'querybtn' => 'Изпращане на заÑвка',
+'selectonly' => 'Позволени Ñа единÑтвено заÑвки за четене.',
+'querysuccessful' => 'ЗаÑвката бе уÑпешна',
# Make sysop
-"makesysoptitle" => "Превръщане на потребител в админиÑтратор",
-"makesysoptext" => "Този формулÑÑ€ Ñе използва от бюрократи за превръщане на обикновени потребители в админиÑтратори.
-
-Въведете името на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð² полето и натиÑнете бутона, за да направите ÑÑŠÐ¾Ñ‚Ð²ÐµÑ‚Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ» админиÑтратор",
-"makesysopname" => "Име на потребителÑ:",
-"makesysopsubmit" => "Превръщане на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð² админиÑтратор",
-"makesysopok" => "<b>ПотребителÑÑ‚ '$1' бе направен админиÑтратор</b>",
-"makesysopfail" => "<b>ПотребителÑÑ‚ '$1' не бе направен админиÑтратор. (Правилно ли въведохте името?)</b>",
-"setbureaucratflag" => "Вдигане на флага 'бюрократ'",
-"bureaucratlog" => "Дневник_на_бюрократите",
-"bureaucratlogentry" => " set $1: $2",
-
+'makesysoptitle' => 'Превръщане на потребител в админиÑтратор',
+'makesysoptext' => 'Този формулÑÑ€ Ñе използва от бюрократи за превръщане на обикновени потребители в админиÑтратори.
+
+Въведете името на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð² полето и натиÑнете бутона, за да направите ÑÑŠÐ¾Ñ‚Ð²ÐµÑ‚Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ» админиÑтратор',
+'makesysopname' => 'Име на потребителÑ:',
+'makesysopsubmit' => 'Превръщане на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð² админиÑтратор',
+'makesysopok' => "<b>ПотребителÑÑ‚ '$1' бе направен админиÑтратор</b>.",
+'makesysopfail' => "<b>ПотребителÑÑ‚ '$1' не бе направен админиÑтратор. (Правилно ли въведохте името?)</b>",
+'setbureaucratflag' => 'Вдигане на флага "бюрократ"',
+'bureaucratlog' => 'Дневник_на_бюрократите',
+'bureaucratlogentry' => "Права за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ \"$1\": \"$2\"",
+'rights' => 'Права:',
+'set_user_rights' => 'Даване на потребителÑки права',
+'user_rights_set' => "<b>ПотребителÑките права за \"$1\" Ñа променени</b>",
+'set_rights_fail' => "<b>ПотребителÑките права за \"$1\" не бÑха променени. (Правилно ли въведохте името?)</b>",
+'makesysop' => 'Превръщане на потребител в админиÑтратор',
# Move page
#
-"movepage" => "ПремеÑтване на Ñтраница",
-"movepagetext" => "ПоÑредÑтвом Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€ може да преименувате
+'movepage' => 'ПремеÑтване на Ñтраница',
+'movepagetext' => "ПоÑредÑтвом Ð´Ð¾Ð»Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ»ÑÑ€ може да преименувате
Ñтраница, премеÑтвайки цÑлата й иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° новото име.
Старото заглавие ще Ñе превърне в пренаÑочваща Ñтраница.
Препратките към Ñтарата Ñтраница нÑма да бъдат променени; затова
-[[Специални:Maintenance|проверете]] за двойни или невалидни пренаÑочваниÑ.
+[[{{ns:-1}}:Maintenance|проверете]] за двойни или невалидни пренаÑочваниÑ.
Вие Ñами би Ñ‚Ñ€Ñбвало да Ñе убедите в това, дали препратките продължават да Ñочат там,
където Ñе предполага.
@@ -1114,50 +1220,158 @@ $3...
*вече ÑъщеÑтвува непразна диÑкуÑионна Ñтраница Ñ Ñ‚Ð¾Ð²Ð° име или
*не Ñте отметнали долната кутийка.
-Ð’ тези Ñлучаи, ако желаете, ще Ñ‚Ñ€Ñбва да премеÑтите Ñтраницата ръчно.",
-"movearticle" => "ПремеÑтване на Ñтраница",
-"movenologin" => "Ðе Ñте влезли",
-"movenologintext" => "Ðеобходимо е да Ñте региÑтриран потребител и <a href=\"" .
- wfLocalUrl( "Специални:Userlogin" ) . "\">да влезете</a>,
-за да може да премеÑтвате Ñтраници.",
-"newtitle" => "Към ново заглавие",
-"movepagebtn" => "ПремеÑтване",
-"pagemovedsub" => "ПремеÑтването бе уÑпешно",
-"pagemovedtext" => "Страницата \"[[$1]]\" бе премеÑтена под името \"[[$2]]\".",
-"articleexists" => "Вече ÑъщеÑтвува Ñтраница Ñ Ñ‚Ð¾Ð²Ð° име или името, което Ñте избрали,
+Ð’ тези Ñлучаи, ако желаете, ще е необходимо да премеÑтите Ñтраницата ръчно.",
+'movearticle' => 'ПремеÑтване на Ñтраница',
+'movenologin' => 'Ðе Ñте влезли',
+'movenologintext' => "Ðеобходимо е да [[{{ns:-1}}:Userlogin|влезете]], за да може да премеÑтвате Ñтраници.",
+'newtitle' => 'Към ново заглавие',
+'movepagebtn' => 'ПремеÑтване',
+'pagemovedsub' => 'ПремеÑтването бе уÑпешно',
+'pagemovedtext' => "Страницата \"[[$1]]\" бе премеÑтена под името \"[[$2]]\".",
+'articleexists' => "Вече ÑъщеÑтвува Ñтраница Ñ Ñ‚Ð¾Ð²Ð° име или името, което Ñте избрали,
е невалидно. МолÑ, изберете друго име.",
-"talkexists" => "Страницата бе уÑпешно премеÑтена, но без
+'talkexists' => 'Страницата бе уÑпешно премеÑтена, но без
Ñъответната диÑкуÑионна Ñтраница, защото под новото име
-има една ÑъщеÑтвуваща. МолÑ, обединете ги ръчно.",
-"movedto" => "премеÑтена като",
-"movetalk" => "ПремеÑтване и на диÑкуÑионната Ñтраница, ако е приложимо.",
-"talkpagemoved" => "Съответната диÑкуÑионна Ñтраница Ñъщо бе премеÑтена.",
-"talkpagenotmoved" => "Съответната диÑкуÑионна Ñтраница <strong>не</strong> бе премеÑтена.",
-"1movedto2" => "$1 премеÑтена като $2",
+има една ÑъщеÑтвуваща. МолÑ, обединете ги ръчно.',
+'movedto' => 'премеÑтена като',
+'movetalk' => 'ПремеÑтване и на диÑкуÑионната Ñтраница, ако е приложимо.',
+'talkpagemoved' => 'Съответната диÑкуÑионна Ñтраница Ñъщо бе премеÑтена.',
+'talkpagenotmoved' => 'Съответната диÑкуÑионна Ñтраница <strong>не</strong> бе премеÑтена.',
+'1movedto2' => "$1 премеÑтена като $2",
# Export
-"export" => "Ð˜Ð·Ð½Ð¾Ñ Ð½Ð° Ñтраници",
-"exporttext" => "Тук може да изнеÑете като XML текÑта и иÑториÑта на една или повече Ñтраници. Получените данни може да:
+'export' => 'ИзнаÑÑне на Ñтраници',
+'exporttext' => 'Тук може да изнеÑете като XML текÑта и иÑториÑта на една или повече Ñтраници. Получените данни може да:
<ul>
<li>вмъкнете в друг Ñайт, използващ Ñофтуера на МедиÑУики, </li>
<li>обработвате или </li>
<li>проÑто запазите за лично ползване.</li>
</ul>
-Въвеждайте вÑÑко ново заглавие на ÑÑ‚Ð°Ñ‚Ð¸Ñ Ð½Ð° <b>нов ред</b>.",
-"exportcuronly" => "Включване Ñамо на текущата верÑиÑ, а не на цÑлата иÑториÑ",
+Въвеждайте вÑÑко ново заглавие на ÑÑ‚Ð°Ñ‚Ð¸Ñ Ð½Ð° <b>нов ред</b>.',
+'exportcuronly' => 'Включване Ñамо на текущата верÑиÑ, а не на цÑлата иÑториÑ',
# Namespace 8 related
-"allmessages" => "Ð’Ñички_ÑъобщениÑ",
-"allmessagestext" => "Това е ÑпиÑък Ñ Ð²Ñички ÑъобщениÑ, намиращи Ñе в именното проÑтранÑтво " . $wgNamespaceNamesBg[8],
+'allmessages' => 'Ð’Ñички ÑиÑтемни ÑъобщениÑ',
+'allmessagestext' => 'Това е ÑпиÑък на вÑички ÑиÑтемни ÑъобщениÑ, намиращи Ñе в именното проÑтранÑтво МедиÑУики',
# Thumbnails
-"thumbnail-more" => "Увеличаване"
+'thumbnail-more' => 'Увеличаване',
+'missingimage' => "<b>ЛипÑваща картинка</b><br /><i>$1</i>\n",
+
+# Special:Import
+'import' => 'ВнаÑÑне на Ñтраници',
+'importtext' => 'МолÑ, изнеÑете файла от изходното уики, използвайки инÑтрумента {{ns:-1}}:Export, Ñъхранете го на Ð’Ð°ÑˆÐ¸Ñ Ð´Ð¸Ñк и го качете тук.',
+'importfailed' => "ВнаÑÑнето пропадна: $1",
+'importnotext' => 'Празно',
+'importsuccess' => 'ВнаÑÑнето бе уÑпешно!',
+'importhistoryconflict' => 'СъщеÑтвува верÑÐ¸Ñ Ð¾Ñ‚ иÑториÑта, коÑто Ñи противоречи Ñ Ñ‚Ð°Ð·Ð¸ (възможно е Ñтраницата да е била вече внеÑена)',
+
+# Keyboard access keys for power users
+'accesskey-article' => 'a',
+'accesskey-talk' => 't',
+'accesskey-edit' => 'e',
+'accesskey-addsection' => '+',
+'accesskey-viewsource' => 'e',
+'accesskey-history' => 'h',
+'accesskey-protect' => '=',
+'accesskey-delete' => 'd',
+'accesskey-undelete' => 'd',
+'accesskey-move' => 'm',
+'accesskey-watch' => 'w',
+'accesskey-unwatch' => 'w',
+'accesskey-watchlist' => 'l',
+'accesskey-userpage' => '',
+'accesskey-anonuserpage' => '.',
+'accesskey-mytalk' => '',
+'accesskey-anontalk' => 'n',
+'accesskey-preferences' => '',
+'accesskey-mycontris' => '',
+'accesskey-login' => 'o',
+'accesskey-logout' => 'o',
+'accesskey-search' => 's',
+'accesskey-mainpage' => '',
+'accesskey-portal' => '',
+'accesskey-randompage' => 'x',
+'accesskey-currentevents' => '',
+'accesskey-sitesupport' => '',
+'accesskey-help' => '',
+'accesskey-recentchanges' => 'r',
+'accesskey-recentchangeslinked' => 'c',
+'accesskey-whatlinkshere' => 'b',
+'accesskey-specialpages' => '',
+'accesskey-specialpage' => '',
+'accesskey-upload' => 'u',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-contributions' => '',
+'accesskey-emailuser' => '',
+'accesskey-compareselectedversions' => 'v',
+
+# tooltip help for the main actions
+'tooltip-atom' => 'Atom feed за Ñтраницата',
+'tooltip-article' => 'Преглед на ÑтатиÑта [alt-a]',
+'tooltip-talk' => 'БеÑеда отноÑно Ñтраницата [alt-t]',
+'tooltip-edit' => 'Може да редактирате Ñтраницата. МолÑ, използвайте бутона за предварителен преглед преди да Ñъхраните. [alt-e]',
+'tooltip-addsection' => 'ДобавÑне на коментар към Ñтраницата. [alt-+]',
+'tooltip-viewsource' => 'Страницата е защитена. Може да разгледате Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ ÐºÐ¾Ð´. [alt-e]',
+'tooltip-history' => 'Предишни верÑии на Ñтраницата, [alt-h]',
+'tooltip-protect' => 'Защитаване на Ñтраницата, [alt-=]',
+'tooltip-delete' => 'Изтриване на Ñтраницата, [alt-d]',
+'tooltip-undelete' => "ВъзÑтановÑване на $1 изтрити редакции на Ñтраницата [alt-d]",
+'tooltip-move' => 'ПремеÑтване на Ñтраницата, [alt-m]',
+'tooltip-nomove' => 'ÐÑмате разрешение за премеÑтване на Ñтраницата',
+'tooltip-watch' => 'ДобавÑне на Ñтраницата към ÑпиÑъка Ви за наблюдение [alt-w]',
+'tooltip-unwatch' => 'Премахване на Ñтраницата от ÑпиÑъка Ви за наблюдение [alt-w]',
+'tooltip-watchlist' => 'СпиÑък на Ñтраници, чиито промени Ñте избрали да наблюдавате. [alt-l]',
+'tooltip-userpage' => 'МоÑта потребителÑка Ñтраница',
+'tooltip-anonuserpage' => 'ПотребителÑката Ñтраница за адреÑа, от който редактирате [alt-.]',
+'tooltip-mytalk' => 'МоÑта диÑкуÑионна Ñтраница',
+'tooltip-anontalk' => 'ДиÑкуÑÐ¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно редакциите от този Ð°Ð´Ñ€ÐµÑ [alt-n]',
+'tooltip-preferences' => 'Моите наÑтройки',
+'tooltip-mycontris' => 'СпиÑък на моите приноÑи',
+'tooltip-login' => 'Ð’ момента не Ñте влезли. ÐаÑърчаваме Ви да влезете, въпреки че не е задължително, за да редактирате.',
+'tooltip-logout' => 'Излизане от {{SITENAME}} [alt-o]',
+'tooltip-search' => 'ТърÑене в Уикито',
+'tooltip-mainpage' => 'Ðачалната Ñтраница',
+'tooltip-portal' => 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° проекта',
+'tooltip-randompage' => 'Случайна Ñтраница [alt-x]',
+'tooltip-currentevents' => 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° текущите ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ð¿Ð¾ Ñвета',
+'tooltip-sitesupport' => 'Подкрепете {{SITENAME}}',
+'tooltip-help' => 'Помощната Ñтраница.',
+'tooltip-recentchanges' => 'Това е ÑпиÑък на поÑледните промени в цÑлото Уики [alt-r]',
+'tooltip-recentchangeslinked' => 'ПоÑледните промени на Ñтраници, Ñочещи към тази Ñтраница [alt-c]',
+'tooltip-whatlinkshere' => 'СпиÑък на вÑички Ñтраници, Ñочещи наÑам [alt-b]',
+'tooltip-specialpages' => 'СпиÑък на вÑички Ñпециални Ñтраници',
+'tooltip-upload' => 'Качване на файлове [alt-u]',
+'tooltip-specialpage' => 'Това е Ñпециална Ñтраница, коÑто не може да Ñе редактира',
+'tooltip-minoredit' => 'ОтбелÑзване на промÑната като малка [alt-i]',
+'tooltip-save' => 'СъхранÑване на промените [alt-s]',
+'tooltip-preview' => 'Предварителен преглед, молÑ, използвайте го преди да Ñъхраните! [alt-p]',
+'tooltip-contributions' => 'Показване на приноÑите на потребителÑ',
+'tooltip-emailuser' => 'Изпращане на пиÑмо на потребителÑ',
+'tooltip-rss' => 'RSS feed за Ñтраницата',
+'tooltip-compareselectedversions' => 'Показване на разликите между двете избрани верÑии на Ñтраницата [alt-v]',
+
+# Metadata
+'nodublincore' => 'Dublin Core RDF metadata disabled for this server.',
+'nocreativecommons' => 'Creative Commons RDF metadata disabled for this server.',
+'notacceptable' => 'Сървърът не може да предоÑтави данни във формат, който да Ñе разпознава от клиента Ви.',
+
+# Attribution
+
+'anonymous' => "Ðнонимен потребител(и) на {{SITENAME}}",
+'siteuser' => "Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð½Ð° {{SITENAME}} $1",
+"lastmodifiedby" => "ПоÑледна промÑна на $1 от $2.",
+'and' => 'и',
+"othercontribs" => "ОÑновано върху работа на $1.",
+"siteusers" => "потребителите на {{SITENAME}} $1",
);
-require_once( "LanguageUtf8.php" );
+require_once( 'LanguageUtf8.php' );
class LanguageBg extends LanguageUtf8 {
@@ -1271,3 +1485,4 @@ class LanguageBg extends LanguageUtf8 {
}
?>
+
diff --git a/languages/LanguageBn.php b/languages/LanguageBn.php
index 5f546e8cfcd8..b0448691f3cc 100644
--- a/languages/LanguageBn.php
+++ b/languages/LanguageBn.php
@@ -36,7 +36,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesBn = array(
diff --git a/languages/LanguageCa.php b/languages/LanguageCa.php
index 8c351ee2739f..d05126bd9e53 100644
--- a/languages/LanguageCa.php
+++ b/languages/LanguageCa.php
@@ -5,21 +5,24 @@
# encapsulates some of the magic-ness.
#
/* private */ $wgNamespaceNamesCa = array(
- -2 => "Media",
- -1 => "Especial",
- 0 => "",
- 1 => "Discussió",
- 2 => "Usuari",
- 3 => "Usuari_Discussió",
- 4 => "Viquipèdia",
- 5 => "Viquipèdia_Discussió",
- 6 => "Imatge",
- 7 => "Imatge_Discussió",
- 8 => "MediaWiki",
- 9 => "MediaWiki_Dicussió",
- 10 => "Template",
- 11 => "Template_talk"
-
+ NS_MEDIA => 'Media',
+ NS_SPECIAL => 'Especial',
+ NS_MAIN => '',
+ NS_TALK => 'Discussió',
+ NS_USER => 'Usuari',
+ NS_USER_TALK => 'Usuari_Discussió',
+ NS_WIKIPEDIA => 'Viquipèdia',
+ NS_WIKIPEDIA_TALK => 'Viquipèdia_Discussió',
+ NS_IMAGE => 'Imatge',
+ NS_IMAGE_TALK => 'Imatge_Discussió',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_Discussió',
+ NS_TEMPLATE => 'Template',
+ NS_TEMPLATE_TALK => 'Template_Discussió',
+ NS_HELP => 'Ajuda',
+ NS_HELP_TALK => 'Ajuda_Discussió',
+ NS_CATEGORY => 'Categoria',
+ NS_CATEGORY_TALK => 'Categoria_Discussió'
);
/* Note that some default options can be customized -- see
@@ -37,7 +40,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesCa = array(
diff --git a/languages/LanguageCs.php b/languages/LanguageCs.php
index fc1f781a268d..ba16ec1d2c31 100644
--- a/languages/LanguageCs.php
+++ b/languages/LanguageCs.php
@@ -38,7 +38,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgUserTogglesCs = array(
diff --git a/languages/LanguageCy.php b/languages/LanguageCy.php
index 5138e6992424..43baf50a5a52 100644
--- a/languages/LanguageCy.php
+++ b/languages/LanguageCy.php
@@ -20,18 +20,6 @@
);
-/* private */ $wgDefaultUserOptionsCy = array(
- "quickbar" => 1, "underline" => 1, "hover" => 1,
- "cols" => 80, "rows" => 25, "searchlimit" => 20,
- "contextlines" => 5, "contextchars" => 50,
- "skin" => 0, "math" => 1, "rcdays" => 7, "rclimit" => 50,
- "highlightbroken" => 1, "stubthreshold" => 0,
- "previewontop" => 1, "editsection"=>1,"editsectiononrightclick"=>0,
- "showtoc"=>1,
- "showtoolbar" =>1,
- "date" => 0
-);
-
/* private */ $wgQuickbarSettingsCy = array(
"Dim", "Sefydlog chwith", "Sefydlog de", "Arnawf de"
);
@@ -44,7 +32,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesCy = array(
@@ -1042,11 +1031,6 @@ require_once( "LanguageUtf8.php" );
class LanguageCy extends LanguageUtf8 {
- function getDefaultUserOptions () {
- global $wgDefaultUserOptionsCy;
- return $wgDefaultUserOptionsCy;
- }
-
function getBookstoreList () {
global $wgBookstoreListCy;
return $wgBookstoreListCy;
@@ -1136,7 +1120,7 @@ class LanguageCy extends LanguageUtf8 {
function getMessage( $key )
{
global $wgAllMessagesCy;
- return $wgAllMessagesCy[$key];
+ return @$wgAllMessagesCy[$key];
}
function getAllMessages()
diff --git a/languages/LanguageDa.php b/languages/LanguageDa.php
index 99753ad7b698..4e1b041b7879 100644
--- a/languages/LanguageDa.php
+++ b/languages/LanguageDa.php
@@ -1,7 +1,17 @@
<?php
+#
+# Danish localisation for MediaWiki
+#
+# This file is encoded in UTF-8, no byte order mark.
+# For compatibility with Latin-1 installations, please
+# don't add literal characters above U+00ff.
+#
-# NOTE: To turn off "Current Events" in the sidebar,
-# set "currentevents" => "-"
+require_once( "LanguageUtf8.php" );
+
+#--------------------------------------------------------------------------
+# Language-specific text
+#--------------------------------------------------------------------------
# The names of the namespaces can be set here, but the numbers
# are magical, so don't change or move them! The Namespace class
@@ -20,32 +30,38 @@
7 => "Billede_diskussion",
8 => "MediaWiki",
9 => "MediaWiki_diskussion",
- 10 => "Template",
- 11 => "Template_talk"
+ 10 => "Skabelon",
+ 11 => "Skabelon_diskussion",
+ 12 => "Hjælp",
+ 13 => "Hjælp_diskussion",
+ 14 => "Kategori",
+ 15 => "Kategori_diskussion"
);
/* private */ $wgQuickbarSettingsDa = array(
- "Ingen", "Fast venstre", "Fast højre", "Flydende venstre"
+ "Ingen", "Fast venstre", "Fast højre", "Flydende venstre"
);
/* private */ $wgSkinNamesDa = array(
'standard' => "Standard",
'nostalgia' => "Nostalgi",
- 'cologneblue' => "Cologne-blå",
+ 'cologneblue' => "Cologne-blå",
'smarty' => "Paddington",
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesDa = array(
- "Vis altid som PNG",
- "HTML hvis meget simpel ellers PNG",
- "HTML hvis muligt ellers PNG",
- "Lad være som TeX (for tekstbrowsere)",
- "Anbefalet til moderne browsere"
+ MW_MATH_PNG => "Vis altid som PNG",
+ MW_MATH_SIMPLE => "HTML hvis meget simpel ellers PNG",
+ MW_MATH_HTML => "HTML hvis muligt ellers PNG",
+ MW_MATH_SOURCE => "Lad være som TeX (for tekstbrowsere)",
+ MW_MATH_MODERN => "Anbefalet til moderne browsere",
+ MW_MATH_MATHML => "MathML hvis muligt",
);
/* private */ $wgDateFormatsDa = array(
@@ -57,24 +73,24 @@
);
/* private */ $wgUserTogglesDa = array(
- "hover" => "Vis svævende tekst over wikihenvisninger",
+ "hover" => "Vis svævende tekst over wikihenvisninger",
"underline" => "Understreg henvisninger",
- "highlightbroken" => "Brug røde henvisninger til tomme sider",
- "justify" => "Justér afsnit",
- "hideminor" => "Skjul mindre ændringer i seneste ændringer listen",
- "usenewrc" => "Udvidet seneste ændringer liste<br>(ikke for alle browsere)",
+ "highlightbroken" => "Brug røde henvisninger til tomme sider",
+ "justify" => "Justér afsnit",
+ "hideminor" => "Skjul mindre ændringer i seneste ændringer listen",
+ "usenewrc" => "Udvidet seneste ændringer liste<br>(ikke for alle browsere)",
"numberheadings" => "Automatisk nummerering af overskrifter",
- "showtoolbar" => "Vis værktøjslinje til redigering",
- "editondblclick" => "Redigér sider med dobbeltklik (JavaScript)",
- "editsection"=>"Redigér afsnit ved hjælp af [redigér]-henvisning",
- "editsectiononrightclick"=>"Redigér afsnit ved at højreklikke<br> på afsnittets titel (JavaScript)",
+ "showtoolbar" => "Vis værktøjslinje til redigering",
+ "editondblclick" => "Redigér sider med dobbeltklik (JavaScript)",
+ "editsection"=>"Redigér afsnit ved hjælp af [redigér]-henvisning",
+ "editsectiononrightclick"=>"Redigér afsnit ved at højreklikke<br> på afsnittets titel (JavaScript)",
"showtoc"=>"Vis indholdsfortegnelse<br>(for artikler med mere end tre afsnit)",
- "rememberpassword" => "Husk adgangskode til næste besøg",
+ "rememberpassword" => "Husk adgangskode til næste besøg",
"editwidth" => "Redigeringsboksen har fuld bredde",
- "watchdefault" => "Overvåg nye og ændrede artikler",
- "minordefault" => "Markér som standard alle ændringer som mindre",
- "previewontop" => "Vis forhåndsvisning før redigeringsboksen",
- "nocache" => "Husk ikke siderne til næste besøg"
+ "watchdefault" => "Overvåg nye og ændrede artikler",
+ "minordefault" => "Markér som standard alle ændringer som mindre",
+ "previewontop" => "Vis forhåndsvisning før redigeringsboksen",
+ "nocache" => "Husk ikke siderne til næste besøg"
);
/* private */ $wgBookstoreListDa = array(
@@ -87,8 +103,8 @@
);
/* private */ $wgWeekdayNamesDa = array(
- "søndag", "mandag", "tirsdag", "onsdag", "torsdag",
- "fredag", "lørdag"
+ "søndag", "mandag", "tirsdag", "onsdag", "torsdag",
+ "fredag", "lørdag"
);
/* private */ $wgMonthNamesDa = array(
@@ -110,22 +126,22 @@
"Userlogin" => "",
"Userlogout" => "",
"Preferences" => "Mine brugerindstillinger",
- "Watchlist" => "Min overvågningsliste",
- "Recentchanges" => "Seneste ændringer",
- "Upload" => "Læg filer op",
+ "Watchlist" => "Min overvågningsliste",
+ "Recentchanges" => "Seneste ændringer",
+ "Upload" => "Læg filer op",
"Imagelist" => "Billedliste",
"Listusers" => "Registrerede brugere",
"Statistics" => "Statistik om siden",
- "Randompage" => "Tilfældig artikel",
+ "Randompage" => "Tilfældig artikel",
- "Lonelypages" => "Forældreløse artikler",
- "Unusedimages" => "Forældreløse filer",
-# "Popularpages" => "Populære artikler",
- "Wantedpages" => "Mest ønskede artikler",
+ "Lonelypages" => "Forældreløse artikler",
+ "Unusedimages" => "Forældreløse filer",
+ "Popularpages" => "Populære artikler",
+ "Wantedpages" => "Mest ønskede artikler",
"Shortpages" => "Korte artikler",
"Longpages" => "Lange artikler",
"Newpages" => "Nyeste artikler",
- "Ancientpages" => "Ældste artikler",
+ "Ancientpages" => "Ældste artikler",
"Deadendpages" => "Blindgydesider",
# "Intl" => "Sproghenvisninger",
"Allpages" => "Alle sider efter titel",
@@ -139,14 +155,14 @@
"Recentchangeslinked" => "",
"Movepage" => "",
"Booksources" => "Eksterne bogkilder",
-# "Categories" => "Sidekategorier",
- "Export" => "Eksportér sider i XML format",
+ "Categories" => "Kategorier",
+ "Export" => "Eksportér sider i XML format",
"Version" => "Vis MediaWiki version",
);
/* private */ $wgSysopSpecialPagesDa = array(
"Blockip" => "Bloker en IP-adresse",
- "Asksql" => "Lav en forespørgsel i databasen",
+ "Asksql" => "Lav en forespørgsel i databasen",
"Undelete" => "Se og gendan slettede sider",
"Makesysop" => "Lav en bruger til administrator"
);
@@ -156,6 +172,23 @@
"Unlockdb" => "Gendan skriveadgangen til databasen",
);
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+# Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and
+# hyphen (-). If you need more characters, you may be able to change
+# the regex in MagicWord::initRegex
+
+# NOTE: To turn off "Current Events" in the sidebar,
+# set "currentevents" => ""
+
+# NOTE: To turn off "Disclaimers" in the title links,
+# set "disclaimers" => ""
+
+# NOTE: To turn off "Community portal" in the title links,
+# set "portal" => ""
+
+
/* private */ $wgAllMessagesDa = array(
# Bits of text used by many pages:
@@ -165,14 +198,14 @@
"category_header" => "Artikler i kategorien \"$1\"",
"subcategories" => "Underkategorier",
-"linktrail" => "/^([a-z|æ|ø|å]+)(.*)\$/sD",
+"linktrail" => "/^((?:[a-z]|æ|ø|å)+)(.*)\$/sD",
"mainpage" => "Forside",
"mainpagetext" => "Wiki-software er nu installeret.",
"about" => "Om",
"aboutwikipedia" => "Om Wikipedia",
"aboutpage" => "Wikipedia:Om",
-"help" => "Hjælp",
-"helppage" => "Wikipedia:Hjælp",
+"help" => "Hjælp",
+"helppage" => "Wikipedia:Hjælp",
"wikititlesuffix" => "Wikipedia",
"bugreports" => "Fejlrapporter",
"bugreportspage" => "Wikipedia:Fejlrapporter",
@@ -180,12 +213,12 @@
"sitesupportpage" => "Wikipedia:Donation", # If not set, won't appear. Can be wiki page or URL
"faq" => "OSS",
"faqpage" => "Wikipedia:OSS",
-"edithelp" => "Hjælp til redigering",
+"edithelp" => "Hjælp til redigering",
"edithelppage" => "Wikipedia:Hvordan_redigerer_jeg_en_side",
"cancel" => "Afbryd",
"qbfind" => "Find",
"qbbrowse" => "Gennemse",
-"qbedit" => "Redigér",
+"qbedit" => "Redigér",
"qbpageoptions" => "Indstillinger for side",
"qbpageinfo" => "Information om side",
"qbmyoptions" => "Mine indstillinger",
@@ -194,20 +227,20 @@
"currentevents" => "Aktuelle begivenheder",
"errorpagetitle" => "Fejl",
"returnto" => "Tilbage til $1.",
-"fromwikipedia" => "Fra Wikipedia, den frie encyklopædi",
+"fromwikipedia" => "Fra Wikipedia, den frie encyklopædi",
"whatlinkshere" => "Sider med en henvisning hertil",
-"help" => "Hjælp",
-"search" => "Søg",
-"go" => "Udfør",
+"help" => "Hjælp",
+"search" => "Søg",
+"go" => "Udfør",
"history" => "Historie",
"printableversion" => "Printervenlig version",
-"editthispage" => "Redigér side",
+"editthispage" => "Redigér side",
"deletethispage" => "Slet side",
"protectthispage" => "Beskyt side",
"unprotectthispage" => "Fjern beskyttelse af side",
"newpage" => "Ny side",
"talkpage" => "Diskussionssiden",
-"postcomment" => "Tilføj en kommentar",
+"postcomment" => "Tilføj en kommentar",
"articlepage" => "Se artiklen",
"subjectpage" => "Se emnesiden",
"userpage" => "Se brugersiden",
@@ -216,39 +249,39 @@
"viewtalkpage" => "Se diskussion",
"otherlanguages" => "Andre sprog",
"redirectedfrom" => "(Omdirigeret fra $1)",
-"lastmodified" => "Sidst ændret den $1.",
+"lastmodified" => "Sidst ændret den $1.",
"viewcount" => "Siden er vist i alt $1 gange.",
"gnunote" => "Denne side er udgivet under <a class=internal href='$wgScriptPath/GNU_FDL'>GNU FDL</a>.",
"printsubtitle" => "(Fra http://da.wikipedia.org)",
"protectedpage" => "Beskyttet side",
"administrators" => "Wikipedia:Administratorer",
-"sysoptitle" => "Sysop-adgang påkrævet",
+"sysoptitle" => "Sysop-adgang påkrævet",
"sysoptext" => "Den funktion du har bedt om kan kun
-udføres af brugere med \"sysop\"-status. Se $1.",
-"developertitle" => "Developer-adgang påkrævet",
+udføres af brugere med \"sysop\"-status. Se $1.",
+"developertitle" => "Developer-adgang påkrævet",
"developertext" => "Den funktion du har bedt om, kan kun
-udføres af brugere med \"developer\"-status. Se $1.",
+udføres af brugere med \"developer\"-status. Se $1.",
"nbytes" => "$1 bytes",
-"go" => "Udfør",
+"go" => "Udfør",
"ok" => "OK",
"sitetitle" => "Wikipedia",
-"sitesubtitle" => "Den frie encyklopædi",
+"sitesubtitle" => "Den frie encyklopædi",
"retrievedfrom" => "Hentet fra \"$1\"",
"newmessages" => "Du har $1.",
"newmessageslink" => "nye beskeder",
-"editsection"=>"redigér",
+"editsection"=>"redigér",
"toc" => "Indholdsfortegnelse",
"showtoc" => "vis",
"hidetoc" => "skjul",
"thisisdeleted" => "Se eller gendan $1?",
-"restorelink" => "$1 slettede ændringer",
+"restorelink" => "$1 slettede ændringer",
# Main script and global functions
#
"nosuchaction" => "Funktionen findes ikke",
"nosuchactiontext" => "Funktion specificeret i URL'en kan ikke
genkendes af Wikipediasoftwaren",
-"nosuchspecialpage" => "En sådan specialside findes ikke",
+"nosuchspecialpage" => "En sådan specialside findes ikke",
"nospecialpagetext" => "Du har bedt om en specialside, der ikke
kan genkendes af Wikipediasoftwaren.",
@@ -256,181 +289,181 @@ kan genkendes af Wikipediasoftwaren.",
#
"error" => "Fejl",
"databaseerror" => "Databasefejl",
-"dberrortext" => "Der er sket en syntaksfejl i en databaseforespørgsel.
-Dette kan være på grund af en illegal forespørgsel (se $5),
+"dberrortext" => "Der er sket en syntaksfejl i en databaseforespørgsel.
+Dette kan være på grund af en illegal forespørgsel (se $5),
eller det kan betyde en fejl i softwaren.
-Den sidst forsøgte databaseforespørgsel var:
+Den sidst forsøgte databaseforespørgsel var:
<blockquote><tt>$1</tt></blockquote>
fra funktionen \"<tt>$2</tt>\".
MySQL returnerede fejlen \"<tt>$3: $4</tt>\".",
-"dberrortextcl" => "Der er sket en syntaksfejl i en databaseforespørgsel.
-Den sidst forsøgte databaseforespørgsel var:
+"dberrortextcl" => "Der er sket en syntaksfejl i en databaseforespørgsel.
+Den sidst forsøgte databaseforespørgsel var:
\"$1\"
fra funktionen \"$2\".
MySQL returnerede fejlen \"$3: $4\".\n",
-"noconnect" => "Kunne ikke forbinde til databasen på $1",
-"nodb" => "Kunne ikke vælge databasen $1",
-"cachederror" => "Det følgende er en gemt kopi af den ønskede side, og er måske ikke helt opdateret.",
+"noconnect" => "Kunne ikke forbinde til databasen på $1",
+"nodb" => "Kunne ikke vælge databasen $1",
+"cachederror" => "Det følgende er en gemt kopi af den ønskede side, og er måske ikke helt opdateret.",
"readonly" => "Databasen er skrivebeskyttet",
"enterlockreason" => "Skriv en begrundelse for skrivebeskyttelsen, inklusive
-et estimat på hvornår skrivebeskyttelsen vil blive ophævet igen",
-"readonlytext" => "Wikipediadatabasen er for øjeblikket skrivebeskyttet for
-nye sider og andre modifikationer, sandsynligvis på grund af rutinemæssig databasevedligeholdelse, hvorefter den vil returnere til normaldrift.
+et estimat på hvornår skrivebeskyttelsen vil blive ophævet igen",
+"readonlytext" => "Wikipediadatabasen er for øjeblikket skrivebeskyttet for
+nye sider og andre modifikationer, sandsynligvis på grund af rutinemæssig databasevedligeholdelse, hvorefter den vil returnere til normaldrift.
Den administrator der skrivebeskyttede den har denne forklaring:
<p>$1",
-"missingarticle" => "Databasen fandt ikke teksten på en side,
+"missingarticle" => "Databasen fandt ikke teksten på en side,
som den skulle have fundet, med navnet \"$1\".
<p>Dette er ikke en databasefejl, men sandsynligvis en fejl i softwaren.
<p>Send venligst en rapport om dette til en administrator,
-hvor du også nævner URL'en.",
+hvor du også nævner URL'en.",
"internalerror" => "Intern fejl",
"filecopyerror" => "Kunne ikke kopiere filen \"$1\" til \"$2\".",
-"filerenameerror" => "Kunne ikke omdøbe filen \"$1\" til \"$2\".",
+"filerenameerror" => "Kunne ikke omdøbe filen \"$1\" til \"$2\".",
"filedeleteerror" => "Kunne ikke slette filen \"$1\".",
"filenotfound" => "Kunne ikke finde filen \"$1\".",
-"unexpected" => "Uventet værdi: \"$1\"=\"$2\".",
+"unexpected" => "Uventet værdi: \"$1\"=\"$2\".",
"formerror" => "Fejl: kunne ikke afsende form",
-"badarticleerror" => "Denne funktion kan ikke udføres på denne side.",
+"badarticleerror" => "Denne funktion kan ikke udføres på denne side.",
"cannotdelete" => "Kunne ikke slette siden eller filen der blev
specificeret.",
"badtitle" => "Forkert titel",
-"badtitletext" => "Den ønskede sides titel var ikke tilladt, tom eller siden
-er forkert henvist fra en Wikipedia på et andet sprog.",
-"perfdisabled" => "Desværre! Denne funktion er midlertidigt afbrudt,
-fordi den belaster databasen meget hårdt og i en sådan grad, at siden
-bliver meget langsom. Funktionen bliver forhåbentlig omskrevet i den
-nærmeste fremtid (måske af dig, det er jo open source!!).",
+"badtitletext" => "Den ønskede sides titel var ikke tilladt, tom eller siden
+er forkert henvist fra en Wikipedia på et andet sprog.",
+"perfdisabled" => "Desværre! Denne funktion er midlertidigt afbrudt,
+fordi den belaster databasen meget hårdt og i en sådan grad, at siden
+bliver meget langsom. Funktionen bliver forhåbentlig omskrevet i den
+nærmeste fremtid (måske af dig, det er jo open source!!).",
"perfdisabledsub" => "Her er en gemt kopi fra $1:",
# Login and logout pages
#
"logouttitle" => "Bruger-log-af",
"logouttext" => "Du er nu logget af.
-Du kan fortsætte med at bruge Wikipedia anonymt, eller du kan logge på
+Du kan fortsætte med at bruge Wikipedia anonymt, eller du kan logge på
igen som den samme eller en anden bruger.\n",
"welcomecreation" => "<h2>Velkommen, $1!</h2><p>Din konto er blevet
-oprettet. Glem ikke at personliggøre dine Wikipedia-indstillinger.",
+oprettet. Glem ikke at personliggøre dine Wikipedia-indstillinger.",
-"loginpagetitle" => "Bruger log på",
+"loginpagetitle" => "Bruger log på",
"yourname" => "Dit brugernavn",
"yourpassword" => "Din adgangskode",
"yourpasswordagain" => "Gentag adgangskode",
"newusersonly" => " (kun nye brugere)",
-"remembermypassword" => "Husk min adgangskode til næste gang.",
-"loginproblem" => "<b>Der har været et problem med at få dig logget
-på.</b><br>Prøv igen!",
+"remembermypassword" => "Husk min adgangskode til næste gang.",
+"loginproblem" => "<b>Der har været et problem med at få dig logget
+på.</b><br>Prøv igen!",
"alreadyloggedin" => "<font color=red><b>Bruger $1, du er allerede logget
-på!</b></font><br>\n",
+på!</b></font><br>\n",
-"login" => "Log på",
-"userlogin" => "Log på",
+"login" => "Log på",
+"userlogin" => "Log på",
"logout" => "Log af",
"userlogout" => "Log af",
-"notloggedin" => "Ikke logget på",
+"notloggedin" => "Ikke logget på",
"createaccount" => "Opret en ny konto",
"badretype" => "De indtastede adgangskoder er ikke ens.",
-"userexists" => "Det brugernavn du har valgt er allerede i brug. Vælg
+"userexists" => "Det brugernavn du har valgt er allerede i brug. Vælg
venligst et andet brugernavn.",
"youremail" => "Din e-mailadresse *",
"yournick" => "Dit kaldenavn (til signaturer)",
"emailforlost" => "* Det er valgfrit om du vil oplyse din e-mailadresse.
-Men det gør andre brugere i stand til at sende dig en e-mail, uden at
-du behøver offentliggøre din e-mailadresse. Samtidig gør det muligt, at du kan få en
+Men det gør andre brugere i stand til at sende dig en e-mail, uden at
+du behøver offentliggøre din e-mailadresse. Samtidig gør det muligt, at du kan få en
ny adgangskode sendt til din e-mailadresse.",
-"loginerror" => "Fejl med at logge på",
+"loginerror" => "Fejl med at logge på",
"noname" => "Du har ikke angivet et gyldigt brugernavn.",
-"loginsuccesstitle" => "Logget på med succes",
-"loginsuccess" => "Du er nu logget på Wikipedia som \"$1\".",
+"loginsuccesstitle" => "Logget på med succes",
+"loginsuccess" => "Du er nu logget på Wikipedia som \"$1\".",
"nosuchuser" => "Der er ingen bruger med navnet \"$1\".
-Kontrollér stavemåden igen, eller brug formularen herunder til at oprette en ny brugerkonto.",
-"wrongpassword" => "Den indtastede adgangskode var forkert. Prøv igen.",
+Kontrollér stavemåden igen, eller brug formularen herunder til at oprette en ny brugerkonto.",
+"wrongpassword" => "Den indtastede adgangskode var forkert. Prøv igen.",
"mailmypassword" => "Send mig en ny adgangskode til min e-mailadresse",
"passwordremindertitle" => "Ny adgangskode fra Wikipedia",
"passwordremindertext" => "Nogen (sandsynligvis dig, fra IP-adressen $1)
-har bedt om at vi sender dig en ny adgangskode til at logge på Wikipedia.
+har bedt om at vi sender dig en ny adgangskode til at logge på Wikipedia.
Den nye adgangskode for bruger \"$2\" er nu \"$3\".
-Du bør logge på nu og ændre din adgangskode.",
+Du bør logge på nu og ændre din adgangskode.",
"noemail" => "Der er ikke oplyst nogen e-mailadresse for bruger \"$1\".",
"passwordsent" => "En ny adgangskode er sendt til e-mailadressen,
som er registreret for \"$1\".
-Du bør logge på og ændre din adgangskode straks efter, du har modtaget den.",
+Du bør logge på og ændre din adgangskode straks efter, du har modtaget den.",
# Edit pages
#
"summary" => "Beskrivelse",
"subject" => "Emne/overskrift",
-"minoredit" => "Dette er en mindre ændring.",
-"watchthis" => "Overvåg denne artikel",
+"minoredit" => "Dette er en mindre ændring.",
+"watchthis" => "Overvåg denne artikel",
"savearticle" => "Gem side",
-"preview" => "Forhåndsvisning",
-"showpreview" => "Forhåndsvisning",
+"preview" => "Forhåndsvisning",
+"showpreview" => "Forhåndsvisning",
"blockedtitle" => "Brugeren er blokeret",
"blockedtext" => "Dit brugernavn eller din IP-adresse er blevet blokeret af
$1. Begrundelsen er denne:<br>$2<p>Du kan kontakte $1
eller en af de andre [[Wikipedia:Administratorer|administratorer]] for at diskutere blokeringen.
Din IP-adresse er $3.
-Sørg venligst for at inkludere dette nummer i alle henvendelser til en administrator.
+Sørg venligst for at inkludere dette nummer i alle henvendelser til en administrator.
",
"newarticle" => "(Ny)",
-"newarticletext" => "Der er på nuværende tidspunkt ingen tekst på denne side.<br>
+"newarticletext" => "Der er på nuværende tidspunkt ingen tekst på denne side.<br>
Du kan begynde en artikel ved at skrive i boksen herunder.
-(se [[Wikipedia:Hjælp|hjælpen]] for yderligere information).<br>
-Hvis det ikke var din mening, så tryk på '''Tilbage''' eller '''Back''' knappen.",
+(se [[Wikipedia:Hjælp|hjælpen]] for yderligere information).<br>
+Hvis det ikke var din mening, så tryk på '''Tilbage''' eller '''Back''' knappen.",
"anontalkpagetext" => "---- ''Dette er en diskussionsside for en anonym bruger der
-ikke har oprettet en konto endnu eller ikke bruger den. Vi er derfor nødt til at
+ikke har oprettet en konto endnu eller ikke bruger den. Vi er derfor nødt til at
bruge den nummeriske [[IP-adresse]] til at identificere ham eller hende.
-En IP-adresse kan være delt mellem flere brugere. Hvis du er en anonym bruger
-og syntes, at du har fået irrelevante kommentarer på sådan en side, så vær
-venlig, at oprette en brugerkonto og [[Speciel:Userlogin|logge på]], så vi undgår fremtidige
+En IP-adresse kan være delt mellem flere brugere. Hvis du er en anonym bruger
+og syntes, at du har fået irrelevante kommentarer på sådan en side, så vær
+venlig, at oprette en brugerkonto og [[Speciel:Userlogin|logge på]], så vi undgår fremtidige
forvekslinger med andre anonyme brugere.'' ",
-"noarticletext" => "(Der er på nuværende tidspunkt ingen tekst på denne
+"noarticletext" => "(Der er på nuværende tidspunkt ingen tekst på denne
side)",
"updated" => "(Opdateret)",
"note" => "<strong>Note:</strong> ",
-"previewnote" => "Husk at dette er kun en forhåndsvisning, siden er ikke
+"previewnote" => "Husk at dette er kun en forhåndsvisning, siden er ikke
gemt endnu!",
-"previewconflict" => "Denne forhåndsvisning er resultatet af den
-redigérbare tekst ovenfor,
-sådan vil det komme til at se ud hvis du vælger at gemme teksten.",
+"previewconflict" => "Denne forhåndsvisning er resultatet af den
+redigérbare tekst ovenfor,
+sådan vil det komme til at se ud hvis du vælger at gemme teksten.",
"editing" => "Redigerer $1",
"sectionedit" => " (afsnit)",
"commentedit" => " (kommentar)",
"editconflict" => "Redigeringskonflikt: $1",
-"explainconflict" => "Nogen har ændret denne side, efter du
-startede på at redigere den.
-Den øverste tekstboks indeholder den nuværende tekst.
-Dine ændringer er vist i den nederste tekstboks.
-Du er nødt til at sammenflette dine ændringer med den eksisterende tekst.
-<b>Kun</b> teksten i den øverste tekstboks vil blive gemt når du
+"explainconflict" => "Nogen har ændret denne side, efter du
+startede på at redigere den.
+Den øverste tekstboks indeholder den nuværende tekst.
+Dine ændringer er vist i den nederste tekstboks.
+Du er nødt til at sammenflette dine ændringer med den eksisterende tekst.
+<b>Kun</b> teksten i den øverste tekstboks vil blive gemt når du
trykker \"Gem side\".\n<p>",
"yourtext" => "Din tekst",
"storedversion" => "Den gemte version",
"editingold" => "<strong>ADVARSEL: Du redigerer en gammel version
af denne side.
-Hvis du gemmer den, vil alle ændringer foretaget siden denne revision blive
+Hvis du gemmer den, vil alle ændringer foretaget siden denne revision blive
overskrevet.</strong>\n",
"yourdiff" => "Forskelle",
-"copyrightwarning" => "Læg mærke til at alle bidrag til Wikipedia er
+"copyrightwarning" => "Læg mærke til at alle bidrag til Wikipedia er
at betragte som udgivet under GNU Free Documentation License
(se $1 for detaljer).
-Hvis du ikke vil have din tekst redigeret uden nåde og kopieret efter
-forgodtbefindene, så skal du ikke lægge det her.<br>
-Du lover os også, at du skrev teksten selv, kopierede fra en
+Hvis du ikke vil have din tekst redigeret uden nåde og kopieret efter
+forgodtbefindene, så skal du ikke lægge det her.<br>
+Du lover os også, at du skrev teksten selv, kopierede fra en
public domain eller lignende fri ressource.
-<strong>LÆG ALDRIG MATERIALE HER SOM ER BESKYTTET AF ANDRES OPHAVSRET UDEN
+<strong>LÆG ALDRIG MATERIALE HER SOM ER BESKYTTET AF ANDRES OPHAVSRET UDEN
DERES TILLADELSE!</strong>",
"longpagewarning" => "ADVARSEL: Denne side er $1 kilobytes lang; nogle
-browsere kan have problemer med at redigerer sider der nærmer sig eller
-er længere end 32kb. Overvej om ikke siden kan deles op i mindre dele.",
-"readonlywarning" => "ADVARSEL: Databasen er låst på grund af vedligeholdelse,
-så du kan ikke gemme dine ændringer lige nu. Det kan godt være en god ide at
-kopiere din tekst til en tekstfil, så du kan gemme den til senere.",
-"protectedpagewarning" => "ADVARSEL: Denne side er låst, så kun administratorer
-kan redigere den. Sørg for at du følger
+browsere kan have problemer med at redigerer sider der nærmer sig eller
+er længere end 32kb. Overvej om ikke siden kan deles op i mindre dele.",
+"readonlywarning" => "ADVARSEL: Databasen er låst på grund af vedligeholdelse,
+så du kan ikke gemme dine ændringer lige nu. Det kan godt være en god ide at
+kopiere din tekst til en tekstfil, så du kan gemme den til senere.",
+"protectedpagewarning" => "ADVARSEL: Denne side er låst, så kun administratorer
+kan redigere den. Sørg for at du følger
<a href='$wgScriptPath/$wgMetaNamespace:Politik_for_beskyttede_sider'>politiken for
beskyttede sider</a>.",
@@ -440,64 +473,64 @@ beskyttede sider</a>.",
"nohistory" => "Der er ingen versionshistorik for denne side.",
"revnotfound" => "Versionen er ikke fundet",
"revnotfoundtext" => "Den gamle version af den side du spurgte efter kan
-ikke findes. Kontrollér den URL du brugte til at få adgang til denne side.\n",
-"loadhist" => "Indlæser sidens historik",
-"currentrev" => "Nuværende version",
+ikke findes. Kontrollér den URL du brugte til at få adgang til denne side.\n",
+"loadhist" => "Indlæser sidens historik",
+"currentrev" => "Nuværende version",
"revisionasof" => "Versionen fra $1",
-"cur" => "nuværende",
-"next" => "næste",
+"cur" => "nuværende",
+"next" => "næste",
"last" => "forrige",
"orig" => "originale",
-"histlegend" => "Forklaring: (nuværende) = forskel til den nuværende
-version, (forrige) = forskel til den forrige version, M = mindre ændring",
+"histlegend" => "Forklaring: (nuværende) = forskel til den nuværende
+version, (forrige) = forskel til den forrige version, M = mindre ændring",
# Diffs
#
"difference" => "(Forskelle mellem versioner)",
-"loadingrev" => "indlæser version for at se forskelle",
+"loadingrev" => "indlæser version for at se forskelle",
"lineno" => "Linje $1:",
-"editcurrent" => "Redigér den nuværende version af denne side",
+"editcurrent" => "Redigér den nuværende version af denne side",
# Search results
#
-"searchresults" => "Søgeresultater",
-"searchhelppage" => "Wikipedia:Søgning",
-"searchingwikipedia" => "Søgning på Wikipedia",
-"searchresulttext" => "For mere information om søgning på Wikipedia, se $1.",
-"searchquery" => "For forespørgsel \"$1\"",
-"badquery" => "Forkert udformet forespørgsel",
-"badquerytext" => "Vi kunne ikke udføre din forespørgsel.
-Det er sandsynligvis fordi du har forsøgt at søge efter et ord med
-færre end tre bogstaver, hvilket ikke understøttes endnu.
-Det kan også være du har skrevet forkert, for
+"searchresults" => "Søgeresultater",
+"searchhelppage" => "Wikipedia:Søgning",
+"searchingwikipedia" => "Søgning på Wikipedia",
+"searchresulttext" => "For mere information om søgning på Wikipedia, se $1.",
+"searchquery" => "For forespørgsel \"$1\"",
+"badquery" => "Forkert udformet forespørgsel",
+"badquerytext" => "Vi kunne ikke udføre din forespørgsel.
+Det er sandsynligvis fordi du har forsøgt at søge efter et ord med
+færre end tre bogstaver, hvilket ikke understøttes endnu.
+Det kan også være du har skrevet forkert, for
eksempel \"fisk og og skaldyr\".
-Prøv en anden forespørgsel.",
-"matchtotals" => "Forespørgslen \"$1\" matchede $2 artikeltitler
+Prøv en anden forespørgsel.",
+"matchtotals" => "Forespørgslen \"$1\" matchede $2 artikeltitler
og teksten i $3 artikler.",
-"nogomatch" => "Ingen sider med præcis denne titel eksisterer, prøver
-fuldtekstsøgning i stedet for. ",
-"titlematches" => "Artikeltitler der matchede forespørgslen",
-"notitlematches" => "Ingen artikeltitler matchede forespørgslen",
-"textmatches" => "Artikeltekster der matchede forespørgslen",
-"notextmatches" => "Ingen artikeltekster matchede forespørgslen",
+"nogomatch" => "Ingen sider med præcis denne titel eksisterer, prøver
+fuldtekstsøgning i stedet for. ",
+"titlematches" => "Artikeltitler der matchede forespørgslen",
+"notitlematches" => "Ingen artikeltitler matchede forespørgslen",
+"textmatches" => "Artikeltekster der matchede forespørgslen",
+"notextmatches" => "Ingen artikeltekster matchede forespørgslen",
"prevn" => "forrige $1",
-"nextn" => "næste $1",
+"nextn" => "næste $1",
"viewprevnext" => "Vis ($1) ($2) ($3).",
"showingresults" => "Nedenfor vises <b>$1</b> resultater startende med
nummer <b>$2</b>.",
"showingresultsnum" => "Herunder vises <b>$3</b> resultater startende med nummer <b>$2</b>.",
-"nonefound" => "<strong>Note</strong>: søgning uden resultat skyldes,
-at man søger efter almindelige ord som \"har\" og \"fra\",
-der ikke er indekseret, eller ved at specificere mere end et søgeord (da kun
-sider der indeholder alle søgeordene vil blive fundet).",
-"powersearch" => "Søg",
+"nonefound" => "<strong>Note</strong>: søgning uden resultat skyldes,
+at man søger efter almindelige ord som \"har\" og \"fra\",
+der ikke er indekseret, eller ved at specificere mere end et søgeord (da kun
+sider der indeholder alle søgeordene vil blive fundet).",
+"powersearch" => "Søg",
"powersearchtext" => "
-Søg i navnerum :<br>
+Søg i navnerum :<br>
$1<br>
-$2 List omdirigeringer &nbsp; Søg efter $3 $9",
-"searchdisabled" => "<p>Søgefunktionen er midlertidigt afbrudt på grund af
-for stort pres på serveren; vi håber vi kan sætte den på igen når vi har
-opgraderet softwaren. I mellemtiden kan du søge via google:</p>
+$2 List omdirigeringer &nbsp; Søg efter $3 $9",
+"searchdisabled" => "<p>Søgefunktionen er midlertidigt afbrudt på grund af
+for stort pres på serveren; vi håber vi kan sætte den på igen når vi har
+opgraderet softwaren. I mellemtiden kan du søge via google:</p>
",
"googlesearch" => "<!-- SiteSearch Google -->
@@ -526,14 +559,14 @@ value=\"{$wgServer}\" checked> {$wgServer} <br>
# Preferences page
#
"preferences" => "Indstillinger",
-"prefsnologin" => "Ikke logget på",
-"prefsnologintext" => "Du skal være <a href=\"" .
- wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
-for at ændre brugerindstillinger.",
-"prefslogintext" => "Du logget på som \"$1\".
+"prefsnologin" => "Ikke logget på",
+"prefsnologintext" => "Du skal være <a href=\"" .
+ wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
+for at ændre brugerindstillinger.",
+"prefslogintext" => "Du logget på som \"$1\".
Dit interne ID-nummer er $2.
-Se [[Wikipedia:Hvordan sætter jeg mine indstillinger]] for en forklaring på de forskellige indstillinger.",
+Se [[Wikipedia:Hvordan sætter jeg mine indstillinger]] for en forklaring på de forskellige indstillinger.",
"prefsreset" => "Indstillingerne er blevet gendannet fra lageret.",
"qbsettings" => "Indstillinger for hurtigmenu",
"changepassword" => "Skift adgangskode",
@@ -550,96 +583,96 @@ Se [[Wikipedia:Hvordan sætter jeg mine indstillinger]] for en forklaring på de f
"oldpassword" => "Gammel adgangskode",
"newpassword" => "Ny adgangskode",
"retypenew" => "Gentag ny adgangskode",
-"textboxsize" => "Tekstboks-størrelse",
-"rows" => "Rækker",
+"textboxsize" => "Tekstboks-størrelse",
+"rows" => "Rækker",
"columns" => "Kolonner",
-"searchresultshead" => "Indstillinger for søgeresultater",
+"searchresultshead" => "Indstillinger for søgeresultater",
"resultsperpage" => "Resultater pr. side",
"contextlines" => "Linjer pr. resultat",
"contextchars" => "Tegn pr. linje i resultatet",
-"stubthreshold" => "Grænse for visning af stubs",
-"recentchangescount" => "Antallet af titler på siden \"seneste ændringer\"",
+"stubthreshold" => "Grænse for visning af stubs",
+"recentchangescount" => "Antallet af titler på siden \"seneste ændringer\"",
"savedprefs" => "Dine indstillinger er blevet gemt.",
"timezonetext" => "Indtast antal timer din lokale tid er forskellig
fra serverens tid (UTC). Der bliver automatisk tilpasset til dansk tid,
ellers skulle man for eksempel for dansk vintertid, indtaste \"1\"
-(og \"2\" når vi er på sommertid).",
+(og \"2\" når vi er på sommertid).",
"localtime" => "Lokaltid",
"timezoneoffset" => "Forskel",
"servertime" => "Serverens tid er nu",
"guesstimezone" => "Hent tidszone fra browseren",
-"emailflag" => "Fravælg muligheden for at få e-mail fra andre brugere",
-"defaultns" => "Søg som standard i disse navnerum:",
+"emailflag" => "Fravælg muligheden for at få e-mail fra andre brugere",
+"defaultns" => "Søg som standard i disse navnerum:",
# Recent changes
#
-"changes" => "ændringer",
-"recentchanges" => "Seneste ændringer",
+"changes" => "ændringer",
+"recentchanges" => "Seneste ændringer",
# This is the default text, and can be overriden by editing [[Wikipedia::Recentchanges]]
-"recentchangestext" => "Se de senest ændrede sider i Wikipedia på denne side.",
-"rcloaderr" => "Indlæser seneste ændrede sider",
-"rcnote" => "Nedenfor er de seneste <strong>$1</strong> ændringer i de
+"recentchangestext" => "Se de senest ændrede sider i Wikipedia på denne side.",
+"rcloaderr" => "Indlæser seneste ændrede sider",
+"rcnote" => "Nedenfor er de seneste <strong>$1</strong> ændringer i de
sidste <strong>$2</strong> dage.",
-"rcnotefrom" => "Nedenfor er ændringerne fra <b>$2</b> indtil <b>$1</b> vist.",
-"rclistfrom" => "Vis nye ændringer startende fra $1",
-"rclinks" => "Vis seneste $1 ændringer i de sidste $2 dage; $3 mindre ændringer.",
-"rchide" => "i $4 form; $1 mindre ændringer; $2 andre navnerum; $3 mere end en redigering.",
-"rcliu" => "; $1 redigeringer fra brugere der er logget på",
+"rcnotefrom" => "Nedenfor er ændringerne fra <b>$2</b> indtil <b>$1</b> vist.",
+"rclistfrom" => "Vis nye ændringer startende fra $1",
+"rclinks" => "Vis seneste $1 ændringer i de sidste $2 dage; $3 mindre ændringer.",
+"rchide" => "i $4 form; $1 mindre ændringer; $2 andre navnerum; $3 mere end en redigering.",
+"rcliu" => "; $1 redigeringer fra brugere der er logget på",
"diff" => "forskel",
"hist" => "historik",
"hide" => "skjul",
"show" => "vis",
"tableform" => "tabel",
"listform" => "liste",
-"nchanges" => "$1 ændringer",
+"nchanges" => "$1 ændringer",
"minoreditletter" => "M",
"newpageletter" => "N",
# Upload
#
-"upload" => "Læg en fil op",
-"uploadbtn" => "Læg en fil op",
-"uploadlink" => "Læg en fil op",
-"reupload" => "Læg en fil op igen",
-"reuploaddesc" => "Tilbage til formularen til at lægge filer op.",
-"uploadnologin" => "Ikke logget på",
-"uploadnologintext" => "Du skal være <a href=\"" .
- wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
-for at kunne lægge filer op.",
-"uploadfile" => "Læg filen op",
-"uploaderror" => "Fejl under oplægning af fil",
-"uploadtext" => "<strong>STOP!</strong> Før du lægger filer op her,
-så vær sikker på du har læst og følger Wikipedias <a href=\"" .
+"upload" => "Læg en fil op",
+"uploadbtn" => "Læg en fil op",
+"uploadlink" => "Læg en fil op",
+"reupload" => "Læg en fil op igen",
+"reuploaddesc" => "Tilbage til formularen til at lægge filer op.",
+"uploadnologin" => "Ikke logget på",
+"uploadnologintext" => "Du skal være <a href=\"" .
+ wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
+for at kunne lægge filer op.",
+"uploadfile" => "Læg filen op",
+"uploaderror" => "Fejl under oplægning af fil",
+"uploadtext" => "<strong>STOP!</strong> Før du lægger filer op her,
+så vær sikker på du har læst og følger Wikipedias <a href=\"" .
wfLocalUrlE( "Wikipedia:Politik om brug af billeder" ) . "\">politik om brug
af billeder</a>.
-<p>For at se eller søge i billeder, som tidligere er lagt op,
-gå til <a href=\"" . wfLocalUrlE( "Speciel:Imagelist" ) .
+<p>For at se eller søge i billeder, som tidligere er lagt op,
+gå til <a href=\"" . wfLocalUrlE( "Speciel:Imagelist" ) .
"\">listen over billeder</a>.
-Oplægning og sletninger er registreret i <a href=\"" .
+Oplægning og sletninger er registreret i <a href=\"" .
wfLocalUrlE( "Wikipedia:Upload_log" ) . "\">log over oplagte filer</a>.
-<p>Brug formularen herunder til at lægge nye billeder op, der kan bruges
+<p>Brug formularen herunder til at lægge nye billeder op, der kan bruges
som illustration i dine artikler.
-På de fleste browsere vil du se en \"Browse...\" knap eller en
+PÃ¥ de fleste browsere vil du se en \"Browse...\" knap eller en
\"Gennemse...\" knap, som vil
-bringe dig til dit styresystemets standard-dialog til åbning af filer.
-Når du vælger en fil, vil navnet på filen dukke op i tekstfeltet
+bringe dig til dit styresystemets standard-dialog til åbning af filer.
+Når du vælger en fil, vil navnet på filen dukke op i tekstfeltet
ved siden af knappen.
-Du skal også verificere, at du ikke er ved at bryde nogens ophavsret.
-Det gør du ved at sætte et mærke i checkboksen.
-Tryk på \"Læg op\"-knappen for at lægge filen op.
+Du skal også verificere, at du ikke er ved at bryde nogens ophavsret.
+Det gør du ved at sætte et mærke i checkboksen.
+Tryk på \"Læg op\"-knappen for at lægge filen op.
Dette kan godt tage lidt tid hvis du har en langsom internetforbindelse.
<p>De foretrukne formater er JPEG til fotografiske billeder, PNG
-til tegninger og andre små billeder, og OGG til lyd.
-Sørg for at navngive din fil med et beskrivende navn for at undgå
+til tegninger og andre små billeder, og OGG til lyd.
+Sørg for at navngive din fil med et beskrivende navn for at undgå
forvirring om indholdet.
-For at bruge billedet i en artikel, så brug et link af denne slags
+For at bruge billedet i en artikel, så brug et link af denne slags
<b>[[billede:fil.jpg]]</b> eller <b>[[billede:fil.png|alternativ tekst]]</b>
eller <b>[[media:fil.ogg]]</b> for lyd.
-<p>Læg mærke til at præcis som med Wikipedia-sider, så kan og må andre gerne
+<p>Læg mærke til at præcis som med Wikipedia-sider, så kan og må andre gerne
redigere eller
-slette de filer, du har lagt op, hvis de mener det hjælper encyklopædien, og
-du kan blive blokeret fra at lægge op hvis du misbruger systemet.",
-"uploadlog" => "oplægningslog",
+slette de filer, du har lagt op, hvis de mener det hjælper encyklopædien, og
+du kan blive blokeret fra at lægge op hvis du misbruger systemet.",
+"uploadlog" => "oplægningslog",
"uploadlogpage" => "Upload_log",
"uploadlogpagetext" => "Herunder er der en liste med de filer, som er lagt
op senest. Alle de viste tider er serverens tid (UTC).
@@ -648,27 +681,27 @@ op senest. Alle de viste tider er serverens tid (UTC).
",
"filename" => "Filnavn",
"filedesc" => "Beskrivelse",
-"affirmation" => "Jeg bekræfter, at ophavsretshaveren til denne fil
+"affirmation" => "Jeg bekræfter, at ophavsretshaveren til denne fil
er enig i, at filen udgives under betingelserne for $1.",
"copyrightpage" => "Wikipedia:Ophavsret",
"copyrightpagename" => "Wikipedia ophavsret",
"uploadedfiles" => "Filer som er lagt op",
-"noaffirmation" => "Du skal bekræfte, at du ikke bryder nogens ophavsret
-ved at lægge denne fil op.",
-"ignorewarning" => "Ignorér advarslen og gem filen alligevel.",
-"minlength" => "Navnet på filen skal være på mindst tre bogstaver.",
-"badfilename" => "Navnet på filen er blevet ændret til \"$1\".",
+"noaffirmation" => "Du skal bekræfte, at du ikke bryder nogens ophavsret
+ved at lægge denne fil op.",
+"ignorewarning" => "Ignorér advarslen og gem filen alligevel.",
+"minlength" => "Navnet på filen skal være på mindst tre bogstaver.",
+"badfilename" => "Navnet på filen er blevet ændret til \"$1\".",
"badfiletype" => "\".$1\" er ikke et af de anbefalede filformater.",
"largefile" => "Det anbefales, at filer ikke fylder mere end 100kb.",
-"successfulupload" => "Oplægning er gennemført med success",
+"successfulupload" => "Oplægning er gennemført med success",
"fileuploaded" => "Filen \"$1\" er lagt op med success.
-Følg dette link: ($2) til siden med beskrivelse og udfyld
-information omkring filen, såsom hvor den kom fra, hvornår den er lavet
+Følg dette link: ($2) til siden med beskrivelse og udfyld
+information omkring filen, såsom hvor den kom fra, hvornår den er lavet
og af hvem, og andre ting du ved om filen.",
-"uploadwarning" => "Oplægningsadvarsel",
+"uploadwarning" => "Oplægningsadvarsel",
"savefile" => "Gem fil",
"uploadedimage" => "Lagde \"$1\" op",
-"uploaddisabled" => "Desværre er funktionen til at lægge billeder op afbrudt på denne server.",
+"uploaddisabled" => "Desværre er funktionen til at lægge billeder op afbrudt på denne server.",
# Image list
#
@@ -676,23 +709,23 @@ og af hvem, og andre ting du ved om filen.",
"imagelisttext" => "Herunder er en liste med $1 billeder sorteret $2.",
"getimagelist" => "henter billedliste",
"ilshowmatch" => "Vis alle billeder med navne der matcher",
-"ilsubmit" => "Søg",
+"ilsubmit" => "Søg",
"showlast" => "Vis de sidste $1 billeder sorteret $2.",
"all" => "alle",
"byname" => "efter navn",
"bydate" => "efter dato",
-"bysize" => "efter størrelse",
+"bysize" => "efter størrelse",
"imgdelete" => "slet",
"imgdesc" => "beskrivelse",
-"imglegend" => "Forklaring: (beskrivelse) = vis/redigér billedebeskrivelse.",
+"imglegend" => "Forklaring: (beskrivelse) = vis/redigér billedebeskrivelse.",
"imghistory" => "Billedhistorik",
"revertimg" => "gendan",
"deleteimg" => "slet",
-"imghistlegend" => "Forklaring: (nuværende) = dette er det nuværende billede,
+"imghistlegend" => "Forklaring: (nuværende) = dette er det nuværende billede,
(slet) = slet denne gamle version, (gendan) = gendan en gammel version.
-<br><i>Klik på en dato for at se billedet, som er lagt op den dag</i>.",
+<br><i>Klik på en dato for at se billedet, som er lagt op den dag</i>.",
"imagelinks" => "Billedehenvisninger",
-"linkstoimage" => "De følgende sider henviser til dette billede:",
+"linkstoimage" => "De følgende sider henviser til dette billede:",
"nolinkstoimage" => "Der er ingen sider der henviser til dette billede.",
# Statistics
@@ -704,11 +737,11 @@ og af hvem, og andre ting du ved om filen.",
Dette er inklusiv \"diskussion\"-sider, sider om Wikipedia,
omdirigeringssider, og andre der sikkert ikke kan
kvalificeres som artikler.
-Hvis man ekskludere disse, så er der <b>$2</b> sider som sandsynligvis er
+Hvis man ekskludere disse, så er der <b>$2</b> sider som sandsynligvis er
rigtige artikler.<p>
-Der har ialt været <b>$3</b> viste sider, og <b>$4</b> redigeringer af sider
+Der har ialt været <b>$3</b> viste sider, og <b>$4</b> redigeringer af sider
siden softwaren blev opdateret (25. september 2002).
-Det vil sige, der har været <b>$5</b> gennemsnitlige redigeringer pr. side,
+Det vil sige, der har været <b>$5</b> gennemsnitlige redigeringer pr. side,
og <b>$6</b> visninger pr. redigering.",
"userstatstext" => "Der er <b>$1</b> registrerede brugere.
<b>$2</b> af disse er administratorer (se $3).",
@@ -716,34 +749,34 @@ og <b>$6</b> visninger pr. redigering.",
# Maintenance Page
#
"maintenance" => "Vedligeholdelsesside",
-"maintnancepagetext" => "På denne side er der forskellige smarte
-værktøjer til at vedligeholde Wikipedia. Nogle af disse funktioner er ret
-hårde for databasen (de tager lang tid), så lad være med at opdatere siden
+"maintnancepagetext" => "PÃ¥ denne side er der forskellige smarte
+værktøjer til at vedligeholde Wikipedia. Nogle af disse funktioner er ret
+hårde for databasen (de tager lang tid), så lad være med at opdatere siden
hver gang du har rettet en enkelt ting ;-)",
"maintenancebacklink" => "Tilbage til vedligeholdelsessiden",
"disambiguations" => "Artikler med flertydige titler",
"disambiguationspage" => "Wikipedia:Henvisninger til artikler med flertydige titler",
-"disambiguationstext" => "De følgende artikler henviser til
+"disambiguationstext" => "De følgende artikler henviser til
<i>artikler med flertydige titler</i>. De skulle henvise til en ikke-flertydig
titel i stedet for.<br>En artikel bliver behandlet som flertydig, hvis den er
henvist fra $1.<br>Henvisninger fra andre navnerum er <i>ikke</i> listet her.",
"doubleredirects" => "Dobbelte omdirigeringer",
-"doubleredirectstext" => "<b>Bemærk:</b> Denne liste kan indeholde forkerte
+"doubleredirectstext" => "<b>Bemærk:</b> Denne liste kan indeholde forkerte
resultater. Det er som regel, fordi siden indeholder ekstra tekst under den
-første #REDIRECT.<br>\nHver linje indeholder henvisninger til den første og den
-anden omdirigering, og den første linje fra den anden omdirigeringstekst,
-det giver som regel den \"rigtige\" målartikel, som den første omdirigering
-skulle have peget på.",
-"brokenredirects" => "Dårlige omdirigeringer",
-"brokenredirectstext" => "De følgende omdirigeringer peger på en side der
+første #REDIRECT.<br>\nHver linje indeholder henvisninger til den første og den
+anden omdirigering, og den første linje fra den anden omdirigeringstekst,
+det giver som regel den \"rigtige\" målartikel, som den første omdirigering
+skulle have peget på.",
+"brokenredirects" => "DÃ¥rlige omdirigeringer",
+"brokenredirectstext" => "De følgende omdirigeringer peger på en side der
ikke eksisterer.",
"selflinks" => "Sider der henviser til sig selv",
-"selflinkstext" => "De følgende sider indeholder henvisninger til sig selv,
+"selflinkstext" => "De følgende sider indeholder henvisninger til sig selv,
men det burde de ikke.",
"mispeelings" => "Sider med stavefejl",
-"mispeelingstext" => "De følgende sider indeholder en af de
-almindelig stavefejl, som er listet på $1. Den korrekte stavemåde kan
-angives i paranteser efter den fejlagtige stavemåde (sådan her).",
+"mispeelingstext" => "De følgende sider indeholder en af de
+almindelig stavefejl, som er listet på $1. Den korrekte stavemåde kan
+angives i paranteser efter den fejlagtige stavemåde (sådan her).",
"mispeelingspage" => "Liste af almindelige stavefejl",
"missinglanguagelinks" => "Manglende sproghenvisninger",
"missinglanguagelinksbutton" => "Find manglende sproghenvisninger for",
@@ -754,15 +787,15 @@ henvisning til den samme artikel i $1. Omdirigeringer og underartikler er
# Miscellaneous special pages
#
-"orphans" => "Forældreløse artikler",
-"lonelypages" => "Forældreløse artikler",
+"orphans" => "Forældreløse artikler",
+"lonelypages" => "Forældreløse artikler",
"unusedimages" => "Ubrugte billeder",
-"popularpages" => "Populære artikler",
+"popularpages" => "Populære artikler",
"nviews" => "$1 visninger",
-"wantedpages" => "Ønskede artikler",
+"wantedpages" => "Ønskede artikler",
"nlinks" => "$1 henvisninger",
"allpages" => "Alle artikler",
-"randompage" => "Tilfældig artikel",
+"randompage" => "Tilfældig artikel",
"shortpages" => "Korte artikler",
"longpages" => "Lange artikler",
"listusers" => "Brugerliste",
@@ -771,21 +804,21 @@ henvisning til den samme artikel i $1. Omdirigeringer og underartikler er
"sysopspheading" => "Specielle sider til sysop-brug",
"developerspheading" => "Specielle sider til developer-brug",
"protectpage" => "Beskyt side",
-"recentchangeslinked" => "Relaterede ændringer",
+"recentchangeslinked" => "Relaterede ændringer",
"rclsub" => "(til sider henvist fra \"$1\")",
"debug" => "Aflus",
"newpages" => "Nyeste artikler",
-"ancientpages" => "Ældste artikler",
+"ancientpages" => "Ældste artikler",
"intl" => "Sproghenvisninger",
"movethispage" => "Flyt side",
-"unusedimagestext" => "<p>Læg mærke til, at andre websider
-såsom de andre internationale Wikipediaer måske henviser til et billede med
-en direkte URL, så det kan stadig være listet her, selvom det er
+"unusedimagestext" => "<p>Læg mærke til, at andre websider
+såsom de andre internationale Wikipediaer måske henviser til et billede med
+en direkte URL, så det kan stadig være listet her, selvom det er
i aktivt brug.",
"booksources" => "Bogkilder",
"booksourcetext" => "Herunder er en liste af henvisninger til steder der
-udlåner og/eller sælger nye og brugte bøger, og som måske også har
-yderligere information om bøger du leder efter.
+udlåner og/eller sælger nye og brugte bøger, og som måske også har
+yderligere information om bøger du leder efter.
Wikipedia er ikke associeret med nogen af disse steder,
og denne liste skal ikke ses som en anbefaling af disse.",
"alphaindexline" => "$1 til $2",
@@ -793,18 +826,18 @@ og denne liste skal ikke ses som en anbefaling af disse.",
# Email this user
#
"mailnologin" => "Ingen afsenderadresse",
-"mailnologintext" => "Du skal være <a href=\"" .
- wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
+"mailnologintext" => "Du skal være <a href=\"" .
+ wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
og have en gyldig e-mailadresse sat i dine <a href=\"" .
wfLocalUrl( "Speciel:Preferences" ) . "\">indstillinger</a>
for at sende e-mail til andre brugere.",
"emailuser" => "E-mail til denne bruger",
"emailpage" => "E-mail bruger",
"emailpagetext" => "Hvis denne bruger har sat en gyldig e-mailadresse i
-sine brugerindstillinger, så vil formularen herunder sende en enkelt
+sine brugerindstillinger, så vil formularen herunder sende en enkelt
besked.
Den e-mailadresse, du har sat i dine brugerindstillinger, vil dukke op
-i \"Fra\" feltet på denne mail, så modtageren er i stand til at svare.",
+i \"Fra\" feltet på denne mail, så modtageren er i stand til at svare.",
"noemailtitle" => "Ingen e-mailadresse",
"noemailtext" => "Denne bruger har ikke angivet en gyldig e-mailadresse,
eller har valgt ikke at modtage e-mail fra andre brugere.",
@@ -818,65 +851,65 @@ eller har valgt ikke at modtage e-mail fra andre brugere.",
# Watchlist
#
-"watchlist" => "Overvågningsliste",
+"watchlist" => "Overvågningsliste",
"watchlistsub" => "(for bruger \"$1\")",
-"nowatchlist" => "Du har ingenting i din overvågningsliste.",
-"watchnologin" => "Ikke logget på",
-"watchnologintext" => "Du skal være <a href=\"" .
- wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
-for at kunne ændre din overvågningsliste.",
-"addedwatch" => "Tilføjet til din overvågningsliste",
-"addedwatchtext" => "Siden \"$1\" er blevet tilføjet til din <a href=\"" .
- wfLocalUrl( "Speciel:Watchlist" ) . "\">overvågningsliste</a>.
-Fremtidige ændringer til denne side og den tilhørende diskussionsside vil
-blive listet her, og siden vil fremstå <b>fremhævet</b> i <a href=\"" .
+"nowatchlist" => "Du har ingenting i din overvågningsliste.",
+"watchnologin" => "Ikke logget på",
+"watchnologintext" => "Du skal være <a href=\"" .
+ wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
+for at kunne ændre din overvågningsliste.",
+"addedwatch" => "Tilføjet til din overvågningsliste",
+"addedwatchtext" => "Siden \"$1\" er blevet tilføjet til din <a href=\"" .
+ wfLocalUrl( "Speciel:Watchlist" ) . "\">overvågningsliste</a>.
+Fremtidige ændringer til denne side og den tilhørende diskussionsside vil
+blive listet her, og siden vil fremstå <b>fremhævet</b> i <a href=\"" .
wfLocalUrl( "Speciel:Recentchanges" ) . "\">listen med de seneste
-ændringer</a> for at gøre det lettere at finde den.</p>
+ændringer</a> for at gøre det lettere at finde den.</p>
-<p>Hvis du senere vil fjerne siden fra din overvågningsliste, så klik
-\"Fjern overvågning\" ude i siden.",
-"removedwatch" => "Fjernet fra overvågningsliste",
+<p>Hvis du senere vil fjerne siden fra din overvågningsliste, så klik
+\"Fjern overvågning\" ude i siden.",
+"removedwatch" => "Fjernet fra overvågningsliste",
"removedwatchtext" => "Siden \"$1\" er blevet fjernet fra din
-overvågningsliste.",
-"watchthispage" => "Overvåg side",
-"unwatchthispage" => "Fjern overvågning",
+overvågningsliste.",
+"watchthispage" => "Overvåg side",
+"unwatchthispage" => "Fjern overvågning",
"notanarticle" => "Ikke en artikel",
-"watchnochange" => "Ingen af siderne i din overvågningsliste er ændret i den valgte periode.",
-"watchdetails" => "($1 sider i din overvågningsliste, fratrukket alle diskussionssiderne;
-$2 totalt antal sider ændret i den valgte periode;
+"watchnochange" => "Ingen af siderne i din overvågningsliste er ændret i den valgte periode.",
+"watchdetails" => "($1 sider i din overvågningsliste, fratrukket alle diskussionssiderne;
+$2 totalt antal sider ændret i den valgte periode;
$3...
-<a href='$4'>vis og redigér den komplette liste</a>.)",
-"watchmethod-recent" => "tjekker seneste ændringer for sider i din overvågningsliste",
-"watchmethod-list" => "tjekker seneste ændringer for sider i din overvågningsliste",
-"removechecked" => "Fjern valgte sider fra min overvågningsliste",
-"watchlistcontains" => "Din overvågningsliste indeholder $1 sider.",
-"watcheditlist" => "Her er en alfabetisk liste over siderne i din overvågningsliste.
-Vælg de sider du vil fjerne fra din overvågningsliste
-og klik på 'fjern valgte sider fra min overvågningsliste' knappen
-i bunden af skærmen.",
-"removingchecked" => "Fjerner de valgte sider fra din overvågningsliste...",
+<a href='$4'>vis og redigér den komplette liste</a>.)",
+"watchmethod-recent" => "tjekker seneste ændringer for sider i din overvågningsliste",
+"watchmethod-list" => "tjekker seneste ændringer for sider i din overvågningsliste",
+"removechecked" => "Fjern valgte sider fra min overvågningsliste",
+"watchlistcontains" => "Din overvågningsliste indeholder $1 sider.",
+"watcheditlist" => "Her er en alfabetisk liste over siderne i din overvågningsliste.
+Vælg de sider du vil fjerne fra din overvågningsliste
+og klik på 'fjern valgte sider fra min overvågningsliste' knappen
+i bunden af skærmen.",
+"removingchecked" => "Fjerner de valgte sider fra din overvågningsliste...",
"couldntremove" => "Kunne ikke fjerne '$1'...",
"iteminvalidname" => "Problem med '$1', ugyldigt navn...",
-"wlnote" => "Nedenfor er de seneste $1 ændringer i de sidste <b>$2</b> timer.",
+"wlnote" => "Nedenfor er de seneste $1 ændringer i de sidste <b>$2</b> timer.",
# Delete/protect/revert
#
"deletepage" => "Slet side",
-"confirm" => "Bekræft",
+"confirm" => "Bekræft",
"excontent" => "indholdet var:",
-"exbeforeblank" => "indholdet før siden blev tømt var:",
+"exbeforeblank" => "indholdet før siden blev tømt var:",
"exblank" => "siden var tom",
-"confirmdelete" => "Bekræft sletning",
+"confirmdelete" => "Bekræft sletning",
"deletesub" => "(Sletter \"$1\")",
"historywarning" => "Advarsel: Siden du er ved at slette har en historie: ",
"confirmdeletetext" => "Du er ved permanent at slette en side
-eller et billede sammen med hele den tilhørende historie fra databasen.
-Bekræft venligst at du virkelig vil gøre dette, at du forstår
-konsekvenserne, og at du gør dette i overensstemmelse med
+eller et billede sammen med hele den tilhørende historie fra databasen.
+Bekræft venligst at du virkelig vil gøre dette, at du forstår
+konsekvenserne, og at du gør dette i overensstemmelse med
[[Wikipedia:Politik]].",
"confirmcheck" => "Ja, jeg vil virkelig slette den her.",
-"actioncomplete" => "Gennemført",
+"actioncomplete" => "Gennemført",
"deletedtext" => "\"$1\" er slettet.
Se $2 for en fortegnelse over de nyeste sletninger.",
"deletedarticle" => "slettet \"$1\"",
@@ -889,7 +922,7 @@ Alle tider er serverens tid (UTC).
"deletionlog" => "sletningslog",
"reverted" => "Gendannet en tidligere version",
"deletecomment" => "Begrundelse for sletning",
-"imagereverted" => "Gendannelse af en tidligere version gennemført med
+"imagereverted" => "Gendannelse af en tidligere version gennemført med
success.",
"rollback" => "Fjern redigeringer",
"rollbacklink" => "fjern redigering",
@@ -905,7 +938,7 @@ Den seneste redigering er foretaget af [[Bruger:$3|$3]] ([[Bruger diskussion:$3|
"editcomment" => "Kommentaren til redigeringen var: \"<i>$1</i>\".",
"revertpage" => "Gendannet siden til tidligere version redigeret af $1",
"protectlogpage" => "Liste_over_beskyttede_sider",
-"protectlogtext" => "Herunder er en liste over sider der er blevet beskyttet/har fået fjernet beskyttelsen.
+"protectlogtext" => "Herunder er en liste over sider der er blevet beskyttet/har fået fjernet beskyttelsen.
Se [[Wikipedia:Beskyttet side]] for mere information.",
"protectedarticle" => "beskyttet [[$1]]",
"unprotectedarticle" => "fjernet beskyttelse [[$1]]",
@@ -913,15 +946,15 @@ Se [[Wikipedia:Beskyttet side]] for mere information.",
# Undelete
"undelete" => "Gendan en slettet side",
"undeletepage" => "Se og gendan slettede sider",
-"undeletepagetext" => "De følgende sider er slettede, men de findes
+"undeletepagetext" => "De følgende sider er slettede, men de findes
stadig i arkivet og kan gendannes. Arkivet blivet periodevis slettet.",
"undeletearticle" => "Gendan slettet artikel",
"undeleterevisions" => "$1 revisioner arkiveret",
"undeletehistory" => "Hvis du gendanner siden, vil alle de historiske
-revisioner også blive gendannet. Hvis en ny side med det samme navn
-er oprettet siden denne blev slettet, så vil de gendannede revisioner
+revisioner også blive gendannet. Hvis en ny side med det samme navn
+er oprettet siden denne blev slettet, så vil de gendannede revisioner
dukke op i den tidligere historie, og den nyeste revision vil forblive
-på siden.",
+på siden.",
"undeleterevision" => "Slettet version fra $1",
"undeletebtn" => "Gendan!",
"undeletedarticle" => "gendannet \"$1\"",
@@ -934,20 +967,20 @@ sletninger og gendannelser.",
"contributions" => "Brugerbidrag",
"mycontris" => "Mine bidrag",
"contribsub" => "For $1",
-"nocontribs" => "Ingen ændringer er fundet som matcher disse kriterier.",
-"ucnote" => "Herunder er denne brugers sidste <b>$1</b> ændringer i de
+"nocontribs" => "Ingen ændringer er fundet som matcher disse kriterier.",
+"ucnote" => "Herunder er denne brugers sidste <b>$1</b> ændringer i de
sidste <b>$2</b> dage.",
-"uclinks" => "Vis de sidste $1 ændringer; vis de sidste $2 dage.",
+"uclinks" => "Vis de sidste $1 ændringer; vis de sidste $2 dage.",
"uctop" => " (top)" ,
# What links here
#
"whatlinkshere" => "Hvad henviser hertil",
-"notargettitle" => "Intet mål",
-"notargettext" => "Du har ikke specificeret en målside eller bruger
-at udføre denne funktion på.",
+"notargettitle" => "Intet mål",
+"notargettext" => "Du har ikke specificeret en målside eller bruger
+at udføre denne funktion på.",
"linklistsub" => "(Liste over henvisninger)",
-"linkshere" => "De følgende sider henviser her til:",
+"linkshere" => "De følgende sider henviser her til:",
"nolinkshere" => "Ingen sider henviser her til.",
"isredirect" => "omdirigeringsside",
@@ -956,119 +989,119 @@ at udføre denne funktion på.",
"blockip" => "Bloker bruger",
"blockiptext" => "Brug formularen herunder til at blokere for skriveadgangen
fra en specifik IP-adresse eller et brugernavn.
-Dette må kun gøres for at forhindre vandalisme, og i
+Dette må kun gøres for at forhindre vandalisme, og i
overensstemmelse med [[Wikipedia:Politik|Wikipedia politik]].
Udfyld en speciel begrundelse herunder (for eksempel med et citat fra
-sider der har været udsat for vandalisme).",
+sider der har været udsat for vandalisme).",
"ipaddress" => "IP-Adresse/brugernavn",
"ipbreason" => "Begrundelse",
"ipbsubmit" => "Bloker denne bruger",
"badipaddress" => "IP-adressen/brugernavnet er udformet forkert eller eksistere ikke.",
"noblockreason" => "Du skal angive en begrundelse for denne blokering.",
-"blockipsuccesssub" => "Blokering udført med success",
+"blockipsuccesssub" => "Blokering udført med success",
"blockipsuccesstext" => "\"$1\" er blevet blokeret.
<br>Se [[Speciel:Ipblocklist|IP blokeringslisten]] for alle blokeringer.",
-"unblockip" => "Ophæv blokering af bruger",
+"unblockip" => "Ophæv blokering af bruger",
"unblockiptext" => "Brug formularen herunder for at gendanne skriveadgangen
for en tidligere blokeret IP-adresse eller bruger.",
-"ipusubmit" => "Ophæv blokeringen af denne adresse",
-"ipusuccess" => "\"$1\" har fået ophævet blokeringen",
+"ipusubmit" => "Ophæv blokeringen af denne adresse",
+"ipusuccess" => "\"$1\" har fået ophævet blokeringen",
"ipblocklist" => "Liste af blokerede IP-adresser og brugernavne",
"blocklistline" => "$1, $2 blokerede $3",
"blocklink" => "bloker",
-"unblocklink" => "ophæv blokering",
+"unblocklink" => "ophæv blokering",
"contribslink" => "bidrag",
"autoblocker" => "Automatisk blokeret fordi du deler IP-adresse med \"$1\". Begrundelse \"$2\".",
# Developer tools
#
-"lockdb" => "Lås database",
-"unlockdb" => "Lås database op",
-"lockdbtext" => "At låse databasen vil afbryde alle brugere fra at kunne
-redigere sider, ændre deres indstillinger, redigere deres
-overvågningsliste, og andre ting der kræver ændringer i databasen.
-Bekræft venligst at du har til hensigt at gøre dette, og at du vil
-låse databasen op, når din vedligeholdelse er overstået.",
-"unlockdbtext" => "At låse databasen op vil gøre, at alle brugere igen
-kan redigere sider, ændre deres indstillinger, redigere deres
-overvågningsliste, og andre ting der kræver ændringer i databasen.
-Bekræft venligst at du har til hensigt at gøre dette.",
-"lockconfirm" => "Ja, jeg vil virkelig låse databasen.",
-"unlockconfirm" => "Ja, jeg vil virkelig låse databasen op.",
-"lockbtn" => "Lås databasen",
-"unlockbtn" => "Lås databasen op",
-"locknoconfirm" => "Du har ikke bekræftet handlingen.",
-"lockdbsuccesssub" => "Databasen er nu låst",
-"unlockdbsuccesssub" => "Databasen er nu låst op",
-"lockdbsuccesstext" => "Wikipediadatabasen er låst.
-<br>Husk at fjerne låsen når du er færdig med din vedligeholdelse.",
-"unlockdbsuccesstext" => "Wikipediadatabasen er låst op.",
+"lockdb" => "LÃ¥s database",
+"unlockdb" => "LÃ¥s database op",
+"lockdbtext" => "At låse databasen vil afbryde alle brugere fra at kunne
+redigere sider, ændre deres indstillinger, redigere deres
+overvågningsliste, og andre ting der kræver ændringer i databasen.
+Bekræft venligst at du har til hensigt at gøre dette, og at du vil
+låse databasen op, når din vedligeholdelse er overstået.",
+"unlockdbtext" => "At låse databasen op vil gøre, at alle brugere igen
+kan redigere sider, ændre deres indstillinger, redigere deres
+overvågningsliste, og andre ting der kræver ændringer i databasen.
+Bekræft venligst at du har til hensigt at gøre dette.",
+"lockconfirm" => "Ja, jeg vil virkelig låse databasen.",
+"unlockconfirm" => "Ja, jeg vil virkelig låse databasen op.",
+"lockbtn" => "LÃ¥s databasen",
+"unlockbtn" => "LÃ¥s databasen op",
+"locknoconfirm" => "Du har ikke bekræftet handlingen.",
+"lockdbsuccesssub" => "Databasen er nu låst",
+"unlockdbsuccesssub" => "Databasen er nu låst op",
+"lockdbsuccesstext" => "Wikipediadatabasen er låst.
+<br>Husk at fjerne låsen når du er færdig med din vedligeholdelse.",
+"unlockdbsuccesstext" => "Wikipediadatabasen er låst op.",
# SQL query
#
-"asksql" => "SQL-forespørgsel",
-"asksqltext" => "Brug formularen herunder til at lave direkte forespørgsler
+"asksql" => "SQL-forespørgsel",
+"asksqltext" => "Brug formularen herunder til at lave direkte forespørgsler
i Wikipediadatabasen.
-Brug enkelte anførselstegn ('sådan her') for at adskille strenge.
-Dette kan ofte belaste serveren kraftigt, så brug venligst denne funktion
+Brug enkelte anførselstegn ('sådan her') for at adskille strenge.
+Dette kan ofte belaste serveren kraftigt, så brug venligst denne funktion
med omtanke.",
-"sqlislogged" => "Vær opmærksom på at alle SQL-forespørgsler gemmes i en logfil.",
-"sqlquery" => "Indtast forespørgsel",
-"querybtn" => "Afsend forespørgsel",
-"selectonly" => "Forespørgsler andre end \"SELECT\" er forbeholdt
+"sqlislogged" => "Vær opmærksom på at alle SQL-forespørgsler gemmes i en logfil.",
+"sqlquery" => "Indtast forespørgsel",
+"querybtn" => "Afsend forespørgsel",
+"selectonly" => "Forespørgsler andre end \"SELECT\" er forbeholdt
Wikipediaudviklere.",
-"querysuccessful" => "Forespørgsel gennemført med success",
+"querysuccessful" => "Forespørgsel gennemført med success",
# Move page
#
"movepage" => "Flyt side",
-"movepagetext" => "Når du bruger formularen herunder vil du få omdøbt en
+"movepagetext" => "Når du bruger formularen herunder vil du få omdøbt en
side og flyttet hele sidens historie til det nye navn.
Den gamle titel vil blive en omdirigeringsside til den nye titel.
-Henvisninger til den gamle titel vil ikke blive ændret. Sørg for at
-[[Speciel:Maintenance|tjekke]] for dobbelte eller dårlige omdirigeringer.
+Henvisninger til den gamle titel vil ikke blive ændret. Sørg for at
+[[Speciel:Maintenance|tjekke]] for dobbelte eller dårlige omdirigeringer.
Du er ansvarlig for, at alle henvisninger stadig peger derhen, hvor det er
meningen de skal pege.
-Bemærk at siden '''ikke''' kan flyttes hvis der allerede er en side
+Bemærk at siden '''ikke''' kan flyttes hvis der allerede er en side
med den nye titel, medmindre den side er tom eller er en omdirigering
uden nogen historie. Det betyder at du kan flytte en side tilbage hvor
den kom fra, hvis du kommer til at lave en fejl.
<b>ADVARSEL!</b>
-Dette kan være en drastisk og uventet ændring for en populær side;
-vær sikker på, at du forstår konsekvenserne af dette før du
-fortsætter.",
-"movepagetalktext" => "Den tilhørende diskussionsside, hvis der er en,
+Dette kan være en drastisk og uventet ændring for en populær side;
+vær sikker på, at du forstår konsekvenserne af dette før du
+fortsætter.",
+"movepagetalktext" => "Den tilhørende diskussionsside, hvis der er en,
vil automatisk blive flyttet med siden '''medmindre:'''
*Du flytter siden til et andet navnerum,
*En ikke-tom diskussionsside allerede eksisterer under det nye navn, eller
*Du fjerner markeringen i boksen nedenunder.
-I disse tilfælde er du nødt til at flytte eller sammenflette siden manuelt.",
+I disse tilfælde er du nødt til at flytte eller sammenflette siden manuelt.",
"movearticle" => "Flyt side",
-"movenologin" => "Ikke logget på",
-"movenologintext" => "Du skal være registreret bruger og være <a href=\"" .
- wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
+"movenologin" => "Ikke logget på",
+"movenologintext" => "Du skal være registreret bruger og være <a href=\"" .
+ wfLocalUrl( "Speciel:Userlogin" ) . "\">logget på</a>
for at flytte en side.",
"newtitle" => "Til ny titel",
"movepagebtn" => "Flyt side",
-"pagemovedsub" => "Flytning gennemført",
+"pagemovedsub" => "Flytning gennemført",
"pagemovedtext" => "Siden \"[[$1]]\" er flyttet til \"[[$2]]\".",
"articleexists" => "En side med det navn eksisterer allerede, eller det
-navn du har valgt er ikke gyldigt. Vælg et andet navn.",
-"talkexists" => "Siden blev flyttet korrekt, men den tilhørende
+navn du har valgt er ikke gyldigt. Vælg et andet navn.",
+"talkexists" => "Siden blev flyttet korrekt, men den tilhørende
diskussionsside kunne ikke flyttes, fordi der allerede eksisterer en
-med den nye titel. Du er nødt til at flette dem sammen manuelt.",
+med den nye titel. Du er nødt til at flette dem sammen manuelt.",
"movedto" => "flyttet til",
-"movetalk" => "Flyt også \"diskussion\"ssiden, hvis den eksisterer.",
-"talkpagemoved" => "Den tilhørende diskussionsside blev også flyttet.",
-"talkpagenotmoved" => "Den tilhørende diskussionsside blev
+"movetalk" => "Flyt også \"diskussion\"ssiden, hvis den eksisterer.",
+"talkpagemoved" => "Den tilhørende diskussionsside blev også flyttet.",
+"talkpagenotmoved" => "Den tilhørende diskussionsside blev
<strong>ikke</strong> flyttet.",
);
-class LanguageDa extends Language {
+class LanguageDa extends LanguageUtf8 {
function getDefaultUserOptions () {
$opt = Language::getDefaultUserOptions();
@@ -1128,35 +1161,30 @@ class LanguageDa extends Language {
return $wgUserTogglesDa;
}
- function getMonthName( $key )
- {
+ function getMonthName( $key ) {
global $wgMonthNamesDa;
return $wgMonthNamesDa[$key-1];
}
/* by default we just return base form */
- function getMonthNameGen( $key )
- {
+ function getMonthNameGen( $key ) {
global $wgMonthNamesDa;
return $wgMonthNamesDa[$key-1];
}
- function getMonthAbbreviation( $key )
- {
+ function getMonthAbbreviation( $key ) {
global $wgMonthAbbreviationsDa;
return $wgMonthAbbreviationsDa[$key-1];
}
- function getWeekdayName( $key )
- {
+ function getWeekdayName( $key ) {
global $wgWeekdayNamesDa;
return $wgWeekdayNamesDa[$key-1];
}
# Inherit userAdjust()
- function date( $ts, $adj = false )
- {
+ function date( $ts, $adj = false ) {
if ( $adj ) { $ts = $this->userAdjust( $ts ); }
$d = (0 + substr( $ts, 6, 2 )) . ". " .
@@ -1165,46 +1193,39 @@ class LanguageDa extends Language {
return $d;
}
- function time( $ts, $adj = false )
- {
+ function time( $ts, $adj = false ) {
if ( $adj ) { $ts = $this->userAdjust( $ts ); }
$t = substr( $ts, 8, 2 ) . ":" . substr( $ts, 10, 2 );
return $t;
}
- function timeanddate( $ts, $adj = false )
- {
+ function timeanddate( $ts, $adj = false ) {
return $this->date( $ts, $adj ) . " kl. " . $this->time( $ts, $adj );
}
# Inherit rfc1123()
- function getValidSpecialPages()
- {
+ function getValidSpecialPages() {
global $wgValidSpecialPagesDa;
return $wgValidSpecialPagesDa;
}
- function getSysopSpecialPages()
- {
+ function getSysopSpecialPages() {
global $wgSysopSpecialPagesDa;
return $wgSysopSpecialPagesDa;
}
- function getDeveloperSpecialPages()
- {
+ function getDeveloperSpecialPages() {
global $wgDeveloperSpecialPagesDa;
return $wgDeveloperSpecialPagesDa;
}
- function getMessage( $key )
- {
- global $wgAllMessagesDa, $wgAllMessagesEn;
- $m = $wgAllMessagesDa[$key];
-
- if ( "" == $m ) { return $wgAllMessagesEn[$key]; }
- else return $m;
+ function getMessage( $key ) {
+ global $wgAllMessagesDa;
+ if( isset( $wgAllMessagesDa[$key] ) )
+ return $wgAllMessagesDa[$key];
+ return "";
}
# Inherit iconv()
diff --git a/languages/LanguageDe.php b/languages/LanguageDe.php
index 1562a4efe869..1f6cd5f595cf 100644
--- a/languages/LanguageDe.php
+++ b/languages/LanguageDe.php
@@ -1,25 +1,37 @@
<?php
+#
+# German localisation for MediaWiki
+#
+# This file is encoded in UTF-8, no byte order mark.
+# For compatibility with Latin-1 installations, please
+# don't add literal characters above U+00ff.
+#
+require_once( "LanguageUtf8.php" );
+
# See Language.php for notes.
if($wgMetaNamespace === FALSE)
$wgMetaNamespace = str_replace( " ", "_", $wgSitename );
/* private */ $wgNamespaceNamesDe = array(
- -2 => "Media",
- -1 => "Spezial",
- 0 => "",
- 1 => "Diskussion",
- 2 => "Benutzer",
- 3 => "Benutzer_Diskussion",
- 4 => $wgMetaNamespace,
- 5 => $wgMetaNamespace. "_Diskussion",
- 6 => "Bild",
- 7 => "Bild_Diskussion",
- 8 => "MediaWiki",
- 9 => "MediaWiki_Diskussion",
- 10 => "Template",
- 11 => "Template_talk"
-
+ NS_MEDIA => "Media",
+ NS_SPECIAL => "Spezial",
+ NS_MAIN => "",
+ NS_TALK => "Diskussion",
+ NS_USER => "Benutzer",
+ NS_USER_TALK => "Benutzer_Diskussion",
+ NS_WIKIPEDIA => $wgMetaNamespace,
+ NS_WIKIPEDIA_TALK => $wgMetaNamespace . "_Diskussion",
+ NS_IMAGE => "Bild",
+ NS_IMAGE_TALK => "Bild_Diskussion",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "MediaWiki_Diskussion",
+ NS_TEMPLATE => "Vorlage",
+ NS_TEMPLATE_TALK => "Vorlage_Diskussion",
+ NS_HELP => "Hilfe",
+ NS_HELP_TALK => "Hilfe_Diskussion",
+ NS_CATEGORY => "Kategorie",
+ NS_CATEGORY_TALK => "Kategorie_Diskussion"
);
/* private */ $wgQuickbarSettingsDe = array(
@@ -34,36 +46,37 @@ if($wgMetaNamespace === FALSE)
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesDe = array(
"Immer als PNG darstellen",
"Einfaches TeX als HTML darstellen, sonst PNG",
- "Wenn möglich als HTML darstellen, sonst PNG",
- "Als TeX belassen (für Textbrowser)",
- "Empfehlenswert für moderne Browser"
+ "Wenn möglich als HTML darstellen, sonst PNG",
+ "Als TeX belassen (für Textbrowser)",
+ "Empfehlenswert für moderne Browser"
);
/* private */ $wgUserTogglesDe = array(
- "hover" => "Hinweis über interne Verweise",
+ "hover" => "Hinweis über interne Verweise",
"underline" => "Verweise unterstreichen",
"highlightbroken" => "Verweise auf leere Themen hervorheben",
"justify" => "Text als Blocksatz",
- "hideminor" => "Keine kleinen Änderungen in Letzte Änderungen anzeigen",
- "usenewrc" => "Erweiterte letzte Änderungen (nicht für alle Browser geeignet)",
- "numberheadings" => "Überschriften automatisch numerieren",
+ "hideminor" => "Keine kleinen Änderungen in Letzte Änderungen anzeigen",
+ "usenewrc" => "Erweiterte letzte Änderungen (nicht für alle Browser geeignet)",
+ "numberheadings" => "Ãœberschriften automatisch numerieren",
"showtoolbar" => "Editier-Werkzeugleiste anzeigen",
"editondblclick" => "Seiten mit Doppelklick bearbeiten (JavaScript)",
- "editsection" => "Links zum Bearbeiten einzelner Absätze anzeigen",
- "editsectiononrightclick" => "Einzelne Absätze per Rechtsklick bearbeiten (Javascript)",
- "showtoc" => "Anzeigen eines Inhaltsverzeichnisses bei Artikeln mit mehr als 3 Überschriften",
+ "editsection" => "Links zum Bearbeiten einzelner Absätze anzeigen",
+ "editsectiononrightclick" => "Einzelne Absätze per Rechtsklick bearbeiten (Javascript)",
+ "showtoc" => "Anzeigen eines Inhaltsverzeichnisses bei Artikeln mit mehr als 3 Ãœberschriften",
"rememberpassword" => "Dauerhaftes Einloggen",
"editwidth" => "Text-Eingabefeld mit voller Breite",
"editondblclick" => "Seiten mit Doppelklick bearbeiten (JavaScript)",
- "watchdefault" => "Neue und geänderte Seiten beobachten",
- "minordefault" => "Alle Änderungen als geringfügig markieren",
+ "watchdefault" => "Neue und geänderte Seiten beobachten",
+ "minordefault" => "Alle Änderungen als geringfügig markieren",
"previewontop" => "Vorschau vor dem Editierfenster anzeigen",
"nocache" => "Seitencache deaktivieren"
);
@@ -81,13 +94,13 @@ if($wgMetaNamespace === FALSE)
);
/* private */ $wgMonthNamesDe = array(
- "Januar", "Februar", "März", "April", "Mai", "Juni",
+ "Januar", "Februar", "März", "April", "Mai", "Juni",
"Juli", "August", "September", "Oktober", "November",
"Dezember"
);
/* private */ $wgMonthAbbreviationsDe = array(
- "Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug",
+ "Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug",
"Sep", "Okt", "Nov", "Dez"
);
@@ -96,21 +109,21 @@ if($wgMetaNamespace === FALSE)
"Userlogout" => "",
"Preferences" => "Meine Benutzereinstellungen",
"Watchlist" => "Meine Beobachtungsliste",
- "Recentchanges" => "Letzte Änderungen",
+ "Recentchanges" => "Letzte Änderungen",
"Upload" => "Dateien hochladen",
"Imagelist" => "Hochgeladene Dateien",
"Listusers" => "Registrierte Benutzer",
"Statistics" => "Seitenstatistik",
- "Randompage" => "Zufälliger Artikel",
+ "Randompage" => "Zufälliger Artikel",
"Lonelypages" => "Verwaiste Artikel",
"Unusedimages" => "Verwaiste Dateien",
"Popularpages" => "Beliebte Artikel",
- "Wantedpages" => "Gewünschte Artikel",
+ "Wantedpages" => "Gewünschte Artikel",
"Shortpages" => "Kurze Artikel",
"Longpages" => "Lange Artikel",
"Newpages" => "Neue Artikel",
- "Ancientpages" => "Älteste Artikel",
+ "Ancientpages" => "Älteste Artikel",
/* "Intl" => "Interlanguage Links", */
"Allpages" => "Alle Artikel (alphabetisch)",
@@ -131,7 +144,7 @@ if($wgMetaNamespace === FALSE)
/* private */ $wgSysopSpecialPagesDe = array(
"Blockip" => "Blockiere eine IP-Adresse",
"Asksql" => "Datenbank-Abfrage",
- "Undelete" => "Gelöschte Seiten wiederherstellen"
+ "Undelete" => "Gelöschte Seiten wiederherstellen"
);
/* private */ $wgDeveloperSpecialPagesDe = array(
@@ -143,20 +156,20 @@ if($wgMetaNamespace === FALSE)
# Bits of text used by many pages:
#
-"categories" => "Seiten Kategorien",
+"categories" => "Seitenkategorien",
"category" => "Kategorie",
"category_header" => "Artikel in der Kategorie \"$1\"",
"subcategories" => "Unterkategorien",
-"linktrail" => "/^([ä|ö|ü|ß|a-z]+)(.*)\$/sD",
+"linktrail" => "/^([ä|ö|ü|ß|a-z]+)(.*)\$/sD",
"mainpage" => "Hauptseite",
"mainpagetext" => "Die Wiki Software wurde erfolgreich installiert.",
-"mainpagedocfooter" => "Siehe die [http://meta.wikipedia.org/wiki/MediaWiki_i18n Dokumentation zur Anpassung der Benutzeroberfläche]
-und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzrhandbuch] für Hilfe zur Benutzung und Konfiguration.",
+"mainpagedocfooter" => "Siehe die [http://meta.wikipedia.org/wiki/MediaWiki_i18n Dokumentation zur Anpassung der Benutzeroberfläche]
+und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzerhandbuch] für Hilfe zur Benutzung und Konfiguration.",
"portal" => "Wikipedia-Portal",
"portal-url" => "{{ns:4}}:Portal",
-"about" => "Über",
-"aboutwikipedia" => "Über {$wgSitename}",
-"aboutpage" => "{$wgMetaNamespace}:Über_{$wgSitename}",
+"about" => "Ãœber",
+"aboutwikipedia" => "Ãœber {$wgSitename}",
+"aboutpage" => "{$wgMetaNamespace}:Ãœber_{$wgSitename}",
"article" => "Artikel",
"help" => "Hilfe",
"helppage" => "{$wgMetaNamespace}:Hilfe",
@@ -165,13 +178,13 @@ und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzrhandbuch
"bugreportspage" => "{$wgMetaNamespace}:Kontakt",
"sitesupport" => "Spenden",
"faq" => "FAQ",
-"faqpage" => "{$wgSitename}:Häufig_gestellte_Fragen",
+"faqpage" => "{$wgSitename}:Häufig_gestellte_Fragen",
"edithelp" => "Bearbeitungshilfe",
"edithelppage" => "{$wgSitename}:Editierhilfe",
"cancel" => "Abbruch",
"qbfind" => "Finden",
-"qbbrowse" => "Blättern",
-"qbedit" => "Ändern",
+"qbbrowse" => "Blättern",
+"qbedit" => "Ändern",
"qbpageoptions" => "Seitenoptionen",
"qbpageinfo" => "Seitendaten",
"qbmyoptions" => "Einstellungen",
@@ -185,7 +198,7 @@ und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzrhandbuch
"disclaimers" => "Lizenzbestimmungen",
"disclaimerpage" => "{{ns:4}}:Lizenzbestimmungen",
"errorpagetitle" => "Fehler",
-"returnto" => "Zurück zu $1.",
+"returnto" => "Zurück zu $1.",
"fromwikipedia" => "aus {$wgSitename}, der freien Wissensdatenbank",
"whatlinkshere" => "Was zeigt hierhin",
"help" => "Hilfe",
@@ -194,18 +207,18 @@ und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzrhandbuch
"history_short" => "Versionen",
"printableversion" => "Druckversion",
"editthispage" => "Seite bearbeiten",
-"delete" => "löschen",
-"deletethispage" => "Diese Seite löschen",
+"delete" => "löschen",
+"deletethispage" => "Diese Seite löschen",
"undelete_short" => "Wiederherstellen",
-"protect" => "Schützen",
-"protectthispage" => "Artikel schützen",
+"protect" => "Schützen",
+"protectthispage" => "Artikel schützen",
"unprotect" => "Freigeben",
"unprotectthispage" => "Schutz aufheben",
"newpage" => "Neue Seite",
"talkpage" => "Diskussion",
"specialpage" => "Spezialseite",
-"personaltools" => "'Persönliche Werkzeuge",
-"postcomment" => "Kommentar hinzufügen",
+"personaltools" => "'Persönliche Werkzeuge",
+"postcomment" => "Kommentar hinzufügen",
"addsection" => "+",
"articlepage" => "Artikel",
"toolbox" => "Werkzeuge",
@@ -215,21 +228,27 @@ und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzrhandbuch
"viewtalkpage" => "Diskussion",
"otherlanguages" => "Andere Sprachen",
"redirectedfrom" => "(Weitergeleitet von $1)",
-"lastmodified" => "Diese Seite wurde zuletzt geändert um $1.",
+"lastmodified" => "Diese Seite wurde zuletzt geändert um $1.",
"viewcount" => "Diese Seite wurde bisher $1 mal abgerufen.",
-"copyright" => "Inhalt ist verfügbar unter der $1.",
-"gnunote" => "Diese Seite ist unter der <a class=internal href='$wgScriptPath/GNU_FDL'>GNU FDL</a> verfügbar.",
-"protectedpage" => "Geschützte Seite",
+"copyright" => "Inhalt ist verfügbar unter der $1.",
+"poweredby" => "{{SITENAME}} benutzt [http://www.mediawiki.org/ MediaWiki], eine Open Source Wiki-Engine.",
+"printsubtitle" => "(Von {{SERVER}})",
+"gnunote" => "Diese Seite ist unter der <a class=internal href='$wgScriptPath/GNU_FDL'>GNU FDL</a> verfügbar.",
+"protectedpage" => "Geschützte Seite",
"administrators" => "{$wgMetaNamespace}:Administratoren",
"sysoptitle" => "Sysop-Zugang notwendig",
-"sysoptext" => "Dieser Vorgang kann aus Sicherheitsgründen nur von Benutzern mit \"Sysop\"-Status durchgeführt werden. Siehe auch $1.",
+"sysoptext" => "Dieser Vorgang kann aus Sicherheitsgründen nur von Benutzern mit \"Sysop\"-Status durchgeführt werden. Siehe auch $1.",
"developertitle" => "Entwickler-Zugang notwendig",
-"developertext" => "Dieser Vorgang kann aus Sicherheitsgründen nur von Benutzern mit \"Entwickler\"-Status durchgeführt werden. Siehe auch $1.",
+"developertext" => "Dieser Vorgang kann aus Sicherheitsgründen nur von Benutzern mit \"Entwickler\"-Status durchgeführt werden. Siehe auch $1.",
+"bureaucrattitle" => "Bürokraten-Rechte notwendig",
+"bureaucrattext" => "Dieser Vorgang kann nur von Benutzern mit \"Bürokrat\"-Status durchgeführt werden.",
"nbytes" => "$1 Byte",
"go" => "Los",
"ok" => "OK",
"sitetitle" => "{$wgSitename}",
-"sitesubtitle" => "Die freie Enzyklopädie",
+"sitesubtitle" => "Die freie Enzyklopädie",
+"pagetitle" => "$1 - {{SITENAME}}",
+"sitesubtitle" => "Die freie Wissensdatenbank",
"retrievedfrom" => "Von \"$1\"",
"newmessages" => "Sie haben $1.",
"newmessageslink" => "neue Nachrichten",
@@ -238,7 +257,17 @@ und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzrhandbuch
"showtoc" => "Anzeigen",
"hidetoc" => "Verbergen",
"thisisdeleted" => "Ansehen oder wiederherstellen von $1?",
-"restorelink" => "$1 gelöschte Bearbeitungsvorgänge",
+"restorelink" => "$1 gelöschte Bearbeitungsvorgänge",
+"feedlinks" => "Feed:",
+
+# Kurzworte für jeden Namespace, u.a. von MonoBook verwendet
+'nstab-main' => 'Artikel',
+'nstab-user' => 'Benutzerseite',
+'nstab-media' => 'Media',
+'nstab-special' => 'Spezial',
+'nstab-image' => 'Bild',
+'nstab-help' => 'Hilfe',
+'nstab-category' => 'Kategorie',
# Editier-Werkzeugleiste
"bold_sample"=>"Fetter Text",
@@ -249,11 +278,11 @@ und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzrhandbuch
"link_tip"=>"Interner Link",
"extlink_sample"=>"http://www.beispiel.de Link-Text",
"extlink_tip"=>"Externer Link (http:// beachten)",
-"headline_sample"=>"Ebene 2 Überschrift",
-"headline_tip"=>"Ebene 2 Überschrift",
-"math_sample"=>"Formel hier einfügen",
+"headline_sample"=>"Ebene 2 Ãœberschrift",
+"headline_tip"=>"Ebene 2 Ãœberschrift",
+"math_sample"=>"Formel hier einfügen",
"math_tip"=>"Mathematische Formel (LaTeX)",
-"nowiki_sample"=>"Unformatierten Text hier einfügen",
+"nowiki_sample"=>"Unformatierten Text hier einfügen",
"nowiki_tip"=>"Unformatierter Text",
"image_sample"=>"Beispiel.jpg",
"image_tip"=>"Bild-Verweis",
@@ -265,16 +294,16 @@ und das [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide Benutzrhandbuch
# Main script and global functions
#
"nosuchaction" => "Diese Aktion gibt es nicht",
-"nosuchactiontext" => "Diese Aktion wird von der MediaWiki-Software nicht unterstützt",
+"nosuchactiontext" => "Diese Aktion wird von der MediaWiki-Software nicht unterstützt",
"nosuchspecialpage" => "Diese Spezialseite gibt es nicht",
-"nospecialpagetext" => "Diese Spezialseite wird von der MediaWiki-Software nicht unterstützt",
+"nospecialpagetext" => "Diese Spezialseite wird von der MediaWiki-Software nicht unterstützt",
# General errors
#
"error" => "Fehler",
"databaseerror" => "Fehler in der Datenbank",
"dberrortext" => "Es gab einen Syntaxfehler in der Datenbankabfrage.
-Das könnte eine illegale Suchanfrage sein (siehe $5),
+Das könnte eine illegale Suchanfrage sein (siehe $5),
oder ein Softwarefehler. Die letzte Datenbankabfrage lautete:
<blockquote><tt>$1</tt></blockquote>
aus der Funktion \"<tt>$2</tt>\".
@@ -283,33 +312,43 @@ MySQL meldete den Fehler \"<tt>$3: $4</tt>\".",
Die letzte Datenbankabfrage lautete: \"$1\" aus der Funktion \"<tt>$2</tt>\".
MySQL meldete den Fehler: \"<tt>$3: $4</tt>\".\n",
"noconnect" => "Konnte keine Verbindung zur Datenbank auf $1 herstellen",
-"nodb" => "Konnte Datenbank $1 nicht auswählen",
-"cachederror" => "Das folgende ist eine Kopie aus dem Cache und möglicherweise nicht aktuell.",
+"nodb" => "Konnte Datenbank $1 nicht auswählen",
+"cachederror" => "Das folgende ist eine Kopie aus dem Cache und möglicherweise nicht aktuell.",
"readonly" => "Datenbank ist gesperrt",
"enterlockreason" => "Bitte geben Sie einen Grund ein, warum die Datenbank
-gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung",
-"readonlytext" => "Die {$wgSitename}-Datenbank ist vorübergehend gesperrt, z.B. für Wartungsarbeiten. Bitte versuchen Sie es später noch einmal.\n",
-"missingarticle" => "Der Text für den Artikel \"$1\" wurde nicht in der Datenbank gefunden. Das ist wahrscheinlich ein Fehler in der Software. Bitte melden Sie dies einem Administrator, und geben sie den Artikelnamen an.",
+gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung",
+"readonlytext" => "Die {$wgSitename}-Datenbank ist vorübergehend gesperrt, z.B. für Wartungsarbeiten. Bitte versuchen Sie es später noch einmal.\n",
+"missingarticle" => "Der Text für den Artikel \"$1\" wurde nicht in der Datenbank gefunden. Das ist wahrscheinlich ein Fehler in der Software. Bitte melden Sie dies einem Administrator, und geben sie den Artikelnamen an.",
"internalerror" => "Interner Fehler",
"filecopyerror" => "Konnte Datei \"$1\" nicht nach \"$2\" kopieren.",
"filerenameerror" => "Konnte Datei \"$1\" nicht nach \"$2\" umbenennen.",
-"filedeleteerror" => "Konnte Datei \"$1\" nicht löschen.",
+"filedeleteerror" => "Konnte Datei \"$1\" nicht löschen.",
"filenotfound" => "Konnte Datei \"$1\" nicht finden.",
"unexpected" => "Unerwarteter Wert: \"$1\"=\"$2\".",
"formerror" => "Fehler: Konnte Formular nicht verarbeiten",
"badarticleerror" => "Diese Aktion kann auf diesen Artikel nicht angewendet werden.",
-"cannotdelete" => "Kann spezifizierte Seite oder Artikel nicht löschen. (Wurde möglicherweise schon von jemand anderem gelöscht.)",
-"badtitle" => "Ungültiger Titel",
-"badtitletext" => "Der Titel der angeforderten Seite war ungültig, leer, oder ein ungültiger Sprachlink von einem anderen Wiki.",
-"perfdisabled" => "Diese Funktion wurde wegen Überlastung des Servers vorübergehend deaktiviert. Versuchen Sie es bitte zwischen 02:00 und 14:00 UTC noch einmal<br>(Aktuelle Serverzeit : ".date("H:i:s")." UTC).",
+"cannotdelete" => "Kann spezifizierte Seite oder Artikel nicht löschen. (Wurde möglicherweise schon von jemand anderem gelöscht.)",
+"badtitle" => "Ungültiger Titel",
+"badtitletext" => "Der Titel der angeforderten Seite war ungültig, leer, oder ein ungültiger Sprachlink von einem anderen Wiki.",
+"perfdisabled" => "Diese Funktion wurde wegen Überlastung des Servers vorübergehend deaktiviert. Versuchen Sie es bitte zwischen 02:00 und 14:00 UTC noch einmal<br>(Aktuelle Serverzeit : ".date("H:i:s")." UTC).",
"perfdisabledsub" => "Hier ist eine gespeicherte Kopie von $1:",
+"perfcached" => "Die folgenden Daten stammen aus dem Cache und sind möglicherweise nicht aktuell:",
+"wrong_wfQuery_params" => "Falsche Parameter für wfQuery()<br />
+Funktion: $1<br />
+Query: $2
+",
+"viewsource" => "Quelltext betrachten",
+"protectedtext" => "Diese Seite ist für das Bearbeiten gesperrt, dafür kann es diverse Gründe geben, siehe [[{[ns:4}}:Geschützte Seiten]].
+
+Sie können den Quelltext dieser Seite betrachten und kopieren:",
+'seriousxhtmlerrors' => 'Tidy entdeckte schwere Fehler im XHTML-Markup.',
# Login and logout pages
#
"logouttitle" => "Benutzer-Abmeldung",
"logouttext" => "Sie sind nun abgemeldet.
-Sie können {$wgSitename} jetzt anonym weiterbenutzen, oder sich unter dem selben oder einem anderen Benutzernamen wieder anmelden.\n",
+Sie können {$wgSitename} jetzt anonym weiterbenutzen, oder sich unter dem selben oder einem anderen Benutzernamen wieder anmelden.\n",
"welcomecreation" => "<h2>Willkommen, $1!</h2><p>Ihr Benutzerkonto wurde eingerichtet.
Vergessen Sie nicht, Ihre Einstellungen anzupassen.",
@@ -318,67 +357,79 @@ Vergessen Sie nicht, Ihre Einstellungen anzupassen.",
"yourname" => "Ihr Benutzername",
"yourpassword" => "Ihr Passwort",
"yourpasswordagain" => "Passwort wiederholen",
-"newusersonly" => " (nur für neue Mitglieder)",
+"newusersonly" => " (nur für neue Mitglieder)",
"remembermypassword" => "Dauerhaftes einloggen",
"loginproblem" => "<b>Es gab ein Problem mit Ihrer Anmeldung.</b><br>Bitte versuchen Sie es nochmal!",
"alreadyloggedin" => "<font color=red><b>Benutzer $1, Sie sind bereits angemeldet!</b></font><br>\n",
"login" => "Anmelden",
+"loginprompt" => "Um sich bei {{SITENAME}} anmelden zu können, müssen Cookies aktiviert sein.",
"userlogin" => "Anmelden",
"logout" => "Abmelden",
"userlogout" => "Abmelden",
"notloggedin" => "Nicht angemeldet",
"createaccount" => "Neues Benutzerkonto anlegen",
-"createaccountmail" => "über eMail",
-"badretype" => "Die beiden Passwörter stimmen nicht überein.",
-"userexists" => "Dieser Benutzername ist schon vergeben. Bitte wählen Sie einen anderen.",
+"createaccountmail" => "über eMail",
+"badretype" => "Die beiden Passwörter stimmen nicht überein.",
+"userexists" => "Dieser Benutzername ist schon vergeben. Bitte wählen Sie einen anderen.",
"youremail" => "Ihre E-Mail",
"yournick" => "Ihr \"Spitzname\" (zum \"Unterschreiben\")",
+"yourrealname" => "Ihr echter Name (keine Pflicht)",
"emailforlost" => "Falls Sie Ihr Passwort vergessen haben, kann Ihnen ein neues an Ihre E-Mail-Adresse gesendet werden.",
"loginerror" => "Fehler bei der Anmeldung",
-"noname" => "Sie müssen einen Benutzernamen angeben.",
+"noname" => "Sie müssen einen Benutzernamen angeben.",
"loginsuccesstitle" => "Anmeldung erfolgreich",
"loginsuccess" => "Sie sind jetzt als \"$1\" bei {$wgSitename} angemeldet.",
"nosuchuser" => "Der Benutzername \"$1\" existiert nicht.
-Überprüfen Sie die Schreibweise, oder melden Sie sich als neuer Benutzer an.",
+Überprüfen Sie die Schreibweise, oder melden Sie sich als neuer Benutzer an.",
"wrongpassword" => "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
"mailmypassword" => "Ein neues Passwort schicken",
"passwordremindertitle" => "{$wgSitename} Passwort",
"passwordremindertext" => "Jemand (IP-Adresse $1)
-hat um ein neues Passwort für die Anmeldung bei {$wgSitename} gebeten.
-Das Passwort für Benutzer \"$2\" lautet nun \"$3\".
-Sie sollten sich jetzt anmelden und Ihr Passwort ändern.",
+hat um ein neues Passwort für die Anmeldung bei {$wgSitename} gebeten.
+Das Passwort für Benutzer \"$2\" lautet nun \"$3\".
+Sie sollten sich jetzt anmelden und Ihr Passwort ändern.",
"noemail" => "Benutzer \"$1\" hat keine E-Mail-Adresse angegeben.",
"passwordsent" => "Ein neues Passwort wurde an die E-Mail-Adresse von Benutzer \"$1\" gesendet.
Bitte melden Sie sich an, sobald Sie es erhalten.",
+"loginend" => "&nbsp;",
+"mailerror" => "Fehler beim Senden von Mail: $1",
# Edit pages
#
"summary" => "Zusammenfassung",
#"subject" => "Betreff/Schlagzeile",
"subject" => "Betreff",
-"minoredit" => "Nur Kleinigkeiten wurden verändert.",
+"minoredit" => "Nur Kleinigkeiten wurden verändert.",
"watchthis" => "Diesen Artikel beobachten",
"savearticle" => "Artikel speichern",
"preview" => "Vorschau",
"showpreview" => "Vorschau zeigen",
"blockedtitle" => "Benutzer ist blockiert",
"blockedtext" => "Ihr Benutzername oder Ihre IP-Adresse wurde von $1 blockiert.
-Als Grund wurde angegeben:<br>$2<p>Bitte kontaktieren Sie den Administrator, um über die Blockierung zu sprechen.",
+Als Grund wurde angegeben:<br>$2<p>Bitte kontaktieren Sie den Administrator, um über die Blockierung zu sprechen.",
"whitelistedittitle" => "Zum Bearbeiten ist es erforderlich angemeldet zu sein",
-"whitelistedittext" => "Sie müssen sich [[Spezial:Userlogin|hier anmelden]] um Artikel bearbeiten zu können.",
+"whitelistedittext" => "Sie müssen sich [[Spezial:Userlogin|hier anmelden]] um Artikel bearbeiten zu können.",
"whitelistreadtitle" => "Zum Lesen ist es erforderlich angemeldet zu sein",
-"whitelistreadtext" => "Sie müssen sich [[Spezial:Userlogin|hier anmelden]] um Artikel lesen zu können.",
+"whitelistreadtext" => "Sie müssen sich [[Spezial:Userlogin|hier anmelden]] um Artikel lesen zu können.",
"whitelistacctitle" => "Sie sind nicht berechtigt einen Account zu erzeugen",
-"whitelistacctext" => "Um in diesem Wiki Accounts anlegen zu dürfen müssen Sie sich [[Spezial:Userlogin|hier anmelden]] und die nötigen Berechtigungen haben.",
+"whitelistacctext" => "Um in diesem Wiki Accounts anlegen zu dürfen müssen Sie sich [[Spezial:Userlogin|hier anmelden]] und die nötigen Berechtigungen haben.",
+"loginreqtitle" => "Anmeldung erforderlich",
+"loginreqtext" => "Sie müssen sich [[Spezial:Userlogin|anmelden]], um andere Seiten betrachten zu können.",
"accmailtitle" => "Passwort wurde verschickt.",
"accmailtext" => "Das Passwort von $1 wurde an $2 geschickt.",
"newarticle" => "(Neu)",
-"newarticletext" => "Hier den Text des neuen Artikels eintragen.\nBitte nur in ganzen Sätzen schreiben und keine urheberrechtsgeschützten Texte anderer kopieren.",
-"anontalkpagetext" => "---- ''Dies ist die Diskussions-Seite eines nicht angemeldeten Benutzers. Wir müssen hier die numerische [[IP-Adresse]] zur Identifizierung verwenden. Eine solche Adresse kann nacheinander von mehreren Benutzern verwendet werden. Wenn Sie ein anonymer Benutzer sind und denken, dass irrelevante Kommentare an Sie gerichtet wurden, [[Spezial:Userlogin|melden Sie sich bitte
- an]], um zukünftige Verwirrung zu vermeiden. ''",
-"noarticletext" => "(Dieser Artikel enthält momentan keinen Text)",
-"updated" => "(Geändert)",
+"newarticletext" => "Hier den Text des neuen Artikels eintragen.\nBitte nur in ganzen Sätzen schreiben und keine urheberrechtsgeschützten Texte anderer kopieren.",
+"anontalkpagetext" => "---- ''Dies ist die Diskussions-Seite eines nicht angemeldeten Benutzers. Wir müssen hier die numerische [[IP-Adresse]] zur Identifizierung verwenden. Eine solche Adresse kann nacheinander von mehreren Benutzern verwendet werden. Wenn Sie ein anonymer Benutzer sind und denken, dass irrelevante Kommentare an Sie gerichtet wurden, [[Spezial:Userlogin|melden Sie sich bitte
+ an]], um zukünftige Verwirrung zu vermeiden. ''",
+"noarticletext" => "(Dieser Artikel enthält momentan keinen Text)",
+'usercssjs' => "'''Beachten Sie:''' Nach dem Speichern müssen Sie ihrem Browser sagen, die neue Version zu laden: '''Mozilla:''' Klick auf ''Neu laden''(oder ''Strg-R''), '''IE / Opera:''' ''Strg-F5'', '''Safari:''' ''Cmd-r'', '''Konqueror''' ''Strg-R''.",
+'usercsspreview' => "== Vorschau ihres Benutzer-CSS. ==
+'''Beachten Sie:''' Nach dem Speichern müssen Sie ihrem Browser sagen, die neue Version zu laden: '''Mozilla:''' Klick auf ''Neu laden''(oder ''Strg-R''), '''IE / Opera:''' ''Strg-F5'', '''Safari:''' ''Cmd-r'', '''Konqueror''' ''Strg-R''.",
+'userjspreview' => "== Vorschau Ihres Benutzer-Javascript. ==
+'''Beachten Sie:''' Nach dem Speichern müssen Sie ihrem Browser sagen, die neue Version zu laden: '''Mozilla:''' Klick auf ''Neu laden''(oder ''Strg-R''), '''IE / Opera:''' ''Strg-F5'', '''Safari:''' ''Cmd-r'', '''Konqueror''' ''Strg-R''.",
+'usercssjsyoucanpreview' => "<strong>Tipp:</strong> Benutzen Sie den Vorschau-Button, um Ihr neues css/js vor dem Speichern zu testen.",
+"updated" => "(Geändert)",
"note" => "<strong>Hinweis:</strong> ",
"previewnote" => "Dies ist nur eine Vorschau, der Artikel wurde noch nicht gespeichert!",
"previewconflict" => "Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder; so wird der Artikel aussehen, wenn Sie jetzt speichern.",
@@ -386,47 +437,49 @@ Als Grund wurde angegeben:<br>$2<p>Bitte kontaktieren Sie den Administrator, um
"sectionedit" => " (Absatz)",
"commentedit" => " (Kommentar)",
"editconflict" => "Bearbeitungs-Konflikt: $1",
-"explainconflict" => "Jemand anders hat diesen Artikel geändert, nachdem Sie angefangen haben, ihn zu bearbeiten.
-Das obere Textfeld enthält den aktuellen Artikel.
-Das untere Textfeld enthält Ihre Änderungen.
-Bitte fügen Sie Ihre Änderungen in das obere Textfeld ein.
+"explainconflict" => "Jemand anders hat diesen Artikel geändert, nachdem Sie angefangen haben, ihn zu bearbeiten.
+Das obere Textfeld enthält den aktuellen Artikel.
+Das untere Textfeld enthält Ihre Änderungen.
+Bitte fügen Sie Ihre Änderungen in das obere Textfeld ein.
<b>Nur</b> der Inhalt des oberen Textfeldes wird gespeichert, wenn Sie auf \"Speichern\" klicken!\n<p>",
"yourtext" => "Ihr Text",
"storedversion" => "Gespeicherte Version",
"editingold" => "<strong>ACHTUNG: Sie bearbeiten eine alte Version dieses Artikels.
-Wenn Sie speichern, werden alle neueren Versionen überschrieben.</strong>\n",
+Wenn Sie speichern, werden alle neueren Versionen überschrieben.</strong>\n",
"yourdiff" => "Unterschiede",
"copyrightwarning" => "
-<b>Bitte <font size='+1'>kopieren Sie keine Webseiten</font>, die nicht Ihre eigenen sind, benutzen Sie <fonz size='+1'>keine urheberrechtlich geschützten Werke</font> ohne Erlaubnis des Copyright-Inhabers!</b>
-<p>Sie geben uns hiermit ihre Zusage, dass Sie den Text <strong>selbst verfasst</strong> haben, dass der Text Allgemeingut (<strong>public domain</strong>) ist, oder dass der <strong>Copyright-Inhaber</strong> seine <strong>Zustimmung</strong> gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der 'Diskussion:'-Seite darauf hin.
-<p><i>Bitte beachten Sie, dass alle {$wgSitename}-Beiträge automatisch unter der \"GNU Freie Dokumentationslizenz\" stehen. Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann drücken Sie nicht auf \"Speichern\".</i>",
-"longpagewarning" => "WARNUNG: Diese Seite ist $1KB groß; einige Browser könnten Probleme haben, Seiten zu bearbeiten, die größer als 32KB sind.
-Überlegen Sie bitte, ob eine Aufteilung der Seite in kleinere Abschnitte möglich ist.",
-"readonlywarning" => "WARNUNG: Die Datenbank wurde während dem Ändern der
-Seite für Wartungsarbeiten gesperrt, so dass Sie die Seite im Moment nicht
-speichern können. Sichern Sie sich den Text und versuchen Sie die Änderungen
-später einzuspielen.",
+<b>Bitte <font size='+1'>kopieren Sie keine Webseiten</font>, die nicht Ihre eigenen sind, benutzen Sie <font size='+1'>keine urheberrechtlich geschützten Werke</font> ohne Erlaubnis des Copyright-Inhabers!</b>
+<p>Sie geben uns hiermit ihre Zusage, dass Sie den Text <strong>selbst verfasst</strong> haben, dass der Text Allgemeingut (<strong>public domain</strong>) ist, oder dass der <strong>Copyright-Inhaber</strong> seine <strong>Zustimmung</strong> gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der 'Diskussion:'-Seite darauf hin.
+<p><i>Bitte beachten Sie, dass alle {$wgSitename}-Beiträge automatisch unter der \"GNU Freie Dokumentationslizenz\" stehen. Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann drücken Sie nicht auf \"Speichern\".</i>",
+"longpagewarning" => "WARNUNG: Diese Seite ist $1KB groß; einige Browser könnten Probleme haben, Seiten zu bearbeiten, die größer als 32KB sind.
+Überlegen Sie bitte, ob eine Aufteilung der Seite in kleinere Abschnitte möglich ist.",
+"readonlywarning" => "WARNUNG: Die Datenbank wurde während dem Ändern der
+Seite für Wartungsarbeiten gesperrt, so dass Sie die Seite im Moment nicht
+speichern können. Sichern Sie sich den Text und versuchen Sie die Änderungen
+später einzuspielen.",
"protectedpagewarning" => "WARNUNG: Diese Seite wurde gesperrt, so dass sie nur
Benutzer mit Sysop-Rechten bearbeitet werden kann. Beachten Sie bitte die
-<a href='$wgScriptPath/{$wgMetaNamespace}:Geschützte Seiten'>Regeln für geschützte Seiten</a>.",
+<a href='$wgScriptPath/{$wgMetaNamespace}:Geschützte Seiten'>Regeln für geschützte Seiten</a>.",
# History pages
#
-"revhistory" => "Frühere Versionen",
-"nohistory" => "Es gibt keine früheren Versionen von diesem Artikel.",
-"revnotfound" => "Keine früheren Versionen gefunden",
-"revnotfoundtext" => "Die Version dieses Artikels, nach der Sie suchen, konnte nicht gefunden werden. Bitte überprüfen Sie die URL dieser Seite.\n",
-"loadhist" => "Lade Liste mit früheren Versionen",
+"revhistory" => "Frühere Versionen",
+"nohistory" => "Es gibt keine früheren Versionen von diesem Artikel.",
+"revnotfound" => "Keine früheren Versionen gefunden",
+"revnotfoundtext" => "Die Version dieses Artikels, nach der Sie suchen, konnte nicht gefunden werden. Bitte überprüfen Sie die URL dieser Seite.\n",
+"loadhist" => "Lade Liste mit früheren Versionen",
"currentrev" => "Aktuelle Version",
"revisionasof" => "Version vom $1",
"cur" => "Aktuell",
-"next" => "Nächste",
+"next" => "Nächste",
"last" => "Letzte",
"orig" => "Original",
-"histlegend" => "Legende:
+"histlegend" => "Diff Auswahl: Die Boxen der gewünschten
+Versionen markieren und 'Enter' drücken oder den Button unten klicken/alt-v.<br/>
+Legende:
(Aktuell) = Unterschied zur aktuellen Version,
(Letzte) = Unterschied zur vorherigen Version,
-M = Kleine Änderung",
+M = Kleine Änderung",
# Diffs
#
@@ -434,42 +487,45 @@ M = Kleine Änderung",
"loadingrev" => "lage Versionen zur Unterscheidung",
"lineno" => "Zeile $1:",
"editcurrent" => "Die aktuelle Version dieses Artikels bearbeiten",
+'selectnewerversionfordiff' => 'Eine neuere Version zum Vergleich auswählen',
+'selectolderversionfordiff' => 'Eine ältere Version zum Vergleich auswählen',
+'compareselectedversions' => 'Gewählte Versionen vergleichen',
# Search results
#
"searchresults" => "Suchergebnisse",
"searchhelppage" => "{$wgMetaNamespace}:Suche",
"searchingwikipedia" => "{$wgSitename} durchsuchen",
-"searchresulttext" => "Für mehr Information über {$wgSitename}, siehe $1.",
-"searchquery" => "Für die Suchanfrage \"$1\"",
+"searchresulttext" => "Für mehr Information über {$wgSitename}, siehe $1.",
+"searchquery" => "Für die Suchanfrage \"$1\"",
"badquery" => "Falsche Suchanfrage",
"badquerytext" => "Wir konnten Ihre Suchanfrage nicht verarbeiten.
-Vermutlich haben Sie versucht, ein Wort zu suchen, das kürzer als zwei Buchstaben ist.
+Vermutlich haben Sie versucht, ein Wort zu suchen, das kürzer als zwei Buchstaben ist.
Dies funktioniert im Moment noch nicht.
-Möglicherweise haben Sie auch die Anfrage falsch formuliert, z.B.
+Möglicherweise haben Sie auch die Anfrage falsch formuliert, z.B.
\"Lohn und und Steuern\".
Bitte versuchen Sie eine anders formulierte Anfrage.",
-"matchtotals" => "Die Anfrage \"$1\" stimmt mit $2 Artikelüberschriften
-und dem Text von $3 Artikeln überein.",
+"matchtotals" => "Die Anfrage \"$1\" stimmt mit $2 Artikelüberschriften
+und dem Text von $3 Artikeln überein.",
"nogomatch" => "Es existiert kein Artikel mit diesem Namen. Bitte versuchen
Sie die Volltextsuche oder legen Sie den Artikel <a href=\"$1\">neu</a> an. ",
-"titlematches" => "Übereinstimmungen mit Überschriften",
-"notitlematches" => "Keine Übereinstimmungen",
-"textmatches" => "Übereinstimmungen mit Texten",
-"notextmatches" => "Keine Übereinstimmungen",
+"titlematches" => "Ãœbereinstimmungen mit Ãœberschriften",
+"notitlematches" => "Keine Ãœbereinstimmungen",
+"textmatches" => "Ãœbereinstimmungen mit Texten",
+"notextmatches" => "Keine Ãœbereinstimmungen",
"prevn" => "vorherige $1",
-"nextn" => "nächste $1",
+"nextn" => "nächste $1",
"viewprevnext" => "Zeige ($1) ($2) ($3).",
"showingresults" => "Hier sind <b>$1</b> Ergebnisse, beginnend mit #<b>$2</b>.",
"showingresultsnum" => "Hier sind <b>$3</b> Ergebnisse, beginnend mit #<b>$2</b>.",
"nonefound" => "<strong>Hinweis</strong>:
-Erfolglose Suchanfragen werden häufig verursacht durch den Versuch, nach 'gewöhnlichen' Worten zu suchen; diese sind nicht indiziert.",
+Erfolglose Suchanfragen werden häufig verursacht durch den Versuch, nach 'gewöhnlichen' Worten zu suchen; diese sind nicht indiziert.",
"powersearch" => "Suche",
"powersearchtext" => "
-Suche in Namensräumen :<br>
+Suche in Namensräumen :<br>
$1<br>
$2 Zeige auch REDIRECTs &nbsp; Suche nach $3 $9",
-"searchdisabled" => "<p>Entschuldigung! Die Volltextsuche wurde wegen Überlastung temporär deaktiviert. Derweil können Sie die folgende Google Suche verwenden, die allerdings nicht den aktuellen Stand wiederspiegelt.<p>
+"searchdisabled" => "<p>Entschuldigung! Die Volltextsuche wurde wegen Überlastung temporär deaktiviert. Derweil können Sie die folgende Google Suche verwenden, die allerdings nicht den aktuellen Stand wiederspiegelt.<p>
",
"googlesearch" => "<!-- SiteSearch Google -->
@@ -498,14 +554,14 @@ border=\"0\" ALT=\"Google\"></A>
#
"preferences" => "Einstellungen",
"prefsnologin" => "Nicht angemeldet",
-"prefsnologintext" => "Sie müssen <a href=\"" .
+"prefsnologintext" => "Sie müssen <a href=\"" .
wfLocalUrl( "Spezial:Userlogin" ) . "\">angemeldet</a>
-sein, um Ihre Einstellungen zu ändern.",
+sein, um Ihre Einstellungen zu ändern.",
"prefslogintext" => "Sie sind angemeldet als \"$1\".
Ihre interne ID-Nummer ist $2.",
-"prefsreset" => "Einstellungen wuden auf Standard zurückgesetzt.",
+"prefsreset" => "Einstellungen wuden auf Standard zurückgesetzt.",
"qbsettings" => "Seitenleiste",
-"changepassword" => "Passwort ändern",
+"changepassword" => "Passwort ändern",
"skin" => "Skin",
"math" => "TeX",
"dateformat" => "Datumsformat",
@@ -515,11 +571,11 @@ Ihre interne ID-Nummer ist $2.",
"math_lexing_error" => "'Lexing'-Fehler",
"math_syntax_error" => "Syntaxfehler",
"saveprefs" => "Einstellungen speichern",
-"resetprefs" => "Einstellungen zurücksetzen",
+"resetprefs" => "Einstellungen zurücksetzen",
"oldpassword" => "Altes Passwort",
"newpassword" => "Neues Passwort",
"retypenew" => "Neues Passwort (nochmal)",
-"textboxsize" => "Textfeld-Grösse",
+"textboxsize" => "Textfeld-Grösse",
"rows" => "Zeilen",
"columns" => "Spalten",
"searchresultshead" => "Suchergebnisse",
@@ -527,36 +583,37 @@ Ihre interne ID-Nummer ist $2.",
"contextlines" => "Zeilen pro Treffer",
"contextchars" => "Zeichen pro Zeile",
"stubthreshold" => "Kurze Artikel markieren bis",
-"recentchangescount" => "Anzahl \"Letzte Änderungen\"",
+"recentchangescount" => "Anzahl \"Letzte Änderungen\"",
"savedprefs" => "Ihre Einstellungen wurden gespeichert.",
+"timezonelegend" => "Zeitzone",
"timezonetext" => "Geben Sie die Anzahl der Stunden ein, die zwischen Ihrer Zeitzone und UTC liegen.",
"localtime" => "Ortszeit",
"timezoneoffset" => "Unterschied",
"servertime" => "Aktuelle Zeit auf dem Server",
-"guesstimezone" => "Einfügen aus dem Browser",
+"guesstimezone" => "Einfügen aus dem Browser",
"emailflag" => "Keine E-Mail von anderen Benutzern erhalten",
-"defaultns" => "In diesen Namensräumen soll standardmäßig gesucht werden:",
+"defaultns" => "In diesen Namensräumen soll standardmäßig gesucht werden:",
# Recent changes
#
"changes" => "Änderungen",
-"recentchanges" => "Letzte Änderungen",
+"recentchanges" => "Letzte Änderungen",
"recentchangestext" => "
Diese Seite wird beim Laden automatisch aktualisiert. Angezeigt werden Seiten, die zuletzt bearbeitet wurden, sowie die Zeit und der Name des Autors.<br>
Falls Sie neu bei {$wgSitename} sind, lesen Sie bitte die [[{$wgMetaNamespace}:Willkommen|Willkommensseite]] und [[{$wgMetaNamespace}:Erste Schritte|Erste Schritte]].<br>
-Wenn Sie möchten, dass {$wgSitename} zu einem Erfolg wird, dann fügen Sie bitte keine Texte hinzu, die dem [[{$wgMetaNamespace}:Urheberrechte beachten|Urheberrecht]] anderer unterliegen. Dies könnte dem Projekt sonst schweren Schaden zufügen.",
-"rcloaderr" => "Lade Letzte Änderungen",
-"rcnote" => "Hier sind die letzten <b>$1</b> Änderungen der letzten <b>$2</b> Tage. (<b>N</b> - Neuer Artikel; <b>M</b> - kleine Änderung)",
-"rcnotefrom" => "Dies sind die Änderungen seit <b>$2</b> (bis zu <b>$1</b> gezeigt).",
-"rclistfrom" => "Zeige neue Änderungen seit $1",
-"rclinks" => "Zeige die letzten $1 Änderungen; zeige die letzten $2 Tage.",
+Wenn Sie möchten, dass {$wgSitename} zu einem Erfolg wird, dann fügen Sie bitte keine Texte hinzu, die dem [[{$wgMetaNamespace}:Urheberrechte beachten|Urheberrecht]] anderer unterliegen. Dies könnte dem Projekt sonst schweren Schaden zufügen.",
+"rcloaderr" => "Lade Letzte Änderungen",
+"rcnote" => "Hier sind die letzten <b>$1</b> Änderungen der letzten <b>$2</b> Tage. (<b>N</b> - Neuer Artikel; <b>M</b> - kleine Änderung)",
+"rcnotefrom" => "Dies sind die Änderungen seit <b>$2</b> (bis zu <b>$1</b> gezeigt).",
+"rclistfrom" => "Zeige neue Änderungen seit $1",
+"rclinks" => "Zeige die letzten $1 Änderungen; zeige die letzten $2 Tage.",
"diff" => "Unterschied",
"hist" => "Versionen",
"hide" => "Ausblenden",
"show" => "Einblenden",
"tableform" => "Tabelle",
"listform" => "Liste",
-"nchanges" => "$1 Änderungen",
+"nchanges" => "$1 Änderungen",
"minoreditletter" => "M",
"newpageletter" => "N",
@@ -567,11 +624,11 @@ Wenn Sie möchten, dass {$wgSitename} zu einem Erfolg wird, dann fügen Sie bitte
"uploadbtn" => "Dateien hochladen",
"uploadlink" => "Bilder hochladen",
"reupload" => "Erneut hochladen",
-"reuploaddesc" => "Zurück zur Hochladen-Seite.",
+"reuploaddesc" => "Zurück zur Hochladen-Seite.",
"uploadnologin" => "Nicht angemeldet",
-"uploadnologintext" => "Sie müssen <a href=\"" .
+"uploadnologintext" => "Sie müssen <a href=\"" .
wfLocalUrl( "Spezial:Userlogin" ) . "\">angemeldet sein</a>
-um Dateien hochladen zu können.",
+um Dateien hochladen zu können.",
"uploadfile" => "Datei hochladen",
"uploaderror" => "Fehler beim Hochladen",
"uploadtext" => "
@@ -581,15 +638,15 @@ gehen Sie zu der <a href=\"" . wfLocalUrl( "Spezial:Imagelist" ) .
<p>Benutzen Sie das Formular, um neue Bilder hochzuladen und
sie in Artikeln zu verwenden.
In den meisten Browsern werden Sie ein \"Durchsuchen\"-Feld sehen,
-das einen Standard-Dateidialog öffnet.
+das einen Standard-Dateidialog öffnet.
Suchen Sie sich eine Datei aus. Die Datei wird dann im Textfeld angezeigt.
-Bestätigen Sie dann die Copyright-Vereinbarung.
-Schließlich drücken Sie den \"Hochladen\"-Knopf.
+Bestätigen Sie dann die Copyright-Vereinbarung.
+Schließlich drücken Sie den \"Hochladen\"-Knopf.
Dies kann eine Weile dauern, besonders bei einer langsamen Internet-Verbindung.
-<p>Für Photos wird das JPEG-Format, für Zeichnungen und Symbole das PNG-Format bevorzugt.
+<p>Für Photos wird das JPEG-Format, für Zeichnungen und Symbole das PNG-Format bevorzugt.
Um ein Bild in einem Artikel zu verwenden, schreiben Sie an Stelle des Bildes
<b>[[bild:datei.jpg]]</b> oder <b>[[bild:datei.jpg|Beschreibung]]</b>.
-<p>Bitte beachten Sie, dass, genau wie bei den Artikeln, andere Benutzer Ihre Dateien löschen oder verändern können.",
+<p>Bitte beachten Sie, dass, genau wie bei den Artikeln, andere Benutzer Ihre Dateien löschen oder verändern können.",
"uploadlog" => "Datei-Logbuch",
"uploadlogpage" => "Datei-Logbuch",
"uploadlogpagetext" => "Hier ist die Liste der letzten hochgeladenen Dateien.
@@ -597,25 +654,25 @@ Alle Zeiten sind UTC.
<ul>
</ul>
",
-"uploadlogtext" => "Hochgeladene und gelöschte Dateien werden im $1 verzeichnet.",
+"uploadlogtext" => "Hochgeladene und gelöschte Dateien werden im $1 verzeichnet.",
"filename" => "Dateiname",
"filedesc" => "Beschreibung",
"filestatus" => "Copyright-Status",
"filesource" => "Quelle",
-"affirmation" => "Hiermit bestätige ich, dass ich das Copyright dieser Datei habe, und diese hiermit unter $1 veröffentliche, bzw. dass die Datei 'Public Domain' ist.",
+"affirmation" => "Hiermit bestätige ich, dass ich das Copyright dieser Datei habe, und diese hiermit unter $1 veröffentliche, bzw. dass die Datei 'Public Domain' ist.",
"copyrightpage" => "{$wgMetaNamespace}:Copyright",
"copyrightpagename" => "{$wgSitename} copyright",
"uploadedfiles" => "Hochgeladene Dateien",
-"noaffirmation" => "Sie müssen bestätigen, dass das Hochladen der Datei keine Copyright-Verletzung darstellt.",
+"noaffirmation" => "Sie müssen bestätigen, dass das Hochladen der Datei keine Copyright-Verletzung darstellt.",
"ignorewarning" => "Warnung ignorieren und Datei trotzdem speichern.",
-"minlength" => "Bilddateien müssen mindestens drei Buchstaben haben.",
-"badfilename" => "Der Bildname wurde in \"$1\" geändert.",
+"minlength" => "Bilddateien müssen mindestens drei Buchstaben haben.",
+"badfilename" => "Der Bildname wurde in \"$1\" geändert.",
"badfiletype" => "\".$1\" ist kein empfohlenes Dateiformat.",
-"largefile" => "Bitte keine Bilder über 100 KByte hochladen.",
+"largefile" => "Bitte keine Bilder über 100 KByte hochladen.",
"successfulupload" => "Erfolgreich hochgeladen",
"fileuploaded" => "Die Datei \"$1\" wurde erfolgreich hochgeladen. Bitte
-verwenden Sie diesen ($2) Link zur Beschreibungsseite und füllen Sie die
-Informationen über die Datei aus, insbesondere seine Herkunft, von wem und wann es
+verwenden Sie diesen ($2) Link zur Beschreibungsseite und füllen Sie die
+Informationen über die Datei aus, insbesondere seine Herkunft, von wem und wann es
gemacht wurde und besondere Angaben zum Copyright, falls notwendig.",
"uploadwarning" => "Warnung",
"savefile" => "Datei speichern",
@@ -632,15 +689,15 @@ gemacht wurde und besondere Angaben zum Copyright, falls notwendig.",
"all" => "alle",
"byname" => "nach Name",
"bydate" => "nach Datum",
-"bysize" => "nach Grösse",
-"imgdelete" => "Löschen",
+"bysize" => "nach Grösse",
+"imgdelete" => "Löschen",
"imgdesc" => "Beschreibung",
"imglegend" => "Legende: (Beschreibung) = Zeige/Bearbeite Bildbeschreibung.",
"imghistory" => "Bild-Versionen",
-"revertimg" => "Zurücksetzen",
-"deleteimg" => "Löschen",
-"imghistlegend" => "Legende: (cur) = Dies ist das aktuelle Bild, (Löschen) = lösche
-diese alte Version, (Zurücksetzen) = verwende wieder diese alte Version.",
+"revertimg" => "Zurücksetzen",
+"deleteimg" => "Löschen",
+"imghistlegend" => "Legende: (cur) = Dies ist das aktuelle Bild, (Löschen) = lösche
+diese alte Version, (Zurücksetzen) = verwende wieder diese alte Version.",
"imagelinks" => "Bildverweise",
"linkstoimage" => "Die folgenden Artikel benutzen dieses Bild:",
"nolinkstoimage" => "Kein Artikel benutzt dieses Bild.",
@@ -651,8 +708,8 @@ diese alte Version, (Zurücksetzen) = verwende wieder diese alte Version.",
"sitestats" => "Seitenstatistik",
"userstats" => "Benutzerstatistik",
"sitestatstext" => "Es gibt insgesamt <b>$1</b> Seiten in der Datenbank.
-Das schliesst \"Diskussion\"-Seiten, Seiten über {$wgSitename}, extrem kurze Artikel, Weiterleitungen und andere Seiten ein, die nicht als Artikel gelten können.
-Diese ausgenommen, gibt es <b>$2</b> Seiten, die als Artikel gelten können.<p>
+Das schliesst \"Diskussion\"-Seiten, Seiten über {$wgSitename}, extrem kurze Artikel, Weiterleitungen und andere Seiten ein, die nicht als Artikel gelten können.
+Diese ausgenommen, gibt es <b>$2</b> Seiten, die als Artikel gelten können.<p>
Es wurden insgesamt <b>$3</b>&times; Seiten aufgerufen, und <b>$4</b>&times; Seiten bearbeitet.
Daraus ergeben sich <b>$5</b> Bearbeitungen pro Seite, und <b>$6</b> Betrachtungen pro Bearbeitung.",
"userstatstext" => "Es gibt <b>$1</b> registrierte Benutzer.
@@ -661,23 +718,23 @@ Davon haben <b>$2</b> Administrator-Rechte (siehe $3).",
# Maintenance Page
#
"maintenance" => "Wartungsseite",
-"maintnancepagetext" => "Diese Seite enthält mehrere praktische Funktionen zur täglichen Wartung von {$wgSitename}. Einige dieser Funktionen können die Datenbank stark beanspruchen, also bitte nicht nach jeder Änderung neu laden ;-)",
-"maintenancebacklink" => "Zurück zur Wartungsseite",
-"disambiguations" => "Begriffsklärungsseiten",
-"disambiguationspage" => "{$wgMetaNamespace}:Begriffsklärung",
-"disambiguationstext" => "Die folgenden Artikel verweisen auf eine <i>Seite zur Begriffsklärung</i>. Sie sollten statt dessen auf die eigentlich gemeinte Seite verweisen.<br>Eine Seite wird als Begriffsklärungsseite behandelt, wenn $1 auf sie verweist.<br>Verweise aus Namensräumen werden hier <i>nicht</i> aufgelistet.",
+"maintnancepagetext" => "Diese Seite enthält mehrere praktische Funktionen zur täglichen Wartung von {$wgSitename}. Einige dieser Funktionen können die Datenbank stark beanspruchen, also bitte nicht nach jeder Änderung neu laden ;-)",
+"maintenancebacklink" => "Zurück zur Wartungsseite",
+"disambiguations" => "Begriffsklärungsseiten",
+"disambiguationspage" => "{$wgMetaNamespace}:Begriffsklärung",
+"disambiguationstext" => "Die folgenden Artikel verweisen auf eine <i>Seite zur Begriffsklärung</i>. Sie sollten statt dessen auf die eigentlich gemeinte Seite verweisen.<br>Eine Seite wird als Begriffsklärungsseite behandelt, wenn $1 auf sie verweist.<br>Verweise aus Namensräumen werden hier <i>nicht</i> aufgelistet.",
"doubleredirects" => "Doppelte Redirects",
-"doubleredirectstext" => "<b>Achtung:</b> Diese Liste kann \"falsche Positive\" enthalten. Das ist dann der Fall, wenn ein Redirect außer dem Redirect-Verweis noch weiteren Text mit anderen Verweisen enthält. Letztere sollten dann entfernt werden.",
+"doubleredirectstext" => "<b>Achtung:</b> Diese Liste kann \"falsche Positive\" enthalten. Das ist dann der Fall, wenn ein Redirect außer dem Redirect-Verweis noch weiteren Text mit anderen Verweisen enthält. Letztere sollten dann entfernt werden.",
"brokenredirects" => "Kaputte Redirects",
"brokenredirectstext" => "Die folgenden Redirects leiten zu einem nicht existierenden Artikel weiter",
"selflinks" => "Seiten, die auf sich selbst verweisen",
"selflinkstext" => "Die folgenden Artikel verweisen auf sich selbst, was sie nicht sollten.",
"mispeelings" => "Seiten mit falsch geschriebenen Worten",
-"mispeelingstext" => "Die folgenden Seiten enthalten falsch geschriebene Worte, wie sie auf $1 definiert sind. In Klammern angegebene Worte geben die korrekte Schreibweise wieder.<p><strong>Zitate, Buchtitel u.ä. bitte im Originalzustand belassen, also ggf. in alter Rechtschreibung und mit Rechtschreibfehlern!</strong>",
+"mispeelingstext" => "Die folgenden Seiten enthalten falsch geschriebene Worte, wie sie auf $1 definiert sind. In Klammern angegebene Worte geben die korrekte Schreibweise wieder.<p><strong>Zitate, Buchtitel u.ä. bitte im Originalzustand belassen, also ggf. in alter Rechtschreibung und mit Rechtschreibfehlern!</strong>",
"mispeelingspage" => "Liste von Tippfehlern",
"missinglanguagelinks" => "Fehlende Sprachverweise",
"missinglanguagelinksbutton" => "Zeige fehlende Sprachverweise nach",
-"missinglanguagelinkstext" => "Diese Artikel haben <i>keinen</i> Verweis zu ihrem Gegenstück in $1. Redirects und Unterseiten werden <i>nicht</i> angezeigt.",
+"missinglanguagelinkstext" => "Diese Artikel haben <i>keinen</i> Verweis zu ihrem Gegenstück in $1. Redirects und Unterseiten werden <i>nicht</i> angezeigt.",
# Miscellaneous special pages
@@ -687,40 +744,42 @@ Davon haben <b>$2</b> Administrator-Rechte (siehe $3).",
"unusedimages" => "Verwaiste Bilder",
"popularpages" => "Beliebte Seiten",
"nviews" => "$1 Abfragen",
-"wantedpages" => "Gewünschte Seiten",
+"wantedpages" => "Gewünschte Seiten",
"nlinks" => "$1 Verweise",
"allpages" => "Alle Artikel",
-"randompage" => "Zufälliger Artikel",
+"randompage" => "Zufälliger Artikel",
"shortpages" => "Kurze Artikel",
"longpages" => "Lange Artikel",
"listusers" => "Benutzerverzeichnis",
"specialpages" => "Spezialseiten",
"spheading" => "Spezialseiten",
-"sysopspheading" => "Spezialseiten für Sysops",
-"developerspheading" => "Spezialseiten für Entwickler",
-"protectpage" => "Artikel schützen",
+"sysopspheading" => "Spezialseiten für Sysops",
+"developerspheading" => "Spezialseiten für Entwickler",
+"protectpage" => "Artikel schützen",
"recentchangeslinked" => "Verlinkte Seiten",
"rclsub" => "(auf Artikel von \"$1\")",
"debug" => "Debug",
"newpages" => "Neue Artikel",
-"ancientpages" => "Älteste Artikel",
+"ancientpages" => "Älteste Artikel",
"movethispage" => "Artikel verschieben",
-"unusedimagestext" => "<p>Bitte beachten Sie, dass andere Wikis möglicherweise einige dieser Bilder benutzen.",
+"unusedimagestext" => "<p>Bitte beachten Sie, dass andere Wikis möglicherweise einige dieser Bilder benutzen.",
"booksources" => "Buchhandlungen",
-"booksourcetext" => "Dies ist eine Liste mit Links zu Internetseiten, die neue und gebrauchte Bücher verkaufen. Dort kann es auch weitere Informationen über die Bücher geben, die Sie interessieren. {$wgSitename} ist mit keinem dieser Anbieter geschäftlich verbunden.",
+"booksourcetext" => "Dies ist eine Liste mit Links zu Internetseiten, die neue und gebrauchte Bücher verkaufen. Dort kann es auch weitere Informationen über die Bücher geben, die Sie interessieren. {$wgSitename} ist mit keinem dieser Anbieter geschäftlich verbunden.",
"alphaindexline" => "$1 bis $2",
# Email this user
#
"mailnologin" => "Sie sind nicht angemeldet.",
-"mailnologintext" => "Sie müssen <a href=\"" .
+"mailnologintext" => "Sie müssen <a href=\"" .
wfLocalUrl( "Spezial:Userlogin" ) . "\">angemeldet sein</a>
-und eine gültige E-Mail-Adresse haben, um anderen Benutzern E-Mail zu schicken.",
+und eine gültige E-Mail-Adresse haben, um anderen Benutzern E-Mail zu schicken.",
"emailuser" => "E-Mail an diesen Benutzer",
"emailpage" => "E-Mail an Benutzer",
-"emailpagetext" => "Wenn dieser Benutzer eine gültige E-Mail-Adresse angegeben hat, können Sie ihm mit dem untenstehenden Formular eine E-Mail senden. Als Absender wird die E-Mail-Adresse aus Ihren Einstellungen eingetragen, damit der Benutzer Ihnen antworten kann.",
+"emailpagetext" => "Wenn dieser Benutzer eine gültige E-Mail-Adresse angegeben hat, können Sie ihm mit dem untenstehenden Formular eine E-Mail senden. Als Absender wird die E-Mail-Adresse aus Ihren Einstellungen eingetragen, damit der Benutzer Ihnen antworten kann.",
+"usermailererror" => "Das Mail-Objekt gab einen Fehler zurück: ",
+"defemailsubject" => "{{SITENAME}} e-mail",
"noemailtitle" => "Keine E-Mail-Adresse",
-"noemailtext" => "Dieser Benutzer hat keine gültige E-Mail-Adresse angegeben, oder möchte keine E-Mail von anderen Benutzern empfangen.",
+"noemailtext" => "Dieser Benutzer hat keine gültige E-Mail-Adresse angegeben, oder möchte keine E-Mail von anderen Benutzern empfangen.",
"emailfrom" => "Von",
"emailto" => "An",
"emailsubject" => "Betreff",
@@ -733,18 +792,18 @@ und eine gültige E-Mail-Adresse haben, um anderen Benutzern E-Mail zu schicken."
# Beobachtungsliste
#
"watchlist" => "Beobachtungsliste",
-"watchlistsub" => "(für Benutzer \"$1\")",
-"nowatchlist" => "Sie haben keine Einträge auf Ihrer Beobachtungsliste.",
+"watchlistsub" => "(für Benutzer \"$1\")",
+"nowatchlist" => "Sie haben keine Einträge auf Ihrer Beobachtungsliste.",
"watchnologin" => "Sie sind nicht angemeldet",
-"watchnologintext" => "Sie müssen <a href=\"" .
+"watchnologintext" => "Sie müssen <a href=\"" .
wfLocalUrl( "Spezial:Userlogin" ) . "\">angemeldet</a>
sein, um Ihre Beobachtungsliste zu bearbeiten.",
-"addedwatch" => "Zur Beobachtungsliste hinzugefügt",
+"addedwatch" => "Zur Beobachtungsliste hinzugefügt",
"addedwatchtext" => "Der Artikel \"$1\" wurde zu Ihrer <a href=\"" .
-wfLocalUrl( "Spezial:Watchlist" ) . "\">Beobachtungsliste</a> hinzugefügt.
-Spätere Änderungen an diesem Artikel und der zugehörigen Diskussions-Seite
+wfLocalUrl( "Spezial:Watchlist" ) . "\">Beobachtungsliste</a> hinzugefügt.
+Spätere Änderungen an diesem Artikel und der zugehörigen Diskussions-Seite
werden dort gelistet und der Artikel wird in der <a href=\"" . wfLocalUrl(
-"Spezial:Recentchanges" ) . "\">Liste der letzten Änderungen</a>
+"Spezial:Recentchanges" ) . "\">Liste der letzten Änderungen</a>
<b>fett</b> angezeigt. <p>Wenn Sie den Artikel wieder von ihrer
Beobachtungsliste entfernen wollen, klicken Sie auf \"Nicht mehr beobachten\"
am Ende des Artikels.",
@@ -753,87 +812,89 @@ am Ende des Artikels.",
"watchthispage" => "Seite beobachten",
"unwatchthispage" => "Nicht mehr beobachten",
"notanarticle" => "Kein Artikel",
-"watchnochange" => "Keine Ihrer beobachteten Artikel wurde während des angezeigten Zeitraums bearbeitet.",
+"watchnochange" => "Keine Ihrer beobachteten Artikel wurde während des angezeigten Zeitraums bearbeitet.",
"watchdetails" => "($1 Artikel werden beobachtet (ohne Diskussionsseiten);
$2 Artikel im eingestellten Zeitraum bearbeitet;
$3... <a href='$4'>komplette Liste zeigen und bearbeiten</a>.)",
-"watchmethod-recent" => "überprüfen der letzten Bearbeitungen für die Beobachtungsliste",
-"watchmethod-list" => "überprüfen der Beobachtungsliste nach letzten Bearbeitungen",
-"removechecked" => "Markierte Einträge löschen",
-"watchlistcontains" => "Ihre Beobachtungsliste enthält $1 Seiten.",
-"watcheditlist" => "Hier ist eine alphabetische Liste der von Ihnen beobachteten Seiten. Markieren Sie die Seiten die Sie von der Beobachtungsliste löschen wollen und betätigen Sie den 'markierte Einträge löschen' Knopf am Ende der Seite.",
-"removingchecked" => "Wunschgemäß werden die Einträge aus der Beobachtungsliste entfernt...",
-"couldntremove" => "Der Eintrag '$1' kann nicht gelöscht werden...",
-"iteminvalidname" => "Ploblem mit dem Eintrag '$1', ungültiger Name...",
-"wlnote" => "Es folgen die letzten $1 Änderungen der letzten <b>$2</b> Stunden.",
+"watchmethod-recent" => "überprüfen der letzten Bearbeitungen für die Beobachtungsliste",
+"watchmethod-list" => "überprüfen der Beobachtungsliste nach letzten Bearbeitungen",
+"removechecked" => "Markierte Einträge löschen",
+"watchlistcontains" => "Ihre Beobachtungsliste enthält $1 Seiten.",
+"watcheditlist" => "Hier ist eine alphabetische Liste der von Ihnen beobachteten Seiten. Markieren Sie die Seiten die Sie von der Beobachtungsliste löschen wollen und betätigen Sie den 'markierte Einträge löschen' Knopf am Ende der Seite.",
+"removingchecked" => "Wunschgemäß werden die Einträge aus der Beobachtungsliste entfernt...",
+"couldntremove" => "Der Eintrag '$1' kann nicht gelöscht werden...",
+"iteminvalidname" => "Ploblem mit dem Eintrag '$1', ungültiger Name...",
+"wlnote" => "Es folgen die letzten $1 Änderungen der letzten <b>$2</b> Stunden.",
"wlshowlast" => "Zeige die letzen $1 Stunden $2 Tage $3",
+"wlsaved" => "Dies ist eine gespeicherte Version Ihrer Beobachtungsliste.",
# Delete/protect/revert
#
-"deletepage" => "Seite löschen",
-"confirm" => "Bestätigen",
+"deletepage" => "Seite löschen",
+"confirm" => "Bestätigen",
"excontent" => "Alter Inhalt:",
"exbeforeblank" => "Inhalt vor dem Leeren der Seite:",
"exblank" => "Seite war leer",
-"confirmdelete" => "Löschung bestätigen",
-"deletesub" => "(Lösche \"$1\")",
-"historywarning" => "WARNUNG: Die Seite die Sie zu löschen gedenken hat
+"confirmdelete" => "Löschung bestätigen",
+"deletesub" => "(Lösche \"$1\")",
+"historywarning" => "WARNUNG: Die Seite die Sie zu löschen gedenken hat
eine Versionsgeschichte: ",
-"confirmdeletetext" => "Sie sind dabei, einen Artikel oder ein Bild und alle älteren Versionen permanent aus der Datenbank zu löschen.
-Bitte bestätigen Sie Ihre Absicht, dies zu tun, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit unseren [[{$wgMetaNamespace}:Leitlinien|Leitlinien]] handeln.",
-"confirmcheck" => "Ja, ich möchte den Löschvorgang fortsetzen.",
+"confirmdeletetext" => "Sie sind dabei, einen Artikel oder ein Bild und alle älteren Versionen permanent aus der Datenbank zu löschen.
+Bitte bestätigen Sie Ihre Absicht, dies zu tun, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit unseren [[{$wgMetaNamespace}:Leitlinien|Leitlinien]] handeln.",
+"confirmcheck" => "Ja, ich möchte den Löschvorgang fortsetzen.",
"actioncomplete" => "Aktion beendet",
-"deletedtext" => "\"$1\" wurde gelöscht.
-Im $2 finden Sie eine Liste der letzten Löschungen.",
-"deletedarticle" => "\"$1\" gelöscht",
-"dellogpage" => "Lösch-Logbuch",
-"dellogpagetext" => "Hier ist eine Liste der letzten Löschungen (UTC).
+"deletedtext" => "\"$1\" wurde gelöscht.
+Im $2 finden Sie eine Liste der letzten Löschungen.",
+"deletedarticle" => "\"$1\" gelöscht",
+"dellogpage" => "Lösch-Logbuch",
+"dellogpagetext" => "Hier ist eine Liste der letzten Löschungen (UTC).
<ul>
</ul>
",
-"deletionlog" => "Lösch-Logbuch",
-"reverted" => "Auf eine alte Version zurückgesetzt",
-"deletecomment" => "Grund der Löschung",
-"imagereverted" => "Auf eine alte Version zurückgesetzt.",
-"rollback" => "Zurücknahme der Aenderungen",
+"deletionlog" => "Lösch-Logbuch",
+"reverted" => "Auf eine alte Version zurückgesetzt",
+"deletecomment" => "Grund der Löschung",
+"imagereverted" => "Auf eine alte Version zurückgesetzt.",
+"rollback" => "Zurücknahme der Änderungen",
+'rollback_short' => 'Rollback',
"rollbacklink" => "Rollback",
-"rollbackfailed" => "Zurücknahme gescheitert",
-"cantrollback" => "Die Änderung kann nicht zurückgenommen werden; der
+"rollbackfailed" => "Zurücknahme gescheitert",
+"cantrollback" => "Die Änderung kann nicht zurückgenommen werden; der
letzte Autor ist der einzige.",
-"alreadyrolled" => "Die Zurücknahme des Artikels [[$1]] von [[Benutzer:$2|$2]]
-([[Benutzer Diskussion:$2|Diskussion]]) ist nicht möglich, da eine andere
-Änderung oder Rücknahme erfolgt ist.
+"alreadyrolled" => "Die Zurücknahme des Artikels [[$1]] von [[Benutzer:$2|$2]]
+([[Benutzer Diskussion:$2|Diskussion]]) ist nicht möglich, da eine andere
+Änderung oder Rücknahme erfolgt ist.
-Die letzte Änderung ist von [[Benutzer:$3|$3]]
+Die letzte Änderung ist von [[Benutzer:$3|$3]]
([[Benutzer Diskussion:$3|Diskussion]])",
# only shown if there is an edit comment
-"editcomment" => "Der Änderungskommentar war: \"<i>$1</i>\".",
-"revertpage" => "Wiederhergestellt zur letzten Änderung von $1",
+"editcomment" => "Der Änderungskommentar war: \"<i>$1</i>\".",
+"revertpage" => "Wiederhergestellt zur letzten Änderung von $1",
# Undelete
-"undelete" => "Gelöschte Seite wiederherstellen",
-"undeletepage" => "Gelöschte Seiten wiederherstellen",
-"undeletepagetext" => "Die folgenden Seiten wurden gelöscht, sind aber immer noch
-gespeichert und können wiederhergestellt werden.",
-"undeletearticle" => "Gelöschten Artikel wiederherstellen",
+"undelete" => "Gelöschte Seite wiederherstellen",
+"undeletepage" => "Gelöschte Seiten wiederherstellen",
+"undeletepagetext" => "Die folgenden Seiten wurden gelöscht, sind aber immer noch
+gespeichert und können wiederhergestellt werden.",
+"undeletearticle" => "Gelöschten Artikel wiederherstellen",
"undeleterevisions" => "$1 Versionen archiviert",
"undeletehistory" => "Wenn Sie diese Seite wiederherstellen, werden auch alle alten
-Versionen wiederhergestellt. Wenn seit der Löschung ein neuer Artikel gleichen
+Versionen wiederhergestellt. Wenn seit der Löschung ein neuer Artikel gleichen
Namens erstellt wurde, werden die wiederhergestellten Versionen als alte Versionen
dieses Artikels erscheinen.",
-"undeleterevision" => "Gelöschte Version vom $1",
+"undeleterevision" => "Gelöschte Version vom $1",
"undeletebtn" => "Wiederherstellen!",
"undeletedarticle" => "\"$1\" wiederhergestellt",
"undeletedtext" => "Der Artikel [[$1]] wurde erfolgreich wiederhergestellt.",
# Contributions
#
-"contributions" => "Benutzerbeiträge",
-"mycontris" => "Meine Beiträge",
-"contribsub" => "Für $1",
-"nocontribs" => "Es wurden keine Änderungen für diese Kriterien gefunden.",
-"ucnote" => "Dies sind die letzten <b>$1</b> Beiträge des Benutzers in den letzten <b>$2</b> Tagen.",
-"uclinks" => "Zeige die letzten $1 Beiträge; zeige die letzten $2 Tage.",
+"contributions" => "Benutzerbeiträge",
+"mycontris" => "Meine Beiträge",
+"contribsub" => "Für $1",
+"nocontribs" => "Es wurden keine Änderungen für diese Kriterien gefunden.",
+"ucnote" => "Dies sind die letzten <b>$1</b> Beiträge des Benutzers in den letzten <b>$2</b> Tagen.",
+"uclinks" => "Zeige die letzten $1 Beiträge; zeige die letzten $2 Tage.",
"uctop" => " (top)" ,
# What links here
@@ -850,13 +911,13 @@ dieses Artikels erscheinen.",
#
"blockip" => "IP-Adresse blockieren",
"blockiptext" => "Benutzen Sie das Formular, um eine IP-Adresse zu blockieren.
-Dies sollte nur erfolgen, um Vandalismus zu verhindern, in Übereinstimmung mit unseren [[{$wgMetaNamespace}:Leitlinien|Leitlinien]].
-Bitte tragen Sie den Grund für die Blockade ein.",
+Dies sollte nur erfolgen, um Vandalismus zu verhindern, in Ãœbereinstimmung mit unseren [[{$wgMetaNamespace}:Leitlinien|Leitlinien]].
+Bitte tragen Sie den Grund für die Blockade ein.",
"ipaddress" => "IP-Adresse",
"ipbreason" => "Grund",
"ipbsubmit" => "Adresse blockieren",
"badipaddress" => "Die IP-Adresse hat ein falsches Format.",
-"noblockreason" => "Sie müssen einen Grund für die Blockade angeben.",
+"noblockreason" => "Sie müssen einen Grund für die Blockade angeben.",
"blockipsuccesssub" => "Blockade erfolgreich",
"blockipsuccesstext" => "Die IP-Adresse \"$1\" wurde blockiert.
<br>Auf [[Spezial:Ipblocklist|IP block list]] ist eine Liste der Blockaden.",
@@ -868,20 +929,20 @@ Bitte tragen Sie den Grund für die Blockade ein.",
"blocklistline" => "$1, $2 blockierte $3",
"blocklink" => "blockieren",
"unblocklink" => "freigeben",
-"contribslink" => "Beiträge",
+"contribslink" => "Beiträge",
"autoblocker" => "Automatische Blockierung, da Sie eine IP-Adresse benutzen mit \"$1\". Grund: \"$2\".",
# Developer tools
#
"lockdb" => "Datenbank sperren",
"unlockdb" => "Datenbank freigeben",
-"lockdbtext" => "Mit dem Sperren der Datenbank werden alle Änderungen an Benutzereinstellungen, watchlisten, Artikeln usw. verhindert. Bitte bestätigen Sie Ihre Absicht, die Datenbank zu sperren.",
-"unlockdbtext" => "Das Aufheben der Datenbank-Sperre wird alle Änderungen wieder zulassen. Bitte bestätigen Sie Ihre Absicht, die Sperrung aufzuheben.",
-"lockconfirm" => "Ja, ich möchte die Datenbank sperren.",
-"unlockconfirm" => "Ja, ich möchte die Datenbank freigeben.",
+"lockdbtext" => "Mit dem Sperren der Datenbank werden alle Änderungen an Benutzereinstellungen, watchlisten, Artikeln usw. verhindert. Bitte bestätigen Sie Ihre Absicht, die Datenbank zu sperren.",
+"unlockdbtext" => "Das Aufheben der Datenbank-Sperre wird alle Änderungen wieder zulassen. Bitte bestätigen Sie Ihre Absicht, die Sperrung aufzuheben.",
+"lockconfirm" => "Ja, ich möchte die Datenbank sperren.",
+"unlockconfirm" => "Ja, ich möchte die Datenbank freigeben.",
"lockbtn" => "Datenbank sperren",
"unlockbtn" => "Datenbank freigeben",
-"locknoconfirm" => "Sie haben das Bestätigungsfeld nicht markiert.",
+"locknoconfirm" => "Sie haben das Bestätigungsfeld nicht markiert.",
"lockdbsuccesssub" => "Datenbank wurde erfolgreich gesperrt",
"unlockdbsuccesssub" => "Datenbank wurde erfolgreich freigegeben",
"lockdbsuccesstext" => "Die {$wgSitename}-Datenbank wurde gesperrt.
@@ -891,30 +952,30 @@ Bitte tragen Sie den Grund für die Blockade ein.",
# SQL query
#
"asksql" => "SQL-Abfrage",
-"asksqltext" => "Benutzen Sie das Formular für eine direkte
+"asksqltext" => "Benutzen Sie das Formular für eine direkte
Datenbank-Abfrage. Benutze einzelne Hochkommata ('so'), um Text zu begrenzen.
-Bitte diese Funktion vorsichtig benutzen! Das abschließende ';' wird
-automatisch ergänzt.",
+Bitte diese Funktion vorsichtig benutzen! Das abschließende ';' wird
+automatisch ergänzt.",
"sqlislogged" => "Bitte beachten Sie das alle SQL-Abfrage mitprotokolliert
werden.",
"sqlquery" => "Abfrage eingeben",
"querybtn" => "Abfrage starten",
-"selectonly" => "Andere Abfragen als \"SELECT\" können nur von Entwicklern benutzt werden.",
+"selectonly" => "Andere Abfragen als \"SELECT\" können nur von Entwicklern benutzt werden.",
"querysuccessful" => "Abfrage erfolgreich",
# Move page
#
"movepage" => "Artikel verschieben",
-"movepagetext" => "Mit diesem Formular können Sie einen Artikel umbenennen, mitsamt allen Versionen. Der alte Titel wird zum neuen weiterleiten. Verweise auf den alten Titel werden nicht geändert, und die Diskussionsseite wird auch nicht mitverschoben.",
-"movepagetalktext" => "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:'''
+"movepagetext" => "Mit diesem Formular können Sie einen Artikel umbenennen, mitsamt allen Versionen. Der alte Titel wird zum neuen weiterleiten. Verweise auf den alten Titel werden nicht geändert, und die Diskussionsseite wird auch nicht mitverschoben.",
+"movepagetalktext" => "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:'''
*Sie verschieben die Seite in einen anderen Namensraum, oder
*Es existiert bereits eine Diskussionsseite mit diesem Namen, oder
-*Sie wählen die untenstehende Option ab
+*Sie wählen die untenstehende Option ab
-In diesen Fällen müssen Sie die Seite, falls gewünscht, von Hand verschieben.",
+In diesen Fällen müssen Sie die Seite, falls gewünscht, von Hand verschieben.",
"movearticle" => "Artikel verschieben",
"movenologin" => "Sie sind nicht angemeldet",
-"movenologintext" => "Sie müssen ein registrierter Benutzer und
+"movenologintext" => "Sie müssen ein registrierter Benutzer und
<a href=\"" . wfLocalUrl( "Special:Userlogin" ) . "\">angemeldet</a> sein,
um eine Seite zu verschieben.",
"newtitle" => "Zu neuem Titel",
@@ -922,59 +983,67 @@ um eine Seite zu verschieben.",
"pagemovedsub" => "Verschiebung erfolgreich",
"pagemovedtext" => "Artikel \"[[$1]]\" wurde nach \"[[$2]]\" verschoben.",
"articleexists" => "Unter diesem Namen existiert bereits ein Artikel.
-Bitte wählen Sie einen anderen Namen.",
+Bitte wählen Sie einen anderen Namen.",
"talkexists" => "Die Seite selbst wurde erfolgreich verschoben, aber die
Diskussions-Seite nicht, da schon eine mit dem neuen Titel existiert. Bitte gleichen Sie die Inhalte von Hand ab.",
"movedto" => "verschoben nach",
-"movetalk" => "Die \"Diskussions\"-Seite mitverschieben, wenn möglich.",
+"movetalk" => "Die \"Diskussions\"-Seite mitverschieben, wenn möglich.",
"talkpagemoved" => "Die \"Diskussions\"-Seite wurde ebenfalls verschoben.",
"talkpagenotmoved" => "Die \"Diskussions\"-Seite wurde <strong>nicht</strong> verschoben.",
"export" => "Seiten exportieren",
-"exporttext" => "Sie können den Text und die Bearbeitungshistorie einer bestimmten oder einer Auswahl von Seiten nach XML exportieren. Das Ergebnis kann in ein anderes Wiki mit WikiMedia Software eingespielt werden, bearbeitet oder archiviert werden.",
+"exporttext" => "Sie können den Text und die Bearbeitungshistorie einer bestimmten oder einer Auswahl von Seiten nach XML exportieren. Das Ergebnis kann in ein anderes Wiki mit WikiMedia Software eingespielt werden, bearbeitet oder archiviert werden.",
"exportcuronly" => "Nur die aktuelle Version der Seite exportieren",
"missingimage" => "<b>Fehlendes Bild</b><br><i>$1</i>\n",
+
+#Tooltips:
+'tooltip-atom' => 'Atom-Feed von dieser Seite',
+'tooltip-addsection' => 'Einen Kommentar zu dieser Seite hinzufügen. [alt-+]',
'tooltip-article' => 'Artikel betrachten [alt-a]',
'tooltip-talk' => 'Diesen Artikel diskutieren [alt-t]',
-'tooltip-edit' => 'Sie können diesen Artikel bearbeiten. Benutzen Sie die Vorschau, bevor Sie die Seite speichern. [alt-e]',
-'tooltip-viewsource' => 'Diese Seite ist geschützt. Sie können ihren Quelltext betrachten. [alt-e]',
-'tooltip-history' => 'Ältere Versionen dieser Seite. [alt-h]',
-'tooltip-protect' => 'Diese Seite schützen [alt--]',
-'tooltip-delete' => 'Diese Seite löschen [alt-d]',
+'tooltip-edit' => 'Sie können diesen Artikel bearbeiten. Benutzen Sie die Vorschau, bevor Sie die Seite speichern. [alt-e]',
+'tooltip-viewsource' => 'Diese Seite ist geschützt. Sie können ihren Quelltext betrachten. [alt-e]',
+'tooltip-history' => 'Ältere Versionen dieser Seite. [alt-h]',
+'tooltip-protect' => 'Diese Seite schützen [alt--]',
+'tooltip-delete' => 'Diese Seite löschen [alt-d]',
'tooltip-undelete' => "$1 Versionen diese Artikels wieder herstellen. [alt-d]",
'tooltip-move' => 'Diese Seite verschieben. [alt-m]',
-'tooltip-nomove' => 'Sie können diese Seite nicht verschieben',
+'tooltip-nomove' => 'Sie können diese Seite nicht verschieben',
'tooltip-watch' => 'Diese Seite beobachten. [alt-w]',
'tooltip-unwatch' => 'Diese Seite nicht mehr beobachten. [alt-w]',
-'tooltip-watchlist' => 'Die Liste der Artikel, die Sie auf Änderungen beobachten. [alt-l]',
+'tooltip-watchlist' => 'Die Liste der Artikel, die Sie auf Änderungen beobachten. [alt-l]',
'tooltip-userpage' => 'Meine Benutzerseite [alt-.]',
'tooltip-anonuserpage' => 'Die Benutzerseite Ihrer IP-Adresse [alt-.]',
'tooltip-mytalk' => 'Meine Benutzerdiskussion [alt-n]',
'tooltip-anontalk' => 'Diskussionen zu Bearbeitungen, die von dieser IP-Adresse gemacht wurden. [alt-n]',
'tooltip-preferences' => 'Meine Einstellungen',
-'tooltip-mycontris' => 'Liste meiner Beiträge [alt-y]',
-'tooltip-login' => 'Sie können sich gerne anmelden, es ist aber nicht notwendig, um Artikel zu bearbeiten. [alt-o]',
+'tooltip-mycontris' => 'Liste meiner Beiträge [alt-y]',
+'tooltip-login' => 'Sie können sich gerne anmelden, es ist aber nicht notwendig, um Artikel zu bearbeiten. [alt-o]',
'tooltip-logout' => 'The start button [alt-o]',
'tooltip-search' => 'Suchen [alt-f]',
'tooltip-mainpage' => 'Zur Hauptseite [alt-z]',
-'tooltip-portal' => 'Über das Projekt, was Sie tun können, wo Sie Dinge finden können',
-'tooltip-randompage' => 'Zufälliger Artikel [alt-x]',
-'tooltip-currentevents' => 'Hintergründe zu aktuellen Ereignissen finden',
-'tooltip-sitesupport' => 'Unterstützen Sie {{SITENAME}}',
+'tooltip-portal' => 'Über das Projekt, was Sie tun können, wo Sie Dinge finden können',
+'tooltip-randompage' => 'Zufälliger Artikel [alt-x]',
+'tooltip-currentevents' => 'Hintergründe zu aktuellen Ereignissen finden',
+'tooltip-sitesupport' => 'Unterstützen Sie {{SITENAME}}',
'tooltip-help' => 'Hier bekommen Sie Hilfe.',
-'tooltip-recentchanges' => 'Die letzten Änderungen in diesem Wiki. [alt-r]',
-'tooltip-recentchangeslinked' => 'Die letzten Änderungen an Seiten, die von dieser Seite verlinkt wurden. [alt-c]',
+'tooltip-recentchanges' => 'Die letzten Änderungen in diesem Wiki. [alt-r]',
+'tooltip-recentchangeslinked' => 'Die letzten Änderungen an Seiten, die von dieser Seite verlinkt wurden. [alt-c]',
'tooltip-whatlinkshere' => 'Liste aller Seiten, die auf diese verweisen [alt-b]',
'tooltip-specialpages' => 'Liste aller Spezialseiten [alt-q]',
'tooltip-upload' => 'Bilder oder andere Medien hochladen [alt-u]',
'tooltip-specialpage' => 'Dies ist eine Spezialseite, die nicht bearbeitet werden kann.',
-'tooltip-minoredit' => 'Diese Änderung als klein markieren. [alt-i]',
-'tooltip-save' => 'Änderungen speichern [alt-s]',
-'tooltip-preview' => 'Vorschau der Änderungen an dieser Seite. Benutzen Sie dies vor dem Speichern! [alt-p]',
-'tooltip-contributions' => 'Liste der beiträge dieses Benutzers.',
+'tooltip-minoredit' => 'Diese Änderung als klein markieren. [alt-i]',
+'tooltip-save' => 'Änderungen speichern [alt-s]',
+'tooltip-preview' => 'Vorschau der Änderungen an dieser Seite. Benutzen Sie dies vor dem Speichern! [alt-p]',
+'tooltip-contributions' => 'Liste der beiträge dieses Benutzers.',
'tooltip-emailuser' => 'Senden Sie eine Mail an diesen Benutzer',
'tooltip-rss' => 'RSS-Feed von dieser Seite.',
+'tooltip-compareselectedversions' => 'Unterschiede zwischen zwei ausgewählten Versionen dieser Seite vergleichen. [alt-v]',
+
+#Tastatur-Shortcuts
'accesskey-article' => 'a',
+'accesskey-addsection' => '+',
'accesskey-talk' => 't',
'accesskey-edit' => 'e',
'accesskey-viewsource' => 'e',
@@ -1012,55 +1081,69 @@ Diskussions-Seite nicht, da schon eine mit dem neuen Titel existiert. Bitte glei
'accesskey-preview' => 'p',
'accesskey-contributions' => '',
'accesskey-emailuser' => '',
+'accesskey-compareselectedversions' => 'v',
+
"makesysoptitle" => "Mache einen Benutzer zum Administrator",
-"makesysoptext" => "Diese Maske wird von Bürokraten benutzt, um normale Benutzer zu Administratoren zu machen.",
+"makesysoptext" => "Diese Maske wird von Bürokraten benutzt, um normale Benutzer zu Administratoren zu machen.",
"makesysopname" => "Name des Benutzers:",
"makesysopsubmit" => "Mache diesen Benutzer zu einem Administrator",
"makesysopok" => "<b>Benutzer \"$1\" ist nun ein Administrator.</b>",
"makesysopfail" => "<b>Benutzer \"$1\" konnte nicht zu einem Administrator gemacht werden. (Haben Sie den Namen richtig geschrieben?)</b>",
"makesysop" => "Mache einen Benutzer zum Administrator",
+"bureaucratlogentry" => "Rechte für Benutzer \"$1\" auf \"$2\" gesetzt",
+"rights" => "Rechte:",
+"set_user_rights" => "Benutzerrechte setzen",
+"user_rights_set" => "<b>Benutzerrechte für \"$1\" aktualisiert</b>",
+"set_rights_fail" => "<b>Benutzerrechte für \"$1\" konnten nicht gesetzt werden. (Haben Sie den Namen korrekt eingegeben?)</b>",
"1movedto2" => "$1 wurde nach $2 verschoben",
"allmessages" => "Alle MediaWiki-Meldungen",
-"allmessagestext" => "Dies ist eine Liste aller möglichen Meldungen im MediaWiki-Namensraum.",
-"thumbnail-more" => "vergrößern",
+"allmessagestext" => "Dies ist eine Liste aller möglichen Meldungen im MediaWiki-Namensraum.",
+"thumbnail-more" => "vergrößern",
"and" => "und",
-"rchide" => "in $4 form; $1 kleine Änderungen; $2 sekundäre Namensräume; $3 mehrfache Änderungen.",
-"showhideminor" => "kleine Änderungen $1",
-"rcliu" => "$1 Änderungen durch eingeloggte Benutzer",
+"rchide" => "in $4 form; $1 kleine Änderungen; $2 sekundäre Namensräume; $3 mehrfache Änderungen.",
+"showhideminor" => "kleine Änderungen $1",
+"rcliu" => "$1 Änderungen durch eingeloggte Benutzer",
"uploaddisabled" => "Entschuldigung, das Hochladen ist deaktiviert.",
"deadendpages" => "Sackgassenartikel",
"intl" => "InterWikiLinks",
"version" => "Version",
"protectlogpage" => "Seitenschutz-Logbuch",
-"protectlogtext" => "Dies ist eine Liste der blockierten Seiten. Siehe [[Wikipedia:Geschützte Seiten]] für mehr Informationen.",
+"protectlogtext" => "Dies ist eine Liste der blockierten Seiten. Siehe [[Wikipedia:Geschützte Seiten]] für mehr Informationen.",
+"protectedarticle" => "Artikel [[$1]] geschützt",
+"unprotectedarticle" => "Artikel [[$1]] freigegeben",
+"protectsub" =>"(Sperren von \"$1\")",
+"confirmprotecttext" => "Soll diese Seite wirklich geschützt werden?",
"ipbexpiry" => "Ablaufzeit",
"blocklogpage" => "Benutzerblockaden-Logbuch",
-"blocklogentry" => "blockiert [[Benutzer:$1]] - ([[Spezial:Contributions/$1|Beiträge]]) für einen Zeitraum von: $2",
-"blocklogtext" => "Dies ist ein Log über Sperrungen und Entsperrungen von Benutzern. Automatisch geblockte IP-Adressen werden nicht erfasst. Siehe [[Special:Ipblocklist|IP block list]] für eine Liste der gesperrten Benutzern.",
+"blocklogentry" => "blockiert [[Benutzer:$1]] - ([[Spezial:Contributions/$1|Beiträge]]) für einen Zeitraum von: $2",
+"blocklogtext" => "Dies ist ein Log über Sperrungen und Entsperrungen von Benutzern. Automatisch geblockte IP-Adressen werden nicht erfasst. Siehe [[Special:Ipblocklist|IP block list]] für eine Liste der gesperrten Benutzern.",
"unblocklogentry" => "Blockade von [[Benutzer:$1]] aufgehoben",
-"range_block_disabled" => "Die Möglichkeit, ganze Adressräume zu sperren, ist nicht aktiviert.",
-"ipb_expiry_invalid" => "Die angegebeben Ablaufzeit ist ungültig.",
-"ip_range_invalid" => "Ungültiger IP-Addressbereich.",
-"confirmprotect" => "Sperrung bestätigen",
+"range_block_disabled" => "Die Möglichkeit, ganze Adressräume zu sperren, ist nicht aktiviert.",
+"ipb_expiry_invalid" => "Die angegebeben Ablaufzeit ist ungültig.",
+"ip_range_invalid" => "Ungültiger IP-Addressbereich.",
+"confirmprotect" => "Sperrung bestätigen",
"protectcomment" => "Grund der Sperrung",
"unprotectsub" => "(Aufhebung der Sperrung von \"$1\")",
"confirmunprotecttext" => "Wollen Sie wirklich die Sperrung dieser Seite aufheben?",
-"confirmunprotect" => "Aufhebung der Sperrung bestätigen",
-"unprotectcomment" => "Grund für das Aufheben der Sperrung",
+"confirmunprotect" => "Aufhebung der Sperrung bestätigen",
+"unprotectcomment" => "Grund für das Aufheben der Sperrung",
"protectreason" => "(Bitte Grund der Sperrung angeben)",
"proxyblocker" => "Proxyblocker",
-"proxyblockreason" => "Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Provider oder Ihre Systemtechnik und informieren Sie sie über dieses mögliche Sicherheitsproblem.",
+"proxyblockreason" => "Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Provider oder Ihre Systemtechnik und informieren Sie sie über dieses mögliche Sicherheitsproblem.",
"proxyblocksuccess" => "Fertig.\n",
"math_image_error" => "die PNG-Konvertierung schlug fehl.",
-"math_bad_tmpdir" => "Kann das Temporärverzeichnis für mathematische Formeln nicht anlegen oder beschreiben.",
-"math_bad_output" => "Kann das Zielverzeichnis für mathematische Formeln nicht anlegen oder beschreiben.",
+"math_bad_tmpdir" => "Kann das Temporärverzeichnis für mathematische Formeln nicht anlegen oder beschreiben.",
+"math_bad_output" => "Kann das Zielverzeichnis für mathematische Formeln nicht anlegen oder beschreiben.",
"math_notexvc" => "Das texvc-Programm kann nicht gefunden werden. Bitte beachten Sie math/README.",
+'prefs-personal' => 'Benutzerdaten',
+'prefs-rc' => 'Letzte Änderungen und Anzeige kurzer Artikel',
+'prefs-misc' => 'Verschiedene Einstellungen',
"import" => "Seiten importieren",
-"importtext" => "Bitte exportieren Sie die Seite vom Quellwiki mittels Spezial:Export und laden Sie die Datei dann über diese Seite wieder hoch.",
+"importtext" => "Bitte exportieren Sie die Seite vom Quellwiki mittels Spezial:Export und laden Sie die Datei dann über diese Seite wieder hoch.",
"importfailed" => "Import fehlgeschlagen: $1",
"importnotext" => "Leer oder kein Text",
"importsuccess" => "Import erfolgreich!",
-"importhistoryconflict" => "Es existieren bereits ältere Versionen, die mit diesen kollidieren. (Möglicherweise wurde die Seite bereits vorher importiert)",
+"importhistoryconflict" => "Es existieren bereits ältere Versionen, die mit diesen kollidieren. (Möglicherweise wurde die Seite bereits vorher importiert)",
"isbn" => "ISBN",
"rfcurl" => "http://www.faqs.org/rfcs/rfc$1.html",
"siteuser" => "{$wgSitename}-Benutzer $1",
@@ -1071,15 +1154,15 @@ Diskussions-Seite nicht, da schon eine mit dem neuen Titel existiert. Bitte glei
'edit' => 'bearbeiten',
'talk' => 'Diskussion',
"infobox" => "Klicken Sie einen Button, um einen Beispieltext zu erhalten.",
-"infobox_alert" => "Bitte geben Sie den Text ein, den Sie formatiert haben möchten.\\nEr wird dann zum Kopieren in der Infobox angezeigt.\\nBeispiel:\\n$1\\nwird zu\\n$2",
-"nocookiesnew" => "Der Benutzerzugang wurde erstellt, aber Sie sind nicht eingeloggt. {{SITENAME}} benötigt für diese Funktion Cookies, bitte aktivieren Sie diese und loggen sich dann mit Ihrem neuen Benutzernamen und dem Passwort ein.",
+"infobox_alert" => "Bitte geben Sie den Text ein, den Sie formatiert haben möchten.\\nEr wird dann zum Kopieren in der Infobox angezeigt.\\nBeispiel:\\n$1\\nwird zu\\n$2",
+"nocookiesnew" => "Der Benutzerzugang wurde erstellt, aber Sie sind nicht eingeloggt. {{SITENAME}} benötigt für diese Funktion Cookies, bitte aktivieren Sie diese und loggen sich dann mit Ihrem neuen Benutzernamen und dem Passwort ein.",
"nocookieslogin" => "{{SITENAME}} benutzt Cookies zum Einloggen der Benutzer. Sie haben Cookies deaktiviert, bitte aktivieren Sie diese und versuchen es erneut.",
-
-
+"subcategorycount" => "Diese Kategorie hat $1 Unterkategorien.",
+"categoryarticlecount" => "Dieser Kategorie gehören $1 Artikel an."
);
-class LanguageDe extends Language {
+class LanguageDe extends LanguageUtf8 {
function getDefaultUserOptions () {
$opt = Language::getDefaultUserOptions();
@@ -1198,11 +1281,12 @@ class LanguageDe extends Language {
function getMessage( $key )
{
- global $wgAllMessagesDe, $wgAllMessagesEn;
- $m = $wgAllMessagesDe[$key];
-
- if ( "" == $m ) { return $wgAllMessagesEn[$key]; }
- else return $m;
+ global $wgAllMessagesDe;
+ if( isset( $wgAllMessagesDe[$key] ) ) {
+ return $wgAllMessagesDe[$key];
+ } else {
+ return "";
+ }
}
diff --git a/languages/LanguageEl.php b/languages/LanguageEl.php
index ef89ebf78b12..8704b7b651a3 100644
--- a/languages/LanguageEl.php
+++ b/languages/LanguageEl.php
@@ -2,10 +2,45 @@
require_once( "LanguageUtf8.php" );
+/* private */ $wgWeekdayNamesEl = array(
+ "ΚυÏιακή", "ΔευτέÏα", "ΤÏίτη", "ΤετάÏτη", "Πέμπτη",
+ "ΠαÏασκευή", "Σαββάτο"
+);
+
+/* private */ $wgMonthNamesEl = array(
+ "ΙανουάÏιος", "ΦεβÏουάÏιος", "ΜάÏτιος", "ΑπÏίλιος", "Μάϊος", "ΙοÏνιος",
+ "ΙοÏλιος", "ΑÏγουστος", "ΣεπτέμβÏιος", "ΟκτώβÏιος", "ÎοέμβÏιος",
+ "ΔεκέμβÏιος"
+);
+
+/* private */ $wgMonthAbbreviationsEl = array(
+ "Ιαν". "ΦεβÏ", "ΜάÏÏ„", "ΑπÏ", "Μάïος", "ΙοÏν", "ΙοÏν",
+ "ΙοÏλ", "ΑÏγ", "Σεπτ", "Οκτώβ", "Îοέμβ", "Δεκέμ"
+);
+
class LanguageEl extends LanguageUtf8 {
function fallback8bitEncoding() {
return "windows-1253";
}
+
+ function getMonthName( $key )
+ {
+ global $wgMonthNamesEl;
+ return $wgMonthNamesEl[$key-1];
+ }
+
+ function getMonthAbbreviation( $key )
+ {
+ global $wgMonthAbbreviationsEl;
+ return $wgMonthAbbreviationsEl[$key-1];
+ }
+
+ function getWeekdayName( $key )
+ {
+ global $wgWeekdayNamesEl;
+ return $wgWeekdayNamesEl[$key-1];
+ }
+
}
-?> \ No newline at end of file
+?>
diff --git a/languages/LanguageEo.php b/languages/LanguageEo.php
index a2778b72793c..d06cd0616695 100644
--- a/languages/LanguageEo.php
+++ b/languages/LanguageEo.php
@@ -44,7 +44,8 @@ $wgEditEncoding = "x";
'cologneblue' => "Kolonja Bluo",
'davinci' => "DaVinci",
'mono' => "Senkolora",
- 'monobook' => "Librejo"
+ 'monobook' => "Librejo",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesEo = array(
@@ -181,6 +182,7 @@ $wgEditEncoding = "x";
"faq" => "Oftaj demandoj",
"faqpage" => "{{ns:4}}:Oftaj demandoj",
"edithelp" => "Helpo pri redaktado",
+"newwindow" => "(en nova fenestro)",
"edithelppage" => "{{ns:4}}:Kiel_redakti_paÄon", #FIXME: Kontrolu
"cancel" => "Nuligu",
"qbfind" => "Trovu",
@@ -446,7 +448,7 @@ Bonvolu kontroli la retadreson (URL) kiun vi uzis por atingi la paÄon.\b",
"searchresults" => "Serĉrezultoj",
"searchhelppage" => "{{ns:4}}:Serĉado",
"searchingwikipedia" => "Priserĉante la {{SITENAME}}n",
-"searchresulttext" => "Por pliaj informoj kiel priserĉi la {{SITENAME}}n, vidu .",
+"searchresulttext" => "Por pliaj informoj kiel priserĉi la {{SITENAME}}n, vidu $1.",
"searchquery" => "Serĉmendo \"$1\"",
"badquery" => "Misformita serĉmendo",
"badquerytext" => "Via serĉmendo ne estis plenumebla.
diff --git a/languages/LanguageEs.php b/languages/LanguageEs.php
index c8e0fd398681..65a91f8f3d80 100644
--- a/languages/LanguageEs.php
+++ b/languages/LanguageEs.php
@@ -1,25 +1,37 @@
<?php
+#
+# Spanish localisation for MediaWiki
+#
+# This file is encoded in UTF-8, no byte order mark.
+# For compatibility with Latin-1 installations, please
+# don't add literal characters above U+00ff.
+#
+
+require_once( "LanguageUtf8.php" );
# The names of the namespaces can be set here, but the numbers
# are magical, so don't change or move them! The Namespace class
# encapsulates some of the magic-ness.
#
/* private */ $wgNamespaceNamesEs = array(
- -2 => "Media",
- -1 => "Especial",
- 0 => "",
- 1 => "Discusión",
- 2 => "Usuario",
- 3 => "Usuario_Discusión",
- 4 => $wgMetaNamespace,
- 5 => "{$wgMetaNamespace}_Discusión",
- 6 => "Imagen",
- 7 => "Imagen_Discusión",
- 8 => "MediaWiki",
- 9 => "MediaWiki_Discusión",
- 10 => "Template",
- 11 => "Template_talk"
-
+ NS_MEDIA => "Media",
+ NS_SPECIAL => "Especial",
+ NS_MAIN => "",
+ NS_TALK => "Discusión",
+ NS_USER => "Usuario",
+ NS_USER_TALK => "Usuario_Discusión",
+ NS_WIKIPEDIA => $wgMetaNamespace,
+ NS_WIKIPEDIA_TALK => "{$wgMetaNamespace}_Discusión",
+ NS_IMAGE => "Imagen",
+ NS_IMAGE_TALK => "Imagen_Discusión",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "MediaWiki_Discusión",
+ NS_TEMPLATE => "Template",
+ NS_TEMPLATE_TALK => "Template_talk",
+ NS_HELP => "Ayuda",
+ NS_HELP_TALK => "Ayuda_Discusión",
+ NS_CATEGORY => "Category",
+ NS_CATEGORY_TALK => "Category_talk",
);
/* private */ $wgQuickbarSettingsEs = array(
@@ -31,14 +43,15 @@
);
/* private */ $wgSkinNamesEs = array(
- 'standard' => "Estándar",
+ 'standard' => "Estándar",
'nostalgia' => "Nostalgia",
'cologneblue' => "Cologne Blue",
'smarty' => "Paddington",
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesEs = array(
@@ -58,22 +71,22 @@
/* private */ $wgUserTogglesEs = array(
"hover" => "Mostrar caja flotante sobre los enlaces wiki",
"underline" => "Subrayar enlaces",
- "highlightbroken" => "Destacar enlaces a artículos vacíos <a href=\"\" class=\"new\">como este</a> (alternativa: como éste<a href=\"\" class=\"internal\">?</a>).",
- "justify" => "Ajustar párrafos",
+ "highlightbroken" => "Destacar enlaces a artículos vacíos <a href=\"\" class=\"new\">como este</a> (alternativa: como éste<a href=\"\" class=\"internal\">?</a>).",
+ "justify" => "Ajustar párrafos",
"hideminor" => "Esconder ediciones menores en Cambios Recientes",
"usenewrc" => "Cambios Recientes realzados (no para todos los navegadores)",
"numberheadings" => "Auto-numerar encabezados",
"showtoolbar" => "Show edit toolbar",
- "rememberpassword" => "Recordar la contraseña entre sesiones",
- "editwidth" => "La caja de edición tiene el ancho máximo",
- "editondblclick" => "Editar páginas con doble click (JavaScript)",
+ "rememberpassword" => "Recordar la contraseña entre sesiones",
+ "editwidth" => "La caja de edición tiene el ancho máximo",
+ "editondblclick" => "Editar páginas con doble click (JavaScript)",
"editsection"=>"Habilitar la edicion de secciones usando el enlace [editar]",
-"editsectiononrightclick"=>"Habilitar la edición de secciones presionando el boton de la derecha<br> en los titulos de secciones (JavaScript)",
+"editsectiononrightclick"=>"Habilitar la edición de secciones presionando el boton de la derecha<br> en los titulos de secciones (JavaScript)",
"showtoc"=>"Mostrar la tabla de contenidos<br>(para paginas con mas de 3 encabezados)",
- "watchdefault" => "Vigilar artículos nuevos y modificados",
+ "watchdefault" => "Vigilar artículos nuevos y modificados",
"minordefault" => "Marcar todas las ediciones como menores por defecto",
- "previewontop" => "Mostrar la previsualización antes de la caja de edición en lugar de después",
+ "previewontop" => "Mostrar la previsualización antes de la caja de edición en lugar de después",
"nocache"=> "Inhabilitar el ''cache'' de paginas"
);
@@ -87,7 +100,7 @@
);
/* private */ $wgWeekdayNamesEs = array(
-"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"
+"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"
);
/* private */ $wgMonthNamesEs = array(
@@ -112,25 +125,25 @@
"Watchlist" => "Mi lista de seguimiento",
"Recentchanges" => "Cambios Recientes",
"Upload" => "Subir una imagen",
- "Imagelist" => "Lista de imágenes",
+ "Imagelist" => "Lista de imágenes",
"Listusers" => "Usuarios registrados",
- "Statistics" => "Estadísticas del sitio",
- "Randompage" => "Artículo aleatorio",
+ "Statistics" => "Estadísticas del sitio",
+ "Randompage" => "Artículo aleatorio",
- "Lonelypages" => "Artículos huérfanos",
- "Unusedimages" => "Imágenes huérfanas",
- "Popularpages" => "Artículos populares",
- "Wantedpages" => "Artículos más solicitados",
- "Shortpages" => "Artículos cortos",
+ "Lonelypages" => "Artículos huérfanos",
+ "Unusedimages" => "Imágenes huérfanas",
+ "Popularpages" => "Artículos populares",
+ "Wantedpages" => "Artículos más solicitados",
+ "Shortpages" => "Artículos cortos",
- "Longpages" => "Artículos largos",
- "Newpages" => "Artículos nuevos",
+ "Longpages" => "Artículos largos",
+ "Newpages" => "Artículos nuevos",
"Ancientpages" => "Articulos mas antiguos",
# "Intl" => "Enlaces Interlenguaje",
- "Allpages" => "Todas las páginas (alfabético)",
+ "Allpages" => "Todas las páginas (alfabético)",
"Ipblocklist" => "Direcciones IP bloqueadas",
- "Maintenance" => "Página de mantenimiento",
+ "Maintenance" => "Página de mantenimiento",
"Specialpages" => "",
"Contributions" => "",
@@ -144,9 +157,9 @@
);
/* private */ $wgSysopSpecialPagesEs = array(
- "Blockip" => "Bloquear una dirección IP",
- "Asksql" => "Búsqueda en la base de datos",
- "Undelete" => "Ver y restaurar páginas borradas"
+ "Blockip" => "Bloquear una dirección IP",
+ "Asksql" => "Búsqueda en la base de datos",
+ "Undelete" => "Ver y restaurar páginas borradas"
);
/* private */ $wgDeveloperSpecialPagesEs = array(
@@ -158,9 +171,9 @@
# Bits of text used by many pages:
#
-"linktrail" => "/^([a-záéíóúñ]+)(.*)\$/sD",
+"linktrail" => "/^((?:[a-z]|á|é|í|ó|ú|ñ)+)(.*)\$/sD",
"mainpage" => "Portada",
-"mainpagetext" => "Software wiki instalado con éxito.",
+"mainpagetext" => "Software wiki instalado con éxito.",
"about" => "Acerca de",
"aboutwikipedia" => "Acerca de $wgSitename",
"aboutpage" => "$wgMetaNamespace:Acerca de",
@@ -172,55 +185,55 @@
"faq" => "FAQ",
"faqpage" => "$wgMetaNamespace:FAQ",
-"edithelp" => "Ayuda de edición",
-"edithelppage" => "$wgMetaNamespace:Cómo_se_edita_una_página",
+"edithelp" => "Ayuda de edición",
+"edithelppage" => "$wgMetaNamespace:Cómo_se_edita_una_página",
"cancel" => "Cancelar",
"qbfind" => "Encontrar",
"qbbrowse" => "Hojear",
"qbedit" => "Editar",
-"qbpageoptions" => "Opciones de página",
-"qbpageinfo" => "Información de página",
+"qbpageoptions" => "Opciones de página",
+"qbpageinfo" => "Información de página",
"qbmyoptions" => "Mis opciones",
-"mypage" => "Mi página",
-"mytalk" => "Mi discusión",
+"mypage" => "Mi página",
+"mytalk" => "Mi discusión",
"currentevents" => "Actualidad",
"errorpagetitle" => "Error",
"returnto" => "Regresa a $1.",
"fromwikipedia" => "De $wgSitename, la enciclopedia libre.",
-"whatlinkshere" => "Páginas que enlazan aquí",
+"whatlinkshere" => "Páginas que enlazan aquí",
"help" => "Ayuda",
"search" => "Buscar",
"go" => "Ir",
"history" => "Historia",
-"printableversion" => "Versión para imprimir",
-"editthispage" => "Edita esta página",
-"deletethispage" => "Borra esta página",
-"protectthispage" => "Protege esta página",
-"unprotectthispage" => "Desprotege esta página",
-
-"newpage" => "Página nueva",
-"talkpage" => "Discute esta página",
+"printableversion" => "Versión para imprimir",
+"editthispage" => "Edita esta página",
+"deletethispage" => "Borra esta página",
+"protectthispage" => "Protege esta página",
+"unprotectthispage" => "Desprotege esta página",
+
+"newpage" => "Página nueva",
+"talkpage" => "Discute esta página",
"postcomment" => "Pon un comentario",
-"articlepage" => "Ver artículo",
-"subjectpage" => "Artículo",
-"userpage" => "Ver página de usuario",
-"wikipediapage" => "Ver página meta",
-"imagepage" => "Ver página de imagen",
-"viewtalkpage" => "Ver discusión",
+"articlepage" => "Ver artículo",
+"subjectpage" => "Artículo",
+"userpage" => "Ver página de usuario",
+"wikipediapage" => "Ver página meta",
+"imagepage" => "Ver página de imagen",
+"viewtalkpage" => "Ver discusión",
"otherlanguages" => "Otros idiomas",
"redirectedfrom" => "(Redirigido desde $1)",
-"lastmodified" => "Esta página fue modificada por última vez el $1.",
-"viewcount" => "Esta página ha sido visitada $1 veces.",
-"gnunote" => "Todo el texto se hace disponible bajo los términos de la <a class=internal href='/wiki/GNU_FDL'>Licencia de Documentación Libre GNU (GNU FDL)",
+"lastmodified" => "Esta página fue modificada por última vez el $1.",
+"viewcount" => "Esta página ha sido visitada $1 veces.",
+"gnunote" => "Todo el texto se hace disponible bajo los términos de la <a class=internal href='/wiki/GNU_FDL'>Licencia de Documentación Libre GNU (GNU FDL)",
"printsubtitle" => "(De http://es.wikipedia.org)",
-"protectedpage" => "Página protegida",
+"protectedpage" => "Página protegida",
"administrators" => "$wgMetaNamespace:Administradores",
"sysoptitle" => "Acceso de Administrador requerido",
-"sysoptext" => "La acción que has requerido sólo puede ser llevada a cabo
+"sysoptext" => "La acción que has requerido sólo puede ser llevada a cabo
por usuarios con status de administrador.
Ver $1.",
"developertitle" => "Acceso de developer requerido",
-"developertext" => "La acción que has requerido sólo puede ser llevada a cabo
+"developertext" => "La acción que has requerido sólo puede ser llevada a cabo
por usuarios con status de \"developer\".
Ver $1.",
"nbytes" => "$1 bytes",
@@ -241,11 +254,11 @@ Ver $1.",
# Main script and global functions
#
-"nosuchaction" => "No existe tal acción",
-"nosuchactiontext" => "La acción especificada por el URL no es
+"nosuchaction" => "No existe tal acción",
+"nosuchactiontext" => "La acción especificada por el URL no es
reconocida por el software de $wgSitename",
-"nosuchspecialpage" => "No existe esa página especial",
-"nospecialpagetext" => "Has requerido una página especial que no es
+"nosuchspecialpage" => "No existe esa página especial",
+"nospecialpagetext" => "Has requerido una página especial que no es
reconocida por el software de $wgSitename.",
# General errors
@@ -254,31 +267,31 @@ Ver $1.",
"databaseerror" => "Error de la base de datos",
"dberrortext" => "Ha ocurrido un error de sintaxis en una consulta
a la base de datos.
-Esto puede ser debido a una búsqueda ilegal (ver $5),
+Esto puede ser debido a una búsqueda ilegal (ver $5),
o puede indicar un error en el software.
-La última consulta que se intentó fue:
+La última consulta que se intentó fue:
<blockquote><tt>$1</tt></blockquote>El error de retorno de
MySQL fue\"<tt>$3: $4</tt>\".",
"dberrortextcl" => "Ha ocurrido un error de sintaxis en una consulta
a la base de datos.
-La última consulta que se intentó fue:
+La última consulta que se intentó fue:
\"$1\"
-desde la función \"$2\".
-MySQL retornó el error \"$3: $4\".\n",
+desde la función \"$2\".
+MySQL retornó el error \"$3: $4\".\n",
"noconnect" => "No se pudo conectar a la base de datos en $1",
"nodb" => "No se pudo seleccionar la base de datos $1",
"readonly" => "Base de datos bloqueada",
-"cachederror" => "Esta es una copia guardada en el cache de la página requerida, y puede no estar actualizada.",
-"enterlockreason" => "Explica el motivo del bloqueo, incluyendo una estimación de cuándo se producirá el desbloqueo",
-"readonlytext" => "La base de datos de $wgSitename está temporalmente
+"cachederror" => "Esta es una copia guardada en el cache de la página requerida, y puede no estar actualizada.",
+"enterlockreason" => "Explica el motivo del bloqueo, incluyendo una estimación de cuándo se producirá el desbloqueo",
+"readonlytext" => "La base de datos de $wgSitename está temporalmente
bloqueada para nuevas entradas u otras modificaciones, probablemente
-para mantenimiento de rutina, después de lo cual volverá a la normalidad.
-El administrador que la bloqueó ofreció esta explicación:
+para mantenimiento de rutina, después de lo cual volverá a la normalidad.
+El administrador que la bloqueó ofreció esta explicación:
<p>$1",
-"missingarticle" => "La base de datos no encontró el texto de una
-página que debería haber encontrado, llamada \"$1\".
+"missingarticle" => "La base de datos no encontró el texto de una
+página que debería haber encontrado, llamada \"$1\".
-<p>Esto es causado usualmente por seguir un enlace a una diferencia de páginas o historia obsoleta a una página que ha sido borrada.
+<p>Esto es causado usualmente por seguir un enlace a una diferencia de páginas o historia obsoleta a una página que ha sido borrada.
<p>Si esta no es la causa, puedes haber encontrado un error en el software. Por favor, informa esto a un administrador,
notando el URL.",
@@ -290,30 +303,30 @@ notando el URL.",
"filenotfound" => "No se pudo encontrar el archivo \"$1\".",
"unexpected" => "Valor no esperado: \"$1\"=\"$2\".",
"formerror" => "Error: no se pudo submitir la forma",
-"badarticleerror" => "Esta acción no se puede llevar a cabo en esta página.",
-"cannotdelete" => "No se pudo borrar la página o imagen especificada. (Puede haber sido borrada por alguien antes)",
-"badtitle" => "Título incorrecto",
-"badtitletext" => "El título de la página requerida era incorrecto, vacío, o un enlace interleguaje o interwiki incorrecto.",
+"badarticleerror" => "Esta acción no se puede llevar a cabo en esta página.",
+"cannotdelete" => "No se pudo borrar la página o imagen especificada. (Puede haber sido borrada por alguien antes)",
+"badtitle" => "Título incorrecto",
+"badtitletext" => "El título de la página requerida era incorrecto, vacío, o un enlace interleguaje o interwiki incorrecto.",
-"perfdisabled" => "Lo siento, esta función está temporalmente desactivada porque enlentece la base de datos a tal punto que nadie puede usar el wiki. Será reescrita para mayor eficiencia en el futuro) probablemente por ti!",
+"perfdisabled" => "Lo siento, esta función está temporalmente desactivada porque enlentece la base de datos a tal punto que nadie puede usar el wiki. Será reescrita para mayor eficiencia en el futuro) probablemente por ti!",
"perfdisabledsub" => "Aqui hay una copia grabada de $1:",
-# Login and logout pagesítulo
-"logouttitle" => "Fin de sesión",
-"logouttext" => "Has terminado tu sesión.
-Puedes continuar usando $wgSitename en forma anónima, o puedes
-iniciar sesión otra vez como el mismo u otro usuario.\n",
+# Login and logout pagesítulo
+"logouttitle" => "Fin de sesión",
+"logouttext" => "Has terminado tu sesión.
+Puedes continuar usando $wgSitename en forma anónima, o puedes
+iniciar sesión otra vez como el mismo u otro usuario.\n",
"welcomecreation" => "<h2>Bienvenido(a), $1!</h2><p>Tu cuenta ha sido creada.
No olvides perzonalizar tus preferencia de $wgSitename.",
"loginpagetitle" => "Registrarse/Entrar",
"yourname" => "Tu nombre de usuario",
-"yourpassword" => "Tu contraseña",
-"yourpasswordagain" => "Repite tu contraseña",
-"newusersonly" => " (sólo usuarios nuevos)",
-"remembermypassword" => "Quiero que recuerden mi contraseña entre sesiones.",
-"loginproblem" => "<b>Hubo un problema con tu entrada.</b><br>¡Inténtalo otra vez!",
+"yourpassword" => "Tu contraseña",
+"yourpasswordagain" => "Repite tu contraseña",
+"newusersonly" => " (sólo usuarios nuevos)",
+"remembermypassword" => "Quiero que recuerden mi contraseña entre sesiones.",
+"loginproblem" => "<b>Hubo un problema con tu entrada.</b><br>¡Inténtalo otra vez!",
"alreadyloggedin" => "<font color=red><b>Usuario $1, ya entraste!</b></font><br>\n",
"login" => "Registrarse/Entrar",
@@ -322,145 +335,145 @@ No olvides perzonalizar tus preferencia de $wgSitename.",
"userlogout" => "Salir",
"notloggedin" => "No has entrado",
"createaccount" => "Crea una nueva cuenta",
-"badretype" => "Las contraseñas que ingresaste no concuerdan.",
-"userexists" => "El nombre que entraste ya está en uso. Por favor, elije un nombre diferente.",
-"youremail" => "Tu dirección electrónica (e-mail)",
+"badretype" => "Las contraseñas que ingresaste no concuerdan.",
+"userexists" => "El nombre que entraste ya está en uso. Por favor, elije un nombre diferente.",
+"youremail" => "Tu dirección electrónica (e-mail)",
"yournick" => "Tu apodo (para firmas)",
-"emailforlost" => "Ingresar una dirección electrónica es opcional, pero permite a los demás usuarios contactarse contigo a través del sitio web sin tener que revelarles tu dirección electrónica. Además, si pierdes u olvidas tu contraseña, puedes pedir que se envíe una nueva a tu dirección electrónica.",
-"loginerror" => "Error de inicio de sesión",
-"noname" => "No has especificado un nombre de usuario válido.",
-"loginsuccesstitle" => "Inicio de sesión exitoso",
-"loginsuccess" => "Has iniciado tu sesión en $wgSitename como \"$1\".",
+"emailforlost" => "Ingresar una dirección electrónica es opcional, pero permite a los demás usuarios contactarse contigo a través del sitio web sin tener que revelarles tu dirección electrónica. Además, si pierdes u olvidas tu contraseña, puedes pedir que se envíe una nueva a tu dirección electrónica.",
+"loginerror" => "Error de inicio de sesión",
+"noname" => "No has especificado un nombre de usuario válido.",
+"loginsuccesstitle" => "Inicio de sesión exitoso",
+"loginsuccess" => "Has iniciado tu sesión en $wgSitename como \"$1\".",
"nosuchuser" => "No existe usuario alguno llamado \"$1\".
Revisa tu deletreo, o usa la forma abajo para crear una nueva cuenta de usuario.",
-"wrongpassword" => "La contraseña que ingresaste es incorrecta. Por favor inténtalo de nuevo.",
-"mailmypassword" => "Envíame una nueva contraseña por correo electrónico",
-"passwordremindertitle" => "Recordatorio de contraseña de $wgSitename",
-"passwordremindertext" => "Alguien (probablemente tú, desde la direccion IP $1)
-solicitó que te enviaramos una nueva contraseña para iniciar sesión en $wgSitename.
-La contraseña para el usuario \"$2\" es ahora \"$3\".
-Ahora deberías iniciar sesion y cambiar tu contraseña.",
-"noemail" => "No hay dirección electrónica (e-mail) registrada para el(la) usuario(a) \"$1\".",
-"passwordsent" => "Una nueva contraseña ha sido enviada a la dirección electrónica registrada para \"$1\".
-Por favor entra otra vez después de que la recibas.",
+"wrongpassword" => "La contraseña que ingresaste es incorrecta. Por favor inténtalo de nuevo.",
+"mailmypassword" => "Envíame una nueva contraseña por correo electrónico",
+"passwordremindertitle" => "Recordatorio de contraseña de $wgSitename",
+"passwordremindertext" => "Alguien (probablemente tú, desde la direccion IP $1)
+solicitó que te enviaramos una nueva contraseña para iniciar sesión en $wgSitename.
+La contraseña para el usuario \"$2\" es ahora \"$3\".
+Ahora deberías iniciar sesion y cambiar tu contraseña.",
+"noemail" => "No hay dirección electrónica (e-mail) registrada para el(la) usuario(a) \"$1\".",
+"passwordsent" => "Una nueva contraseña ha sido enviada a la dirección electrónica registrada para \"$1\".
+Por favor entra otra vez después de que la recibas.",
# Edit pages
#
"summary" => "Resumen",
-"subject" => "Tema/título",
-"minoredit" => "Esta es una edición menor.",
-"watchthis" => "Vigila este artículo.",
-"savearticle" => "Grabar la página",
+"subject" => "Tema/título",
+"minoredit" => "Esta es una edición menor.",
+"watchthis" => "Vigila este artículo.",
+"savearticle" => "Grabar la página",
"preview" => "Previsualizar",
-"showpreview" => "Mostrar previsualización",
-"blockedtitle" => "El usuario está bloqueado",
-"blockedtext" => "Tu nombre de usuario o dirección IP ha sido bloqueada por $1.
-La razón dada es la que sigue:<br>$2<p> Puedes contactar a $1 o a otro de los [[$wgMetaNamespace:Administradores|administradores]] para
+"showpreview" => "Mostrar previsualización",
+"blockedtitle" => "El usuario está bloqueado",
+"blockedtext" => "Tu nombre de usuario o dirección IP ha sido bloqueada por $1.
+La razón dada es la que sigue:<br>$2<p> Puedes contactar a $1 o a otro de los [[$wgMetaNamespace:Administradores|administradores]] para
discutir el bloqueo.",
"newarticle" => "(Nuevo)",
-"newarticletext" => "$wgSitename es una enciclopedia en desarrollo, y esta página aún no existe. Puedes pedir información en [[$wgMetaNamespace:Consultas]], pero no esperes una respuesta pronta. Si lo que quieres es crear esta página, empieza a escribir en la caja que sigue. Si llegaste aquí por error, presiona la tecla para volver a la página anterior de tu navegador.",
-"anontalkpagetext" => "---- ''Esta es la página de discusión para un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su [[dirección IP]] numérica para adentificarlo. Una dirección IP puede ser compartida por varios usuarios. Si eres un usuario anónimo y sientes que comentarios irreleventes han sido dirigidos a ti, por favor [[Especial:Userlogin|crea una cuenta o entra]] para evitar confusiones futuras con otros usuarios anónimos.'' ",
-"noarticletext" => "(En este momento no hay texto en esta página)",
+"newarticletext" => "$wgSitename es una enciclopedia en desarrollo, y esta página aún no existe. Puedes pedir información en [[$wgMetaNamespace:Consultas]], pero no esperes una respuesta pronta. Si lo que quieres es crear esta página, empieza a escribir en la caja que sigue. Si llegaste aquí por error, presiona la tecla para volver a la página anterior de tu navegador.",
+"anontalkpagetext" => "---- ''Esta es la página de discusión para un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su [[dirección IP]] numérica para adentificarlo. Una dirección IP puede ser compartida por varios usuarios. Si eres un usuario anónimo y sientes que comentarios irreleventes han sido dirigidos a ti, por favor [[Especial:Userlogin|crea una cuenta o entra]] para evitar confusiones futuras con otros usuarios anónimos.'' ",
+"noarticletext" => "(En este momento no hay texto en esta página)",
"updated" => "(Actualizado)",
"note" => "<strong>Nota:</strong> ",
-"previewnote" => "Recuerda que esto es sólo una previsualización, y no ha sido grabada todavía!",
-"previewconflict" => "Esta previsualización refleja el texto en el área
-de edición superior como aparecerá si eliges grabar.",
+"previewnote" => "Recuerda que esto es sólo una previsualización, y no ha sido grabada todavía!",
+"previewconflict" => "Esta previsualización refleja el texto en el área
+de edición superior como aparecerá si eliges grabar.",
"editing" => "Editando $1",
-"sectionedit" => " (sección)",
+"sectionedit" => " (sección)",
"commentedit" => " (comentario)",
-"editconflict" => "Conflicto de edición: $1",
-"explainconflict" => "Alguien más ha cambiado esta página desde que empezaste
+"editconflict" => "Conflicto de edición: $1",
+"explainconflict" => "Alguien más ha cambiado esta página desde que empezaste
a editarla.
-El área de texto superior contiene el texto de la página como existe
-actualmente. Tus cambios se muestran en el área de texto inferior.
+El área de texto superior contiene el texto de la página como existe
+actualmente. Tus cambios se muestran en el área de texto inferior.
Vas a tener que incorporar tus cambios en el texto existente.
-<b>Sólo</b> el texto en el área de texto superior será grabado cuando presiones
- \"Grabar página\".\n<p>",
+<b>Sólo</b> el texto en el área de texto superior será grabado cuando presiones
+ \"Grabar página\".\n<p>",
"yourtext" => "Tu texto",
-"storedversion" => "Versión almacenada",
-"editingold" => "<strong>ADVERTENCIA: Estás editando una versión antigua
- de esta página.
-Si la grabas, los cambios hechos desde esa revisión se perderán.</strong>\n",
+"storedversion" => "Versión almacenada",
+"editingold" => "<strong>ADVERTENCIA: Estás editando una versión antigua
+ de esta página.
+Si la grabas, los cambios hechos desde esa revisión se perderán.</strong>\n",
"yourdiff" => "Diferencias",
-"copyrightwarning" => "Ayuda de edición, caracteres especiales: á é í ó ú Á É Í Ó Ú ü Ü ñ Ñ ¡ ¿ <br><br>Nota por favor que todas las contribuciones a $wgSitename
-se consideran hechas públicas bajo la Licencia de Documentación Libre GNU
+"copyrightwarning" => "Ayuda de edición, caracteres especiales: á é í ó ú à É à Ó Ú ü Ü ñ Ñ ¡ ¿ <br><br>Nota por favor que todas las contribuciones a $wgSitename
+se consideran hechas públicas bajo la Licencia de Documentación Libre GNU
(ver detalles en $1).
Si no deseas que la gente corrija tus escritos sin piedad
-y los distribuya libremente, entonces no los pongas aquí. <br>
-También tú nos aseguras que escribiste esto tú mismo y
-eres dueño de los derechos de autor, o lo copiaste desde el dominio público
+y los distribuya libremente, entonces no los pongas aquí. <br>
+También tú nos aseguras que escribiste esto tú mismo y
+eres dueño de los derechos de autor, o lo copiaste desde el dominio público
u otra fuente libre.
- <strong>¡NO USES ESCRITOS CON COPYRIGHT SIN PERMISO!</strong><br>",
-"longpagewarning" => "ADVERTENCIA: Esta página tiene un tamaño de $1 kilobytes; algunos navegadores pueden tener problemas editando páginas de 32kb o más.
-Por favor considera la posibilidad de descomponer esta página en secciones más pequeñas.",
-"readonlywarning" => "ADVERTENCIA: La base de datos ha sido bloqueada para mantenimiento, así que no podrás grabar tus modificaciones en este momento.
+ <strong>¡NO USES ESCRITOS CON COPYRIGHT SIN PERMISO!</strong><br>",
+"longpagewarning" => "ADVERTENCIA: Esta página tiene un tamaño de $1 kilobytes; algunos navegadores pueden tener problemas editando páginas de 32kb o más.
+Por favor considera la posibilidad de descomponer esta página en secciones más pequeñas.",
+"readonlywarning" => "ADVERTENCIA: La base de datos ha sido bloqueada para mantenimiento, así que no podrás grabar tus modificaciones en este momento.
Puedes \"cortar y pegar\" a un archivo de texto en tu computador, y grabarlo para
-intentarlo después.",
-"protectedpagewarning" => "ADVERTENCIA: Esta página ha sido bloqueda de manera que s&ocute;lo usuarios con privilegios de administrador pueden editarla. Asegúrate de que estás siguiendo las
-<a href='/wiki/$wgMetaNamespace:Guías_para_páginas_protegidas'>guías para páginas protegidas</a>.",
+intentarlo después.",
+"protectedpagewarning" => "ADVERTENCIA: Esta página ha sido bloqueda de manera que s&ocute;lo usuarios con privilegios de administrador pueden editarla. Asegúrate de que estás siguiendo las
+<a href='/wiki/$wgMetaNamespace:Guías_para_páginas_protegidas'>guías para páginas protegidas</a>.",
# History pages
#
"revhistory" => "Historia de revisiones",
-"nohistory" => "No hay una historia de ediciones para esta página.",
-"revnotfound" => "Revisión no encontrada",
-"revnotfoundtext" => "La revisión antigua de la página por la que preguntaste no se pudo encontrar.
-Por favor revisa el URL que usaste para acceder a esta página.\n",
-"loadhist" => "Recuperando la historia de la página",
-"currentrev" => "Revisión actual",
-"revisionasof" => "Revisión de $1",
+"nohistory" => "No hay una historia de ediciones para esta página.",
+"revnotfound" => "Revisión no encontrada",
+"revnotfoundtext" => "La revisión antigua de la página por la que preguntaste no se pudo encontrar.
+Por favor revisa el URL que usaste para acceder a esta página.\n",
+"loadhist" => "Recuperando la historia de la página",
+"currentrev" => "Revisión actual",
+"revisionasof" => "Revisión de $1",
"cur" => "act",
"next" => "sig",
"last" => "prev",
"orig" => "orig",
-"histlegend" => "Simbología: (act) = diferencia con la versión actual,
-(prev) = diferencia con la versión previa, M = edición menor",
+"histlegend" => "Simbología: (act) = diferencia con la versión actual,
+(prev) = diferencia con la versión previa, M = edición menor",
# Diffs
#
"difference" => "(Diferencia entre revisiones)",
-"loadingrev" => "recuperando revisión para diff",
-"lineno" => "Línea $1:",
-"editcurrent" => "Edita la versión actual de esta página",
+"loadingrev" => "recuperando revisión para diff",
+"lineno" => "Línea $1:",
+"editcurrent" => "Edita la versión actual de esta página",
# Search results
#
-"searchresults" => "Resultados de búsqueda",
-"searchhelppage" => "$wgMetaNamespace:Búsqueda",
+"searchresults" => "Resultados de búsqueda",
+"searchhelppage" => "$wgMetaNamespace:Búsqueda",
"searchingwikipedia" => "Buscando en $wgSitename",
-"searchresulttext" => "Para más información acerca de búsquedas en $wgSitename, ve a $1.",
+"searchresulttext" => "Para más información acerca de búsquedas en $wgSitename, ve a $1.",
"searchquery" => "Para consulta \"$1\"",
-"badquery" => "Consulta de búsqueda formateada en forma incorrecta",
-"badquerytext" => "No pudimos procesar tu búsqueda.
-Esto es probablemente porque intentaste buscar una palabra de menos de tres letras, lo que todavía no es posible.
-También puede ser que hayas cometido un error de escritura en la expresión.
-Por favor, intenta una búsqueda diferente.",
-"matchtotals" => "La consulta \"$1\" coincidió con $2 títulos de artículos
-y el texto de $3 artículos.",
-"nogomatch" => "No existe ninguna página con exactamente este título, estamos intentando una búsqueda en todo el texto.",
-"titlematches" => "Coincidencias de título de artículo",
-"notitlematches" => "No hay coincidencias de título de artículo",
-"textmatches" => "Coincidencias de texto de artículo",
-"notextmatches" => "No hay coincidencias de texto de artículo",
+"badquery" => "Consulta de búsqueda formateada en forma incorrecta",
+"badquerytext" => "No pudimos procesar tu búsqueda.
+Esto es probablemente porque intentaste buscar una palabra de menos de tres letras, lo que todavía no es posible.
+También puede ser que hayas cometido un error de escritura en la expresión.
+Por favor, intenta una búsqueda diferente.",
+"matchtotals" => "La consulta \"$1\" coincidió con $2 títulos de artículos
+y el texto de $3 artículos.",
+"nogomatch" => "No existe ninguna página con exactamente este título, estamos intentando una búsqueda en todo el texto.",
+"titlematches" => "Coincidencias de título de artículo",
+"notitlematches" => "No hay coincidencias de título de artículo",
+"textmatches" => "Coincidencias de texto de artículo",
+"notextmatches" => "No hay coincidencias de texto de artículo",
"prevn" => "$1 previos",
"nextn" => "$1 siguientes",
"viewprevnext" => "Ver ($1) ($2) ($3).",
"showingresults" => "Mostrando abajo <b>$1</b> resultados empezando con #<b>$2</b>.",
"showingresultsnum" => "Mostrando abajo <b>$3</b> resultados comenzando con #<b>$2</b>.",
-"nonefound" => "<strong>Nota</strong>: búsquedas no exitosas son causadas a menudo
-por búsquedas de palabras comunes como \"la\" o \"de\",
-que no están en el índice, o por especificar más de una palabra para buscar (sólo las páginas
-que contengan todos los términos de una búsqueda aparecerán en el resultado).",
-"powersearch" => "Búsqueda",
+"nonefound" => "<strong>Nota</strong>: búsquedas no exitosas son causadas a menudo
+por búsquedas de palabras comunes como \"la\" o \"de\",
+que no están en el índice, o por especificar más de una palabra para buscar (sólo las páginas
+que contengan todos los términos de una búsqueda aparecerán en el resultado).",
+"powersearch" => "Búsqueda",
"powersearchtext" => "
Buscar en espacios de nombre :<br>
$1<br>
$2 Listar redirecciones Buscar $3 $9",
-"searchdisabled" => "<p>Búsqueda en todo el texto ha sido desactivada temporalmente
+"searchdisabled" => "<p>Búsqueda en todo el texto ha sido desactivada temporalmente
debido a carga alta del servidor; esperamos tenerla otra vez en linea despues de algunas actualizaciones de
-soporte físico próximas. Mientras tanto, puedes hacer una busqueda vía google:</p>
+soporte físico próximas. Mientras tanto, puedes hacer una busqueda vía google:</p>
<!--Busqueda de Sitio Google -->
<FORM method=GET action=\"http://www.google.es/search\">
@@ -493,65 +506,65 @@ value=\"{$wgServer}\" checked> {$wgServer} <br>
wfLocalUrl( "Especial:Userlogin" ) . "\">entrar</a>
para seleccionar preferencias de usuario.",
"prefslogintext" => "Has entrado con el nombre \"$1\".
-Tu número de identificación interno es $2.",
+Tu número de identificación interno es $2.",
"prefsreset" => "Las preferencias han sido repuestas desde almacenaje.",
"qbsettings" => "Preferencias de \"Quickbar\"",
-"changepassword" => "Cambia contraseña",
+"changepassword" => "Cambia contraseña",
"skin" => "Piel",
-"math" => "Cómo se muestran las fórmulas",
+"math" => "Cómo se muestran las fórmulas",
"dateformat" => "Formato de fecha",
"math_failure" => "No se pudo entender",
"math_unknown_error" => "error desconocido",
-"math_unknown_function" => "función desconocida",
-"math_lexing_error" => "error de léxico",
+"math_unknown_function" => "función desconocida",
+"math_lexing_error" => "error de léxico",
"math_syntax_error" => "error de sintaxis",
"saveprefs" => "Grabar preferencias",
"resetprefs" => "Volver a preferencias por defecto",
-"oldpassword" => "Contraseña antigua",
-"newpassword" => "Contraseña nueva",
-"retypenew" => "Reescriba la nueva contraseña",
-"textboxsize" => "Dimensiones del área de texto",
+"oldpassword" => "Contraseña antigua",
+"newpassword" => "Contraseña nueva",
+"retypenew" => "Reescriba la nueva contraseña",
+"textboxsize" => "Dimensiones del área de texto",
"rows" => "Filas",
"columns" => "Columnas",
-"searchresultshead" => "Preferencias de resultado de búsqueda",
-"resultsperpage" => "Resultados para mostrar por página",
-"contextlines" => "Líneas para mostrar por resultado",
-"contextchars" => "Caracteres de contexto por línea",
-"stubthreshold" => "Umbral de artículo mínimo" ,
-"recentchangescount" => "Número de títulos en cambios recientes",
+"searchresultshead" => "Preferencias de resultado de búsqueda",
+"resultsperpage" => "Resultados para mostrar por página",
+"contextlines" => "Líneas para mostrar por resultado",
+"contextchars" => "Caracteres de contexto por línea",
+"stubthreshold" => "Umbral de artículo mínimo" ,
+"recentchangescount" => "Número de títulos en cambios recientes",
"savedprefs" => "Tus preferencias han sido grabadas.",
-"timezonetext" => "Entra el número de horas de diferencia entre tu hora local
+"timezonetext" => "Entra el número de horas de diferencia entre tu hora local
y la hora del servidor (UTC).",
"localtime" => "Hora local",
"timezoneoffset" => "Diferencia",
"servertime" => "La hora en el servidor es",
"guesstimezone" => "Obtener la hora del navegador",
-"emailflag" => "No quiero recibir correo electrónico de otros usuarios",
+"emailflag" => "No quiero recibir correo electrónico de otros usuarios",
"defaultns" => "Buscar en estos espacios de nombres por defecto:",
# Recent changes
#
"changes" => "cambios",
"recentchanges" => "Cambios Recientes",
-"recentchangestext" => "Sigue los cambios más recientes a $wgSitename en esta página.
+"recentchangestext" => "Sigue los cambios más recientes a $wgSitename en esta página.
[[$wgMetaNamespace:Bienvenidos|Bienvenidos]]!
-Por favor, mira estas páginas: [[$wgMetaNamespace:FAQ|$wgSitename FAQ]],
-[[$wgMetaNamespace:Políticas y guías|políticas de $wgSitename]]
-(especialmente [[$wgMetaNamespace:Convenciones de nombres|las convenciones para nombrar artículos]] y
+Por favor, mira estas páginas: [[$wgMetaNamespace:FAQ|$wgSitename FAQ]],
+[[$wgMetaNamespace:Políticas y guías|políticas de $wgSitename]]
+(especialmente [[$wgMetaNamespace:Convenciones de nombres|las convenciones para nombrar artículos]] y
[[$wgMetaNamespace:Punto de vista neutral|punto de vista neutral]]).
-Si quieres que $wgSitename tenga éxito, es muy importante que no agregues
+Si quieres que $wgSitename tenga éxito, es muy importante que no agregues
material restringido por [[$wgMetaNamespace:Copyrights|derechos de autor]].
-La responsabilidad legal realmente podría dañar el proyecto, así que por favor no lo hagas.
+La responsabilidad legal realmente podría dañar el proyecto, así que por favor no lo hagas.
-Ve también [http://meta.wikipedia.org/wiki/Special:Recentchanges discusión reciente en Meta (multilingüe)].",
+Ve también [http://meta.wikipedia.org/wiki/Special:Recentchanges discusión reciente en Meta (multilingüe)].",
"rcloaderr" => "cargando cambios recientes",
-"rcnote" => "Abajo están los últimos <b>$1</b> cambios en los últimos <b>$2</b> días.",
+"rcnote" => "Abajo están los últimos <b>$1</b> cambios en los últimos <b>$2</b> días.",
"rclistfrom" => "Mostrar cambios nuevos desde $1",
-"rcnotefrom" => "Abajo están los cambios desde <b>$2</b> (se muestran hasta <b>$1</b>).",
-"rclinks" => "Ver los últimos $1 cambios en los últimos $2 días.",
-"rchide" => "en forma $4 ; $1 ediciones menores; $2 espacios de nombre secundarios; $3 ediciones múltiples.",
+"rcnotefrom" => "Abajo están los cambios desde <b>$2</b> (se muestran hasta <b>$1</b>).",
+"rclinks" => "Ver los últimos $1 cambios en los últimos $2 días.",
+"rchide" => "en forma $4 ; $1 ediciones menores; $2 espacios de nombre secundarios; $3 ediciones múltiples.",
"rcliu" => "; $1 ediciones de usuarios en sesion",
"diff" => "dif",
"hist" => "hist",
@@ -567,284 +580,284 @@ Ve también [http://meta.wikipedia.org/wiki/Special:Recentchanges discusión recie
#
"upload" => "Subir",
"uploadbtn" => "Subir un archivo",
-"uploadlink" => "Subir imágenes",
+"uploadlink" => "Subir imágenes",
"reupload" => "Subir otra vez",
"reuploaddesc" => "Regresar al formulario para subir.",
-"uploadnologin" => "No has iniciado sesión",
-"uploadnologintext" => "Tú debes <a href=\"" .
- wfLocalUrl( "Especial:Userlogin" ) . "\">iniciar sesión</a>
+"uploadnologin" => "No has iniciado sesión",
+"uploadnologintext" => "Tú debes <a href=\"" .
+ wfLocalUrl( "Especial:Userlogin" ) . "\">iniciar sesión</a>
para subir archivos.",
"uploadfile" => "Subir archivo",
"uploaderror" => "Error tratando de subir",
-"uploadtext" => "Para ver o buscar imágenes que se hayan subido
+"uploadtext" => "Para ver o buscar imágenes que se hayan subido
previamente, ve a la <a href=\"" . wfLocalUrlE( "Especial:Imagelist" ) .
-"\">lista de imágenes subidas</a>.
+"\">lista de imágenes subidas</a>.
Los archivos subidos y borrados son registrados en el <a href=\"" .
wfLocalUrlE( "$wgMetaNamespace:Registro de subidas" ) . "\">registro de subidas</a>.
-Consulta también la <a href=\"" . wfLocalUrlE( "$wgMetaNamespace:Política de uso de imágenes" ) .
-"\">política de uso de imágenes</a>.
-<p>Usa el formulario siguiente para subir nuevos archivos de imágenes que
-vas a usar para ilustrar tus artículos.
-En la mayoría de los navegadores, verás un botón \"Browse...\", que
-abrirá el diálogo de selección de archivos estándar de tu sistema operativo.
-Cuando hayas elegido un archivo, su nombre aparecerá en el campo de texto
-al lado del botón \"Examinar...\".
-También debes marcar la caja afirmando que no estás
-violando ningún copyright al subir el archivo.
+Consulta también la <a href=\"" . wfLocalUrlE( "$wgMetaNamespace:Política de uso de imágenes" ) .
+"\">política de uso de imágenes</a>.
+<p>Usa el formulario siguiente para subir nuevos archivos de imágenes que
+vas a usar para ilustrar tus artículos.
+En la mayoría de los navegadores, verás un botón \"Browse...\", que
+abrirá el diálogo de selección de archivos estándar de tu sistema operativo.
+Cuando hayas elegido un archivo, su nombre aparecerá en el campo de texto
+al lado del botón \"Examinar...\".
+También debes marcar la caja afirmando que no estás
+violando ningún copyright al subir el archivo.
Presiona el boton \"Subir\" para completar la subida.
-Esto puede tomar algún tiempo si tienes una conexión a internet lenta.
-<p>Los formatos preferidos son JPEG para imágenes fotográficas, PNG
+Esto puede tomar algún tiempo si tienes una conexión a internet lenta.
+<p>Los formatos preferidos son JPEG para imágenes fotográficas, PNG
para dibujos y diagramas, y OGG para sonidos.
Por favor, dale a tus archivos nombres descriptivos para evitar confusiones.
-Para incluir la imagen en un artículo, usa un enlace de la forma
+Para incluir la imagen en un artículo, usa un enlace de la forma
<b>[[imagen:archivo.jpg]]</b> o <b>[[imagen:archivo.png|alt text]]</b>
o <b>[[media:archivo.ogg]]</b> para sonidos.
-<p>Por favor recuerda que, al igual que con las páginas $wgSitename, otros pueden
+<p>Por favor recuerda que, al igual que con las páginas $wgSitename, otros pueden
editar o borrar los archivos que has subido si piensan que es bueno para
-la enciclopedia, y se te puede bloquear, impidiéndote subir más archivos si abusas del sistema.",
+la enciclopedia, y se te puede bloquear, impidiéndote subir más archivos si abusas del sistema.",
"uploadlog" => "registro de subidas",
"uploadlogpage" => "Registro_de_subidas",
"uploadlogpagetext" => "Abajo hay una lista de los archivos que se han
-subido más recientemente. Todas las horas son del servidor (UTC).
+subido más recientemente. Todas las horas son del servidor (UTC).
<ul>
</ul>
",
"filename" => "Nombre del archivo",
"filedesc" => "Sumario",
-"affirmation" => "Afirmo que el dueño del copyright de este archivo
-está de acuerdo en licenciarlo bajo los términos de $1.",
+"affirmation" => "Afirmo que el dueño del copyright de este archivo
+está de acuerdo en licenciarlo bajo los términos de $1.",
"copyrightpage" => "$wgMetaNamespace:Copyrights",
"copyrightpagename" => "$wgSitename copyright",
"uploadedfiles" => "Archivos subidos",
-"noaffirmation" => "Tú debes afirmar que tus subidas de archivos no violan ningún copyright.",
+"noaffirmation" => "Tú debes afirmar que tus subidas de archivos no violan ningún copyright.",
"ignorewarning" => "Ignora la advertencia y graba el archivo de todos modos.",
-"minlength" => "Los nombres de imágenes deben ser al menos de tres letras.",
+"minlength" => "Los nombres de imágenes deben ser al menos de tres letras.",
"badfilename" => "El nombre de la imagen se ha cambiado a \"$1\".",
"badfiletype" => "\".$1\" no es un formato de imagen recomendado.",
-"largefile" => "Se recomienda que las imágenes no excedan 100k de tamaño.",
+"largefile" => "Se recomienda que las imágenes no excedan 100k de tamaño.",
"successfulupload" => "Subida exitosa",
-"fileuploaded" => "El archivo \"$1\" se subió en forma exitosa.
-Por favor sigue este enlace: ($2) a la página de descripción y escribe
-la información acerca del archivo, tal como de dónde viene, cuándo fue
-creado y por quién, y cualquier otra cosa que puedas saber al respecto.",
+"fileuploaded" => "El archivo \"$1\" se subió en forma exitosa.
+Por favor sigue este enlace: ($2) a la página de descripción y escribe
+la información acerca del archivo, tal como de dónde viene, cuándo fue
+creado y por quién, y cualquier otra cosa que puedas saber al respecto.",
"uploadwarning" => "Advertencia de subida de archivo",
"savefile" => "Grabar archivo",
"uploadedimage" => "\"$1\" subido.",
"uploaddisabled" => "Lo sentimos, subir archivos ha sido desactivado en este servidor.",
# Image list
#
-"imagelist" => "Lista de imágenes",
-"imagelisttext" => "Abajo hay una lista de $1 imágenes ordenadas $2.",
-"getimagelist" => " obteniendo la lista de imágenes",
-"ilshowmatch" => "Muestra todas las imágenes con nombres que coincidan con",
+"imagelist" => "Lista de imágenes",
+"imagelisttext" => "Abajo hay una lista de $1 imágenes ordenadas $2.",
+"getimagelist" => " obteniendo la lista de imágenes",
+"ilshowmatch" => "Muestra todas las imágenes con nombres que coincidan con",
-"ilsubmit" => "Búsqueda",
-"showlast" => "Mostrar las últimas $1 imágenes ordenadas $2.",
+"ilsubmit" => "Búsqueda",
+"showlast" => "Mostrar las últimas $1 imágenes ordenadas $2.",
"all" => "todas",
"byname" => "por nombre",
"bydate" => "por fecha",
-"bysize" => "por tamaño",
+"bysize" => "por tamaño",
"imgdelete" => "borr",
"imgdesc" => "desc",
-"imglegend" => "Simbología: (desc) = mostrar/editar la descripción de la imagen.",
+"imglegend" => "Simbología: (desc) = mostrar/editar la descripción de la imagen.",
"imghistory" => "Historia de la imagen",
"revertimg" => "rev",
"deleteimg" => "borr",
-"imghistlegend" => "Simbología: (act) = esta es la imagen actual, (borr) = borrar
-esta versión antigua, (rev) = revertir a esta versión antigua.
+"imghistlegend" => "Simbología: (act) = esta es la imagen actual, (borr) = borrar
+esta versión antigua, (rev) = revertir a esta versión antigua.
<br><i>Click en la fecha para ver imagen subida en esa fecha</i>.",
"imagelinks" => "Enlaces a la imagen",
-"linkstoimage" => "Las siguientes páginas enlazan a esta imagen:",
-"nolinkstoimage" => "No hay páginas que enlacen a esta imagen.",
+"linkstoimage" => "Las siguientes páginas enlazan a esta imagen:",
+"nolinkstoimage" => "No hay páginas que enlacen a esta imagen.",
# Statistics
#
-"statistics" => "Estadísticas",
-"sitestats" => "Estadísticas del sitio",
-"userstats" => "Estadísticas de usuario",
-"sitestatstext" => "Hay un total de <b>$1</b> páginas en la base de datos.
-Esto incluye páginas de discusión, páginas acerca de $wgSitename, páginas mínimas,
-redirecciones, y otras que probablemente no puedan calificarse como artículos.
-Excluyéndolas, hay <b>$2</b> páginas que probablemente son artículos legítimos.<p>
-Ha habido un total de <b>$3</b> visitas a páginas, y <b>$4</b> ediciones de página
+"statistics" => "Estadísticas",
+"sitestats" => "Estadísticas del sitio",
+"userstats" => "Estadísticas de usuario",
+"sitestatstext" => "Hay un total de <b>$1</b> páginas en la base de datos.
+Esto incluye páginas de discusión, páginas acerca de $wgSitename, páginas mínimas,
+redirecciones, y otras que probablemente no puedan calificarse como artículos.
+Excluyéndolas, hay <b>$2</b> páginas que probablemente son artículos legítimos.<p>
+Ha habido un total de <b>$3</b> visitas a páginas, y <b>$4</b> ediciones de página
desde que el software fue actualizado (Octubre 2002).
-Esto resulta en un promedio de <b>$5</b> ediciones por página,
-y <b>$6</b> visitas por edición.",
+Esto resulta en un promedio de <b>$5</b> ediciones por página,
+y <b>$6</b> visitas por edición.",
"userstatstext" => "Hay <b>$1</b> usuarios registrados.
de los cuales <b>$2</b> son administradores (ver $3).",
# Maintenance Page
#
-"maintenance" => "Página de mantenimiento",
-"maintnancepagetext" => "Esta página incluye varias herramientas útiles para el mantenimiento diario de la enciclopedia. Algunas de estas funciones tienden a sobrecargar la base de datos, asi que, por favor, no vuelvas a cargar la página después de cada ítem que arregles ;-)",
-"maintenancebacklink" => "Volver a la Página de Mantenimiento",
-"disambiguations" => "Páginas de desambiguación",
-"disambiguationspage" => "$wgMetaNamespace:Enlaces a páginas de desambiguación",
-"disambiguationstext" => "Los siguientes artículos enlazan a una <i>página de desambiguación</i>. Deberían enlazar al artículo apropiado.<br>Una página es considerada de desambiguación si está enlazada desde $1.<br>Enlaces desde otros espacios de nombre (Como $wgMetaNamespace: o usuario:) <b>no</b> son listados aquí.",
+"maintenance" => "Página de mantenimiento",
+"maintnancepagetext" => "Esta página incluye varias herramientas útiles para el mantenimiento diario de la enciclopedia. Algunas de estas funciones tienden a sobrecargar la base de datos, asi que, por favor, no vuelvas a cargar la página después de cada ítem que arregles ;-)",
+"maintenancebacklink" => "Volver a la Página de Mantenimiento",
+"disambiguations" => "Páginas de desambiguación",
+"disambiguationspage" => "$wgMetaNamespace:Enlaces a páginas de desambiguación",
+"disambiguationstext" => "Los siguientes artículos enlazan a una <i>página de desambiguación</i>. Deberían enlazar al artículo apropiado.<br>Una página es considerada de desambiguación si está enlazada desde $1.<br>Enlaces desde otros espacios de nombre (Como $wgMetaNamespace: o usuario:) <b>no</b> son listados aquí.",
"doubleredirects" => "Redirecciones Dobles",
-"doubleredirectstext" => "<b>Atención:</b> Esta lista puede contener falsos positivos. Eso significa usualmente que hay texto adicional con enlaces bajo el primer #REDIRECT.<br>\nCada fila contiene enlaces al segundo y tercer redirect, así como la primera línea del segundo redirect, en la que usualmente se encontrará el artículo \"real\" al que el primer redirect debería apuntar.",
+"doubleredirectstext" => "<b>Atención:</b> Esta lista puede contener falsos positivos. Eso significa usualmente que hay texto adicional con enlaces bajo el primer #REDIRECT.<br>\nCada fila contiene enlaces al segundo y tercer redirect, así como la primera línea del segundo redirect, en la que usualmente se encontrará el artículo \"real\" al que el primer redirect debería apuntar.",
"brokenredirects" => "Redirecciones incorrectas",
-"brokenredirectstext" => "Las redirecciones siguientes enlazan a un artículo que no existe.",
-"selflinks" => "Páginas con autoenlaces",
-"selflinkstext" => "Las siguientes páginas contienen un enlace a sí mismas, lo que no se recomienda.",
-"mispeelings" => "Páginas con faltas de ortografía",
-"mispeelingstext" => "Las siguientes páginas contienen una falta de ortografía común de las listadas en $1. La escritura correcta se indica entre paréntesis.",
-"mispeelingspage" => "Lista de faltas de ortografía comunes",
+"brokenredirectstext" => "Las redirecciones siguientes enlazan a un artículo que no existe.",
+"selflinks" => "Páginas con autoenlaces",
+"selflinkstext" => "Las siguientes páginas contienen un enlace a sí mismas, lo que no se recomienda.",
+"mispeelings" => "Páginas con faltas de ortografía",
+"mispeelingstext" => "Las siguientes páginas contienen una falta de ortografía común de las listadas en $1. La escritura correcta se indica entre paréntesis.",
+"mispeelingspage" => "Lista de faltas de ortografía comunes",
"missinglanguagelinks" => "Enlaces Interleguaje Faltantes",
"missinglanguagelinksbutton" => "Encontrar los enlaces interlenguaje que faltan para",
-"missinglanguagelinkstext" => "Estos artículos <b>no</b> enlazan a sus correspondientes en $1. <b>No</b> se muestran redirecciones ni subpáginas.",
+"missinglanguagelinkstext" => "Estos artículos <b>no</b> enlazan a sus correspondientes en $1. <b>No</b> se muestran redirecciones ni subpáginas.",
# Miscellaneous special pages
#
-"orphans" => "Páginas huérfanas",
-"lonelypages" => "Páginas huérfanas",
-"unusedimages" => "Imágenes sin uso",
-"popularpages" => "Páginas populares",
+"orphans" => "Páginas huérfanas",
+"lonelypages" => "Páginas huérfanas",
+"unusedimages" => "Imágenes sin uso",
+"popularpages" => "Páginas populares",
"nviews" => "$1 visitas",
-"wantedpages" => "Páginas requeridas",
+"wantedpages" => "Páginas requeridas",
"nlinks" => "$1 enlaces",
-"allpages" => "Todas las páginas",
+"allpages" => "Todas las páginas",
-"randompage" => "Página aleatoria",
-"shortpages" => "Páginas cortas",
-"longpages" => "Páginas largas",
+"randompage" => "Página aleatoria",
+"shortpages" => "Páginas cortas",
+"longpages" => "Páginas largas",
"listusers" => "Lista de usuarios",
-"specialpages" => "Páginas especiales",
-"spheading" => "Páginas especiales",
-"sysopspheading" => "Páginas especiales para uso de sysops",
-"developerspheading" => "Páginas especiales para uso de developers",
-"protectpage" => "Páginas protegidas",
+"specialpages" => "Páginas especiales",
+"spheading" => "Páginas especiales",
+"sysopspheading" => "Páginas especiales para uso de sysops",
+"developerspheading" => "Páginas especiales para uso de developers",
+"protectpage" => "Páginas protegidas",
"recentchangeslinked" => "Seguimiento de enlaces",
-"rclsub" => "(a páginas enlazadas desde \"$1\")",
+"rclsub" => "(a páginas enlazadas desde \"$1\")",
"debug" => "Debug",
-"newpages" => "Páginas nuevas",
-"ancientpages" => "Artículos más antiguos",
+"newpages" => "Páginas nuevas",
+"ancientpages" => "Artículos más antiguos",
"intl" => "Enlaces interlenguaje",
-"movethispage" => "Trasladar esta página",
+"movethispage" => "Trasladar esta página",
"unusedimagestext" => "<p>Por favor note que otros sitios web
tales como otras wikipedias pueden enlazar a una imagen
-con un URL directo, y de esa manera todavía estar listada aquí
+con un URL directo, y de esa manera todavía estar listada aquí
a pesar de estar en uso activo.",
"booksources" => "Fuentes de libros",
-"booksourcetext" => "A continuación hay una lista de enlaces a otros sitios que venden libros nuevos y usados, y también pueden contener información adicional acerca de los libros que estás buscando.
-$wgSitename no está relacionada con ninguno de estos negocios, y esta lista no debe ser considerada un patrocinio de los mismos.",
+"booksourcetext" => "A continuación hay una lista de enlaces a otros sitios que venden libros nuevos y usados, y también pueden contener información adicional acerca de los libros que estás buscando.
+$wgSitename no está relacionada con ninguno de estos negocios, y esta lista no debe ser considerada un patrocinio de los mismos.",
"alphaindexline" => "$1 a $2",
# Email this user
#
-"mailnologin" => "No enviar dirección",
+"mailnologin" => "No enviar dirección",
"mailnologintext" => "Debes <a href=\"" .
- wfLocalUrl( "Especial:Userlogin" ) . "\">inciar sesión</a>
-y tener una dirección electrónica válida en tus <a href=\"" .
+ wfLocalUrl( "Especial:Userlogin" ) . "\">inciar sesión</a>
+y tener una dirección electrónica válida en tus <a href=\"" .
wfLocalUrl( "Especial:Preferences" ) . "\">preferencias</a>
-para enviar un correo electrónico a otros usuarios.",
-"emailuser" => "Envía correo electrónico a este usuario",
-"emailpage" => "Correo electrónico a usuario",
-"emailpagetext" => "Si este usuario ha registrado una dirección electrónica válida en sus preferencias de usuario, el siguiente formulario sirve para enviarle un mensaje.
-La dirección electrónica que indicaste en tus preferencias de usuario aparecerá en el remitente para que el destinatario te pueda responder.",
-"noemailtitle" => "No hay dirección electrónica",
-"noemailtext" => "Este usuario no ha especificado una dirección electrónica válida, o ha elegido no recibir correo electrónico de otros usuarios.",
+para enviar un correo electrónico a otros usuarios.",
+"emailuser" => "Envía correo electrónico a este usuario",
+"emailpage" => "Correo electrónico a usuario",
+"emailpagetext" => "Si este usuario ha registrado una dirección electrónica válida en sus preferencias de usuario, el siguiente formulario sirve para enviarle un mensaje.
+La dirección electrónica que indicaste en tus preferencias de usuario aparecerá en el remitente para que el destinatario te pueda responder.",
+"noemailtitle" => "No hay dirección electrónica",
+"noemailtext" => "Este usuario no ha especificado una dirección electrónica válida, o ha elegido no recibir correo electrónico de otros usuarios.",
"emailfrom" => "De",
"emailto" => "Para",
"emailsubject" => "Tema",
"emailmessage" => "Mensaje",
"emailsend" => "Enviar",
-"emailsent" => "Correo electrónico enviado",
-"emailsenttext" => "Tu correo electrónico ha sido enviado.",
+"emailsent" => "Correo electrónico enviado",
+"emailsenttext" => "Tu correo electrónico ha sido enviado.",
# Watchlist
#
"watchlist" => "Lista de seguimiento",
"watchlistsub" => "(para el usuario \"$1\")",
-"nowatchlist" => "No tienes ninguna página en tu lista de seguimiento.",
-"watchnologin" => "No has iniciado sesión",
+"nowatchlist" => "No tienes ninguna página en tu lista de seguimiento.",
+"watchnologin" => "No has iniciado sesión",
"watchnologintext" => "Debes <a href=\"" .
- wfLocalUrl( "Especial:Userlogin" ) . "\">iniciar sesión</a>
+ wfLocalUrl( "Especial:Userlogin" ) . "\">iniciar sesión</a>
para modificar tu lista de seguimiento.",
-"addedwatch" => "Añadido a la lista de seguimiento",
-"addedwatchtext" => "La página \"$1\" ha sido añadida a tu <a href=\"" .
+"addedwatch" => "Añadido a la lista de seguimiento",
+"addedwatchtext" => "La página \"$1\" ha sido añadida a tu <a href=\"" .
wfLocalUrl( "Especial:Watchlist" ) . "\">lista se seguimiento</a>.
-Cambios futuros en esta página y su página de discusión asociada se indicarán ahí, y la página aparecerá <b>en negritas</b> en la <a href=\"" .
- wfLocalUrl( "Especial:Recentchanges" ) . "\">lista de cambios recientes</a> para hacerla más fácil de detectar.</p>
+Cambios futuros en esta página y su página de discusión asociada se indicarán ahí, y la página aparecerá <b>en negritas</b> en la <a href=\"" .
+ wfLocalUrl( "Especial:Recentchanges" ) . "\">lista de cambios recientes</a> para hacerla más fácil de detectar.</p>
-<p>Cuando quieras eliminar la página de tu lista de seguimiento, presiona \"Dejar de vigilar\" en el menú.",
+<p>Cuando quieras eliminar la página de tu lista de seguimiento, presiona \"Dejar de vigilar\" en el menú.",
"removedwatch" => "Eliminada de la lista de seguimiento",
-"removedwatchtext" => "La página \"$1\" ha sido eliminada de tu lista de seguimiento.",
-"watchthispage" => "Vigilar esta página",
+"removedwatchtext" => "La página \"$1\" ha sido eliminada de tu lista de seguimiento.",
+"watchthispage" => "Vigilar esta página",
"unwatchthispage" => "Dejar de vigilar",
-"notanarticle" => "No es un artículo",
+"notanarticle" => "No es un artículo",
"watchnochange" => "Ninguno de los articulos en tu lista de seguimiento fue editado en el periodo de tiempo mostrado.",
-"watchdetails" => "($1 páginas en tu lista de seguimiento, sin contar las de discusión;
-$2 páginas editadas en total desde el cutoff;
+"watchdetails" => "($1 páginas en tu lista de seguimiento, sin contar las de discusión;
+$2 páginas editadas en total desde el cutoff;
$3...
<a href='$4'>mostrar y editar la lista completa</a>.)",
"watchmethod-recent" => "chequeando ediciones recentes en la lista de seguimiento",
"watchmethod-list" => "buscando ediciones recentes en la lista de seguimiento",
-"removechecked" => "Borrar artículos seleccionados de la lista de seguimiento",
-"watchlistcontains" => "Tu lista de seguimiento posee $1 páginas.",
-"watcheditlist" => "Aquí está un listado alfabético de tu lista de seguimiento.
-Selecciona los artículos que deseas remover de tu lista de seguimiento y
-click el botón 'remover seleccionados' en el fin de la pantalla.",
-"removingchecked" => "Removiendo los artículos solicitados de la lista de seguimiento...",
-"couldntremove" => "No se pudo remover el artículo '$1'...",
-"iteminvalidname" => "Problema con el artículo '$1', nombre inválido...",
-"wlnote" => "Abajo estan los últimos $1 cambios en las últimas <b>$2</b> horas.",
+"removechecked" => "Borrar artículos seleccionados de la lista de seguimiento",
+"watchlistcontains" => "Tu lista de seguimiento posee $1 páginas.",
+"watcheditlist" => "Aquí está un listado alfabético de tu lista de seguimiento.
+Selecciona los artículos que deseas remover de tu lista de seguimiento y
+click el botón 'remover seleccionados' en el fin de la pantalla.",
+"removingchecked" => "Removiendo los artículos solicitados de la lista de seguimiento...",
+"couldntremove" => "No se pudo remover el artículo '$1'...",
+"iteminvalidname" => "Problema con el artículo '$1', nombre inválido...",
+"wlnote" => "Abajo estan los últimos $1 cambios en las últimas <b>$2</b> horas.",
# Delete/protect/revert
#
-"deletepage" => "Borrar esta página",
+"deletepage" => "Borrar esta página",
"confirm" => "Confirma",
"excontent" => "contenido era:",
"exbeforeblank" => "contenido antes de borrar era:",
-"exblank" => "página estaba vacía",
+"exblank" => "página estaba vacía",
"confirmdelete" => "Confirma el borrado",
"deletesub" => "(Borrando \"$1\")",
-"historywarning" => "Atención: La página que estás por borrar tiene una historia: ",
-"confirmdeletetext" => "Estás a punto de borrar una página o imagen
+"historywarning" => "Atención: La página que estás por borrar tiene una historia: ",
+"confirmdeletetext" => "Estás a punto de borrar una página o imagen
en forma permanente,
-así como toda su historia, de la base de datos.
+así como toda su historia, de la base de datos.
Por favor, confirma que realmente quieres hacer eso, que entiendes las
-consecuencias, y que lo estás haciendo de acuerdo con [[$wgMetaNamespace:Políticas]].",
-"confirmcheck" => "Sí, realmente quiero borrar esto.",
-"actioncomplete" => "Acción completa",
+consecuencias, y que lo estás haciendo de acuerdo con [[$wgMetaNamespace:Políticas]].",
+"confirmcheck" => "Sí, realmente quiero borrar esto.",
+"actioncomplete" => "Acción completa",
"deletedtext" => "\"$1\" ha sido borrado.
-Ve $2 para un registro de los borrados más recientes.",
+Ve $2 para un registro de los borrados más recientes.",
"deletedarticle" => "borrado \"$1\"",
"dellogpage" => "Registro_de_borrados",
-"dellogpagetext" => "Abajo hay una lista de los borrados más recientes.
+"dellogpagetext" => "Abajo hay una lista de los borrados más recientes.
Todos los tiempos se muestran en hora del servidor (UTC).
<ul>
</ul>
",
"deletionlog" => "registro de borrados",
-"reverted" => "Recuperar una revisión anterior",
-"deletecomment" => "Razón para el borrado",
-"imagereverted" => "Revertido a una versión anterior tuvo éxito.",
+"reverted" => "Recuperar una revisión anterior",
+"deletecomment" => "Razón para el borrado",
+"imagereverted" => "Revertido a una versión anterior tuvo éxito.",
"rollback" => "Revertir ediciones",
"rollbacklink" => "Revertir",
-"rollbackfailed" => "Reversión fallida",
-"cantrollback" => "No se pueden revertir las ediciones; el último colaborador es el único autor de este artículo.",
-"alreadyrolled" => "No se puede revertir la última edición de [[$1]]
-por [[Colaborador:$2|$2]] ([[Colaborador Discusión:$2|Discusión]]); alguien más ya ha editado o revertido esa página.
+"rollbackfailed" => "Reversión fallida",
+"cantrollback" => "No se pueden revertir las ediciones; el último colaborador es el único autor de este artículo.",
+"alreadyrolled" => "No se puede revertir la última edición de [[$1]]
+por [[Colaborador:$2|$2]] ([[Colaborador Discusión:$2|Discusión]]); alguien más ya ha editado o revertido esa página.
-La última edición fue hecha por [[Colaborador:$3|$3]] ([[Colaborador Discusión:$3|DiscusiónTalk]]). ",
+La última edición fue hecha por [[Colaborador:$3|$3]] ([[Colaborador Discusión:$3|DiscusiónTalk]]). ",
# only shown if there is an edit comment
-"editcomment" => "El resumen de la edición fue: \"<i>$1</i>\".",
-"revertpage" => "Revertida a la última edición por $1",
+"editcomment" => "El resumen de la edición fue: \"<i>$1</i>\".",
+"revertpage" => "Revertida a la última edición por $1",
# Undelete
-"undelete" => "Restaura una página borrada",
-"undeletepage" => "Ve y restaura páginas borradas",
-"undeletepagetext" => "Las siguientes páginas han sido borradas pero aún están en el archivo y pueden ser restauradas. El archivo puede ser limpiado periódicamente.",
-"undeletearticle" => "Restaurar artículo borrado",
+"undelete" => "Restaura una página borrada",
+"undeletepage" => "Ve y restaura páginas borradas",
+"undeletepagetext" => "Las siguientes páginas han sido borradas pero aún están en el archivo y pueden ser restauradas. El archivo puede ser limpiado periódicamente.",
+"undeletearticle" => "Restaurar artículo borrado",
"undeleterevisions" => "$1 revisiones archivadas",
-"undeletehistory" => "Si tú restauras una página, todas las revisiones serán restauradas a la historia.
-Si una nueva página con el mismo nombre ha sido creada desde el borrado, las versiones restauradas aparecerán como historia anterior, y la revisión actual de la página \"viva\" no será automáticamente reemplazada.",
-"undeleterevision" => "Revisión borrada al $1",
+"undeletehistory" => "Si tú restauras una página, todas las revisiones serán restauradas a la historia.
+Si una nueva página con el mismo nombre ha sido creada desde el borrado, las versiones restauradas aparecerán como historia anterior, y la revisión actual de la página \"viva\" no será automáticamente reemplazada.",
+"undeleterevision" => "Revisión borrada al $1",
"undeletebtn" => "Restaurar!",
"undeletedarticle" => "restaurado \"$1\"",
-"undeletedtext" => "El artículo [[$1]] ha sido restaurado con éxito.
+"undeletedtext" => "El artículo [[$1]] ha sido restaurado con éxito.
Ve [[$wgMetaNamespace:Registro_de_borrados]] para una lista de borrados y restauraciones recientes.",
# Contributions
@@ -853,44 +866,44 @@ Ve [[$wgMetaNamespace:Registro_de_borrados]] para una lista de borrados y restau
"mycontris"=>"Mis contribuciones",
"contribsub" => "$1",
"nocontribs" => "No se encontraron cambios que cumplieran estos criterios.",
-"ucnote" => "Abajo están los últimos <b>$1</b> cambios de este usuario en los últimos <b>$2</b> días.",
-"uclinks" => "Ver los últimos $1 cambios; ver los últimos $2 días.",
-"uctop" => " (última modificación)" ,
+"ucnote" => "Abajo están los últimos <b>$1</b> cambios de este usuario en los últimos <b>$2</b> días.",
+"uclinks" => "Ver los últimos $1 cambios; ver los últimos $2 días.",
+"uctop" => " (última modificación)" ,
# What links here
#
-"whatlinkshere" => "Lo que enlaza aquí",
-"notargettitle" => "No hay página blanco",
-"notargettext" => "No has especificado en qué página
-llevar a cabo esta función.",
+"whatlinkshere" => "Lo que enlaza aquí",
+"notargettitle" => "No hay página blanco",
+"notargettext" => "No has especificado en qué página
+llevar a cabo esta función.",
"linklistsub" => "(Lista de enlaces)",
-"linkshere" => "Las siguientes páginas enlazan aquí:",
-"nolinkshere" => "Ninguna página enlaza aquí.",
+"linkshere" => "Las siguientes páginas enlazan aquí:",
+"nolinkshere" => "Ninguna página enlaza aquí.",
"isredirect" => "pagina redirigida",
# Block/unblock IP
#
"blockip" => "Bloqueo de direcciones IP",
"blockiptext" => "Usa el formulario siguiente para bloquear el
-acceso de escritura desde una dirección IP específica.
-Esto debería hacerse sólo para prevenir vandalismo, y de
-acuerdo a las [[$wgMetaNamespace:Políticas| políticas de $wgSitename]].
-Explica la razón específica del bloqueo (por ejemplo, citando
-ls páginas en particular que han sido objeto de vandalismo desde la dirección IP a bloquear).",
-"ipaddress" => "Dirección IP",
-"ipbreason" => "Razón",
-"ipbsubmit" => "Bloquear esta dirección",
-"badipaddress" => "La dirección IP no tiene el formato correcto.",
-
-"noblockreason" => "Debes dar una razón para el bloqueo.",
+acceso de escritura desde una dirección IP específica.
+Esto debería hacerse sólo para prevenir vandalismo, y de
+acuerdo a las [[$wgMetaNamespace:Políticas| políticas de $wgSitename]].
+Explica la razón específica del bloqueo (por ejemplo, citando
+ls páginas en particular que han sido objeto de vandalismo desde la dirección IP a bloquear).",
+"ipaddress" => "Dirección IP",
+"ipbreason" => "Razón",
+"ipbsubmit" => "Bloquear esta dirección",
+"badipaddress" => "La dirección IP no tiene el formato correcto.",
+
+"noblockreason" => "Debes dar una razón para el bloqueo.",
"blockipsuccesssub" => "Bloqueo exitoso",
"blockipsuccesstext" => "La direccion IP \"$1\" ha sido bloqueada.
<br>Ver [[Especial:Ipblocklist|lista de IP bloqueadas]] para revisar bloqueos.",
-"unblockip" => "Desbloquear dirección IP",
+"unblockip" => "Desbloquear dirección IP",
"unblockiptext" => "Usa el formulario que sigue para restaurar el
-acceso de escritura a una dirección IP previamente bloqueada.",
-"ipusubmit" => "Desbloquea esta dirección",
-"ipusuccess" => "Dirección IP \"$1\" desbloqueada",
+acceso de escritura a una dirección IP previamente bloqueada.",
+"ipusubmit" => "Desbloquea esta dirección",
+"ipusuccess" => "Dirección IP \"$1\" desbloqueada",
"ipblocklist" => "Lista de direcciones IP bloqueadas",
"blocklistline" => "$1, $2 bloquea $3",
"blocklink" => "bloquear",
@@ -903,17 +916,17 @@ acceso de escritura a una dirección IP previamente bloqueada.",
"lockdb" => "Bloquear la base de datos",
"unlockdb" => "Desbloquear la base de datos",
-"lockdbtext" => "El bloqueo de la base de datos impedirá a todos los usuarios editar páginas, cambiar sus preferencias, modificar sus listas de seguimiento y cualquier otra función que requiera realizar cambios en la base de datos. Por favor, confirma que ésto es precisamente lo que quieres hacer y que desbloquearás la base de datos tan pronto hayas finalizado las operaciones de mantenimiento.",
-"unlockdbtext" => "El desbloqueo de la base de datos permitirá a todos los usuarios editar páginas, cambiar sus preferencias, modificar sus listas de seguimiento y cualesquiera otras funciones que impliquen modificar la base de datos. Por favor, confirma que ésto es precisamente lo que quieres hacer.",
-"lockconfirm" => "Sí, realmente quiero bloquear la base de datos.",
-"unlockconfirm" => "Sí, realmente quiero desbloquear la base de datos.",
+"lockdbtext" => "El bloqueo de la base de datos impedirá a todos los usuarios editar páginas, cambiar sus preferencias, modificar sus listas de seguimiento y cualquier otra función que requiera realizar cambios en la base de datos. Por favor, confirma que ésto es precisamente lo que quieres hacer y que desbloquearás la base de datos tan pronto hayas finalizado las operaciones de mantenimiento.",
+"unlockdbtext" => "El desbloqueo de la base de datos permitirá a todos los usuarios editar páginas, cambiar sus preferencias, modificar sus listas de seguimiento y cualesquiera otras funciones que impliquen modificar la base de datos. Por favor, confirma que ésto es precisamente lo que quieres hacer.",
+"lockconfirm" => "Sí, realmente quiero bloquear la base de datos.",
+"unlockconfirm" => "Sí, realmente quiero desbloquear la base de datos.",
"lockbtn" => "Bloquear la base de datos",
"unlockbtn" => "Desbloquear la base de datos",
"locknoconfirm" => "No has confirmado lo que deseas hacer.",
-"lockdbsuccesssub" => "El bloqueo se ha realizado con éxito",
-"unlockdbsuccesssub" => "El desbloqueo se ha realizado con éxito",
+"lockdbsuccesssub" => "El bloqueo se ha realizado con éxito",
+"unlockdbsuccesssub" => "El desbloqueo se ha realizado con éxito",
"lockdbsuccesstext" => "La base de datos de $wgSitename ha sido bloqueada.
-<br>Recuerda retirar el bloqueo después de completar las tareas de mantenimiento.",
+<br>Recuerda retirar el bloqueo después de completar las tareas de mantenimiento.",
"unlockdbsuccesstext" => "La base de datos de $wgSitename ha sido desbloqueada.",
# SQL query
@@ -922,69 +935,58 @@ acceso de escritura a una dirección IP previamente bloqueada.",
"asksqltext" => "Usa el formulario que sigue para hacer una consulta directa
a la base de datos de $wgSitename. Usa comillas simples ('como estas') para delimitar
cadenas de caracteres literales.
-Esto puede añadir una carga considerable al servidor, así que
-por favor usa esta función lo menos possible.",
+Esto puede añadir una carga considerable al servidor, así que
+por favor usa esta función lo menos possible.",
"sqlislogged" => "Por favor nota que todas las consultas son grabadas.",
"sqlquery" => "Entra la consulta",
-"querybtn" => "Envía la consulta",
-"selectonly" => "Consultas diferentes a \"SELECT\" están restringidas sólo
+"querybtn" => "Envía la consulta",
+"selectonly" => "Consultas diferentes a \"SELECT\" están restringidas sólo
a $wgSitename developers.",
"querysuccessful" => "Consulta exitosa",
# Move page
#
-"movepage" => "Renombrar página",
-"movepagetext" => "Usando el formulario que sigue renombrará una página,
+"movepage" => "Renombrar página",
+"movepagetext" => "Usando el formulario que sigue renombrará una página,
moviendo toda su historia al nombre nuevo.
-El título anterior se convertirá en un redireccionamiento al nuevo título.
-Enlaces al antiguo título de la página no se cambiarán. Asegúrate de [[Especial:Maintenance|verificar]] no dejar redirecciones dobles o rotas.
-Tú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que lo deberían hacer.
+El título anterior se convertirá en un redireccionamiento al nuevo título.
+Enlaces al antiguo título de la página no se cambiarán. Asegúrate de [[Especial:Maintenance|verificar]] no dejar redirecciones dobles o rotas.
+Tú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que lo deberían hacer.
-Recuerda que la página '''no''' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o un ''redirect'' sin historia.
-Esto significa que podrás renombrar una página a su título original si cometes un error de escritura en el nuevo título, pero que no podrás sobreescribir una página existente.
+Recuerda que la página '''no''' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o un ''redirect'' sin historia.
+Esto significa que podrás renombrar una página a su título original si cometes un error de escritura en el nuevo título, pero que no podrás sobreescribir una página existente.
<b>ADVERTENCIA!</b>
-Este puede ser un cambio drástico e inesperado para una página popular;
-por favor, asegurate de entender las consecuencias que acarreará
+Este puede ser un cambio drástico e inesperado para una página popular;
+por favor, asegurate de entender las consecuencias que acarreará
antes de seguir adelante.",
-"movepagetalktext" => "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''
-*Estés moviendo la página entre espacios de nombre diferentes,
-*Una página de discusión no vacía ya existe con el nombre nuevo, o
-*Desactivaste la opción \"Renombrar la página de discusión también\".
+"movepagetalktext" => "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''
+*Estés moviendo la página entre espacios de nombre diferentes,
+*Una página de discusión no vacía ya existe con el nombre nuevo, o
+*Desactivaste la opción \"Renombrar la página de discusión también\".
-En estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
-"movearticle" => "Renombrar página",
+En estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
+"movearticle" => "Renombrar página",
"movenologin" => "No has iniciado sesion",
"movenologintext" => "Es necesario ser usuario registrado y <a href=\"" .
- wfLocalUrl( "Especial:Userlogin" ) . "\">haber iniciado sesión</a>
-para renombrar una página.",
-"newtitle" => "A título nuevo",
-"movepagebtn" => "Renombrar página",
+ wfLocalUrl( "Especial:Userlogin" ) . "\">haber iniciado sesión</a>
+para renombrar una página.",
+"newtitle" => "A título nuevo",
+"movepagebtn" => "Renombrar página",
"pagemovedsub" => "Renombramiento exitoso",
-"pagemovedtext" => "Página \"[[$1]]\" renombrada a \"[[$2]]\".",
-"articleexists" => "Ya existe una página con ese nombre, o el nombre que has
-escogido no es válido.
+"pagemovedtext" => "Página \"[[$1]]\" renombrada a \"[[$2]]\".",
+"articleexists" => "Ya existe una página con ese nombre, o el nombre que has
+escogido no es válido.
Por favor, elije otro nombre.",
-"talkexists" => "La página fue renombrada con éxito, pero la página de discusión no se pudo mover porque ya existe una en el título nuevo. Por favor incorpora su contenido manualmente.",
+"talkexists" => "La página fue renombrada con éxito, pero la página de discusión no se pudo mover porque ya existe una en el título nuevo. Por favor incorpora su contenido manualmente.",
"movedto" => "renombrado a",
-"movetalk" => "Renombrar la página de discusión también, si es aplicable.",
-"talkpagemoved" => "La página de discusión correspondiente también fue renombrada.",
-"talkpagenotmoved" => "La página de discusión correspondiente <strong>no</strong> fue renombrada.",
+"movetalk" => "Renombrar la página de discusión también, si es aplicable.",
+"talkpagemoved" => "La página de discusión correspondiente también fue renombrada.",
+"talkpagenotmoved" => "La página de discusión correspondiente <strong>no</strong> fue renombrada.",
);
-class LanguageEs extends Language {
-
- # Inherent default user options unless customization is desired
- function getDefaultUserOptions () {
- $opt = Language::getDefaultUserOptions();
- return $opt;
- }
-
- function getBookstoreList () {
- global $wgBookstoreListEn ;
- return $wgBookstoreListEn ;
- }
+class LanguageEs extends LanguageUtf8 {
function getNamespaces() {
global $wgNamespaceNamesEs;
@@ -1004,9 +1006,6 @@ class LanguageEs extends Language {
}
return false;
}
- #function specialPage( $name ) {
- # return $this->getNsText( Namespace::getSpecial() ) . ":" . $name;
- #}
function getQuickbarSettings() {
global $wgQuickbarSettingsEs;
@@ -1030,28 +1029,24 @@ class LanguageEs extends Language {
}
- function getMonthName( $key )
- {
+ function getMonthName( $key ) {
global $wgMonthNamesEs;
return $wgMonthNamesEs[$key-1];
}
- function getMonthAbbreviation( $key )
- {
+ function getMonthAbbreviation( $key ) {
global $wgMonthAbbreviationsEs;
return $wgMonthAbbreviationsEs[$key-1];
}
- function getWeekdayName( $key )
- {
+ function getWeekdayName( $key ) {
global $wgWeekdayNamesEs;
return $wgWeekdayNamesEs[$key-1];
}
# Inherit userAdjust()
- function shortdate( $ts, $adj = false )
- {
+ function shortdate( $ts, $adj = false ) {
if ( $adj ) { $ts = $this->userAdjust( $ts ); }
$d = (0 + substr( $ts, 6, 2 )) . " " .$this->getMonthAbbreviation( substr( $ts, 4, 2 ) ) . ", " .
@@ -1059,8 +1054,7 @@ class LanguageEs extends Language {
return $d;
}
- function date( $ts, $adj = false )
- {
+ function date( $ts, $adj = false ) {
if ( $adj ) { $ts = $this->userAdjust( $ts ); }
$d = (0 + substr( $ts, 6, 2 )) . " de " .$this->getMonthName( substr( $ts, 4, 2 ) ) . ", " .
@@ -1068,45 +1062,37 @@ class LanguageEs extends Language {
return $d;
}
- function time( $ts, $adj = false )
- {
+ function time( $ts, $adj = false ) {
if ( $adj ) { $ts = $this->userAdjust( $ts ); }
$t = substr( $ts, 8, 2 ) . ":" . substr( $ts, 10, 2 );
return $t;
}
- function timeanddate( $ts, $adj = false )
- {
+ function timeanddate( $ts, $adj = false ) {
return $this->time( $ts, $adj ) . " " . $this->shortdate( $ts, $adj );
}
- function getValidSpecialPages()
- {
+ function getValidSpecialPages() {
global $wgValidSpecialPagesEs;
return $wgValidSpecialPagesEs;
}
- function getSysopSpecialPages()
-
- {
+ function getSysopSpecialPages() {
global $wgSysopSpecialPagesEs;
return $wgSysopSpecialPagesEs;
}
- function getDeveloperSpecialPages()
- {
+ function getDeveloperSpecialPages() {
global $wgDeveloperSpecialPagesEs;
return $wgDeveloperSpecialPagesEs;
}
- function getMessage( $key )
- {
- global $wgAllMessagesEs, $wgAllMessagesEn;
- $m = $wgAllMessagesEs[$key];
-
- if ( "" == $m ) { return $wgAllMessagesEn[$key]; }
- else return $m;
+ function getMessage( $key ) {
+ global $wgAllMessagesEs;
+ if( isset( $wgAllMessagesEs[$key] ) )
+ return $wgAllMessagesEs[$key];
+ return "";
}
}
?>
diff --git a/languages/LanguageEt.php b/languages/LanguageEt.php
index 9153f5b5b158..b74988697991 100644
--- a/languages/LanguageEt.php
+++ b/languages/LanguageEt.php
@@ -36,7 +36,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesEt = array(
diff --git a/languages/LanguageFa.php b/languages/LanguageFa.php
index 00cc74ebc9f3..695c5ed355b5 100644
--- a/languages/LanguageFa.php
+++ b/languages/LanguageFa.php
@@ -49,7 +49,8 @@ require_once("LanguageUtf8.php");
'montparnasse' => "مون‌پارناس",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesFa = array(
diff --git a/languages/LanguageFi.php b/languages/LanguageFi.php
index b10be1660cf3..9b8899727b20 100644
--- a/languages/LanguageFi.php
+++ b/languages/LanguageFi.php
@@ -41,7 +41,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesFi = array(
diff --git a/languages/LanguageFr.php b/languages/LanguageFr.php
index 1aa2c84dc217..21abd3fd1b9e 100644
--- a/languages/LanguageFr.php
+++ b/languages/LanguageFr.php
@@ -7,7 +7,6 @@
// encapsulates some of the magic-ness.
require_once( "LanguageUtf8.php" );
-
/* private */ $wgNamespaceNamesFr = array(
NS_MEDIA => "Media",
NS_SPECIAL => "Special",
@@ -21,12 +20,12 @@ require_once( "LanguageUtf8.php" );
NS_IMAGE_TALK => "Discussion_Image",
NS_MEDIAWIKI => "MediaWiki",
NS_MEDIAWIKI_TALK => "Discussion_MediaWiki",
- NS_TEMPLATE => "Template",
- NS_TEMPLATE_TALK => "Discussion_Template",
+ NS_TEMPLATE => "Modèle",
+ NS_TEMPLATE_TALK => "Discussion_Modèle",
NS_HELP => "Aide",
NS_HELP_TALK => "Discussion_Aide",
- NS_CATEGORY => "Categorie",
- NS_CATEGORY_TALK => "Discussion_Categorie"
+ NS_CATEGORY => "Catégorie",
+ NS_CATEGORY_TALK => "Discussion_Catégorie"
);
/* private */ $wgQuickbarSettingsFr = array(
@@ -41,7 +40,8 @@ require_once( "LanguageUtf8.php" );
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesFr = array(
@@ -76,8 +76,8 @@ require_once( "LanguageUtf8.php" );
/* private */ $wgBookstoreListFr = array(
"Amazon.fr" => "http://www.amazon.fr/exec/obidos/ISBN=$1",
"alapage.fr" => "http://www.alapage.com/mx/?tp=F&type=101&l_isbn=$1&donnee_appel=ALASQ&devise=&",
- "fnac.com" => "http://www3.fnac.com/advanced/book.do?isbn=$isbn",
- "chapitre.com" => "http://www.chapitre.com/frame_rec.asp?isbn=$isbn",
+ "fnac.com" => "http://www3.fnac.com/advanced/book.do?isbn=$1",
+ "chapitre.com" => "http://www.chapitre.com/frame_rec.asp?isbn=$1",
);
/* private */ $wgWeekdayNamesFr = array(
@@ -640,7 +640,7 @@ L'heure indiquée est celle du serveur (UTC).
"filestatus" => "Statut du copyright",
"filesource" => "Source",
"affirmation" => "Je déclare que le détenteur du copyright de ce fichier accepte de le diffuser selon les termes de la $1.",
-"copyrightpage" => "$wgNamespace:Copyright",
+"copyrightpage" => "{{ns:4}}:Copyright",
"copyrightpagename" => "licence {{SITENAME}}",
"uploadedfiles" => "Fichiers copiés",
"noaffirmation" => "Vous devez confirmer que la copie de ce fichier ne viole aucun copyright.",
@@ -1285,12 +1285,14 @@ class LanguageFr extends LanguageUtf8
function getMessage( $key )
{
global $wgAllMessagesFr, $wgAllMessagesEn;
- $m = $wgAllMessagesFr[$key];
-
- if ( "" == $m ) { return $wgAllMessagesEn[$key]; }
- else return $m;
-
+ if( isset( $wgAllMessagesFr[$key] ) ) {
+ return $wgAllMessagesFr[$key];
+ } else {
+ return $wgAllMessagesEn[$key];
+ }
}
+
+ function isRTL() { return false; }
}
?>
diff --git a/languages/LanguageFy.php b/languages/LanguageFy.php
index 96b56ef6b75a..46c39a93540e 100644
--- a/languages/LanguageFy.php
+++ b/languages/LanguageFy.php
@@ -43,7 +43,8 @@ if($wgMetaNamespace === FALSE)
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesFy = array(
diff --git a/languages/LanguageGa.php b/languages/LanguageGa.php
index 886732c806c8..e959252c41a6 100755
--- a/languages/LanguageGa.php
+++ b/languages/LanguageGa.php
@@ -53,7 +53,8 @@ Sourceforge (when that gets added.)
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesGa = array(
diff --git a/languages/LanguageHe.php b/languages/LanguageHe.php
index c3ce75dfcdaa..5694abe98f0c 100644
--- a/languages/LanguageHe.php
+++ b/languages/LanguageHe.php
@@ -43,7 +43,8 @@ require_once("LanguageUtf8.php");
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesHe = array(
diff --git a/languages/LanguageHu.php b/languages/LanguageHu.php
index f90cee02ff31..6c8dfc0c70e8 100644
--- a/languages/LanguageHu.php
+++ b/languages/LanguageHu.php
@@ -42,7 +42,8 @@ require_once("LanguageUtf8.php");
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesHu = array(
diff --git a/languages/LanguageIa.php b/languages/LanguageIa.php
index d12914928786..44b3646e1d20 100644
--- a/languages/LanguageIa.php
+++ b/languages/LanguageIa.php
@@ -38,7 +38,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesIa = array(
diff --git a/languages/LanguageId.php b/languages/LanguageId.php
index 1fbb3cc82b07..18a0049ff9e6 100644
--- a/languages/LanguageId.php
+++ b/languages/LanguageId.php
@@ -6,4 +6,4 @@ class LanguageId extends LanguageMs {
/* Inherit everything. */
}
-?> \ No newline at end of file
+?>
diff --git a/languages/LanguageIt.php b/languages/LanguageIt.php
index 7db0bbb9ea18..e35312a77aea 100644
--- a/languages/LanguageIt.php
+++ b/languages/LanguageIt.php
@@ -8,20 +8,24 @@
# encapsulates some of the magic-ness.
#
/* private */ $wgNamespaceNamesIt = array(
- -2 => "Media",
- -1 => "Speciale",
- 0 => "",
- 1 => "Discussione",
- 2 => "Utente",
- 3 => "Discussioni_utente",
- 4 => "Wikipedia",
- 5 => "Discussioni_Wikipedia",
- 6 => "Immagine",
- 7 => "Discussioni_immagine",
- 8 => "MediaWiki",
- 9 => "Discussione_MediaWiki",
- 10 => "Template",
- 11 => "Template_talk"
+ NS_MEDIA => "Media",
+ NS_SPECIAL => "Speciale",
+ NS_MAIN => "",
+ NS_TALK => "Discussione",
+ NS_USER => "Utente",
+ NS_USER_TALK => "Discussioni_utente",
+ NS_WIKIPEDIA => "Wikipedia",
+ NS_WIKIPEDIA_TALK => "Discussioni_Wikipedia",
+ NS_IMAGE => "Immagine",
+ NS_IMAGE_TALK => "Discussioni_immagine",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "Discussioni_MediaWiki",
+ NS_TEMPLATE => "Template",
+ NS_TEMPLATE_TALK => "Discussioni_template",
+ NS_HELP => "Aiuto",
+ NS_HELP_TALK => "Discussioni_aiuto",
+ NS_CATEGORY => "Categoria",
+ NS_CATEGORY_TALK => "Discussioni_categoria"
);
@@ -37,7 +41,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgUserTogglesIt = array(
diff --git a/languages/LanguageJa.php b/languages/LanguageJa.php
index adbdeafd1223..2b5fda16bc99 100644
--- a/languages/LanguageJa.php
+++ b/languages/LanguageJa.php
@@ -16,8 +16,8 @@ require_once( "LanguageUtf8.php" );
1 => "ノート" /* "Talk" */,
2 => "利用者" /* "User" */,
3 => "利用者â€ä¼šè©±" /* "User_talk" */,
- 4 => "Wikipedia" /* "Wikipedia" */,
- 5 => "Wikipediaâ€ãƒŽãƒ¼ãƒˆ" /* "Wikipedia_talk" */,
+ 4 => $wgMetaNamespace /* "Wikipedia" */,
+ 5 => "{$wgMetaNamespace}â€ãƒŽãƒ¼ãƒˆ" /* "Wikipedia_talk" */,
6 => "ç”»åƒ" /* "Image" */,
7 => "ç”»åƒâ€ãƒŽãƒ¼ãƒˆ" /* "Image_talk" */,
8 => "MediaWiki",
@@ -39,7 +39,8 @@ require_once( "LanguageUtf8.php" );
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgUserTogglesJa = array(
@@ -133,17 +134,17 @@ require_once( "LanguageUtf8.php" );
#
"mainpage" => "メインページ",
"about" => "About",
-"aboutwikipedia" => "Wikipediaã«ã¤ã„ã¦",
-"aboutpage" => "Wikipedia:About",
+"aboutwikipedia" => "{{SITENAME}}ã«ã¤ã„ã¦",
+"aboutpage" => "{{ns:4}}:About",
"help" => "ヘルプ",
-"helppage" => "Wikipedia:Help",
-"wikititlesuffix" => "Wikipedia",
+"helppage" => "{{ns:4}}:Help",
+"wikititlesuffix" => "{{ns:4}}",
"bugreports" => "ãƒã‚°ã®å ±å‘Š",
-"bugreportspage" => "Wikipedia:ãƒã‚°ã®å ±å‘Š",
+"bugreportspage" => "{{ns:4}}:ãƒã‚°ã®å ±å‘Š",
"faq" => "FAQ",
-"faqpage" => "Wikipedia:FAQ",
+"faqpage" => "{{ns:4}}:FAQ",
"edithelp" => "ヘルプを編集",
-"edithelppage" => "Wikipedia:編集ã®ä»•æ–¹",
+"edithelppage" => "{{ns:4}}:編集ã®ä»•æ–¹",
"cancel" => "中止",
"qbfind" => "検索",
"qbbrowse" => "閲覧",
@@ -156,7 +157,7 @@ require_once( "LanguageUtf8.php" );
"currentevents" => "最近ã®å‡ºæ¥äº‹",
"errorpagetitle" => "エラー",
"returnto" => "$1 ã«æˆ»ã‚‹ã€‚",
-"fromwikipedia" => "出典: フリー百科事典『ウィキペディア(Wikipedia)ã€",
+"fromwikipedia" => "出典: フリー百科事典『ウィキペディア({{SITENAME}})ã€",
"whatlinkshere" => "ã“ã“ã«ãƒªãƒ³ã‚¯ã—ã¦ã„るページ",
"help" => "ヘルプ",
"search" => "検索",
@@ -174,7 +175,7 @@ require_once( "LanguageUtf8.php" );
"viewcount" => "ã“ã®ãƒšãƒ¼ã‚¸ã¯ $1 回アクセスã•ã‚Œã¾ã—ãŸã€‚",
"printsubtitle" => "(From http://www.wikipedia.org)",
"protectedpage" => "ä¿è­·ã•ã‚ŒãŸãƒšãƒ¼ã‚¸",
-"administrators" => "Wikipedia:Administrators",
+"administrators" => "{{ns:4}}:Administrators",
"sysoptitle" => "シスオペã«ã‚ˆã‚‹ã‚¢ã‚¯ã‚»ã‚¹ãŒå¿…è¦",
"sysoptext" => "ã‚ãªãŸã®è¦æ±‚ã—ãŸå‡¦ç†ã¯ \"sysop\" ã®ã¿ãŒå®Ÿè¡Œã§ãã¾ã™ã€‚
$1ã‚’å‚ç…§ã—ã¦ãã ã•ã„。",
@@ -183,16 +184,16 @@ require_once( "LanguageUtf8.php" );
"nbytes" => "$1 ãƒã‚¤ãƒˆ",
"go" => "è¡Œã",
"ok" => "OK",
-"sitetitle" => "Wikipedia",
+"sitetitle" => "{{SITENAME}}",
"sitesubtitle" => "フリー百科事典",
"retrievedfrom" => "Retrieved from \"$1\"",
# Main script and global functions
#
"nosuchaction" => "ãã®ã‚ˆã†ãªå‹•ä½œã¯ã‚ã‚Šã¾ã›ã‚“",
-"nosuchactiontext" => "URI ã§æŒ‡å®šã•ã‚ŒãŸå‹•ä½œã¯ Wikipedia ã§èªè­˜ã§ãã¾ã›ã‚“。",
+"nosuchactiontext" => "URI ã§æŒ‡å®šã•ã‚ŒãŸå‹•ä½œã¯ {{SITENAME}} ã§èªè­˜ã§ãã¾ã›ã‚“。",
"nosuchspecialpage" => "ãã®ã‚ˆã†ãªç‰¹åˆ¥ãƒšãƒ¼ã‚¸ã¯ã‚ã‚Šã¾ã›ã‚“。",
-"nospecialpagetext" => "ãã®ç‰¹åˆ¥ãƒšãƒ¼ã‚¸ã®è¦æ±‚㯠Wikipedia ã«ã¯ç†è§£ã§ãã¾ã›ã‚“。",
+"nospecialpagetext" => "ãã®ç‰¹åˆ¥ãƒšãƒ¼ã‚¸ã®è¦æ±‚㯠{{SITENAME}} ã«ã¯ç†è§£ã§ãã¾ã›ã‚“。",
# General errors
#
@@ -212,7 +213,7 @@ MySQL returned error \"<tt>$3: $4</tt>\".",
"readonlytext" => "ウィキペディア・データベースã¯ç¾åœ¨ã€æ–°ã—ã„記事ã®è¿½åŠ ã‚„修正をå—ã‘付ã‘ãªã„「ロックã€çŠ¶æ…‹ã«ãªã£ã¦ã„ã¾ã™ã€‚ã“ã‚Œã¯ãŠãらãã¯å®šæœŸçš„ãªãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã®ãŸã‚ã§ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹çµ‚了後ã¯æ­£å¸¸ãªçŠ¶æ…‹ã«å¾©å¸°ã—ã¾ã™ã€‚
データベースをロックã—ãŸç®¡ç†è€…ã¯æ¬¡ã®ã‚ˆã†ãªèª¬æ˜Žã‚’ã—ã¦ã„ã¾ã™ï¼š
<p>$1
-<p>The Wikipedia database is currently locked to new
+<p>The {{SITENAME}} database is currently locked to new
entries and other modifications, probably for routine database maintenance,
after which it will be back to normal.
The administrator who locked it offered this explanation:
@@ -242,7 +243,7 @@ that it should have found, named \"$1\".
ウィキペディアを匿åã§ä½¿ã„続ã†ã“ã¨ãŒã§ãã¾ã™ã€‚
ã‚ã‚‹ã„ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦å…ƒã®ã€ã‚ã‚‹ã„ã¯åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦ä½¿ã†ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
<P>You are now logged out.
-You can continue to use Wikipedia anonymously, or you can log in
+You can continue to use {{SITENAME}} anonymously, or you can log in
again as the same or as a different user.\n",
"welcomecreation" => "<h2>$1 ã•ã‚“ã€ã‚ˆã†ã“ã!</h2><p>ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒã§ãã¾ã—ãŸã€‚
@@ -270,13 +271,13 @@ again as the same or as a different user.\n",
"loginerror" => "ログイン・エラー",
"noname" => "ユーザåã‚’æ­£ã—ã指定ã—ã¦ã„ã¾ã›ã‚“。",
"loginsuccesstitle" => "ログインæˆåŠŸ",
-"loginsuccess" => "ã‚ãªãŸã¯ç¾åœ¨ Wikipedia ã« \"$1\" ã¨ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã™ã€‚",
+"loginsuccess" => "ã‚ãªãŸã¯ç¾åœ¨ {{SITENAME}} ã« \"$1\" ã¨ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã™ã€‚",
"nosuchuser" => " \"$1\" ã¨ã„ã†ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è¦‹å½“ãŸã‚Šã¾ã›ã‚“。
綴りãŒæ­£ã—ã„ã‹å†åº¦ç¢ºèªã™ã‚‹ã‹ã€ä¸‹è¨˜ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã—ã¦ãã ã•ã„。",
"wrongpassword" => "パスワードãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚å†åº¦å…¥åŠ›ã—ã¦ãã ã•ã„。",
"mailmypassword" => "æ–°ã—ã„パスワードをã€ãƒ¡ãƒ¼ãƒ«ã§é€ã‚‹",
-"passwordremindertitle" => "Password reminder from Wikipedia (ウィキペディアã‹ã‚‰ã®ãƒ‘スワードã®ãŠçŸ¥ã‚‰ã›ï¼‰",
-"passwordremindertext" => "ã©ãªãŸã‹ ($1 ã®IPアドレスã®ä½¿ç”¨è€…)ãŒã€Wikipediaã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ»ãƒ‘スワードã®å†ç™ºè¡Œã‚’ä¾é ¼ã—ã¾ã—ãŸã€‚
+"passwordremindertitle" => "Password reminder from {{SITENAME}} (ウィキペディアã‹ã‚‰ã®ãƒ‘スワードã®ãŠçŸ¥ã‚‰ã›ï¼‰",
+"passwordremindertext" => "ã©ãªãŸã‹ ($1 ã®IPアドレスã®ä½¿ç”¨è€…)ãŒã€{{SITENAME}}ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ»ãƒ‘スワードã®å†ç™ºè¡Œã‚’ä¾é ¼ã—ã¾ã—ãŸã€‚
ユーザ \"$2\" ã®ãƒ‘スワードを〠\"$3\" ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚
ログイン後ã€åˆ¥ã®ãƒ‘スワードã«å¤‰æ›´ã—ã¾ã—ょã†ã€‚",
"noemail" => "ユーザ \"$1\" ã®ãƒ¡ãƒ¼ãƒ«ãƒ»ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“。",
@@ -327,7 +328,7 @@ press \"Save page\".\n<p>" */,
revision of this page.
If you save it, any changes made since this revision will be lost.</strong>\n" */
"yourdiff" => "ã‚ãªãŸã®æ›´æ–°å†…容",
-"copyrightwarning" => "Wikipediaã«æŠ•ç¨¿ã•ã‚ŒãŸæ–‡æ›¸ã¯ã€ã™ã¹ã¦ GNU Free Documentation License ã«ã‚ˆã£ã¦ç™ºè¡Œã•ã‚ŒãŸã‚‚ã®ã¨ã¿ãªã•ã‚Œã¾ã™ã®ã§ã€ç•™æ„ã—ã¦ãã ã•ã„。
+"copyrightwarning" => "{{SITENAME}}ã«æŠ•ç¨¿ã•ã‚ŒãŸæ–‡æ›¸ã¯ã€ã™ã¹ã¦ GNU Free Documentation License ã«ã‚ˆã£ã¦ç™ºè¡Œã•ã‚ŒãŸã‚‚ã®ã¨ã¿ãªã•ã‚Œã¾ã™ã®ã§ã€ç•™æ„ã—ã¦ãã ã•ã„。
<p>(詳細㯠$1 ã‚’å‚ç…§, ã¾ãŸã€å‚考ã¾ã§ã«éžå…¬å¼æ—¥æœ¬èªžè¨³ã¯ &lt;http://www.opensource.jp/fdl/fdl.ja.html&gt; をå‚ç…§)。
<p>ã‚ãªãŸã®æ–‡ç« ãŒä»–人ã«ã‚ˆã£ã¦è‡ªç”±ã«ç·¨é›†ã€é…布ã•ã‚Œã‚‹ã“ã¨ã‚’望ã¾ãªã„å ´åˆã¯ã€æŠ•ç¨¿ã‚’控ãˆã¦ä¸‹ã•ã„。
<p>ã¾ãŸã€ã‚ãªãŸã®æŠ•ç¨¿ã™ã‚‹æ–‡ç« ã¯ã‚ãªãŸè‡ªèº«ã«ã‚ˆã£ã¦æ›¸ã‹ã‚ŒãŸã‚‚ã®ã§ã‚ã‚‹ã‹ã€ãƒ‘ブリック・ドメインã‹ãã‚Œã«é¡žã™ã‚‹è‡ªç”±ãªãƒªã‚½ãƒ¼ã‚¹ã‹ã‚‰ã®è¤‡è£½ã§ã‚ã‚‹ã“ã¨ã‚’ç´„æŸã—ã¦ä¸‹ã•ã„。
@@ -364,9 +365,9 @@ Please check the URL you used to access this page.\n",
# 検索çµæžœï¼ˆSearch results)
#
"searchresults" => "検索çµæžœ" /* "Search results" */,
-"searchhelppage" => "Wikipedia:Searching",
-"searchingwikipedia" => "Wikipedia を検索中" /* "Searching Wikipedia" */,
-"searchresulttext" => "Wikipedia ã®æ¤œç´¢ã«ã¤ã„ã¦ã®è©³ã—ã„情報ã¯ã€ $1 ã‚’ã”覧下ã•ã„。" /* "For more information about searching Wikipedia, see $1." */ ,
+"searchhelppage" => "{{ns:4}}:Searching",
+"searchingwikipedia" => "{{SITENAME}} を検索中" /* "Searching Wikipedia" */,
+"searchresulttext" => "{{SITENAME}} ã®æ¤œç´¢ã«ã¤ã„ã¦ã®è©³ã—ã„情報ã¯ã€ $1 ã‚’ã”覧下ã•ã„。" /* "For more information about searching Wikipedia, see $1." */ ,
"searchquery" => "å•ã„åˆã‚ã› \"$1\" ã«ã¤ã„ã¦ã€" /* "For query \"$1\"" */,
"badquery" => "ãŠã‹ã—ãªå½¢å¼ã®æ¤œç´¢å•ã„åˆã‚ã›" /* "Badly formed search query" */,
"badquerytext" => "å•ã„åˆã‚ã›ã‚’処ç†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
@@ -397,8 +398,7 @@ containing all of the search terms will appear in the result)." */,
"preferences" => "オプション" /* "Preferences" */,
"prefsnologin" => "ログインã—ã¦ã„ã¾ã›ã‚“" /* "Not logged in" */,
"prefsnologintext" => "ユーザーオプションを変更ã™ã‚‹ãŸã‚ã«ã¯ã€
-<a href=\"" .
- wfLocalUrl( "特別:Userlogin" ) . "\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+<a href=\"{{localurle:Special:Userlogin}}\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
/* "You must be <a href=\"" .
wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
to set user preferences." */,
@@ -430,15 +430,15 @@ from server time (UTC)." */,
#
"recentchanges" => "最近更新ã—ãŸãƒšãƒ¼ã‚¸",
"recentchangestext" => "最近付ã‘加ãˆã‚‰ã‚ŒãŸå¤‰æ›´ã¯ã“ã®ãƒšãƒ¼ã‚¸ã§ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
-[[Wikipedia:æ–°è¦å‚加者ã®æ–¹ã€ã‚ˆã†ã“ã]]ï¼
+[[{{ns:4}}:æ–°è¦å‚加者ã®æ–¹ã€ã‚ˆã†ã“ã]]ï¼
以下ã®ãƒšãƒ¼ã‚¸ã‚‚å‚ç…§ã—ã¦ä¸‹ã•ã„:
[[wikipedia:ウィキペディア よãã‚る質å•é›†]],
-[[Wikipedia:ウィキペディアã®åŸºæœ¬æ–¹é‡ã¨ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³]]
-(特ã«[[Wikipedia:記事åã®ã¤ã‘æ–¹]],
-[[Wikipedia:中立的ãªè¦³ç‚¹]]),
-[[Wikipedia:ウィキペディアã§èµ·ã“ã—ãŒã¡ãªé–“é•ã„]].
+[[{{ns:4}}:ウィキペディアã®åŸºæœ¬æ–¹é‡ã¨ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³]]
+(特ã«[[{{ns:4}}:記事åã®ã¤ã‘æ–¹]],
+[[{{ns:4}}:中立的ãªè¦³ç‚¹]]),
+[[{{ns:4}}:ウィキペディアã§èµ·ã“ã—ãŒã¡ãªé–“é•ã„]].
-ウィキペディアãŒæˆåŠŸã™ã‚‹ãŸã‚ã«ã¯ã€ã‚ãªãŸã®æŠ•ç¨¿ã™ã‚‹å†…容ãŒä»–人ã®è‘—作権ãªã©ã«ã‚ˆã£ã¦æŸç¸›ã•ã‚Œã¦ã„ãªã„ã“ã¨ãŒã¨ã¦ã‚‚é‡è¦ã§ã™ã€‚[[Wikipedia:著作権]]
+ウィキペディアãŒæˆåŠŸã™ã‚‹ãŸã‚ã«ã¯ã€ã‚ãªãŸã®æŠ•ç¨¿ã™ã‚‹å†…容ãŒä»–人ã®è‘—作権ãªã©ã«ã‚ˆã£ã¦æŸç¸›ã•ã‚Œã¦ã„ãªã„ã“ã¨ãŒã¨ã¦ã‚‚é‡è¦ã§ã™ã€‚[[{{ns:4}}:著作権]]
法的責任å•é¡Œã¯ã€ãƒ—ロジェクトã«è‡´å‘½å‚·ã‚’与ãˆã‚‹ã“ã¨ã‚‚ã‚ã‚‹å•é¡Œã§ã™ã€‚他人ã®è‘—作物ãªã©ã‚’æµç”¨ã™ã‚‹ã“ã¨ã¯çµ¶å¯¾ã«é¿ã‘ã¦ãã ã•ã„。ã¾ãŸæ¬¡ã®ãƒšãƒ¼ã‚¸ã‚‚å‚ç…§ã—ã¦ä¸‹ã•ã„。[http://meta.wikipedia.org/wiki/Special:Recentchanges recent meta discussion]"
/* Track the most recent changes to Wikipedia on this page.
@@ -475,24 +475,20 @@ See also the [http://meta.wikipedia.org/wiki/Special:Recentchanges recent meta d
"reuploaddesc" => "アップロードã®ãƒ•ã‚©ãƒ¼ãƒ ã¸æˆ»ã‚‹ Return to the upload form.",
"uploadnologin" => "ログインã—ã¦ã„ã¾ã›ã‚“〠Not logged in",
"uploadnologintext" => "ユーザーオプションを変更ã™ã‚‹ãŸã‚ã«ã¯ã€
-<a href=\"" .
- wfLocalUrl( "特別:Userlogin" ) . "\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+<a href=\"{{localurle:Special:Userlogin}}\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
-You must be <a href=\"" .
- wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+You must be <a href=\"{{localurle:Special:Userlogin}}\">logged in</a>
to upload files.",
"uploadfile" => "ファイルã®ã‚¢ãƒƒãƒ—ロード Upload file",
"uploaderror" => "アップロード エラー Upload error",
"uploadtext" => "<strong>ã”注æ„ï¼</strong>
-ã“ã“ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’アップロードã™ã‚‹å‰ã«ã€ã‚¦ã‚£ã‚­ãƒšãƒ‡ã‚£ã‚¢ã®<a href=\"" .
-wfLocalUrlE( "Wikipedia:ç”»åƒåˆ©ç”¨ã®æ–¹é‡" ) . "\">ç”»åƒåˆ©ç”¨ã®æ–¹é‡</a>ã‚’
+ã“ã“ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’アップロードã™ã‚‹å‰ã«ã€ã‚¦ã‚£ã‚­ãƒšãƒ‡ã‚£ã‚¢ã®<a href={{localurle:Project:ç”»åƒåˆ©ç”¨ã®æ–¹é‡}}" .
+ "\">ç”»åƒåˆ©ç”¨ã®æ–¹é‡</a>ã‚’
よã読んã§ã€æ–¹é‡ã«åã™ã‚‹ã“ã¨ã®ãªã„よã†ã«ã—ã¦ä¸‹ã•ã„。.
<p>
ã“ã‚Œã¾ã§ã«ã‚¢ãƒƒãƒ—ロードã•ã‚ŒãŸã‚¤ãƒ¡ãƒ¼ã‚¸ã®ä¸€è¦§ã‚„検索ã«ã¯ã€
-<a href=\"" . wfLocalUrlE( "特別:Imagelist" ) .
-"\">ç”»åƒãƒªã‚¹ãƒˆ</a>ãŒä¾¿åˆ©ã§ã™ã€‚
-アップロードã¨å‰Šé™¤ã®è¨˜éŒ²ã¯<a href=\"" .
-wfLocalUrlE( "Wikipedia:Upload_log" ) . "\">ã«ã‚ã‚Šã¾ã™ã€‚</a>.
+<a href=\"{{localurle:Special:Imagelist}}\">ç”»åƒãƒªã‚¹ãƒˆ</a>ãŒä¾¿åˆ©ã§ã™ã€‚
+アップロードã¨å‰Šé™¤ã®è¨˜éŒ²ã¯<a href=\"{{localurle:Project:Upload_log}}\">ã«ã‚ã‚Šã¾ã™ã€‚</a>.
<p>記事ã«å¿…è¦ãªç”»åƒã‚’æ–°ã—ãアップロードã™ã‚‹å ´åˆã«ã¯ã€ä»¥ä¸‹ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’利用ã—ã¦ä¸‹ã•ã„。
ã»ã¨ã‚“ã©ã®ãƒ–ラウザーã§ã¯ã€\"Browse\"ã¨ã„ã†ãƒœã‚¿ãƒ³ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ãã®ãƒœã‚¿ãƒ³ã‚’押ã™ã¨ã€
@@ -512,7 +508,7 @@ wfLocalUrlE( "Wikipedia:Upload_log" ) . "\">ã«ã‚ã‚Šã¾ã™ã€‚</a>.
ç”»åƒã‚’記事ã«çµ„ã¿å…¥ã‚Œã‚‹ãŸã‚ã«ã¯ã€æ¬¡ã®ã‚ˆã†ãªãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§ãƒªãƒ³ã‚¯ã‚’張りã¾ã™ã€‚
<b>[[ç”»åƒ:file.jpg]]</b> <b>[[ç”»åƒ:file.png|説明文]]</b>
-ã¾ãŸã€ã‚µã‚¦ãƒ³ãƒ‰ã«ã¯ <b>[[media:file.ogg]]</b> を用ã„ã¾ã™ã€‚
+ã¾ãŸã€ã‚µã‚¦ãƒ³ãƒ‰ã«ã¯ <b>[[{{ns:-2}}:file.ogg]]</b> を用ã„ã¾ã™ã€‚
<p>
ウィキペディアã®ä»–ã®ãƒšãƒ¼ã‚¸ã¨åŒã˜ãã€ã‚ãªãŸãŒã‚¢ãƒƒãƒ—ロードã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚‚ã€ã‚ˆã‚Š
よã„百科事典作æˆã®ãŸã‚ã«ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦ç·¨é›†ã€å‰Šé™¤ã•ã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
@@ -564,7 +560,7 @@ All times shown are server time (UTC). */,
I affirm that the copyright holder of this file
agrees to license it under the terms of the $1.",
-"copyrightpage" => "Wikipedia:Copyrights",
+"copyrightpage" => "{{ns:4}}:Copyrights",
"copyrightpagename" => "ウィキペディアã®è‘—作権",
"uploadedfiles" => "アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«",
@@ -620,7 +616,7 @@ created and by whom, and anything else you may know about it." */,
"statistics" => "アクセス統計",
"sitestats" => "サイト全体ã®çµ±è¨ˆ",
"userstats" => "ユーザー登録統計",
-"sitestatstext" => "<p>データベース内ã«ã¯ <b>$1</b> ページã®ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚Šã¾ã™ã€‚ã“ã®æ•°å­—ã«ã¯ã€Œä¼šè©±ãƒšãƒ¼ã‚¸ã€ã‚„「Wikipedia関連ã®ãƒšãƒ¼ã‚¸ã€ã€ã€Œæ›¸ãã‹ã‘ã®ãƒšãƒ¼ã‚¸ã€ã€ã€Œãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã€ãªã©ã€è¨˜äº‹ã¨ã¯ã¿ãªã›ãªã„ページãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“れらを除ã„ãŸã€è¨˜äº‹ã¨ã¿ãªã•ã‚Œã‚‹ãƒšãƒ¼ã‚¸æ•°ã¯ç´„ <b>$2</b> ページã«ãªã‚Šã¾ã™ã€‚</p><p>ページã®ç·é–²è¦§å›žæ•°ã¯ <b>$3</b> 回ã§ã™ã€‚ã¾ãŸã€ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æ›´æ–°(2002/06/20)以æ¥ã€<b>$4</b> 回ã®ç·¨é›†ãŒè¡Œã‚ã‚Œã¾ã—ãŸã€‚å¹³å‡ã™ã‚‹ã¨ã€ï¼‘ページã‚ãŸã‚Š <b>$5</b> 回ã®ç·¨é›†ãŒè¡Œã‚ã‚Œã€ï¼‘編集ã‚ãŸã‚Š <b>$6</b> 回閲覧ã•ã‚Œã¦ã„ã¾ã™ã€‚</p>",
+"sitestatstext" => "<p>データベース内ã«ã¯ <b>$1</b> ページã®ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚Šã¾ã™ã€‚ã“ã®æ•°å­—ã«ã¯ã€Œä¼šè©±ãƒšãƒ¼ã‚¸ã€ã‚„「{{SITENAME}}関連ã®ãƒšãƒ¼ã‚¸ã€ã€ã€Œæ›¸ãã‹ã‘ã®ãƒšãƒ¼ã‚¸ã€ã€ã€Œãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã€ãªã©ã€è¨˜äº‹ã¨ã¯ã¿ãªã›ãªã„ページãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“れらを除ã„ãŸã€è¨˜äº‹ã¨ã¿ãªã•ã‚Œã‚‹ãƒšãƒ¼ã‚¸æ•°ã¯ç´„ <b>$2</b> ページã«ãªã‚Šã¾ã™ã€‚</p><p>ページã®ç·é–²è¦§å›žæ•°ã¯ <b>$3</b> 回ã§ã™ã€‚ã¾ãŸã€ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æ›´æ–°(2002/06/20)以æ¥ã€<b>$4</b> 回ã®ç·¨é›†ãŒè¡Œã‚ã‚Œã¾ã—ãŸã€‚å¹³å‡ã™ã‚‹ã¨ã€ï¼‘ページã‚ãŸã‚Š <b>$5</b> 回ã®ç·¨é›†ãŒè¡Œã‚ã‚Œã€ï¼‘編集ã‚ãŸã‚Š <b>$6</b> 回閲覧ã•ã‚Œã¦ã„ã¾ã™ã€‚</p>",
"userstatstext" => "登録済ã¿ã®åˆ©ç”¨è€…㯠<b>$1</b> 人ã§ã€å†… <b>$2</b> 人ãŒç®¡ç†è€…権é™ã‚’æŒã£ã¦ã„ã¾ã™ã€‚($3ã‚’å‚ç…§)",
# Miscellaneous special pages
@@ -657,11 +653,9 @@ created and by whom, and anything else you may know about it." */,
#
"mailnologin" => "é€ä¿¡å…ˆã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒã‚ã‚Šã¾ã›ã‚“。" /* No send address"*/,
"mailnologintext" => "ログインã—ã¦ã„ã¾ã›ã‚“。メールをé€ä¿¡ã™ã‚‹ãŸã‚ã«ã¯ã€
-ã‚ãªãŸã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’<a href=\"" .
- wfLocalUrl( "Special:ユーザーオプション" ) . "\">ユーザーオプション</a>
+ã‚ãªãŸã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’<a href=\"{{localurle:Special:Userlogin}}\">ユーザーオプション</a>
ã§æŒ‡å®šã—ã€
-<a href=\"" .
- wfLocalUrl( "特別:Userlogin" ) . "\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+<a href=\"{{localurle:Special:Userlogin\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
/* You must be <a href=\"" .
wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
and have a valid e-mail address in your <a href=\"" .
@@ -698,19 +692,17 @@ or has chosen not to receive e-mail from other users." */,
"nowatchlist" => "ã‚ãªãŸã®ã‚¦ã‚©ãƒƒãƒãƒªã‚¹ãƒˆã¯ç©ºã§ã™ã€‚" /* "You have no items on your watchlist." */,
"watchnologin" => "ログインã—ã¦ã„ã¾ã›ã‚“" /* "Not logged in" */,
"watchnologintext" => "ウォッãƒãƒªã‚¹ãƒˆã‚’変更ã™ã‚‹ãŸã‚ã«ã¯ã€
-<a href=\"" .
- wfLocalUrl( "特別:Userlogin" ) . "\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+<a href=\"{{localurle:Special:Userlogin}}\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
/* "You must be <a href=\"" .
wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
to modify your watchlist." */,
"addedwatch" => "ウォッãƒãƒªã‚¹ãƒˆã«åŠ ãˆã¾ã—ãŸ" /* "Added to watchlist" */,
"addedwatchtext" => "ページ\"$1\" ã‚’ã‚ãªãŸã®
-<a href=\"" .
- wfLocalUrl( "特別:Watchlist" ) . "\">ウォッãƒãƒªã‚¹ãƒˆ</a>
+<a href=\"{{localurle:Special:Watchlist}}\">ウォッãƒãƒªã‚¹ãƒˆ</a>
ã«è¿½åŠ ã—ã¾ã—ãŸã€‚
ã“ã®ãƒšãƒ¼ã‚¸ã¨ã€ä»˜å±žã®ãƒŽãƒ¼ãƒˆã®ãƒšãƒ¼ã‚¸ã«å¤‰æ›´ãŒã‚ã£ãŸéš›ã«ã¯ãれをウォッãƒãƒªã‚¹ãƒˆã§
知るã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€
-<a href=\"" . wfLocalUrl( "特別:Recentchanges" ) . "\">最近更新ã—ãŸãƒšãƒ¼ã‚¸</a> ã§ã¯
+<a href=\"{{localurle:Special:Recentchanges}}\">最近更新ã—ãŸãƒšãƒ¼ã‚¸</a> ã§ã¯
ウォッãƒãƒªã‚¹ãƒˆã«å«ã¾ã‚Œã¦ã„るページã¯<b>ボールド体</b>ã§è¡¨ç¤ºã•ã‚Œã€è¦‹ã¤ã‘ã‚„ã™ã
ãªã‚Šã¾ã™ã€‚</p>
@@ -741,13 +733,13 @@ make it easier to pick out.</p>
"confirmdeletetext" => "指定ã•ã‚ŒãŸãƒšãƒ¼ã‚¸ã¾ãŸã¯ã‚¤ãƒ¡ãƒ¼ã‚¸ã¯ã€ãã®æ›´æ–°å±¥æ­´ã¨å…±ã«
データベースã‹ã‚‰æ°¸ä¹…ã«å‰Šé™¤ã•ã‚Œã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚
ã‚ãªãŸãŒå‰Šé™¤ã‚’望んã§ãŠã‚Šã€ãã‚ŒãŒã‚‚ãŸã‚‰ã™å¸°çµã‚’ç†è§£ã—ã¦ãŠã‚Šã€ã‹ã¤ã‚ãªãŸã®
-ã—よã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ãŒ[[Wikipedia:Policy|ウィキペディアã®åŸºæœ¬æ–¹é‡]]ã«å³ã—ãŸã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ä¸‹ã•ã„。
+ã—よã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ãŒ[[{{ns:4}}:Policy|ウィキペディアã®åŸºæœ¬æ–¹é‡]]ã«å³ã—ãŸã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ä¸‹ã•ã„。
You are about to permanently delete a page
or image along with all of its history from the database.
Please confirm that you intend to do this, that you understand the
consequences, and that you are doing this in accordance with
-[[Wikipedia:Policy]].",
+[[{{ns:4}}:Policy]].",
"confirmcheck" => "ã¯ã„。上記ã®é€šã‚Šã§ã™ã€‚ Yes, I really want to delete this.",
"actioncomplete" => "削除を完了ã—ã¾ã—ãŸã€‚ Action complete",
"deletedtext" => "\"$1\" ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚ \"$1\" has been deleted.
@@ -794,7 +786,7 @@ to perform this function on." */,
"blockiptext" => "Use the form below to block write access
from a specific IP address.
This should be done only only to prevent valndalism, and in
-accordance with [[Wikipedia:Policy|Wikipedia policy]].
+accordance with [[{{ns:4}}:Policy|{{SITENAME}} policy]].
Fill in a specific reason below (for example, citing particular
pages that were vandalized).",
"ipaddress" => "IP Address",
@@ -836,22 +828,22 @@ Please confirm that this is what you intend to do.",
"locknoconfirm" => "You did not check the confirmation box.",
"lockdbsuccesssub" => "Database lock succeeded",
"unlockdbsuccesssub" => "Database lock removed",
-"lockdbsuccesstext" => "The Wikipedia database has been locked.
+"lockdbsuccesstext" => "The {{SITENAME}} database has been locked.
<br>Remember to remove the lock after your maintenance is complete.",
-"unlockdbsuccesstext" => "The Wikipedia database has been unlocked.",
+"unlockdbsuccesstext" => "The {{SITENAME}} database has been unlocked.",
# SQL query (ã“ã®éƒ¨åˆ†ã¯ç®¡ç†è€…用ãªã®ã§å½“é¢è‹±æ–‡ã‚’残ã—ã¦ãŠãã¾ã™ã€‚)
#
"asksql" => "SQL query",
"asksqltext" => "Use the form below to make a direct query of the
-Wikipedia database.
+{{SITENAME}} database.
Use single quotes ('like this') to delimit string literals.
This can often add considerable load to the server, so please use
this function sparingly.",
"sqlquery" => "Enter query",
"querybtn" => "Submit query",
"selectonly" => "Queries other than \"SELECT\" are restricted to
-Wikipedia developers.",
+{{SITENAME}} developers.",
"querysuccessful" => "Query successful",
# Move page ページã®ç§»å‹•
@@ -878,8 +870,7 @@ proceeding." */,
"movearticle" => "ページã®ç§»å‹•",
"movenologin" => "ログインã—ã¦ã„ã¾ã›ã‚“",
"movenologintext" => "ã“ã®æ©Ÿèƒ½ã‚’利用ã™ã‚‹ãŸã‚ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ç™»éŒ²ã‚’ã—ã¦ã€
-<a href=\"" .
- wfLocalUrl( "特別:Userlogin" ) . "\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒ
+<a href=\"{{localurle:Special:Userlogin}}\">ログイン</a>ã—ã¦ã„ã‚‹å¿…è¦ãŒ
ã‚ã‚Šã¾ã™ã€‚",
"newtitle" => "æ–°ã—ã„ページã¸" /* "To new title" */,
"movepagebtn" => "ページを移動" /* "Move page" */,
diff --git a/languages/LanguageKo.php b/languages/LanguageKo.php
index 3f320116704d..ed12b7145ed3 100644
--- a/languages/LanguageKo.php
+++ b/languages/LanguageKo.php
@@ -47,7 +47,8 @@ require_once( "LanguageUtf8.php" );
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgUserTogglesKo = array(
diff --git a/languages/LanguageLa.php b/languages/LanguageLa.php
index b724bee3b340..c66a95f5db46 100644
--- a/languages/LanguageLa.php
+++ b/languages/LanguageLa.php
@@ -38,7 +38,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesLa = array(
diff --git a/languages/LanguageLatin1.php b/languages/LanguageLatin1.php
new file mode 100644
index 000000000000..a03de9111aec
--- /dev/null
+++ b/languages/LanguageLatin1.php
@@ -0,0 +1,252 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+#
+# Latin-1 compatibility layer hack.
+#
+# Enable by setting "$wgUseLatin1 = true;" in LocalSettings.php
+# (Preferably at install time so you get the messages right!)
+#
+# This will replace anything that can't be described in Latin-1 with
+# an ugly question mark (?) so don't use this mode on languages that
+# aren't suited to it!
+#
+
+$wgInputEncoding = "iso-8859-1";
+$wgOutputEncoding = "iso-8859-1";
+
+function utf8_decode_array( $arr ) {
+ if( !is_array( $arr ) ) {
+ wfDebugDieBacktrace( "utf8_decode_array given non-array" );
+ }
+ return array_map( "utf8_decode", $arr );
+}
+
+#
+# This is a proxy object; the Language instance handed to us speaks
+# UTF-8, while the wiki outside speaks Latin-1. We translate as
+# necessary so neither knows the other is in the wrong charset.
+#
+class LanguageLatin1 {
+ var $lang;
+
+ function LanguageLatin1( &$language ) {
+ $this->lang =& $language;
+ }
+
+ function getDefaultUserOptions() {
+ return $this->lang->getDefaultUserOptions();
+ }
+
+ function getBookstoreList() {
+ return utf8_decode_array( $this->lang->getBookstoreList() );
+ }
+
+ function getNamespaces() {
+ return utf8_decode_array( $this->lang->getNamespaces() );
+ }
+
+ function getNsText( $index ) {
+ return utf8_decode( $this->lang->getNsText( $index ) );
+ }
+
+ function getNsIndex( $text ) {
+ return $this->lang->getNsIndex( utf8_encode( $text ) );
+ }
+
+ function specialPage( $name ) {
+ # At least one function calls this with Special:Undelete/Article_title, so it needs encoding
+ return utf8_decode( $this->lang->specialPage( utf8_encode( $name ) ) );
+ }
+
+ function getQuickbarSettings() {
+ return utf8_decode_array( $this->lang->getQuickbarSettings() );
+ }
+
+ function getSkinNames() {
+ return utf8_decode_array( $this->lang->getSkinNames() );
+ }
+
+ function getMathNames() {
+ return utf8_decode_array( $this->lang->getMathNames() );
+ }
+
+ function getDateFormats() {
+ return utf8_decode_array( $this->lang->getDateFormats() );
+ }
+
+ function getUserToggles() {
+ return utf8_decode_array( $this->lang->getUserToggles() );
+ }
+
+ function getUserToggle( $tog ) {
+ return utf8_decode( $this->lang->getUserToggle( $tog ) );
+ }
+
+ function getLanguageNames() {
+ return utf8_decode_array( $this->lang->getLanguageNames() );
+ }
+
+ function getLanguageName( $code ) {
+ return utf8_decode( $this->lang->getLanguageName( $code ) );
+ }
+
+ function getMonthName( $key ) {
+ return utf8_decode( $this->lang->getMonthName( $key ) );
+ }
+
+ function getMonthNameGen( $key ) {
+ return utf8_decode( $this->lang->getMonthNameGen( $key ) );
+ }
+
+ function getMonthAbbreviation( $key ) {
+ return utf8_decode( $this->lang->getMonthAbbreviation( $key ) );
+ }
+
+ function getWeekdayName( $key ) {
+ return utf8_decode( $this->lang->getWeekdayName( $key ) );
+ }
+
+ function userAdjust( $ts ) {
+ return $this->lang->userAdjust( $ts );
+ }
+
+ function date( $ts, $adj = false ) {
+ return utf8_decode( $this->lang->date( $ts, $adj ) );
+ }
+
+ function time( $ts, $adj = false, $seconds = false ) {
+ return utf8_decode( $this->lang->time( $ts, $adj ) );
+ }
+
+ function timeanddate( $ts, $adj = false ) {
+ return utf8_decode( $this->lang->timeanddate( $ts, $adj ) );
+ }
+
+ function rfc1123( $ts ) {
+ # ASCII by definition
+ return $this->lang->rfc1123( $ts );
+ }
+
+ function getValidSpecialPages() {
+ return utf8_decode_array( $this->lang->getValidSpecialPages() );
+ }
+
+ function getSysopSpecialPages() {
+ return utf8_decode_array( $this->lang->getSysopSpecialPages() );
+ }
+
+ function getDeveloperSpecialPages() {
+ return utf8_decode_array( $this->lang->getDeveloperSpecialPages() );
+ }
+
+ function getMessage( $key ) {
+ return utf8_decode( $this->lang->getMessage( $key ) );
+ }
+
+ function getAllMessages() {
+ return utf8_decode_array( $this->lang->getAllMessages() );
+ }
+
+ function iconv( $in, $out, $string ) {
+ # Use 8-bit version
+ return Language::iconv( $in, $out, $string );
+ }
+
+ function ucfirst( $string ) {
+ # Use 8-bit version
+ return Language::ucfirst( $string );
+ }
+
+ function lcfirst( $s ) {
+ # Use 8-bit version
+ return Language::lcfirst( $s );
+ }
+
+ function checkTitleEncoding( $s ) {
+ # Use 8-bit version
+ return Language::checkTitleEncoding( $s );
+ }
+
+ function stripForSearch( $in ) {
+ # Use 8-bit version
+ return Language::stripForSearch( $in );
+ }
+
+ function firstChar( $s ) {
+ # Use 8-bit version
+ return Language::firstChar( $s );
+ }
+
+ function setAltEncoding() {
+ # Not sure if this should be handled
+ $this->lang->setAltEncoding();
+ }
+
+ function recodeForEdit( $s ) {
+ # Use 8-bit version
+ return Language::recodeForEdit( $s );
+ }
+
+ function recodeInput( $s ) {
+ # Use 8-bit version
+ return Language::recodeInput( $s );
+ }
+
+ function isRTL() {
+ # boolean
+ return $this->lang->isRTL();
+ }
+
+ function linkPrefixExtension() {
+ # boolean
+ return $this->lang->linkPrefixExtension();
+ }
+
+ function &getMagicWords() {
+ return utf8_decode_array( $this->lang->getMagicWords() );
+ }
+
+ function getMagic( &$mw ) {
+ # Not sure how to handle this.
+ # A moot point perhaps as few language files currently
+ # assign localised magic words, and none of the ones we
+ # need backwards compatibility for.
+ return $this->lang->getMagic( $mw );
+ }
+
+ function emphasize( $text ) {
+ # It's unlikely that the emphasis markup itself will
+ # include any non-ASCII chars.
+ return $this->lang->emphasize( $text );
+ }
+
+ function formatNum( $number ) {
+ # Probably not necessary...
+ return utf8_decode( $this->lang->formatNum( $number ) );
+ }
+
+ function listToText( $l ) {
+ # It's unlikely that the list markup itself will
+ # include any non-ASCII chars. (?)
+ return $this->lang->listToText( $l );
+ }
+}
+
+?>
diff --git a/languages/LanguageMs.php b/languages/LanguageMs.php
index 0df38ebf85bd..5c8e9cc22b0a 100644
--- a/languages/LanguageMs.php
+++ b/languages/LanguageMs.php
@@ -40,7 +40,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesMs = array(
diff --git a/languages/LanguageNl.php b/languages/LanguageNl.php
index 38bbe829d004..a752495e2a5c 100644
--- a/languages/LanguageNl.php
+++ b/languages/LanguageNl.php
@@ -1,26 +1,37 @@
<?php
+#
+# Nederlands localisation for MediaWiki
+#
+# This file is encoded in UTF-8, no byte order mark.
+# For compatibility with Latin-1 installations, please
+# don't add literal characters above U+00ff.
+#
-/* WARNING: This file is still in ISO-8859-1. */
+require_once( "LanguageUtf8.php" );
# The names of the namespaces can be set here, but the numbers
# are magical, so don't change or move them! The Namespace class
# encapsulates some of the magic-ness.
/* private */ $wgNamespaceNamesNl = array(
- -2 => "Media",
- -1 => "Speciaal",
- 0 => "",
- 1 => "Overleg",
- 2 => "Gebruiker",
- 3 => "Overleg_gebruiker",
- 4 => "Wikipedia",
- 5 => "Overleg_Wikipedia",
- 6 => "Afbeelding",
- 7 => "Overleg_afbeelding",
- 8 => "MediaWiki",
- 9 => "Overleg_MediaWiki",
- 10 => "Template",
- 11 => "Template_talk"
+ NS_MEDIA => "Media",
+ NS_SPECIAL => "Speciaal",
+ NS_MAIN => "",
+ NS_TALK => "Overleg",
+ NS_USER => "Gebruiker",
+ NS_USER_TALK => "Overleg_gebruiker",
+ NS_WIKIPEDIA => $wgMetaNamespace,
+ NS_WIKIPEDIA_TALK => "Overleg_$wgMetaNamespace",
+ NS_IMAGE => "Afbeelding",
+ NS_IMAGE_TALK => "Overleg_afbeelding",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "Overleg_MediaWiki",
+ NS_TEMPLATE => "Sjabloon",
+ NS_TEMPLATE_TALK => "Overleg_sjabloon",
+ NS_HELP => "Help",
+ NS_HELP_TALK => "Overleg_help",
+ NS_CATEGORY => "Categorie",
+ NS_CATEGORY_TALK => "Overleg_categorie"
);
@@ -36,7 +47,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesNl = array(
@@ -144,22 +156,22 @@
"category" => "rubriek",
"category_header" => "Artikelen in rubriek \"$1\"",
"subcategories" => "Onderrubrieken",
-"linktrail" => "/^([äöüïëéèàa-z]+)(.*)\$/sD",
+"linktrail" => "/^((?:[a-z]|ä|ö|ü|ï|ë|é|è|à)+)(.*)\$/sD",
"mainpage" => "Hoofdpagina",
"mainpagetext" => "Installatie van de Wiki software geslaagd.",
"about" => "Info",
-"aboutwikipedia" => "Over Wikipedia",
-"aboutpage" => "Wikipedia:info",
+"aboutwikipedia" => "Over {{SITENAME}}",
+"aboutpage" => "{{ns:4}}:info",
"help" => "Help",
-"helppage" => "Wikipedia:Help",
-"wikititlesuffix" => "Wikipedia NL",
+"helppage" => "{{ns:4}}:Help",
+"wikititlesuffix" => "{{SITENAME}} NL",
"bugreports" => "Foutenrapportage",
"sitesupport" => "Financieel bijdragen",
-"bugreportspage" => "Wikipedia:Foutenrapportage",
+"bugreportspage" => "{{ns:4}}:Foutenrapportage",
"faq" => "FAQ",
-"faqpage" => "Wikipedia:Veel gestelde vragen",
+"faqpage" => "{{ns:4}}:Veel gestelde vragen",
"edithelp" => "Hulp bij bewerken",
-"edithelppage" => "Wikipedia:Instructies",
+"edithelppage" => "{{ns:4}}:Instructies",
"cancel" => "Annuleren",
"qbfind" => "Zoeken",
"qbbrowse" => "Bladeren",
@@ -199,7 +211,7 @@
"gnunote" => "Alle tekst op deze pagina valt onder de <a class=internal href='/wiki/Gnu_Vrije_Documentatie_Licentie'>GNU FDL</a>.",
"printsubtitle" => "(Uit http://nl.wikipedia.org)",
"protectedpage" => "Beveiligde pagina",
-"administrators" => "Wikipedia:Systeembeheerders",
+"administrators" => "{{ns:4}}:Systeembeheerders",
"sysoptitle" => "Toegang alleen voor systeembeheerders",
"sysoptext" => "De gevraagde handeling kan enkel uitgevoerd worden door systeembeheerders. Zie $1.",
"developertitle" => "Toegang alleen voor systeemontwikkelaars",
@@ -207,9 +219,9 @@
"nbytes" => "$1 bytes",
"go" => "OK",
"ok" => "OK",
-"sitetitle" => "<span style=\"text-transform: none\">Wikipedia NL</span>", # Okay, HERE's an ugly hack. There should be a cleaner way to do this.
+"sitetitle" => "<span style=\"text-transform: none\">{{SITENAME}} NL</span>", # Okay, HERE's an ugly hack. There should be a cleaner way to do this.
"sitesubtitle" => "De vrije encyclopedie",
-"retrievedfrom" => "Afkomstig van Wikipedia NL, de Vrije Encyclopedie. \"$1\"",
+"retrievedfrom" => "Afkomstig van {{SITENAME}} NL, de Vrije Encyclopedie. \"$1\"",
"newmessages" => "U heeft $1.",
"newmessageslink" => "een nieuw bericht",
"editsection" => "bewerken",
@@ -222,9 +234,9 @@
# Main script and global functions
# Algemene functies
"nosuchaction" => "Gevraagde handeling bestaat niet",
-"nosuchactiontext" => "De door de URL gespecifieerde handeling wordt niet herkend door de Wikipedia software",
+"nosuchactiontext" => "De door de URL gespecifieerde handeling wordt niet herkend door de {{SITENAME}} software",
"nosuchspecialpage" => "De gevraagde speciale pagina is onvindbaar",
-"nospecialpagetext" => "U heeft een speciale pagina aangevraagd die niet wordt herkend door de Wikipedia software",
+"nospecialpagetext" => "U heeft een speciale pagina aangevraagd die niet wordt herkend door de {{SITENAME}} software",
# General errors
# Algemene foutmeldingen
@@ -246,12 +258,12 @@ MySQL gaf de volgende foutmelding: \"$3: $4\".\n",
"cachederror" => "Hieronder wordt een versie uit de cache getoond. Dit is mogelijk niet de meest recente versie.",
"readonly" => "Database geblokeerd",
"enterlockreason" => "Geef een reden voor de blokkering en hoelang het waarschijnlijk gaat duren. De ingegeven reden zal aan de gebruikers getoond worden.",
-"readonlytext" => "De database van Wikipedia is momenteel gesloten voor nieuwe bewerkingen en wijzigingen, waarschijnlijk voor bestandsonderhoud.
+"readonlytext" => "De database van {{SITENAME}} is momenteel gesloten voor nieuwe bewerkingen en wijzigingen, waarschijnlijk voor bestandsonderhoud.
De verantwoordelijke systeembeheerder gaf hiervoor volgende reden op:
<p>$1",
"missingarticle" => "De database heeft een paginatekst (\"$1\") die het zou moeten vinden niet gevonden. Dit kan betekenen dat u een oude versie hebt proberen op te halen van een pagina die inmiddels verdwenen is. Indien dit niet het geval is, dan is er waarschijnlijk een fout in de software. Meld dit a.u.b. aan een beheerder, met vermelding van de URL.",
"internalerror" => "Interne fout",
-"filecopyerror" => "Bestand \"$1\" naar \"$2\" kopiëren niet mogelijk.",
+"filecopyerror" => "Bestand \"$1\" naar \"$2\" kopiëren niet mogelijk.",
"filerenameerror" => "Wijziging titel bestand \"$1\" in \"$2\" niet mogelijk.",
"filedeleteerror" => "Kon bestand \"$1\" niet verwijderen.",
"filenotfound" => "Kon bestand \"$1\" niet vinden.",
@@ -268,7 +280,7 @@ De verantwoordelijke systeembeheerder gaf hiervoor volgende reden op:
# Aanmelden en afmelden
"logouttitle" => "Afmelden gebruiker",
"logouttext" => "U bent nu afgemeld.
-U kunt Wikipedia anoniem blijven gebruiken, of u opnieuw aanmelden onder dezelfde of onder een andere naam.\n",
+U kunt {{SITENAME}} anoniem blijven gebruiken, of u opnieuw aanmelden onder dezelfde of onder een andere naam.\n",
"welcomecreation" => "<h2>Welkom, $1!</h2><p>Uw gebruikersprofiel is aangemaakt. U kunt nu uw persoonlijke voorkeuren instellen.",
@@ -296,12 +308,12 @@ U kunt Wikipedia anoniem blijven gebruiken, of u opnieuw aanmelden onder dezelfd
"loginerror" => "Inlogfout",
"noname" => "U dient een gebruikersnaam op te geven.",
"loginsuccesstitle" => "Aanmelden gelukt.",
-"loginsuccess" => "U bent nu aangemeld bij Wikipedia NL als \"$1\".",
+"loginsuccess" => "U bent nu aangemeld bij {{SITENAME}} NL als \"$1\".",
"nosuchuser" => "Er bestaat geen gebruiker met de naam \"$1\". Controleer uw spelling, of gebruik onderstaand formulier om een nieuw gebruikersprofiel aan te maken.",
"wrongpassword" => "Het ingegeven wachtwoord is niet juist. Probeer het opnieuw.",
"mailmypassword" => "Stuur mij een nieuw wachtwoord op",
-"passwordremindertitle" => "Herinnering wachtwoord Wikipedia NL",
-"passwordremindertext" => "Iemand (waarschijnlijk uzelf) vanaf IP-adres $1 heeft verzocht u een nieuw wachtwoord voor Wikipedia NL toe te zenden. Het nieuwe wachtwoord voor gebruiker \"$2\" is \"$3\". Advies: nu aanmelden en uw wachtwoord wijzigigen.",
+"passwordremindertitle" => "Herinnering wachtwoord {{SITENAME}} NL",
+"passwordremindertext" => "Iemand (waarschijnlijk uzelf) vanaf IP-adres $1 heeft verzocht u een nieuw wachtwoord voor {{SITENAME}} NL toe te zenden. Het nieuwe wachtwoord voor gebruiker \"$2\" is \"$3\". Advies: nu aanmelden en uw wachtwoord wijzigigen.",
"noemail" => "Er is geen e-mailadres geregistreerd voor \"$1\".",
"passwordsent" => "Er is een nieuw wachtwoord verzonden naar het e-mailadres wat geregistreerd staat voor \"$1\".
Gelieve na ontvangst opnieuw aan te melden.",
@@ -316,7 +328,7 @@ Gelieve na ontvangst opnieuw aan te melden.",
"preview" => "Nakijken",
"showpreview" => "Toon bewerking ter controle",
"blockedtitle" => "Gebruiker is geblokkeerd",
-"blockedtext" => "Uw gebruikersnaam of IP-adres is door $1 geblokkeerd. De opgegeven reden:<br>$2<p>. Elke computer die verbonden is met het internet krijgt een [[ip-adres]] toegewezen van zijn [[internetprovider]]. In veel gevallen krijgt een gebruiker regelmatig een ander ip-adres toegewezen. Het het door u gebruikte ip-adres is recent gebruikt door u of iemand anders voor bewerkingen die in overtreding zijn van de [[Wikipedia:Toch een paar regels|regels]] van Wikipedia.<p>U kunt voor overleg contact opnemen met de [[Wikipedia:Systeembeheerders|systeembeheerders]] via [http://wikinl.sol3.info/wikinl_info.html#email wikinl-l-owner@wikipedia.org een formulier].",
+"blockedtext" => "Uw gebruikersnaam of IP-adres is door $1 geblokkeerd. De opgegeven reden:<br>$2<p>. Elke computer die verbonden is met het internet krijgt een [[ip-adres]] toegewezen van zijn [[internetprovider]]. In veel gevallen krijgt een gebruiker regelmatig een ander ip-adres toegewezen. Het het door u gebruikte ip-adres is recent gebruikt door u of iemand anders voor bewerkingen die in overtreding zijn van de [[{{ns:4}}:Toch een paar regels|regels]] van {{SITENAME}}.<p>U kunt voor overleg contact opnemen met de [[{{ns:4}}:Systeembeheerders|systeembeheerders]] via [http://wikinl.sol3.info/wikinl_info.html#email wikinl-l-owner@wikipedia.org een formulier].",
"whitelistedittitle" => "Aanmelden verplicht",
"whitelistedittext" => "Om dit artikel te kunnen wijzigen, moet u [[Speciaal:Userlogin|ingelogd]] zijn.",
"whitelistreadtitle" => "Aanmelden verplicht",
@@ -342,7 +354,7 @@ Gelieve na ontvangst opnieuw aan te melden.",
"storedversion" => "Opgeslagen versie",
"editingold" => "<strong>WAARSCHUWING: U bent bezig een oude versie van deze pagina te bewerken. Wanneer u uw bewerking opslaat, gaan alle wijzigingen die na deze versie gedaan zijn verloren.\n.</strong>\n",
"yourdiff" => "Wijzigingen",
-"copyrightwarning" => "Opgelet: Alle bijdragen aan Wikipedia worden geacht te zijn vrijgegeven onder de GNU Free Documentation License. Als u niet wil dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor 'Pagina Opslaan'.<br> Hierbij belooft u ons tevens dat u deze tekst zelf hebt geschreven, of overgenomen uit een vrije, openbare bron.<br> <strong>GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAARTOE TOESTEMMING HEBT!</strong>",
+"copyrightwarning" => "Opgelet: Alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de GNU Free Documentation License. Als u niet wil dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor 'Pagina Opslaan'.<br> Hierbij belooft u ons tevens dat u deze tekst zelf hebt geschreven, of overgenomen uit een vrije, openbare bron.<br> <strong>GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAARTOE TOESTEMMING HEBT!</strong>",
"longpagewarning" => "Waarschuwing! Deze pagina is $1 kilobyte lang. Pagina's langer dan 32 kb zorgen voor problemen op sommige browsers. Het is daarom waarschijnlijk een goed idee deze pagina in meerdere pagina's te splitsen.",
"readonlywarning" => "Waarschuwing! De database is op dit moment in onderhoud; het is daarom niet mogelijk op dit moment pagina's te wijzigen. Wij adviseren u de tekst op uw eigen computer op te slaan en later opnieuw te proberen deze pagina te bewerken.",
"protectedpagewarning" => "Waarschuwing! U staat op het punt een beveiligde pagina te wijzigen. Gewone gebruikers kunnen deze pagina niet bewerken.",
@@ -372,12 +384,12 @@ Gelieve na ontvangst opnieuw aan te melden.",
# Search results
# Zoekresultaten
"searchresults" => "Zoekresultaten",
-"searchhelppage" => "Wikipedia:Zoeken",
-"searchingwikipedia" => "Zoeken op Wikipedia",
-"searchresulttext" => "Voor meer informatie over zoeken op Wikipedia: zie $1.",
+"searchhelppage" => "{{ns:4}}:Zoeken",
+"searchingwikipedia" => "Zoeken op {{SITENAME}}",
+"searchresulttext" => "Voor meer informatie over zoeken op {{SITENAME}}: zie $1.",
"searchquery" => "Voor zoekopdracht \"$1\"",
"badquery" => "Slecht geformuleerde zoekopdracht",
-"badquerytext" => "Uw zoekopdracht kon niet worden uitgevoerd. Dit kan komen doordat u geprobeerd hebt om een 'woord' van 1 letter te zoeken, of 1 van de <a HREF=\"http://nl.wikipedia.org/wiki/Wikipedia:Verboden_woorden\">Verboden woorden</a>.",
+"badquerytext" => "Uw zoekopdracht kon niet worden uitgevoerd. Dit kan komen doordat u geprobeerd hebt om een 'woord' van 1 letter te zoeken, of 1 van de <a HREF=\"http://nl.wikipedia.org/wiki/{{ns:4}}:Verboden_woorden\">Verboden woorden</a>.",
"matchtotals" => "De zoekterm \"$1\" is gevonden in $2 paginatitels en in de tekst van $3 pagina's.",
"nogomatch" => "Er bestaat geen pagina met deze titel, op zoek naar pagina's waarin de tekst voorkomt.",
"titlematches" => "Overeenkomst met volgende titels",
@@ -389,9 +401,9 @@ Gelieve na ontvangst opnieuw aan te melden.",
"viewprevnext" => "($1) ($2) ($3) bekijken.",
"showingresults" => "Hieronder <b>$1</b> resultaten vanaf nummer <b>$2</b>.",
"showingresultsnum" => "Hieronder <b>$3</b> resultaten vanaf nummer <b>$2</b>.",
-"nonefound" => "<strong>Merk op:</strong> wanneer een zoekopdracht mislukt komt dat vaak door gebruik van veel voorkomende woorden zoals \"de\" en \"het\", die niet geïndexeerd zijn, of door verschillende zoektermen tegelijk op te geven (u krijgt dan alleen in pagina's waaarin alle opgegeven termen voorkomen).
+"nonefound" => "<strong>Merk op:</strong> wanneer een zoekopdracht mislukt komt dat vaak door gebruik van veel voorkomende woorden zoals \"de\" en \"het\", die niet geïndexeerd zijn, of door verschillende zoektermen tegelijk op te geven (u krijgt dan alleen in pagina's waaarin alle opgegeven termen voorkomen).
-Het kan natuurlijk dat er gewoon nog geen artikel aanwezig op Wikipedia NL over dit onderwerp. Mogelijk is het aanwezig in een andere taal. Zoek met de <a HREF=\"http://pliny.wikipedia.org/tools/wikisearch.php\">multi-wikipedia zoeker</a> in de andere Wikipedia's, of buiten Wikipedia in een <a href=\"http://encyclopedie.zoekhulp.nl/?refer=Wikipedia.nl\">andere encyclopedie</a>. Wanneer u gevonden heeft wat u zocht, kunt u wellicht daarover een artikel schrijven op Wikipedia NL, zodat de volgende die zoekt wat u zocht het wel kan vinden.
+Het kan natuurlijk dat er gewoon nog geen artikel aanwezig op {{SITENAME}} NL over dit onderwerp. Mogelijk is het aanwezig in een andere taal. Zoek met de <a HREF=\"http://pliny.wikipedia.org/tools/wikisearch.php\">multi-wikipedia zoeker</a> in de andere {{SITENAME}}'s, of buiten {{SITENAME}} in een <a href=\"http://encyclopedie.zoekhulp.nl/?refer=Wikipedia.nl\">andere encyclopedie</a>. Wanneer u gevonden heeft wat u zocht, kunt u wellicht daarover een artikel schrijven op {{SITENAME}} NL, zodat de volgende die zoekt wat u zocht het wel kan vinden.
",
"powersearch" => "Zoeken",
"powersearchtext" => "
@@ -399,8 +411,8 @@ Het kan natuurlijk dat er gewoon nog geen artikel aanwezig op Wikipedia NL over
$1<br>
$2 Toon redirects &nbsp; Zoek: $3 $9",
"searchdisabled" => "Wegens een overbelasting van de server zijn sommige functies die het systeem extra belasten tijdelijk niet beschikbaar.
- Hierdoor is in de interne zoekfunctie van Wikipedia (vermoedelijk) niet beschikbaar voor onbepaalde duur.<p>
-Via google kunt u zoeken op Wikipedia. <br>
+ Hierdoor is in de interne zoekfunctie van {{SITENAME}} (vermoedelijk) niet beschikbaar voor onbepaalde duur.<p>
+Via google kunt u zoeken op {{SITENAME}}. <br>
<form method=\"get\" action=\"http://www.google.com/search\">
<table bgcolor=\"#ffffff\" style=\"width: 752px; height: 76px;\"><tbody><tr><td>
<a href=\"http://www.google.com/\">
@@ -408,16 +420,16 @@ Via google kunt u zoeken op Wikipedia. <br>
</td>
<td>
<input type=\"text\" name=\"q\" size=\"31\" maxlength=\"255\" value=\"\">
-<input type=\"submit\" name=\"btnG\" value=\"Met Google zoeken in Wikipedia\">
+<input type=\"submit\" name=\"btnG\" value=\"Met Google zoeken in {{SITENAME}}\">
<font size=\"-1\">
-<input type=\"hidden\" name=\"domains\" value=\"http://nl.wikipedia.org\"><br><input type=\"radio\" name=\"sitesearch\" value=\"\">Het volledige internet<input type=\"radio\" name=\"sitesearch\" value=\"http://nl.wikipedia.org\" checked=\"checked\">Wikipedia NL<br>
+<input type=\"hidden\" name=\"domains\" value=\"http://nl.wikipedia.org\"><br><input type=\"radio\" name=\"sitesearch\" value=\"\">Het volledige internet<input type=\"radio\" name=\"sitesearch\" value=\"http://nl.wikipedia.org\" checked=\"checked\">{{SITENAME}} NL<br>
</font>
</td></tr></tbody></table>
</form>
<p> U zal niet alle artikels kunnen vinden maar het zal niet veel schelen.
-Als u zoekt via google op Wikipedia zal u ook treffers vinden op Wikipedia die geen artikels zijn.
-Wikipedia heeft bij de meeste artikels ook een \"overlegpagina\" en diverse soorten dienstpagina's.
-Enkel de pagina's die geen prefix (zoals Wikipedia:, Gebruiker: of Overleg:) hebben zijn artikels.
+Als u zoekt via google op {{SITENAME}} zal u ook treffers vinden op {{SITENAME}} die geen artikels zijn.
+{{SITENAME}} heeft bij de meeste artikels ook een \"overlegpagina\" en diverse soorten dienstpagina's.
+Enkel de pagina's die geen prefix (zoals {{ns:4}}:, Gebruiker: of Overleg:) hebben zijn artikels.
",
"blanknamespace" => "(encyclopedie)",
@@ -429,11 +441,11 @@ Enkel de pagina's die geen prefix (zoals Wikipedia:, Gebruiker: of Overleg:) heb
wfLocalUrl( "Special:Userlogin" ) . "\">aangemeld</a> te zijn om voorkeuren te kunnen instellen.",
"prefslogintext" => "U bent aangemeld als \"$1\". Uw interne identificatienummer is $2.
-Een beschrijving van de verschillende opties staat op [[Wikipedia:Voorkeuren]].",
+Een beschrijving van de verschillende opties staat op [[{{ns:4}}:Voorkeuren]].",
"prefsreset" => "Standaardvoorkeuren hersteld.",
"qbsettings" => "Menubalkinstellingen",
"changepassword" => "Wachtwoord wijzigen",
-"skin" => "Wikipedia-Uiterlijk",
+"skin" => "{{SITENAME}}-Uiterlijk",
"math" => "Wiskundige formules",
"math_failure" => "Wiskundige formule niet begrijpelijk",
"math_unknown_error" => "Onbekende fout in formule",
@@ -457,10 +469,10 @@ Een beschrijving van de verschillende opties staat op [[Wikipedia:Voorkeuren]]."
"stubthreshold" => "Grootte waaronder een pagina als 'stub' wordt aangegeven",
"recentchangescount" => "Aantal titels in lijst recente wijzigingen",
"savedprefs" => "Uw voorkeuren zijn opgeslagen.",
-"timezonetext" => "De tijd van de server is UTC (Coordinated Universal Time) Geef aan hoeveel uur de plaatselijke tijd in uw woonplaats verschilt met die van de server. Voor o.a. België en Nederland: +1 (+2 zomertijd); voor Suriname en voor de Nederlandse Antillen: -4; voor Zuid-Afrika: +2.",
+"timezonetext" => "De tijd van de server is UTC (Coordinated Universal Time) Geef aan hoeveel uur de plaatselijke tijd in uw woonplaats verschilt met die van de server. Voor o.a. België en Nederland: +1 (+2 zomertijd); voor Suriname en voor de Nederlandse Antillen: -4; voor Zuid-Afrika: +2.",
"localtime" => "Plaatselijke tijd",
"timezoneoffset" => "Tijdsverschil",
-"servertime" => "De locale tijd van de Wikipedia-server:",
+"servertime" => "De locale tijd van de {{SITENAME}}-server:",
"guesstimezone" => "Vanuit de browser toe te voegen",
"emailflag" => "E-mail ontvangen van andere gebruikers uitschakelen",
"defaultns" => "Naamruimten om direct in te zoeken:",
@@ -469,9 +481,9 @@ Een beschrijving van de verschillende opties staat op [[Wikipedia:Voorkeuren]]."
# Recente wijzigingen
"changes" => "wijzigingen",
"recentchanges" => "Recente wijzigingen",
-"recentchangestext" => "Deze pagina toont de laatste aanpassingen aan artikelen van Wikipedia NL. <br>
-Ben je hier nieuw? Lees dan ook [[Wikipedia:Welkom voor nieuwelingen|Welkom voor nieuwelingen]] -- Wil je een pagina verwijderd hebben? Ga dan naar [[Wikipedia:Te verwijderen pagina's|Te verwijderen pagina's]] -- Wil je iets met andere gebruikers overleggen? Ga naar [[Wikipedia:Overleg gewenst|Overleg gewenst]] of meld je aan voor de discussielijst [http://mail.wikipedia.org/mailman/listinfo/wikinl-l WikiNL-l] -- Zin in een gezellige babbel? Kom naar de [[Wikipedia:De kroeg|De kroeg]] of doe mee op ons nieuwe [http://chat.wikipedia.be Wiki-chatkanaal].<p>
-Om Wikipedia te laten slagen is het erg belangrijk geen materiaal toe te voegen waarop iemand anders auteursrechten heeft, tenzij je daartoe toestemming hebt. De wettelijke gevolgen van inbreuk op de rechten van anderen zouden de hele onderneming grote schade kunnen toebrengen.",
+"recentchangestext" => "Deze pagina toont de laatste aanpassingen aan artikelen van {{SITENAME}} NL. <br>
+Ben je hier nieuw? Lees dan ook [[{{ns:4}}:Welkom voor nieuwelingen|Welkom voor nieuwelingen]] -- Wil je een pagina verwijderd hebben? Ga dan naar [[{{ns:4}}:Te verwijderen pagina's|Te verwijderen pagina's]] -- Wil je iets met andere gebruikers overleggen? Ga naar [[{{ns:4}}:Overleg gewenst|Overleg gewenst]] of meld je aan voor de discussielijst [http://mail.wikipedia.org/mailman/listinfo/wikinl-l WikiNL-l] -- Zin in een gezellige babbel? Kom naar de [[{{ns:4}}:De kroeg|De kroeg]] of doe mee op ons nieuwe [http://chat.wikipedia.be Wiki-chatkanaal].<p>
+Om {{SITENAME}} te laten slagen is het erg belangrijk geen materiaal toe te voegen waarop iemand anders auteursrechten heeft, tenzij je daartoe toestemming hebt. De wettelijke gevolgen van inbreuk op de rechten van anderen zouden de hele onderneming grote schade kunnen toebrengen.",
"rcloaderr" => "Meest recente wijzigingen laden",
"rcnote" => "Hieronder zijn de <strong>$1</strong> laatste wijzigingen gedaan in de laatste <strong>$2</strong> dagen.",
"rcnotefrom" => "Veranderingen sinds <b>$2</b> (met een maximum van <b>$1</b> veranderingen).",
@@ -503,16 +515,16 @@ om bestanden te uploaden.",
"uploadfile" => "upload bestand",
"uploaderror" => "upload fout",
"uploadtext" => "<strong>STOP!</strong> Voor u iets hier upload,
-wees zeker dat het in overeenkomst is met het Wikipedia NL <a href=\"" .
-wfLocalUrlE( "Wikipedia:Beleid_voor_gebruik_van_afbeeldingen" ) . "\">afbeeldingsbeleid</a>.
+wees zeker dat het in overeenkomst is met het {{SITENAME}} NL <a href=\"" .
+wfLocalUrlE( "{{ns:4}}:Beleid_voor_gebruik_van_afbeeldingen" ) . "\">afbeeldingsbeleid</a>.
<p>Om de reeds ge-uploade bestanden te bekijken of te zoeken ga naar de <a href=\"" . wfLocalUrlE( "Speciaal:Imagelist" ) .
"\">lijst van ge-uploade bestanden</a>.
Uploads en verwijderingen worden bijgehouden in het <a href=\"" .
-wfLocalUrlE( "Wikipedia:Upload_logboek" ) . "\">upload logboek</a>.
+wfLocalUrlE( "{{ns:4}}:Upload_logboek" ) . "\">upload logboek</a>.
<p>Gebruik het onderstaande formulier om bestanden zoals afbeeldingen en geluidsbestanden die relevant zijn voor uw artikel te u-loaden. Bij de meeste browers zoals 'Internet Explorer' en 'Mozilla' zult u een \"Bladeren...\" of \"Browse..\" knop zien die een standaard dialoogscherm van uw bestuuringssysteem oproept. Kiest u een bestand, dan zal het ingevuld worden in het veld naast de \"Bladeren...\" knop. U dient ook het vakje aan te vinken waarmee u bevestigt dat er geen schending van auteursrechten plaatsvindt door het gebruik van dat bestand. Vul het veld \"Omschrijving\" in. Druk op de \"Upload\" knop om het uploaden te voltooien. Dit kan even duren als u een langzame internetverbinding gebruikt.
<p>Gebruik bij voorkeur JPEG voor foto's, PNG voor tekeningen en dergelijke en OGG voor geluid.
Geef uw bestanden een duidelijk omschrijvende naam om verwarring te voorkomen. Om het bestand in een pagina te laten verschijnen, kunt u het volgende doen; <b>[[afbeelding:uw_foto.jpg]]</b> of <b>[[afbeelding:uw_logo.png|alt text]]</b> of <b>[[media:uw_geluid.ogg]]</b> voor audio.
-<p>Vergeet niet dat net als met andere pagina's op Wikipedia anderen de ge-uploade bestanden kunnen verwijderen indien men denkt dat dat in het voordeel van het project is. Bij misbruik van dit systeem kan u de toegang tot Wikipedia NL ontzegd worden.",
+<p>Vergeet niet dat net als met andere pagina's op {{SITENAME}} anderen de ge-uploade bestanden kunnen verwijderen indien men denkt dat dat in het voordeel van het project is. Bij misbruik van dit systeem kan u de toegang tot {{SITENAME}} NL ontzegd worden.",
"uploadlog" => "upload logboek",
"uploadlogpage" => "Upload_logboek",
"uploadlogpagetext" => "Hieronder de lijst met de meest recent ge-uploade bestanden. Alle tijden zijn servertijd (UTC).
@@ -524,8 +536,8 @@ Geef uw bestanden een duidelijk omschrijvende naam om verwarring te voorkomen. O
"filestatus" => "Auteursrechtensituatie",
"filesource" => "Auteur/bron",
"affirmation" => "Ik verklaar dat de eigenaar van de rechten op dit bestand toestemt om het onder de voorwaarden van $1 te verspreiden.",
-"copyrightpage" => "Wikipedia:Auteursrechten",
-"copyrightpagename" => "Wikipedia NL auteursrechten",
+"copyrightpage" => "{{ns:4}}:Auteursrechten",
+"copyrightpagename" => "{{SITENAME}} NL auteursrechten",
"uploadedfiles" => "Ge-uploade bestanden",
"noaffirmation" => "U dient te bevestigen dat deze handeling geen inbreuk maakt op auteursrechten.",
"ignorewarning" => "Negeer de waarschuwing en sla het bestand op.",
@@ -567,20 +579,20 @@ Geef uw bestanden een duidelijk omschrijvende naam om verwarring te voorkomen. O
# Statistics
# Statistieken
"statistics" => "Statistieken",
-"sitestats" => "Statistieken betreffende Wikipedia NL",
+"sitestats" => "Statistieken betreffende {{SITENAME}} NL",
"userstats" => "Statistieken betreffende gebruikers",
-"sitestatstext" => "Er zijn <b>$1</b> pagina's in de database. Hierbij zijn inbegrepen \"Overleg\" pagina's, pagina's over Wikipedia, extreem korte \"stub\" pagina's, redirects, en diverse andere pagina's die waarschijnlijk niet als artikel moeten worden geteld. Na uitsluiting daarvan, is er een geschat aantal van <b>$2</b> artikels.<p>
+"sitestatstext" => "Er zijn <b>$1</b> pagina's in de database. Hierbij zijn inbegrepen \"Overleg\" pagina's, pagina's over {{SITENAME}}, extreem korte \"stub\" pagina's, redirects, en diverse andere pagina's die waarschijnlijk niet als artikel moeten worden geteld. Na uitsluiting daarvan, is er een geschat aantal van <b>$2</b> artikels.<p>
Er is in totaal $3 maal een pagina bekeken, en $4 maal een pagina bewerkt. Dat geeft een gemiddelde van $5 bewerkingen per pagina, en $6 paginabezoeken per wijziging.",
"userstatstext" => "Er zijn momenteel $1 geregistreerde gebruikers; hiervan zijn er $2 systeembeheerders (zie $3).",
# Maintenance Page
#
"maintenance" => "Onderhoudspagina",
-"maintnancepagetext" => "Op deze pagina vindt u een aantal handige zoekopdrachten om kleine alledaagse problemen in de Wikipedia te verhelpen. Sommige van deze zoekopdrachten vormen een grote belasting voor de database; ga dus niet na elke paar pagina's die u hersteld heeft, de pagina opnieuw laden.",
+"maintnancepagetext" => "Op deze pagina vindt u een aantal handige zoekopdrachten om kleine alledaagse problemen in de {{SITENAME}} te verhelpen. Sommige van deze zoekopdrachten vormen een grote belasting voor de database; ga dus niet na elke paar pagina's die u hersteld heeft, de pagina opnieuw laden.",
"maintenancebacklink" => "Terug naar de Onderhoudspagina",
"disambiguations" => "Doorverwijspagina's",
-"disambiguationspage" => "Wikipedia:Doorverwijspagina",
-"disambiguationstext" => "De onderstaande artikelen verwijzen naar een [[Wikipedia:Doorverwijspagina|doorverwijspagina]]. Deze zouden waarschijnlijk direct naar de onderwerpspagina moeten verwijzen. <br>Als doorverwijspagina's worden die pagina's beschouwd waar vanaf $1 naar verwezen wordt.<br>Opmerking: Deze lijst toont alleen pagina's vanuit de hoofdnaamruimte, en dus niet Overlegpagina's, Wikipedia:pagina's en dergelijke.",
+"disambiguationspage" => "{{ns:4}}:Doorverwijspagina",
+"disambiguationstext" => "De onderstaande artikelen verwijzen naar een [[{{ns:4}}:Doorverwijspagina|doorverwijspagina]]. Deze zouden waarschijnlijk direct naar de onderwerpspagina moeten verwijzen. <br>Als doorverwijspagina's worden die pagina's beschouwd waar vanaf $1 naar verwezen wordt.<br>Opmerking: Deze lijst toont alleen pagina's vanuit de hoofdnaamruimte, en dus niet Overlegpagina's, {{ns:4}}:pagina's en dergelijke.",
"doubleredirects" => "Dubbele redirects",
"doubleredirectstext" => "<b>Let op:</b> Er kunnen in deze lijst redirects staan die er niet in thuishoren. Dat komt over het algemeen doordat er na de #REDIRECT nog andere links op de pagina staan.<br>\nOp elke regel vindt u de eerste redirectpagina, de tweede redirectpagina en de eerste regel van de tweede redirectpagina. Normaal gesproken bevat deze laatste de pagina waar de eerste redirect naartoe zou moeten verwijzen.",
"brokenredirects" => "Gebroken redirects",
@@ -620,9 +632,9 @@ Er is in totaal $3 maal een pagina bekeken, en $4 maal een pagina bewerkt. Dat g
"ancientpages" => "Oudste artikels",
#"intl" => "Taallinks", - not active yet
"movethispage" => "Verplaats deze pagina",
-"unusedimagestext" => "<p>Let op! Het zou kunnen dat er via een directe link verwezen wordt naar een afbeelding, bijvoorbeeld vanuit een anderstalige Wikipedia. Het is daarom mogelijk dat een afbeelding hier vermeld staat terwijl het wel degelijk gebruikt wordt.",
+"unusedimagestext" => "<p>Let op! Het zou kunnen dat er via een directe link verwezen wordt naar een afbeelding, bijvoorbeeld vanuit een anderstalige {{SITENAME}}. Het is daarom mogelijk dat een afbeelding hier vermeld staat terwijl het wel degelijk gebruikt wordt.",
"booksources" => "Boekhandels",
-"booksourcetext" => "Hieronder is een lijst van externe websites die boeken verkopen en ook verdere informatie hierover kunnen verstekken. Via een ISBN-nummer in een artikel kunt u via deze pagina een werk opzoeken. <p>Deze dienst is enkel ter uwer informatie. Wikipedia NL heeft <u>geen enkele</u> relatie met deze websites.",
+"booksourcetext" => "Hieronder is een lijst van externe websites die boeken verkopen en ook verdere informatie hierover kunnen verstekken. Via een ISBN-nummer in een artikel kunt u via deze pagina een werk opzoeken. <p>Deze dienst is enkel ter uwer informatie. {{SITENAME}} NL heeft <u>geen enkele</u> relatie met deze websites.",
"alphaindexline" => "$1 tot $2",
# Email this user
@@ -695,7 +707,7 @@ op 'Verwijderen' onderaan deze pagina.",
"confirmdelete" => "Bevestig verwijdering",
"deletesub" => "(Verwijderen \"$1\")",
"historywarning" => "Waarschuwing: Deze pagina heeft een voorgeschiedenis. Overtuig uzelf ervan dat geen van de oudere versies een te behouden pagina is.",
-"confirmdeletetext" => "U bent staat op het punt een pagina of afbeelding voorgoed te verwijderen. Dit verwijdert alle inhoud en geschiedenis van de database. Bevestig hieronder dat dit inderdaad uw bedoeling is, dat u de gevolgen begrijpt, en dat uw verwijdering overeenkomt met de [[Wikipedia:Instructies]].",
+"confirmdeletetext" => "U bent staat op het punt een pagina of afbeelding voorgoed te verwijderen. Dit verwijdert alle inhoud en geschiedenis van de database. Bevestig hieronder dat dit inderdaad uw bedoeling is, dat u de gevolgen begrijpt, en dat uw verwijdering overeenkomt met de [[{{ns:4}}:Instructies]].",
"confirmcheck" => "Ja, ik wil dit voorgoed verwijderen.",
"actioncomplete" => "Actie voltooid",
"deletedtext" => "\"$1\" is verwijderd. Zie $2 voor een overzicht van recente verwijderingen.",
@@ -724,7 +736,7 @@ op 'Verwijderen' onderaan deze pagina.",
"undeleterevision" => "Verwijderde versie van $1",
"undeletebtn" => "Terugplaatsen!",
"undeletedarticle" => "\"$1\" is teruggeplaatst.",
-"undeletedtext" =>"Het artikel [[$1]] is teruggeplaatst. Zie [[Wikipedia:Logboek verwijderde pagina's]] voor een lijst van de meest recente verwijderingen en terugplaatsingen.",
+"undeletedtext" =>"Het artikel [[$1]] is teruggeplaatst. Zie [[{{ns:4}}:Logboek verwijderde pagina's]] voor een lijst van de meest recente verwijderingen en terugplaatsingen.",
# Contributions
# Bijdragen
@@ -782,18 +794,18 @@ Zie de [[speciaal:Ipblocklist|Lijst van geblokkeerde IP-adressen]].",
"locknoconfirm" => "U heeft niet het vakje aangevinkt om uw keuze te bevestigen.",
"lockdbsuccesssub" => "Blokkering database succesvol",
"unlockdbsuccesssub" => "Blokkering van de database opgeheven",
-"lockdbsuccesstext" => "De database van Wikipedia NL is geblokkeerd.
+"lockdbsuccesstext" => "De database van {{SITENAME}} NL is geblokkeerd.
Vergeet niet de database opnieuw te de-blokkeren zodra u klaar bent met uw onderhoud.",
-"unlockdbsuccesstext" => "Blokkering van de database van Wikipedia NL is opgeheven.",
+"unlockdbsuccesstext" => "Blokkering van de database van {{SITENAME}} NL is opgeheven.",
# SQL query
# SQL raadplegen
"asksql" => "SQL raadplegen",
-"asksqltext" => "Gebruik het onderstaande formulier om een direct verzoek naar de database van Wikipedia NL te zenden. Gebruik enkelvoudige aanhalingstekens ('zoals hier') voor letterlijke teksten. Een ingewikkelde aanvraag kan de sever vaak extra belasten. Gelieve deze mogelijkheid daarom spaarzaam te gebruiken. Zie ook: [[Wikipedia:SQL opdrachten]].",
+"asksqltext" => "Gebruik het onderstaande formulier om een direct verzoek naar de database van {{SITENAME}} NL te zenden. Gebruik enkelvoudige aanhalingstekens ('zoals hier') voor letterlijke teksten. Een ingewikkelde aanvraag kan de sever vaak extra belasten. Gelieve deze mogelijkheid daarom spaarzaam te gebruiken. Zie ook: [[{{ns:4}}:SQL opdrachten]].",
"sqlislogged" => "Alle SQL Queries worden gelogd.",
"sqlquery" => "Voer opdracht in",
"querybtn" => "Verstuur opdracht",
-"selectonly" => "Opdrachten anders dan \"SELECT\" zijn voorbehouden aan Wikipedia ontwikkelaars.",
+"selectonly" => "Opdrachten anders dan \"SELECT\" zijn voorbehouden aan {{SITENAME}} ontwikkelaars.",
"querysuccessful" => "Opdracht succesvol",
# Move page
@@ -822,157 +834,128 @@ te zijn om een pagina te verplaatsen.",
);
-class LanguageNl extends Language {
-
- function getDefaultUserOptions () {
- $opt = Language::getDefaultUserOptions();
- $opt["date"]=2;
- return $opt;
- }
-
- function getBookstoreList () {
- global $wgBookstoreListEn ; # No locals defined... yet
- return $wgBookstoreListEn ;
- }
-
- function getNamespaces() {
- global $wgNamespaceNamesNl;
- return $wgNamespaceNamesNl;
- }
-
- function getNsText( $index ) {
- global $wgNamespaceNamesNl;
- return $wgNamespaceNamesNl[$index];
- }
-
- function getNsIndex( $text ) {
- global $wgNamespaceNamesNl;
-
- foreach ( $wgNamespaceNamesNl as $i => $n ) {
- if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
- }
- return false;
- }
-
- # Inherit specialPage()
-
- function getQuickbarSettings() {
- global $wgQuickbarSettingsNl;
- return $wgQuickbarSettingsNl;
- }
-
- function getSkinNames() {
- global $wgSkinNamesNl;
- return $wgSkinNamesNl;
- }
-
- function getMathNames() {
- global $wgMathNamesNl;
- return $wgMathNamesNl;
- }
-
- function getDateFormats(){
- global $wgDateFormatsNl;
- return $wgDateFormatsNl;
- }
-
- function getUserToggles() {
- global $wgUserTogglesNl;
- return $wgUserTogglesNl;
- }
-
- function getMonthName( $key )
- {
- global $wgMonthNamesNl;
- return $wgMonthNamesNl[$key-1];
- }
-
- /* by default we just return base form; this should be ok for Nl */
-
- function getMonthNameGen( $key )
- {
- global $wgMonthNamesNl;
- return $wgMonthNamesNl[$key-1];
- }
-
- function getMonthRegex()
- {
- global $wgMonthNamesNl;
-
- return implode( "|", $wgMonthNamesNl );
- }
-
-
- function getMonthAbbreviation( $key )
- {
- global $wgMonthAbbreviationsNl;
-
- return $wgMonthAbbreviationsNl[$key-1];
- }
-
- function getWeekdayName( $key )
- {
- global $wgWeekdayNamesNl;
- return $wgWeekdayNamesNl[$key-1];
- }
-
- # Inherit userAdjust()
-
- function date( $ts, $adj = false )
- {
- if ( $adj ) { $ts = $this->userAdjust( $ts ); }
-
- $d = (0 + substr( $ts, 6, 2 )) . " " .
- $this->getMonthAbbreviation( substr( $ts, 4, 2 ) ) . " " .
- substr( $ts, 0, 4 );
- return $d;
- }
-
- function time( $ts, $adj = false )
- {
- if ( $adj ) { $ts = $this->userAdjust( $ts ); }
-
- $t = substr( $ts, 8, 2 ) . ":" . substr( $ts, 10, 2 );
- return $t;
- }
-
- function timeanddate( $ts, $adj = false )
- {
- return $this->date( $ts, $adj ) . " " . $this->time( $ts, $adj );
- }
-
- function getValidSpecialPages()
- {
- global $wgValidSpecialPagesNl;
- return $wgValidSpecialPagesNl;
- }
-
-
- function getSysopSpecialPages()
- {
- global $wgSysopSpecialPagesNl;
- return $wgSysopSpecialPagesNl;
- }
-
- function getDeveloperSpecialPages()
- {
- global $wgDeveloperSpecialPagesNl;
- return $wgDeveloperSpecialPagesNl;
- }
-
- function getMessage( $key )
- {
- global $wgAllMessagesNl, $wgAllMessagesEn;
- $m = $wgAllMessagesNl[$key];
-
- if ( "" == $m ) { return $wgAllMessagesEn[$key]; }
- else return $m;
- }
-
- function isRTL() { return false; }
-
- # Inherit iconv(), ucfirst(), stripForSearch(), recodeForEdit(), recodeInput()
- # since they are same as English/Latin1
+class LanguageNl extends LanguageUtf8 {
+
+ function getDefaultUserOptions () {
+ $opt = Language::getDefaultUserOptions();
+ $opt["date"]=2;
+ return $opt;
+ }
+
+ function getNamespaces() {
+ global $wgNamespaceNamesNl;
+ return $wgNamespaceNamesNl;
+ }
+
+ function getNsText( $index ) {
+ global $wgNamespaceNamesNl;
+ return $wgNamespaceNamesNl[$index];
+ }
+
+ function getNsIndex( $text ) {
+ global $wgNamespaceNamesNl;
+
+ foreach ( $wgNamespaceNamesNl as $i => $n ) {
+ if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
+ }
+ return false;
+ }
+
+ # Inherit specialPage()
+
+ function getQuickbarSettings() {
+ global $wgQuickbarSettingsNl;
+ return $wgQuickbarSettingsNl;
+ }
+
+ function getSkinNames() {
+ global $wgSkinNamesNl;
+ return $wgSkinNamesNl;
+ }
+
+ function getMathNames() {
+ global $wgMathNamesNl;
+ return $wgMathNamesNl;
+ }
+
+ function getUserToggles() {
+ global $wgUserTogglesNl;
+ return $wgUserTogglesNl;
+ }
+
+ function getMonthName( $key ) {
+ global $wgMonthNamesNl;
+ return $wgMonthNamesNl[$key-1];
+ }
+
+ function getMonthRegex() {
+ global $wgMonthNamesNl;
+ return implode( "|", $wgMonthNamesNl );
+ }
+
+
+ function getMonthAbbreviation( $key ) {
+ global $wgMonthAbbreviationsNl;
+ return $wgMonthAbbreviationsNl[$key-1];
+ }
+
+ function getWeekdayName( $key ) {
+ global $wgWeekdayNamesNl;
+ return $wgWeekdayNamesNl[$key-1];
+ }
+
+ # Inherit userAdjust()
+
+ function date( $ts, $adj = false ) {
+ if ( $adj ) { $ts = $this->userAdjust( $ts ); }
+
+ $d = (0 + substr( $ts, 6, 2 )) . " " .
+ $this->getMonthAbbreviation( substr( $ts, 4, 2 ) ) . " " .
+ substr( $ts, 0, 4 );
+ return $d;
+ }
+
+ function time( $ts, $adj = false ) {
+ if ( $adj ) { $ts = $this->userAdjust( $ts ); }
+
+ $t = substr( $ts, 8, 2 ) . ":" . substr( $ts, 10, 2 );
+ return $t;
+ }
+
+ function timeanddate( $ts, $adj = false ) {
+ return $this->date( $ts, $adj ) . " " . $this->time( $ts, $adj );
+ }
+
+ function getValidSpecialPages() {
+ global $wgValidSpecialPagesNl;
+ return $wgValidSpecialPagesNl;
+ }
+
+
+ function getSysopSpecialPages() {
+ global $wgSysopSpecialPagesNl;
+ return $wgSysopSpecialPagesNl;
+ }
+
+ function getDeveloperSpecialPages() {
+ global $wgDeveloperSpecialPagesNl;
+ return $wgDeveloperSpecialPagesNl;
+ }
+
+ function getMessage( $key ) {
+ global $wgAllMessagesNl;
+ if( isset( $wgAllMessagesNl[$key] ) ) {
+ return $wgAllMessagesNl[$key];
+ } else {
+ return "";
+ }
+ }
+
+ function isRTL() { return false; }
+
+ # Inherit iconv(), ucfirst(), stripForSearch(), recodeForEdit(), recodeInput()
+ # since they are same as English/Latin1
}
+
?>
diff --git a/languages/LanguageNo.php b/languages/LanguageNo.php
index f61cf40a1546..075cd0226a0b 100644
--- a/languages/LanguageNo.php
+++ b/languages/LanguageNo.php
@@ -8,21 +8,24 @@
# encapsulates some of the magic-ness.
#
/* private */ $wgNamespaceNamesNo = array(
- -2 => "Medium",
- -1 => "Spesial",
- 0 => "",
- 1 => "Diskusjon",
- 2 => "Bruker",
- 3 => "Brukerdiskusjon",
- 4 => "Wikipedia",
- 5 => "Wikipedia-diskusjon",
- 6 => "Bilde",
- 7 => "Bildediskusjon",
- 8 => "MediaWiki",
- 9 => "MediaWiki-diskusjon",
- 10 => "Template",
- 11 => "Template_talk"
-
+ NS_MEDIA => "Medium",
+ NS_SPECIAL => "Spesial",
+ NS_MAIN => "",
+ NS_TALK => "Diskusjon",
+ NS_USER => "Bruker",
+ NS_USER_TALK => "Brukerdiskusjon",
+ NS_WIKIPEDIA => "Wikipedia",
+ NS_WIKIPEDIA_TALK => "Wikipedia-diskusjon",
+ NS_IMAGE => "Bilde",
+ NS_IMAGE_TALK => "Bildediskusjon",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "MediaWiki-diskusjon",
+ NS_TEMPLATE => "Mal",
+ NS_TEMPLATE_TALK => "Maldiskusjon",
+ NS_HELP => "Hjelp",
+ NS_HELP_TALK => "Hjelpdiskusjon",
+ NS_CATEGORY => "Kategori",
+ NS_CATEGORY_TALK => "Kategoridiskusjon",
);
/* private */ $wgQuickbarSettingsNo = array(
@@ -37,7 +40,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesNo = array(
@@ -1159,8 +1163,12 @@ class LanguageNo extends LanguageUtf8 {
function getMessage( $key )
{
- global $wgAllMessagesNo;
- return $wgAllMessagesNo[$key];
+ global $wgAllMessagesNo;
+ if( isset( $wgAllMessagesNo[$key] ) ) {
+ return $wgAllMessagesNo[$key];
+ } else {
+ return ""; # ??
+ }
}
# Inherit ucfirst()
diff --git a/languages/LanguageOc.php b/languages/LanguageOc.php
index c2249b8a8bfd..2754fa55e36d 100644
--- a/languages/LanguageOc.php
+++ b/languages/LanguageOc.php
@@ -35,7 +35,8 @@ require_once( "LanguageUtf8.php" );
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesOc = array(
diff --git a/languages/LanguagePl.php b/languages/LanguagePl.php
index 76ef80b6642d..8a78dad656c3 100644
--- a/languages/LanguagePl.php
+++ b/languages/LanguagePl.php
@@ -1,6 +1,8 @@
<?php
require_once("LanguageUtf8.php");
+# FIXME: Lots of hardcoded Wikipedia-related text needs to be cleaned up.
+
# NOTE: To turn off "Current Events" in the sidebar,
# set "currentevents" => "-"
@@ -8,21 +10,35 @@ require_once("LanguageUtf8.php");
# are magical, so don't change or move them! The Namespace class
# encapsulates some of the magic-ness.
#
+
+# Yucky hardcoding hack:
+if( $wgMetaNamespace == "Wikipedia" ) {
+ $wgMetaTalkNamespace = "Dyskusja_Wikipedii";
+} elseif( $wgMetaNamespace == "Wikisłownik" ) {
+ $wgMetaTalkNamespace = "Wikidyskusja";
+} else {
+ $wgMetaTalkNamespace = "Dyskusja_$wgMetaNamespace";
+}
+
/* private */ $wgNamespaceNamesPl = array(
- -2 => "Media",
- -1 => "Specjalna",
- 0 => "",
- 1 => "Dyskusja",
- 2 => "Wikipedysta",
- 3 => "Dyskusja_wikipedysty",
- 4 => "Wikipedia",
- 5 => "Dyskusja_Wikipedii",
- 6 => "Grafika",
- 7 => "Dyskusja_grafiki",
- 8 => "MediaWiki",
- 9 => "Dyskusja_MediaWiki",
- 10 => "Źródła",
- 11 => "Dyskusja źródeł"
+ NS_MEDIA => "Media",
+ NS_SPECIAL => "Specjalna",
+ NS_MAIN => "",
+ NS_TALK => "Dyskusja",
+ NS_USER => "Wikipedysta",
+ NS_USER_TALK => "Dyskusja_Wikipedysty",
+ NS_WIKIPEDIA => $wgMetaNamespace,
+ NS_WIKIPEDIA_TALK => $wgMetaTalkNamespace,
+ NS_IMAGE => "Grafika",
+ NS_IMAGE_TALK => "Dyskusja_grafiki",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "Dyskusja_MediaWiki",
+ NS_TEMPLATE => "Szablon",
+ NS_TEMPLATE_TALK => "Dyskusja_szablonu",
+ NS_HELP => "Pomoc",
+ NS_HELP_TALK => "Dyskusja_pomocy",
+ NS_CATEGORY => "Kategoria",
+ NS_CATEGORY_TALK => "Dyskusja_kategorii"
);
/* private */ $wgQuickbarSettingsPl = array(
@@ -37,7 +53,8 @@ require_once("LanguageUtf8.php");
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesPl = array(
@@ -163,18 +180,18 @@ require_once("LanguageUtf8.php");
"mainpagetext" => "Instalacja oprogramowania powiodła się.",
"about" => "O Wikipedii",
"aboutwikipedia" => "O Wikipedii",
-"aboutpage" => "Wikipedia:O_Wikipedii",
+"aboutpage" => "{{ns:4}}:O_Wikipedii",
"help" => "Pomoc",
-"helppage" => "Wikipedia:Pomoc",
-"wikititlesuffix" => "Wikipedia",
+"helppage" => "{{ns:4}}:Pomoc",
+"wikititlesuffix" => "{{SITENAME}}",
"bugreports" => "Raport o błędach",
-"bugreportspage" => "Wikipedia:Błędy",
+"bugreportspage" => "{{ns:4}}:Błędy",
"sitesupport" => "Dary pieniężne",
"sitesupportpage" => "http://wikimediafoundation.org/fundraising", # If not set, won't appear. Can be wiki page or URL
"faq" => "FAQ",
-"faqpage" => "Wikipedia:FAQ",
+"faqpage" => "{{ns:4}}:FAQ",
"edithelp" => "Pomoc w edycji",
-"edithelppage" => "Wikipedia:Jak_edytować_stronę",
+"edithelppage" => "{{ns:4}}:Jak_edytować_stronę",
"cancel" => "Anuluj",
"qbfind" => "Znajdź",
"qbbrowse" => "PrzeglÄ…danie",
@@ -214,7 +231,7 @@ require_once("LanguageUtf8.php");
"gnunote" => "udostępniana jest w oparciu o licencję <a class=internal href='/wiki/GNU_FDL'>GNU FDL</a>; możesz ją samodzielnie uzupełnić lub poprawić.",
"printsubtitle" => "(z http://pl.wikipedia.org)",
"protectedpage" => "Strona zabezpieczona",
-"administrators" => "Wikipedia:Administratorzy",
+"administrators" => "{{ns:4}}:Administratorzy",
"sysoptitle" => "Wymagane prawa dostępu administratora",
"sysoptext" => "Ta operacja może być wykonana tylko przez
użytkowania o statusie \"administrator\".
@@ -226,7 +243,7 @@ Zobacz $1.",
"nbytes" => "$1 bajtów",
"go" => "OK",
"ok" => "OK",
-"sitetitle" => "Wikipedia",
+"sitetitle" => "{{SITENAME}}",
"sitesubtitle" => "Wolna Encyklopedia",
"retrievedfrom" => "Źródło: \"$1\"",
"newmessages" => "Masz $1.",
@@ -263,7 +280,7 @@ Ostatnie, nieudane zapytanie to:
\"$1\"
wywołane zostało przez funkcję \"$2\".
MySQL zgłosił błąd \"$3: $4\".\n",
-"noconnect" => "Wikipedia ma chwilowo problemy techniczne. Nie można połączyć się z serwerem bazy danych. Przepraszamy!",
+"noconnect" => "{{SITENAME}} ma chwilowo problemy techniczne. Nie można połączyć się z serwerem bazy danych. Przepraszamy!",
"nodb" => "Nie można odnaleźć bazy danych $1",
"cachederror" => "Poniższy tekst strony jest kopią znajdującą się w pamięci podręcznej i może być już niekatualny.",
"readonly" => "Baza danych jest zablokowana",
@@ -300,7 +317,7 @@ czasu UTC. Przepraszamy!",
"perfdisabledstub" => "Oto ostatnia zapisana wersja strony z $1",
"viewsource" => "Tekst źródłowy",
"protectedtext" => "Wyłączono możliwość edycji tej strony; istnieje kilka powodów
-dla których jest to robione - zobacz [[Wikipedia:Strona_zabezpieczona]]
+dla których jest to robione - zobacz [[{{ns:4}}:Strona_zabezpieczona]]
Tekst źródłowy strony można w dalszym ciągu podejrzeć i skopiować.",
@@ -342,7 +359,7 @@ Nie zapomnij dostosować <i>preferencji</i>.",
Sprawdź pisownię lub użyj poniższego formularza by utworzyć nowe konto.",
"wrongpassword" => "Podane przez Ciebie hasło jest nieprawidłowe. Spróbuj jeszcze raz.",
"mailmypassword" => "Wyślij mi nowe hasło",
-"passwordremindertitle" => "Wikipedia przypomina o haśle",
+"passwordremindertitle" => "{{SITENAME}} przypomina o haśle",
"passwordremindertext" => "KtoÅ› (prawdopodobnie Ty, spod adresu $1)
poprosił od nas o wysłanie nowego hasła dostępu do Wikipedii.
Aktualne hasło dla użytkownika \"$2\" to \"$3\".
@@ -363,7 +380,7 @@ Po otrzymaniu go zaloguj siÄ™ ponownie.",
"blockedtitle" => "Użytkownik jest zablokowany",
"blockedtext" => "Twoje konto lub adres IP zostały zablokowane przez $1.
Podany powód to:<br>$2.<p>W celu wyjaśnienia sprawy zablokowania możesz się skontaktować z $1 lub innym
-[[Wikipedia:Administratorzy|administratorem]].",
+[[{{ns:4}}:Administratorzy|administratorem]].",
"newarticle" => "(Nowy)",
"newarticletext" => "Nie ma jeszcze artykułu o tym tytule. W poniższym polu można wpisać pierwszy jego fragment. Jeśli nie to było Twoim zamiarem, wciśnij po prostu ''Wstecz''.",
"anontalkpagetext" => "---- ''To jest strona dyskusyjna dla użytkowników
@@ -410,7 +427,7 @@ artykułu. Proponujemy przenieść jej tekst do prywatnego pliku
"protectedpagewarning" => "UWAGA: Modyfikacja tej strony została zablokowana.
Mogą ją edytować jedynie użytkownicy z prawami administracyjnymi.
Upewnij się, że postępujesz zgodnie z
-<a href='/wiki/Wikipedia:Blokowanie_stron'>zasadami dotyczÄ…cymi
+<a href='/wiki/{{ns:4}}:Blokowanie_stron'>zasadami dotyczÄ…cymi
zablokowanych stron</a>.",
@@ -442,7 +459,7 @@ Sprawdź proszę URL użyty przez Ciebie by uzyskać dostęp do tej strony.\n",
# Search results
#
"searchresults" => "Wyniki wyszukiwania",
-"searchhelppage" => "Wikipedia:Przeszukiwanie",
+"searchhelppage" => "{{ns:4}}:Przeszukiwanie",
"searchingwikipedia" => "Przeszukiwanie Wikipedii",
"searchresulttext" => "Aby dowiedzieć się więcej o przeszukiwaniu Wikipedii, zobacz $1.",
"searchquery" => "Dla zapytania \"$1\"",
@@ -511,7 +528,7 @@ value=\"{$wgServer}\" checked> {$wgServer} <br>
przez zmianÄ… swoich preferencji.",
"prefslogintext" => "Zalogowano Cię jako \"$1\". Twój numer identyfikacyjny to $2.
-Zobacz [[Wikipedia:Preferencje]], aby poznać znaczenie poszczególnych opcji.",
+Zobacz [[{{ns:4}}:Preferencje]], aby poznać znaczenie poszczególnych opcji.",
"prefsreset" => "Preferencje domyślne zostały odtworzone.",
"qbsettings" => "Pasek szybkiego dostępu",
"changepassword" => "Zmiana hasła",
@@ -553,7 +570,7 @@ lub \"1\" (czas zimowy).",
"recentchanges" => "Ostatnie zmiany",
"recentchangestext" => "Ta strona przedstawia historiÄ™ ostatnich zmian w polskiej Wikipedii.
-[[Wikipedia:Powitanie nowicjuszy|Witaj]]! Jeśli jesteś tu po raz pierwszy, zapoznaj się, proszę, z tymi stronami: [[wikipedia:FAQ|Wikipedia FAQ]], [[Wikipedia:Zasady i wskazówki|polityka Wikipedii]] (a zwłaszcza [[Wikipedia:Nazewnictwo|konwencje nazywania stron]], [[Wikipedia:Neutralny punkt widzenia|neutralny punkt widzenia]]) oraz [[Wikipedia:Najczęstsze nieporozumienia|najczęstsze nieporozumienia]].
+[[{{ns:4}}:Powitanie nowicjuszy|Witaj]]! Jeśli jesteś tu po raz pierwszy, zapoznaj się, proszę, z tymi stronami: [[{{ns:4}}:FAQ|{{SITENAME}} FAQ]], [[{{ns:4}}:Zasady i wskazówki|polityka Wikipedii]] (a zwłaszcza [[{{ns:4}}:Nazewnictwo|konwencje nazywania stron]], [[{{ns:4}}:Neutralny punkt widzenia|neutralny punkt widzenia]]) oraz [[{{ns:4}}:Najczęstsze nieporozumienia|najczęstsze nieporozumienia]].
Jeśli zależy Ci na dalszym rozwoju Wikipedii, nie dodawaj materiałów zastrzeżonych prawami autorskimi. Złamanie tej zasady mogłyby narazić projekt Wikipedii na poważne konsekwencje prawne. Zobacz także [http://meta.wikipedia.org/wiki/Special:Recentchanges ostatnie zmiany na stronach dyskusyjnych projektu].",
"rcloaderr" => "ÅadujÄ™ ostatnie zmiany",
@@ -586,15 +603,15 @@ przed przesłaniem pików.",
"uploadfile" => "Prześlij plik",
"uploaderror" => "Błąd przesyłki",
"uploadtext" => "<strong>STOP!</strong> Zanim prześlesz plik,
-przeczytaj <a href=\"" . wfLocalUrlE( "Wikipedia:Zasady_dołączania_plików" ) .
+przeczytaj <a href=\"" . wfLocalUrlE( "{{ns:4}}:Zasady_dołączania_plików" ) .
"\">zasady dołączania plików</a> i upewnij się, że przesyłając pozostaniesz z
nimi w zgodzie.
<p>Jeśli chcesz przejrzeć lub przeszukać dotychczas przesłane pliki,
przejdź do <a href=\"" . wfLocalUrlE( "Specjalna:Imagelist" ) .
"\">listy dołączonych plików</a>.
Wszystkie przesyłki i skasowania są odnotowane na
-specjalnych wykazach (<a href=\"" . wfLocalUrlE( "Wikipedia:Dołączone" ) .
-"\">dołączone</a>, <a href=\"" . wfLocalUrlE( "Wikipedia:Usunięte" ) .
+specjalnych wykazach (<a href=\"" . wfLocalUrlE( "{{ns:4}}:Dołączone" ) .
+"\">dołączone</a>, <a href=\"" . wfLocalUrlE( "{{ns:4}}:Usunięte" ) .
"\">usunięte</a>).
<p>By przesłać nowy plik mający zilustrować Twój artykuł skorzystaj
z poniższego formularza.
@@ -627,7 +644,7 @@ Wszystkie czasy odnoszÄ… siÄ™ do strefy czasu uniwersalnego (UTC).
"filedesc" => "Opis",
"affirmation" => "Potwierdzam, że właściciel praw autorskich do tego pliku
zgadza się udzielić licencji zgodnie z $1.",
-"copyrightpage" => "Wikipedia:Prawa_autorskie",
+"copyrightpage" => "{{ns:4}}:Prawa_autorskie",
"copyrightpagename" => "prawami autorskimi Wikipedii",
"uploadedfiles" => "Przesłane pliki",
"noaffirmation" => "Musisz potwierdzić, że Twoja przesyłka nie narusza żadnych
@@ -696,7 +713,7 @@ pomagających w prostej administracji. Niektóre z nich obciążają bazę danyc
więc, by ich nie nadużywać.",
"maintenancebacklink" => "Powrót do strony prostej administracji",
"disambiguations" => "Strony ujednoznaczniajÄ…ce",
-"disambiguationspage" => "Wikipedia:Strony_ujednoznaczniajÄ…ce",
+"disambiguationspage" => "{{ns:4}}:Strony_ujednoznaczniajÄ…ce",
"disambiguationstext" => "Poniższe artykuły odwołują się do <i>stron
ujednoznaczniających</i>, a powinny odwoływać się bezpośrednio do hasła
związanego z treścią artykułu.<br>Strona uznawana jest za ujednoznaczniającą
@@ -760,7 +777,7 @@ na tej liście mimo, że żadna strona tej Wikipedii nie odwołuje się do nich.
"booksourcetext" => "Oto lista linków do innych witryn,
które pośredniczą w sprzedaży nowych i używanych książek i mogą podać
informacje o książkach, których szukasz.
-Wikipedia nie jest stowarzyszona z żadnym ze sprzedawców,
+{{SITENAME}} nie jest stowarzyszona z żadnym ze sprzedawców,
a ta lista nie powinna być interpretowana jako świadectwo udziału w zyskach.",
"alphaindexline" => "$1 --> $2",
@@ -847,7 +864,7 @@ Zaznacz, które z nich mamy usunąć z listy i kliknij przycisk
lub plik z bazy danych razem z dotyczÄ…cÄ… ich historiÄ….
Potwierdź, proszę, swoje zamiary, tzn., że rozumiesz konsekwencje,
i że robisz to w zgodzie z
-[[Wikipedia:Zasady i wskazówki|zasadami Wikipedii]].",
+[[{{ns:4}}:Zasady i wskazówki|zasadami Wikipedii]].",
"confirmcheck" => "Tak, naprawdę chcę usunąć.",
"actioncomplete" => "Operacja wykonana",
@@ -892,7 +909,7 @@ pozostanie bez zmian.",
"undeletebtn" => "Odtwórz!",
"undeletedarticle" => "odtworzono \"$1\"",
"undeletedtext" => "Pomyślnie odtworzono stronę [[$1]].
-Zobacz [[Wikipedia:Usunięte]], jeśli chcesz przejrzeć rejestr ostatnio
+Zobacz [[{{ns:4}}:Usunięte]], jeśli chcesz przejrzeć rejestr ostatnio
skasowanych i odtworzonych stron.",
# Contributions
@@ -924,7 +941,7 @@ ta operacja ma być wykonana.",
"blockiptext" => "Użyj poniższego formularza aby zablokować prawo
zapisu spod określonego adresu IP.
Powinno się to robić jedynie by zapobiec wandalizmowi, a zarazem
-w zgodzie z [[Wikipedia:Zasady i wskazówki|zasadami Wikipedii]].
+w zgodzie z [[{{ns:4}}:Zasady i wskazówki|zasadami Wikipedii]].
Podaj powód (np. umieszczając nazwy stron, na których dopuszczono
siÄ™ wandalizmu).",
"ipaddress" => "Adres IP",
diff --git a/languages/LanguagePt.php b/languages/LanguagePt.php
index 8a07adda9443..ae66ff96924f 100644
--- a/languages/LanguagePt.php
+++ b/languages/LanguagePt.php
@@ -11,19 +11,24 @@
# and Rodrigo Calanca Nishino from Portuguese Wikipedia
#
/* private */ $wgNamespaceNamesPt = array(
- -1 => "Especial",
- 0 => "",
- 1 => "Discussão",
- 2 => "Usuário",
- 3 => "Usuário_Discussão",
- 4 => "Wikipedia",
- 5 => "Wikipedia_Discussão",
- 6 => "Imagem",
- 7 => "Imagem_Discussão",
- 8 => "MediaWiki",
- 9 => "MediaWiki_Discussão",
- 10 => "Template",
- 11 => "Template_talk"
+ NS_MEDIA => "Media",
+ NS_SPECIAL => "Especial",
+ NS_MAIN => "",
+ NS_TALK => "Discussão",
+ NS_USER => "Usuário",
+ NS_USER_TALK => "Usuário_Discussão",
+ NS_WIKIPEDIA => "Wikipedia",
+ NS_WIKIPEDIA_TALK => "Wikipedia_Discussão",
+ NS_IMAGE => "Imagem",
+ NS_IMAGE_TALK => "Imagem_Discussão",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "MediaWiki_Discussão",
+ NS_TEMPLATE => "Predefinição",
+ NS_TEMPLATE_TALK => "Predefinição_Discussão",
+ NS_HELP => "Ajuda",
+ NS_HELP_TALK => "Ajuda_Discussão",
+ NS_CATEGORY => "Categoria",
+ NS_CATEGORY_TALK => "Categoria_Discussão"
);
@@ -49,7 +54,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesPt = array(
diff --git a/languages/LanguageRo.php b/languages/LanguageRo.php
index 64e03316f9f6..adafb2dde779 100644
--- a/languages/LanguageRo.php
+++ b/languages/LanguageRo.php
@@ -39,7 +39,8 @@ require_once("LanguageUtf8.php");
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesRo = array(
diff --git a/languages/LanguageRu.php b/languages/LanguageRu.php
index b5e76c73582a..10acba03d7ec 100644
--- a/languages/LanguageRu.php
+++ b/languages/LanguageRu.php
@@ -43,7 +43,8 @@ if($wgMetaNamespace === FALSE)
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesRu = array(
diff --git a/languages/LanguageSk.php b/languages/LanguageSk.php
index 6df1d6975bec..8f6da1805e61 100644
--- a/languages/LanguageSk.php
+++ b/languages/LanguageSk.php
@@ -35,7 +35,8 @@ require_once("LanguageUtf8.php");
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesSk = array(
diff --git a/languages/LanguageSl.php b/languages/LanguageSl.php
index 2e0f02708651..3f2e653580b7 100644
--- a/languages/LanguageSl.php
+++ b/languages/LanguageSl.php
@@ -51,7 +51,8 @@ require_once( "LanguageUtf8.php" );
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesSl = array(
diff --git a/languages/LanguageSq.php b/languages/LanguageSq.php
index 237f76d432e8..68f5d623e58a 100644
--- a/languages/LanguageSq.php
+++ b/languages/LanguageSq.php
@@ -40,7 +40,8 @@ require_once("LanguageUtf8.php");
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesSq = array(
diff --git a/languages/LanguageSv.php b/languages/LanguageSv.php
index 760367f0bce1..2b699d398c83 100644
--- a/languages/LanguageSv.php
+++ b/languages/LanguageSv.php
@@ -1,67 +1,102 @@
<?php
+#
+# Swedish localisation for MediaWiki
+#
+# This file is encoded in UTF-8, no byte order mark.
+# For compatibility with Latin-1 installations, please
+# don't add literal characters above U+00ff.
+#
-// NOTE: To turn off "Current Events" in the sidebar,
-// set "currentevents" => "-"
-//
-// The names of the namespaces can be set here, but the numbers
-// are magical, so don't change or move them! The Namespace class
-// encapsulates some of the magic-ness.
-//
+require_once( "LanguageUtf8.php" );
-/* private */ $wgNamespaceNamesSv = array(
- -2 => "Media",
- -1 => "Special",
- 0 => "",
- 1 => "Diskussion",
- 2 => "Användare",
- 3 => "Användare_diskussion",
- 4 => "Wikipedia",
- 5 => "Wikipedia_diskussion",
- 6 => "Bild",
- 7 => "Bild_diskussion",
- 8 => "MediaWiki",
- 9 => "MediaWiki_diskussion",
- 10 => "Template",
- 11 => "Template_talk"
+// $Id$
+/* private */ $wgNamespaceNamesSv = array(
+ NS_MEDIA => "Media",
+ NS_SPECIAL => "Special",
+ NS_MAIN => "",
+ NS_TALK => "Diskussion",
+ NS_USER => "Användare",
+ NS_USER_TALK => "Användardiskussion",
+ NS_WIKIPEDIA => $wgMetaNamespace,
+ NS_WIKIPEDIA_TALK => $wgMetaNamespace . "diskussion",
+ NS_IMAGE => "Bild",
+ NS_IMAGE_TALK => "Bilddiskussion",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "MediaWiki_diskussion",
+ NS_TEMPLATE => "Mall",
+ NS_TEMPLATE_TALK => "Malldiskussion",
+ NS_HELP => "Hjälp",
+ NS_HELP_TALK => "Hjälp_diskussion",
+ NS_CATEGORY => "Kategori",
+ NS_CATEGORY_TALK => "Kategoridiskussion"
);
/* inherit standard defaults */
/* private */ $wgQuickbarSettingsSv = array(
- "Ingen", "Fast vänster", "Fast höger", "Flytande vänster"
+ "Ingen",
+ "Fast vänster",
+ "Fast höger",
+ "Flytande vänster"
);
/* private */ $wgSkinNamesSv = array(
'standard' => "Standard",
'nostalgia' => "Nostalgi",
- 'cologneblue' => "Cologne Blå",
+ 'cologneblue' => "Cologne Blå",
'smarty' => "Paddington",
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
+);
+
+define( "MW_MATH_PNG", 0 );
+define( "MW_MATH_SIMPLE", 1 );
+define( "MW_MATH_HTML", 2 );
+define( "MW_MATH_SOURCE", 3 );
+define( "MW_MATH_MODERN", 4 );
+define( "MW_MATH_MATHML", 5 );
+
+/* private */ $wgMathNamesSv = array(
+ MW_MATH_PNG => "Rendera alltid PNG",
+ MW_MATH_SIMPLE => "HTML om den är väldigt enkel, annars PNG",
+ MW_MATH_HTML => "HTML om det är möjligt, annars PNG",
+ MW_MATH_SOURCE => "Lämna det som TeX (för textbaserade webbläddrare)",
+ MW_MATH_MODERN => "Rekommenderas för moderna webbläsare",
+ MW_MATH_MATHML => "MathML om det är möjligt (experimentellt)",
+);
+
+/* private */ $wgDateFormatsSv = array(
+ "Ingen inställning",
+ "Januari 15, 2001",
+ "15 Januari 2001",
+ "2001 Januari 15",
+ "2001-01-15"
);
/* private */ $wgUserTogglesSv = array(
- "hover" => "Svävande text över wikilänkar",
- "underline" => "Understrukna länkar",
- "highlightbroken" => "Röda länkar till tomma sidor",
+ "hover" => "Svävande text över wikilänkar",
+ "underline" => "Understryk länkar",
+ "highlightbroken" => "Formatera trasiga länkar <a href=\"\" class=\"new\">så här</a>
+(alternativt: så här<a href=\"\" class=\"internal\">?</a>).",
"justify" => "Justera indrag",
- "hideminor" => "Göm små redigeringar vid senaste ändring",
- "usenewrc" => "Avancerad 'Senaste ändringar'",
- "numberheadings" => "Automatisk numrering av överskrifter",
- "showtoolbar" => "Show edit toolbar",
- "rememberpassword" => "Kom ihåg lösenord till nästa besök",
+ "hideminor" => "Göm mindre redigeringar vid senaste ändring",
+ "usenewrc" => "Avancerad 'Senaste ändringar'",
+ "numberheadings" => "Automatisk numrering av överskrifter",
+ "showtoolbar" => "Visa redigeringverktygsrad",
+ "rememberpassword" => "Kom ihåg lösenord till nästa besök",
"editwidth" => "Redigeringsboxen har full bredd",
"editondblclick" => "Redigera sidor med dubbelklick (JavaScript)",
- "editsection" => "Visa [edit]-länkar för att redigera sektioner",
- "editsectiononrightclick" => "Högerklick på rubriker redigerar sektioner",
- "showtoc" => "Visa automatisk innehållsförteckning (på sidor med mer än 3 sektioner)",
- "watchdefault" => "Övervaka nya och ändrade artiklar",
- "minordefault" => "Markera som standard alla ändringer som mindre",
- "previewontop" => "Visa förhandsgranskning före textfältet istället för efter",
- "nocache" => "Slå av cachning av sidor"
+ "editsection" => "Visa [edit]-länkar för att redigera sektioner",
+ "editsectiononrightclick" => "Högerklick på rubriker redigerar sektioner",
+ "showtoc" => "Visa automatisk innehållsförteckning (på sidor med mer än 3 sektioner)",
+ "watchdefault" => "Övervaka nya och ändrade artiklar",
+ "minordefault" => "Markera som standard alla ändringer som mindre",
+ "previewontop" => "Visa förhandsgranskning före textfältet istället för efter",
+ "nocache" => "Slå av cachning av sidor"
);
/* private */ $wgBookstoreListSv = array(
@@ -76,8 +111,8 @@
languages! */
/* private */ $wgWeekdayNamesSv = array(
- "söndag", "måndag", "tisdag", "onsdag", "torsdag",
- "fredag", "lördag"
+ "söndag", "måndag", "tisdag", "onsdag", "torsdag",
+ "fredag", "lördag"
);
/* private */ $wgMonthNamesSv = array(
@@ -100,62 +135,64 @@
$wgValidSpecialPagesSv = array(
"Userlogin" => "",
"Userlogout" => "",
- "Preferences" => "Mina användarinställningar",
- "Watchlist" => "Min övervakningslista",
- "Recentchanges" => "Senaste ändringar",
+ "Preferences" => "Mina användarinställningar",
+ "Watchlist" => "Min övervakningslista",
+ "Recentchanges" => "Senaste ändringar",
"Upload" => "Ladda upp filer",
"Imagelist" => "Bildlista",
- "Listusers" => "Registrerade användare",
+ "Listusers" => "Registrerade användare",
"Statistics" => "Sidstatistik",
- "Randompage" => "Slumpmässig sida",
- "Lonelypages" => "Föräldralösa sidor",
- "Unusedimages" => "Föräldralösa filer",
- "Popularpages" => "Populära artiklar",
- "Wantedpages" => "Mest önskade artiklar",
+ "Randompage" => "Slumpmässig sida",
+ "Lonelypages" => "Föräldralösa sidor",
+ "Unusedimages" => "Föräldralösa filer",
+ "Popularpages" => "Populära artiklar",
+ "Wantedpages" => "Mest önskade artiklar",
"Shortpages" => "Korta artiklar",
- "Longpages" => "Långa artiklar",
+ "Longpages" => "LÃ¥nga artiklar",
"Newpages" => "De nyaste artiklarna",
"Ancientpages" => "Oldest pages",
"Allpages" => "Alla sidor efter titel",
"Ipblocklist" => "Blockerade IP adresser",
- "Maintenance" => "Underhållssida",
+ "Maintenance" => "Underhållssida",
"Specialpages" => "Specialsidor",
"Contributions" => "",
- "Emailuser" => "E-postanvändare",
+ "Emailuser" => "E-postanvändare",
"Whatlinkshere" => "",
"Recentchangeslinked" => "",
"Movepage" => "",
- "Booksources" => "Externa bokkällor",
+ "Booksources" => "Externa bokkällor",
"Export" => "XML export",
"Version" => "Version",
);
/* private */ $wgSysopSpecialPagesSv = array(
"Blockip" => "Blockera en IP-adress",
- "Asksql" => "Gör en sökning i databasen",
- "Undelete" => "Se och återställ raderade sidor"
+ "Asksql" => "Gör en sökning i databasen",
+ "Undelete" => "Se och återställ raderade sidor"
);
/* private */ $wgDeveloperSpecialPagesSv = array(
"Lockdb" => "Skrivskydda databasen",
- "Unlockdb" => "Återställ skrivning till databasen",
+ "Unlockdb" => "Återställ skrivning till databasen",
);
/* private */ $wgAllMessagesSv = array(
// Bits of text used by many pages:
//
-"linktrail" => "/^([a-zäöå]+)(.*)\$/sD",
+"linktrail" => "/^((?:[a-z]|ä|ö|å)+)(.*)\$/sD",
"mainpage" => "Huvudsida",
+'portal' => 'Kollektivportal',
+'portal-url' => '{{ns:4}}:Kollektivportal',
"about" => "Om",
-"aboutwikipedia" => "Om Wikipedia",
-"aboutpage" => "Wikipedia:Om",
-
-"help" => "Hjälp",
-"helppage" => "Wikipedia:Hjälp",
+"aboutwikipedia" => "Om {{SITENAME}}",
+"aboutpage" => "{{ns:4}}:Om",
+'article' => 'Artikel',
+"help" => "Hjälp",
+"helppage" => "Wikipedia:Hjälp",
"wikititlesuffix" => "Wikipedia",
"bugreports" => "Felrapporter",
"bugreportspage" => "Wikipedia:Felrapporter",
@@ -163,131 +200,159 @@ $wgValidSpecialPagesSv = array(
"sitesupportpage" => "", # If not set, won't appear. Can be wiki page or URL
"faq" => "FAQ",
"faqpage" => "Wikipedia:FAQ",
-"edithelp" => "Redigeringshjälp",
+"edithelp" => "Redigeringshjälp",
"edithelppage" => "Wikipedia:Hur_redigerar_jag_en_sida",
"cancel" => "Avbryt",
-"qbfind" => "SnabbSök",
-"qbbrowse" => "Genomsök",
+"qbfind" => "SnabbSök",
+"qbbrowse" => "Genomsök",
"qbedit" => "Redigera",
-"qbpageoptions" => "Sidinställningar",
+"qbpageoptions" => "Sidinställningar",
"qbpageinfo" => "Sidinformation",
-"qbmyoptions" => "Mina inställningar",
+"qbmyoptions" => "Mina inställningar",
"mypage" => "Min sida",
"mytalk" => "Min diskussion",
"currentevents" => "-",
"errorpagetitle" => "Fel",
"returnto" => "Tillbaka till $1.",
-"fromwikipedia" => "Från Wikipedia, den fria encyklopedin.",
-"whatlinkshere" => "Vilka sidor länkar hit?",
-"help" => "Hjälp",
-"search" => "Sök",
+"fromwikipedia" => "Från Wikipedia, den fria encyklopedin.",
+"whatlinkshere" => "Vilka sidor länkar hit?",
+"help" => "Hjälp",
+"search" => "Sök",
"history" => "Versionshistorik",
-"printableversion" => "Skrivarvänlig version",
-"editthispage" => "Redigera den här sidan",
-"deletethispage" => "Radera den här sidan",
-"protectthispage" => "Skydda den här sidan",
-"unprotectthispage" => "Ta bort skydd av denna sida",
+"history_short" => "Historik",
+"printableversion" => "Skrivarvänlig version",
+"edit" => "Redigera",
+"editthispage" => "Redigera den här sidan",
+"delete" => "Ta bort",
+"deletethispage" => "Ta bort den här sidan",
+"protect" => "Skydda",
+"protectthispage" => "Skydda den här sidan",
+"unprotect" => "Ta bort skydd",
+"unprotectthispage" => "Ta bort skydd från den här sidan",
"newpage" => "Ny sida",
"talkpage" => "Diskussionssida",
-"postcomment" => "Skriv ett inlägg",
+"personaltools" => "Personliga verktyg",
+"postcomment" => "Skicka en kommentar",
+"addsection" => "+",
"articlepage" => "Visa artikel",
-"subjectpage" => "Ämnessida",
-"userpage" => "Visa användarsida",
+"subjectpage" => "Ämnessida",
+"talk" => "Diskussion",
+"toolbox" => "Verktygslåda",
+"userpage" => "Visa användarsida",
"wikipediapage" => "Visa metasida",
"imagepage" => "Visa bildsida",
-"otherlanguages" => "Andra språk",
-"redirectedfrom" => "(Omdirigerad från $1)",
-"lastmodified" => "Denna sida blev senast ändrad $1.",
-"viewcount" => "Denna sida har visats $1 gånger.",
-"gnunote" => "Denna sida är publicerad under <a class=internal href='$wgScriptPath/GNU_FDL'>GNU FDL</a>.",
-"printsubtitle" => "(Från http://sv.wikipedia.org)",
+"viewtalkpage" => "Visa diskussion",
+"otherlanguages" => "Andra språk",
+"redirectedfrom" => "(Omdirigerad från $1)",
+"lastmodified" => "Den här sidan blev senast ändrad $1.",
+"viewcount" => "Den här sidan har visats $1 gånger.",
+"copyright" => "Innehåll tillgängligt under $1.",
+"poweredby" => "{{SITENAME}} körs med hjälp av [http://www.mediawiki.org/ MediaWiki], en öppen källkods-wikimotor.",
+"printsubtitle" => "(Från http://sv.wikipedia.org)",
"protectedpage" => "Skyddad sida",
-"administrators" => "Wikipedia:Administratörer",
-"sysoptitle" => "Sysop-behörighet krävs",
-"sysoptext" => "Denna funktion kan bara utföras av användare med \"sysop\" status.
+"administrators" => "Wikipedia:Administratörer",
+"sysoptitle" => "Sysop-behörighet krävs",
+"sysoptext" => "Den här funktionen kan bara utföras av användare med \"sysop\" status.
Se $1.",
-"developertitle" => "Utvecklarbehörighet krävs",
-"developertext" => "Denna funktion kan bara utföras av användare med \"developer\" status.
+"developertitle" => "Utvecklarbehörighet krävs",
+"developertext" => "Den här funktionen kan bara utföras av användare med \"developer\" status.
Se $1.",
-"nbyte" => " bytes",
-"go" => "Utför",
+"bureaucrattitle" => "Byråkrataccess krävs",
+"bureaucrattext" => "Funktionen du har eftersökt kan endast utföras av en sysop med byråkratstatus.",
+"nbytes" => "$1 bytes",
+"go" => "Utför",
"ok" => "OK",
-"sitetitle" => "Wikipedia",
+"sitetitle" => "{{SITENAME}}",
+"pagetitle" => "$1 - {{SITENAME}}",
"sitesubtitle" => "Den fria encyklopedin",
-"retrievedfrom" => "Hämtat från \"$1\"",
+"retrievedfrom" => "Hämtad från \"$1\"",
"newmessages" => "Du har $1.",
"newmessageslink" => "nya meddelanden",
"editsection" => "edit",
-"toc" => "Innehåll",
+"toc" => "Innehåll",
"showtoc" => "visa",
-"hidetoc" => "göm",
-"thisisdeleted" => "Visa eller återställ $1?",
+"hidetoc" => "göm",
+"thisisdeleted" => "Visa eller återställ $1?",
"restorelink" => "$1 raderade versioner",
+"feedlinks" => "Matning:",
+
+// Short words for each namespace, by default used in the 'article' tab in monobook
+"nstab-main" => "Artikel",
+"nstab-user" => "Användarsida",
+"nstab-media" => "Media",
+"nstab-special" => "Speciell",
+"nstab-wp" => "Om",
+"nstab-image" => "Bild",
+"nstab-mediawiki" => "Meddelande",
+"nstab-template" => "Mall",
+"nstab-help" => "Hjälp",
+"nstab-category" => "Kategori",
+
// Main script and global functions
//
"nosuchaction" => "Funktionen finns inte",
"nosuchactiontext" => "Den funktion som specificerats i URL:en kan inte
hittas av Wikipediaprogramvaran",
-"nosuchspecialpage" => "Sådan specialsida finns inte",
-"nospecialpagetext" => "Du har önskat en specialsida som inte
+"nosuchspecialpage" => "SÃ¥dan specialsida finns inte",
+"nospecialpagetext" => "Du har önskat en specialsida som inte
hittas av Wikipediaprogramvaran.",
// General errors
//
"error" => "Fel",
"databaseerror" => "Databasfel",
-"dberrortext" => "Ett syntaxfel i databasfrågan har uppstått. Detta kan bero på en felaktig sökfråga (se $5) eller det kan bero på ett fel i programvaran.
-Den senste utförda databasfrågan var:
+"dberrortext" => "Ett syntaxfel i databasfrågan har uppstått. Detta kan bero på en felaktig sökfråga (se $5) eller det kan bero på ett fel i programvaran.
+Den senste utförda databasfrågan var:
<blockquote><tt>$1</tt></blockquote>
-från funktionen \"<tt>$2</tt>\".
+från funktionen \"<tt>$2</tt>\".
MySQL returnerade felen \"$3<tt>: $4</tt>\".",
-"noconnect" => "Kunde inte ansluta till databasen på $1",
-"nodb" => "Kunde inte välja databasen $1",
-"readonly" => "Databasen är skrivskyddad",
-"enterlockreason" => "Skriv en grund för skrivskyddet, inklusive
-en uppskattning på när skrivskyddet skall upphävas",
-"readonlytext" => "Wikipediadatabasen är för ögonblicket skrivskyddad för
-nya sidor och andra modifikationer, beroende på rutinmässigt
-underhåll av databasen, varefter den återgår till normalstatus.
-Den administratör som skrivskyddade den har gett följande förklaring:
+"noconnect" => "Kunde inte ansluta till databasen på $1",
+"nodb" => "Kunde inte välja databasen $1",
+"readonly" => "Databasen är skrivskyddad",
+"enterlockreason" => "Skriv en grund för skrivskyddet, inklusive
+en uppskattning på när skrivskyddet skall upphävas",
+"readonlytext" => "Wikipediadatabasen är för ögonblicket skrivskyddad för
+nya sidor och andra modifikationer, beroende på rutinmässigt
+underhåll av databasen, varefter den återgår till normalstatus.
+Den administratör som skrivskyddade den har gett följande förklaring:
<p>$1",
-"missingarticle" => "Databasen fann inte texten på en sida
+"missingarticle" => "Databasen fann inte texten på en sida
som den skulle hitta, med namnet \"$1\".
-Dette är inte ett databas fel, utan beror på ett fel i mjukvaran.
-Skicka vänligen en rapport om detta till en administratör, där du också nämner
+Dette är inte ett databas fel, utan beror på ett fel i mjukvaran.
+Skicka vänligen en rapport om detta till en administratör, där du också nämner
URL:en.",
"internalerror" => "Internt fel",
"filecopyerror" => "Kunde inte kopiera filen \"$1\" til \"$2\".",
-"filerenameerror" => "Kunde inte byta namn på filen \"$1\" til \"$2\".",
+"filerenameerror" => "Kunde inte byta namn på filen \"$1\" til \"$2\".",
"filedeleteerror" => "Kunde inte radera filen \"$1\".",
"filenotfound" => "Kunde inte hitta filen \"$1\".",
-"unexpected" => "Oväntat värde: \"$1\"=\"$2\".",
-"formerror" => "Fel: Kunde inte sända formulär",
-"badarticleerror" => "Denna funktion kan inte utföras på denna sida.",
+"unexpected" => "Oväntat värde: \"$1\"=\"$2\".",
+"formerror" => "Fel: Kunde inte sända formulär",
+"badarticleerror" => "Den här funktionen kan inte utföras på den här sidan.",
"cannotdelete" => "Kunde inte radera sidan, eller filen som specificerades.",
"badtitle" => "Felaktig titel",
-"badtitletext" => "Den önskade sidans titel var inte tillåten, tom eller sidan
-är felaktigt länkad från en Wikipedia på ett annat språk.",
+"badtitletext" => "Den önskade sidans titel var inte tillåten, tom eller sidan
+är felaktigt länkad från en Wikipedia på ett annat språk.",
// Login and logout pages
//
-"logouttitle" => "Logga ut Användare",
-"logouttext" => "Du är nu utloggad.
-Du kan fortsätta som anonym Wikipediaanvändare, eller så kan du logga in
-igen som samma eller annan användare.\n",
-
-"welcomecreation" => "<h2>Välkommen, $1!</h2><p>Ditt konto har skapats. Glöm inte att anpassa dina Wikipediainställningar.",
-
-"loginpagetitle" => "Logga in Användare",
-"yourname" => "Ditt användarnamn",
-"yourpassword" => "Ditt lösenord",
-"yourpasswordagain" => "Upprepa lösenord",
-"newusersonly" => " (bara för nya användare)",
-"remembermypassword" => "Kom ihåg mitt lösenord till nästa gång.",
-"loginproblem" => "<b>Det var svårt att logga in dig .</b><br>Pröva igen!",
-"alreadyloggedin" => "<font color=red><b>Användare $1, du är redan inloggad !</b></font><br>\n",
+"logouttitle" => "Logga ut Användare",
+"logouttext" => "Du är nu utloggad.
+Du kan fortsätta som anonym Wikipediaanvändare, eller så kan du logga in
+igen som samma eller annan användare.\n",
+
+"welcomecreation" => "<h2>Välkommen, $1!</h2><p>Ditt konto har skapats. Glöm inte att anpassa dina Wikipediainställningar.",
+
+"loginpagetitle" => "Logga in Användare",
+"yourname" => "Ditt användarnamn",
+"yourpassword" => "Ditt lösenord",
+"yourpasswordagain" => "Upprepa lösenord",
+"newusersonly" => " (bara för nya användare)",
+"remembermypassword" => "Kom ihåg mitt lösenord till nästa gång.",
+"loginproblem" => "<b>Det var svårt att logga in dig .</b><br>Pröva igen!",
+"alreadyloggedin" => "<font color=red><b>Användare $1, du är redan inloggad !</b></font><br>\n",
"login" => "Logga in",
"userlogin" => "Logga in",
@@ -295,189 +360,189 @@ igen som samma eller annan användare.\n",
"userlogout" => "Logga ut",
"notloggedin" => "Ej inloggad",
"createaccount" => "Skapa ett konto",
-"badretype" => "De lösenord du uppgett överenstämmer inte med varandra.",
-"userexists" => "Detta användarnamn används redan. Ange ett annat användarnamn.",
+"badretype" => "De lösenord du uppgett överenstämmer inte med varandra.",
+"userexists" => "Detta användarnamn används redan. Ange ett annat användarnamn.",
"youremail" => "Din e-postadress",
"yournick" => "Ditt smeknamn (till signaturer)",
-"emailforlost" => "Har du glömt ditt lösenord, så kan du få ett nytt lösenord skickat till din e-post",
+"emailforlost" => "Har du glömt ditt lösenord, så kan du få ett nytt lösenord skickat till din e-post",
"loginerror" => "Inloggningsproblem",
-"noname" => "Det användarnamn som du angett finns inte",
+"noname" => "Det användarnamn som du angett finns inte",
"loginsuccesstitle" => "Inloggningen lyckades",
-"loginsuccess" => "Du är nu inloggad på wikipedia med användarnamnet \"$1\".",
-"nosuchuser" => "Det finns ingen användare med namnet \"$1\".
-Kontrollera stavningen, eller använd formuläret nedan för att skapa ett nytt konto.",
-"wrongpassword" => "Lösenordet du skrev är felaktigt. Pröva igen",
-"mailmypassword" => "Sänd mig ett nytt lösenord",
-"passwordremindertitle" => "Nytt lösenord från Wikipedia",
-"passwordremindertext" => "Någon (förmodligen du, med IP-numret $1)
-har bett oss sända dig ett nytt lösenord för din Wikipedia-inloggning
-Lösenordet för användare \"$2\" är nu \"$3\".
-Du ska logga in på din användare och byta lösenord.",
-"noemail" => "Det finns ingen e-postadress registrerad för användare \"$1\".",
-"passwordsent" => "Ett nytt lösenord har skickats till e-posten registrerad av användaren\"$1\".
-Var snäll och logga in igen när du fått meddelandet.",
+"loginsuccess" => "Du är nu inloggad på wikipedia med användarnamnet \"$1\".",
+"nosuchuser" => "Det finns ingen användare med namnet \"$1\".
+Kontrollera stavningen, eller använd formuläret nedan för att skapa ett nytt konto.",
+"wrongpassword" => "Lösenordet du skrev är felaktigt. Pröva igen",
+"mailmypassword" => "Sänd mig ett nytt lösenord",
+"passwordremindertitle" => "Nytt lösenord från Wikipedia",
+"passwordremindertext" => "Någon (förmodligen du, med IP-numret $1)
+har bett oss sända dig ett nytt lösenord för din Wikipedia-inloggning
+Lösenordet för användare \"$2\" är nu \"$3\".
+Du ska logga in på din användare och byta lösenord.",
+"noemail" => "Det finns ingen e-postadress registrerad för användare \"$1\".",
+"passwordsent" => "Ett nytt lösenord har skickats till e-posten registrerad av användaren\"$1\".
+Var snäll och logga in igen när du fått meddelandet.",
// Edit pages
//
"summary" => "Sammanfattning",
-"minoredit" => "Detta är en mindre ändring",
-"watchthis" => "Bevaka den här artikeln",
+"minoredit" => "Detta är en mindre ändring",
+"watchthis" => "Bevaka den här artikeln",
"savearticle" => "Spara",
-"preview" => "Förhandsgranska",
-"showpreview" => "Visa förhandgranskning",
-"blockedtitle" => "Användaren är spärrad",
-"blockedtext" => "Ditt användarnamn har blivit spärrat av $1.
-Anledning är att:<br>''$2''<p>Ta kontakt med $1 eller en av de andra
-[[Wikipedia:Administratörer|administratörerna]] för att diskutera varför du blivit spärrad", // "
+"preview" => "Förhandsgranska",
+"showpreview" => "Visa förhandgranskning",
+"blockedtitle" => "Användaren är spärrad",
+"blockedtext" => "Ditt användarnamn har blivit spärrat av $1.
+Anledning är att:<br>''$2''<p>Ta kontakt med $1 eller en av de andra
+[[Wikipedia:Administratörer|administratörerna]] för att diskutera varför du blivit spärrad", // "
"newarticle" => "(Ny)",
-"newarticletext" => "Du har klickat på en röd länk, en sida som inte finns ännu. Du kan hjälpa till genom att själv skriva vad du vet om ämnet i fältet nedan. Om du inte vill skriva något kan du bara trycka på \"tillbaka\" i din webbläsare.",
-"anontalkpagetext" => "---- ''Detta är en diskussionssida för en anonym användare, en användare som inte har skapat sig ett konto, eller som inte har loggat in på det. Vi måste därför använda personens numeriska [[IP-adress]] för identifiera honom eller henne. En sådan IP-adress kan ibland användas av flera olika personer. Om du är en anonym användare och ser meddelanden på den här sidan som inte tycks vara riktade till dig, var vänlig [[Special:Userlogin|logga in]] så du undviker förväxling med andra anonyma användare i framtiden.'' ",
-"noarticletext" => "(Det finns för tillfället ingen text på den här sidan.)",
+"newarticletext" => "Du har klickat på en röd länk, en sida som inte finns ännu. Du kan hjälpa till genom att själv skriva vad du vet om ämnet i fältet nedan. Om du inte vill skriva något kan du bara trycka på \"tillbaka\" i din webbläsare.",
+"anontalkpagetext" => "---- ''Detta är en diskussionssida för en anonym användare, en användare som inte har skapat sig ett konto, eller som inte har loggat in på det. Vi måste därför använda personens numeriska [[IP-adress]] för identifiera honom eller henne. En sådan IP-adress kan ibland användas av flera olika personer. Om du är en anonym användare och ser meddelanden på den här sidan som inte tycks vara riktade till dig, var vänlig [[Special:Userlogin|logga in]] så du undviker förväxling med andra anonyma användare i framtiden.'' ",
+"noarticletext" => "(Det finns för tillfället ingen text på den här sidan.)",
"updated" => "(Uppdaterad)",
"note" => "<strong>Notera:</strong> ",
-"previewnote" => "Observera att detta är en förhandsvisning, och att sidan ännu inte sparats!",
-"previewconflict" => "Denna förhandsvisning är resultatet av den
-redigerbara texten ovanför,
-så som det kommer att se ut om du väljer att spara.",
+"previewnote" => "Observera att detta är en förhandsvisning, och att sidan ännu inte sparats!",
+"previewconflict" => "Den här förhandsvisningen är resultatet av den
+redigerbara texten ovanför,
+så som det kommer att se ut om du väljer att spara.",
"editing" => "Redigerar $1",
"editconflict" => "Redigeringskonflikt: $1",
-"explainconflict" => "Någon har ändrat denna sida efter att du började att redigera den.
-Det översta text blocket innehåller den nuvarande texten.
-Dina ändringer syns i det nedersta blocket.
-Du måste infoga dina ändringar i den existerande texten.
-<b>Bara</b> texten i den översta textboxen sparas om du trycker \"Spara sida\".\n<p>",
+"explainconflict" => "Någon har ändrat den här sidan efter att du började att redigera den.
+Det översta text blocket innehåller den nuvarande texten.
+Dina ändringer syns i det nedersta blocket.
+Du måste infoga dina ändringar i den existerande texten.
+<b>Bara</b> texten i den översta textboxen sparas om du trycker \"Spara sida\".\n<p>",
"yourtext" => "Din text",
"storedversion" => "Din sparade version",
"editingold" => "<strong>VARNING: Du redigerar en gammal version
-av denna sida. Om du sparar den, kommer alla ändringar på denns sida föregående revison att bli överskrivna.</strong>\n",
+av den här sidan. Om du sparar den, kommer alla ändringar på denns sida föregående revison att bli överskrivna.</strong>\n",
"yourdiff" => "Skillnader",
-"copyrightwarning" => "Observera att alla bidrag till Wikipedia är
+"copyrightwarning" => "Observera att alla bidrag till Wikipedia är
att betrakta som utgivna under GNU Free Documentation License
-(se $1 för detaljer).
-Om du inte vill ha din text redigerad och kopierad efter andras gottfinnade så skall du inte skriva någon text här.<br>
-Du lovar oss också att du skrev texten själv, eller kopierade från public domain eller liknande fri resurs.<BR>
-<strong>LÄGG ALDRIG UT UPPHOVSRÄTTSSKYDDAT MATERIAL HÄR UTAN FÖRFATTARENS TILLÅTELSE!</strong>",
-
-"longpagewarning" => "VARNING: Den här artikeln är $1 kilobytes lång; vissa äldre webbläsare
-kan ha problem med att redigera sidor som är omkring 32 kb eller större.
-Du kanske vill överväga att dela upp artikeln i mindre delar.",
-"readonlywarning" => "VARNING: Databasen är tillfälligt låst för underhåll. Du kommer inte att kunna spara
-dina ändringar just nu. För säkerhets skull kanske du vill överväga att kopiera över texten till din egen dator tills
-databasen är upplåst igen.",
-"protectedpagewarning" => "VARNING: Den här sidan har låsts så att bara administratörer kan redigera den.
-Försäkra dig om att du följer rekommendationerna för <a href='$wgScriptPath/$wgMetaNamespace:Skyddade sidor'>skyddade sidor</a>",
+(se $1 för detaljer).
+Om du inte vill ha din text redigerad och kopierad efter andras gottfinnade så skall du inte skriva någon text här.<br>
+Du lovar oss också att du skrev texten själv, eller kopierade från public domain eller liknande fri resurs.<BR>
+<strong>LÄGG ALDRIG UT UPPHOVSRÄTTSSKYDDAT MATERIAL HÄR UTAN FÖRFATTARENS TILLÅTELSE!</strong>",
+
+"longpagewarning" => "VARNING: Den här artikeln är $1 kilobytes lång; vissa äldre webbläsare
+kan ha problem med att redigera sidor som är omkring 32 kb eller större.
+Du kanske vill överväga att dela upp artikeln i mindre delar.",
+"readonlywarning" => "VARNING: Databasen är tillfälligt låst för underhåll. Du kommer inte att kunna spara
+dina ändringar just nu. För säkerhets skull kanske du vill överväga att kopiera över texten till din egen dator tills
+databasen är upplåst igen.",
+"protectedpagewarning" => "VARNING: Den här sidan har låsts så att bara administratörer kan redigera den.
+Försäkra dig om att du följer rekommendationerna för <a href='$wgScriptPath/$wgMetaNamespace:Skyddade sidor'>skyddade sidor</a>",
// History pages
//
"revhistory" => "Versionshistoria",
-"nohistory" => "Det finns ingen versionshistoria för denna sida.",
+"nohistory" => "Det finns ingen versionshistoria för den här sidan.",
"revnotfound" => "Versionen hittades inte",
-"revnotfoundtext" => "Den gamla versionen av den sida du frågade efter kan inte hittas. Kontrollera den URL du använde för att nå denna sida.\n",
-"loadhist" => "Läser sidans versioner",
+"revnotfoundtext" => "Den gamla versionen av den sida du frågade efter kan inte hittas. Kontrollera den URL du använde för att nå den här sidan.\n",
+"loadhist" => "Läser sidans versioner",
"currentrev" => "Nuvarande version",
-"revisionasof" => "Versionen från $1",
+"revisionasof" => "Versionen från $1",
"cur" => "nuvarande",
-"next" => "nästa",
-"last" => "föregående",
+"next" => "nästa",
+"last" => "föregående",
"orig" => "original",
-"histlegend" => "Förklaring: (nuvarande) = skillnad mot den nuvarande versionen,
- (föregående) = skillnad mot den föregående versionen, M = mindre ändring",
+"histlegend" => "Förklaring: (nuvarande) = skillnad mot den nuvarande versionen,
+ (föregående) = skillnad mot den föregående versionen, M = mindre ändring",
// Diffs
//
"difference" => "(Skillnad mellan versioner)",
-"loadingrev" => "läser version för att se skillnad",
+"loadingrev" => "läser version för att se skillnad",
"lineno" => "Rad $1:",
-"editcurrent" => "Redigera den nuvarande versionen av denna sida",
+"editcurrent" => "Redigera den nuvarande versionen av den här sidan",
// Search results
//
-"searchresults" => "Sökresultat",
-"searchhelppage" => "Wikipedia:Sökning",
-"searchingwikipedia" => "Sökning på Wikipedia",
-"searchresulttext" => "För mer information om sökning på Wikipedia, se $1.",
+"searchresults" => "Sökresultat",
+"searchhelppage" => "Wikipedia:Sökning",
+"searchingwikipedia" => "Sökning på Wikipedia",
+"searchresulttext" => "För mer information om sökning på Wikipedia, se $1.",
"searchquery" => "For query \"$1\"",
-"badquery" => "Felaktigt utformat sökbegrepp",
-"badquerytext" => "Vi kunde inte utföra din sökning.
-Detta beror sannolikt på att du försökt söka efter ett ord med färre än tre bokstäver, något som f.n. inte stöds. Det kan också vara så att du har anget en felaktig sökning, till exempel \"fisk och och skaldjur\". Prova att formulera om sökningen.",
-"matchtotals" => "Sökordet förekommer i \"$1\" överensstämde med $2 artiklar titlar
+"badquery" => "Felaktigt utformat sökbegrepp",
+"badquerytext" => "Vi kunde inte utföra din sökning.
+Detta beror sannolikt på att du försökt söka efter ett ord med färre än tre bokstäver, något som f.n. inte stöds. Det kan också vara så att du har anget en felaktig sökning, till exempel \"fisk och och skaldjur\". Prova att formulera om sökningen.",
+"matchtotals" => "Sökordet förekommer i \"$1\" överensstämde med $2 artiklar titlar
och texter i $3 artiklar.",
-"titlematches" => "Artikel titlar som överensstämmer med sökordet",
-"notitlematches" => "Ingen artikel titlar överensstämmer med sökordet",
-"textmatches" => "Artikel texter som överensstämmer med sökordet",
-"notextmatches" => "Ingen artikel texter överensstämmer med sökordet",
-"prevn" => "förra $1",
-"nextn" => "nästa $1",
+"titlematches" => "Artikel titlar som överensstämmer med sökordet",
+"notitlematches" => "Ingen artikel titlar överensstämmer med sökordet",
+"textmatches" => "Artikel texter som överensstämmer med sökordet",
+"notextmatches" => "Ingen artikel texter överensstämmer med sökordet",
+"prevn" => "förra $1",
+"nextn" => "nästa $1",
"viewprevnext" => "Om ($1) ($2) ($3).",
"showingresults" => "Nedan visas <b>$1</b> resultat som startar med nummer <b>$2</b>.",
-"nonefound" => "<strong>Note</strong>: Misslyckade sökningar förorsakas ofta av
- att man söker efter vanliga ord som \"har\" och \"från\",
-vilka inte indexeras, eller att specificera flera sökord (bara
-sidor som innehåller alla sökorden hittas).",
-"powersearch" => "Sök",
+"nonefound" => "<strong>Note</strong>: Misslyckade sökningar förorsakas ofta av
+ att man söker efter vanliga ord som \"har\" och \"från\",
+vilka inte indexeras, eller att specificera flera sökord (bara
+sidor som innehåller alla sökorden hittas).",
+"powersearch" => "Sök",
"powersearchtext" => "
-Sök i namnutrymme :<br>
+Sök i namnutrymme :<br>
$1<br>
-$2 List redirects &nbsp; Sök efter $3 $9",
+$2 List redirects &nbsp; Sök efter $3 $9",
// Preferences page
//
-"preferences" => "Inställningar",
-"prefsnologin" => "Du är inte inloggad",
-"prefsnologintext" => "Du måste vara <a href=\"" .
+"preferences" => "Inställningar",
+"prefsnologin" => "Du är inte inloggad",
+"prefsnologintext" => "Du måste vara <a href=\"" .
wfLocalUrl( "Special:Userlogin" ) . "\">inloggad</a>
-för att kunna ändra i inställningar.",
-"prefslogintext" => "Du är inloggad som \"$1\".
-Ditt IP-nummer är $2.",
-"prefsreset" => "Inställningar har blivit återställda från minne.",
-"qbsettings" => "Inställningar för snabbmeny",
-"changepassword" => "Byt lösenord",
+för att kunna ändra i inställningar.",
+"prefslogintext" => "Du är inloggad som \"$1\".
+Ditt IP-nummer är $2.",
+"prefsreset" => "Inställningar har blivit återställda från minne.",
+"qbsettings" => "Inställningar för snabbmeny",
+"changepassword" => "Byt lösenord",
"skin" => "Utseende",
-"saveprefs" => "Spara inställningar",
-"resetprefs" => "Återställ inställningar",
-"oldpassword" => "Gammalt lösenord",
-"newpassword" => "Nytt lösenord",
-"retypenew" => "Skriv om nytt lösenord",
+"saveprefs" => "Spara inställningar",
+"resetprefs" => "Återställ inställningar",
+"oldpassword" => "Gammalt lösenord",
+"newpassword" => "Nytt lösenord",
+"retypenew" => "Skriv om nytt lösenord",
"textboxsize" => "Textbox dimensioner",
"rows" => "Rader",
"columns" => "Kolumner",
-"searchresultshead" => "Inställningar för sökresultat",
+"searchresultshead" => "Inställningar för sökresultat",
"resultsperpage" => "Resultat att visa per sida",
"contextlines" => "Linjer att visa per sida",
-"contextchars" => "Antalet bokstäver per linje i resultatet",
-"stubthreshold" => "Gränser för visning av stubs",
-"recentchangescount" => "Antalet artiklar i \"senaste ändringarna\" ",
-"savedprefs" => "Dina inställningar har blivit sparade",
-"timezonetext" => "Skriv in antalet timmar som din lokal tid skiljer sig från
+"contextchars" => "Antalet bokstäver per linje i resultatet",
+"stubthreshold" => "Gränser för visning av stubs",
+"recentchangescount" => "Antalet artiklar i \"senaste ändringarna\" ",
+"savedprefs" => "Dina inställningar har blivit sparade",
+"timezonetext" => "Skriv in antalet timmar som din lokal tid skiljer sig från
serverns klocka (UTC).
-Den blir automatiskt inställd efter svensk tid eller skulle man till exempel för svensk vintertid, endast ha \"1\" (och \"2\" när vi har sommartid).",
+Den blir automatiskt inställd efter svensk tid eller skulle man till exempel för svensk vintertid, endast ha \"1\" (och \"2\" när vi har sommartid).",
"localtime" => "Lokal tid",
-"timezoneoffset" => "Utjämna",
-"emailflag" => "Hindra andra användare från att skicka e-post till dig",
+"timezoneoffset" => "Utjämna",
+"emailflag" => "Hindra andra användare från att skicka e-post till dig",
// Recent changes
//
-"recentchanges" => "Senaste ändringarna",
-"recentchangestext" => "Se de senaste redigerade sidorna i Wikipedia på denna sida.",
-"rcloaderr" => "Läser senaste redigerade sidor",
-"rcnote" => "Nedanför är de senaste <strong>$1</strong> ändringarna under de sista <strong>$2</strong> dagarna.",
-"rcnotefrom" => "Nedanför är ändringarna från <b>$2</b> till <b>$1</b> visade.",
-"rclistfrom" => "Visa nya ändringar från och med $1",
-"rclinks" => "Visa de senaste $1 ändringarna under de senaste $2 dagarna",
-// "rclinks" => "Visa de senaste $1 ändringarna under de senaste $2 dagarna",
-"rchide" => "i $4 form; $1 mindre ändringar; $2 andra namnrum; $3 mer än en redigering.",
+"recentchanges" => "Senaste ändringarna",
+"recentchangestext" => "Se de senaste redigerade sidorna i Wikipedia på den här sidan.",
+"rcloaderr" => "Läser senaste redigerade sidor",
+"rcnote" => "Nedanför är de senaste <strong>$1</strong> ändringarna under de sista <strong>$2</strong> dagarna.",
+"rcnotefrom" => "Nedanför är ändringarna från <b>$2</b> till <b>$1</b> visade.",
+"rclistfrom" => "Visa nya ändringar från och med $1",
+"rclinks" => "Visa de senaste $1 ändringarna under de senaste $2 dagarna",
+// "rclinks" => "Visa de senaste $1 ändringarna under de senaste $2 dagarna",
+"rchide" => "i $4 form; $1 mindre ändringar; $2 andra namnrum; $3 mer än en redigering.",
"diff" => "skillnad",
"hist" => "historia",
-"hide" => "göm",
+"hide" => "göm",
"show" => "visa",
"tableform" => "tabell",
"listform" => "lista",
-"nchanges" => "$1 ändringar",
+"nchanges" => "$1 ändringar",
"minoreditletter" => "M",
"newpageletter" => "N",
@@ -486,59 +551,59 @@ Den blir automatiskt inställd efter svensk tid eller skulle man till exempel för
"upload" => "Ladda upp",
"uploadbtn" => "Ladda upp fil",
"uploadlink" => "Ladda upp bild",
-"reupload" => "återuppladdning",
-"reuploaddesc" => "Tillbaka till uppladdningsformulär.",
+"reupload" => "Ã¥teruppladdning",
+"reuploaddesc" => "Tillbaka till uppladdningsformulär.",
"uploadnologin" => "Inte inloggad",
-"uploadnologintext" => "Du måste vara <a href=\"" .
+"uploadnologintext" => "Du måste vara <a href=\"" .
wfLocalUrl( "Special:Userlogin" ) . "\">inloggad</a>
-för att kunna ladda upp filer.",
+för att kunna ladda upp filer.",
"uploadfile" => "Ladda upp fil",
"uploaderror" => "Uppladdnings fel",
-"uploadtext" => "<strong>STOPP!</strong> Innan du laddar upp här,
-så måste du ha läst och följa Wikipedias <a href=\"" .
+"uploadtext" => "<strong>STOPP!</strong> Innan du laddar upp här,
+så måste du ha läst och följa Wikipedias <a href=\"" .
wfLocalUrlE( "Wikipedia:Policy om bruk av bilder" ) . "\">policy om hur
-bilder får användas</a>.
-<p>För att visa eller söka tidigare uppladdade bilder gå till
+bilder får användas</a>.
+<p>För att visa eller söka tidigare uppladdade bilder gå till
<a href=\"" . wfLocalUrlE( "Special:Imagelist" ) .
-"\">lista över uppladdade bilder</a>.
+"\">lista över uppladdade bilder</a>.
Uppladdningar och borttagningar loggas i <a href=\"" .
wfLocalUrlE( "Wikipedia:Upload_log" ) . "\">uppladdnings logg</a>.
-<p>Använd formuläret nedan för att ladda upp nya filer, som
+<p>Använd formuläret nedan för att ladda upp nya filer, som
du kan illustrera dina artiklar med.
-På de flesta webbläsare kommer du att se en \"Browse...\" knapp eller en
-\"Öppna...\" knapp, som startar ditt operativsystems dialogruta för att öppna filer. När du valt en fil kommer namnet på den filen att visas i textfältet brevid knappen. Du måste även kryssa för rutan, för att du inte gör något som strider mot upphovsrätten av filen som laddas upp.
-Tryck på \"Upload\" knappen för att ladda upp filen.
-Detta kan dröja ett tag om du har en långsam internetförbindelse.
-<p>Formaten på filerna ska helst vara JPEG för bilder, PNG för ritningar
-och andra ikonliknande bilder och OGG för ljud.
-Var vänlig namnge filen med ett så beskrivande namn som möjligt, för att undvika förvirring.
-För att använda en fil i en artikel, skriv följande om det är en bild: <b>[[bild:filnamn.jpg]]</b> eller <b>[[bild:filnamn.png|alternativ text]]</b>
-eller <b>[[media:filnamn.ogg]]</b> om det är en ljudfil.
-<p>Kom ihåg att det här är en wiki, vilket gör att andra kan redigera eller ta bort dina uppladdningar om de tycker de inte passar i en artikel. Om du missbrukar systemet med uppladdningar kommer filen avlägsnas och du bli spärrad från att ladda upp filer i framtiden.",
+På de flesta webbläsare kommer du att se en \"Browse...\" knapp eller en
+\"Öppna...\" knapp, som startar ditt operativsystems dialogruta för att öppna filer. När du valt en fil kommer namnet på den filen att visas i textfältet brevid knappen. Du måste även kryssa för rutan, för att du inte gör något som strider mot upphovsrätten av filen som laddas upp.
+Tryck på \"Upload\" knappen för att ladda upp filen.
+Detta kan dröja ett tag om du har en långsam internetförbindelse.
+<p>Formaten på filerna ska helst vara JPEG för bilder, PNG för ritningar
+och andra ikonliknande bilder och OGG för ljud.
+Var vänlig namnge filen med ett så beskrivande namn som möjligt, för att undvika förvirring.
+För att använda en fil i en artikel, skriv följande om det är en bild: <b>[[bild:filnamn.jpg]]</b> eller <b>[[bild:filnamn.png|alternativ text]]</b>
+eller <b>[[media:filnamn.ogg]]</b> om det är en ljudfil.
+<p>Kom ihåg att det här är en wiki, vilket gör att andra kan redigera eller ta bort dina uppladdningar om de tycker de inte passar i en artikel. Om du missbrukar systemet med uppladdningar kommer filen avlägsnas och du bli spärrad från att ladda upp filer i framtiden.",
"uploadlog" => "upload log",
"uploadlogpage" => "Upload_log",
-"uploadlogpagetext" => "Nedan följer en lista med de senaste uppladdade filerna.
+"uploadlogpagetext" => "Nedan följer en lista med de senaste uppladdade filerna.
Alla tider visas efter serverns tid (UTC).
<ul>
</ul>
",
"filename" => "Filnamn",
"filedesc" => "Beskrivning",
-"affirmation" => "Jag bekräftar att ägaren till upphovsrätten accepterar att licensiera enligt följande avtal $1.",
+"affirmation" => "Jag bekräftar att ägaren till upphovsrätten accepterar att licensiera enligt följande avtal $1.",
"copyrightpage" => "Wikipedia:copyright",
"copyrightpagename" => "Wikipedia copyright",
"uploadedfiles" => "Uppladdade filer",
-"noaffirmation" => "Du måste bekräfta att uppladdningen inte kränker någon copyright",
+"noaffirmation" => "Du måste bekräfta att uppladdningen inte kränker någon copyright",
"ignorewarning" => "Ignorera varning och spara fil.",
-"minlength" => "Namnet på bildfilen ska vara minst tre bokstäver",
-"badfilename" => "Bildnamn har blivit ändrat till \"$1\".",
-"badfiletype" => "\".$1\" är inte ett rekomenderat bildformat.",
-"largefile" => "Bilder ska helst inte vara större än 100k.",
+"minlength" => "Namnet på bildfilen ska vara minst tre bokstäver",
+"badfilename" => "Bildnamn har blivit ändrat till \"$1\".",
+"badfiletype" => "\".$1\" är inte ett rekomenderat bildformat.",
+"largefile" => "Bilder ska helst inte vara större än 100k.",
"successfulupload" => "Uppladdningen lyckades",
"fileuploaded" => "Filen \"$1\" laddades upp korrekt.
-Följ denna länk: ($2) till beskrivningssidan och fyll i
-information om filen, som till exempel var den kommer ifrån,
-när den skapades och vem som gjort den och allt annat du vet om den.",
+Följ den här länken: ($2) till beskrivningssidan och fyll i
+information om filen, som till exempel var den kommer ifrån,
+när den skapades och vem som gjort den och allt annat du vet om den.",
"uploadwarning" => "Uppladdnings varning",
"savefile" => "Spara fil",
"uploadedimage" => "uppladdad \"$1\"",
@@ -546,10 +611,10 @@ när den skapades och vem som gjort den och allt annat du vet om den.",
// Image list
//
"imagelist" => "Bildlista",
-"imagelisttext" => "Nedan är en lista med $1 bilder sorterad $2",
-"getimagelist" => "hämta bildlista",
+"imagelisttext" => "Nedan är en lista med $1 bilder sorterad $2",
+"getimagelist" => "hämta bildlista",
"ilshowmatch" => "Visa alla bilder med namn som matchar",
-"ilsubmit" => "Sök",
+"ilsubmit" => "Sök",
"showlast" => "Visa de senaste $1 bilderna sorterad $2.",
"all" => "alla",
"byname" => "efter namn",
@@ -559,84 +624,84 @@ när den skapades och vem som gjort den och allt annat du vet om den.",
"imgdesc" => "beskrivning",
"imglegend" => "Legend: (beskrivning) = visa/redigera bildbeskrivning.",
"imghistory" => "Bildhistoria",
-"revertimg" => "återgå",
+"revertimg" => "återgå",
"deleteimg" => "radera",
-"imghistlegend" => "Legend: (nuvarande) = detta är den nuvarande bilden,
-(ta bort) = ta bort den gamla version, (återgå) = återgå till en gammal version.
-<br><i>Klicka på ett datum för att se bilden som laddades upp den dagen</i>.", //"
-"imagelinks" => "Bildlänk",
-"linkstoimage" => "De följande sidorna länkar till denna bild:",
-"nolinkstoimage" => "Det finns ingen sida som länkar till denna bild.",
+"imghistlegend" => "Legend: (nuvarande) = detta är den nuvarande bilden,
+(ta bort) = ta bort den gamla version, (återgå) = återgå till en gammal version.
+<br><i>Klicka på ett datum för att se bilden som laddades upp den dagen</i>.", //"
+"imagelinks" => "Bildlänk",
+"linkstoimage" => "De följande sidorna länkar till den här bilden:",
+"nolinkstoimage" => "Det finns ingen sida som länkar till den här bilden.",
// Statistics
//
"statistics" => "Statistik",
"sitestats" => "Statistiksida",
-"userstats" => "Användarstatistik",
-"sitestatstext" => "Det är <b>$1</b> sidor i databasen.
+"userstats" => "Användarstatistik",
+"sitestatstext" => "Det är <b>$1</b> sidor i databasen.
Detta inkluderer diskussionssidorna, sidor om Wikipedia, mycket korta\"stub\"
sidor, omdirigeringssidor, och andra sidor som kvalificerar sig som artiklar.
-Om man tar bort ovanstående så är det <b>$2</b> sidor som anses som riktiga artiklar.<p>
-Det har varit totalt <b>$3</b> sidvisningar och det har varit <b>$4</b> sidor som har ändrats
+Om man tar bort ovanstående så är det <b>$2</b> sidor som anses som riktiga artiklar.<p>
+Det har varit totalt <b>$3</b> sidvisningar och det har varit <b>$4</b> sidor som har ändrats
sedan uppdateringen av mjukvaran (1 december 2002).
-Det vill säga <b>$5</b> ändringar per sida genomsnittligt,
-och <b>$6</b> sidvisningar per ändring.",
-"userstatstext" => "Det är <b>$1</b> registrerade användare.
-<b>$2</b> av dem är administratörer (se $3).",
+Det vill säga <b>$5</b> ändringar per sida genomsnittligt,
+och <b>$6</b> sidvisningar per ändring.",
+"userstatstext" => "Det är <b>$1</b> registrerade användare.
+<b>$2</b> av dem är administratörer (se $3).",
// Maintenance Page
//
-"maintenance" => "Underhållssida",
-"maintnancepagetext" => "Den här sidan innehåller flera verktyg för att sköta sidan. Vissa av dessa funktioner tenderar att stressa databasen (allt tar lång tid), så var snäll och tryck inte på reloadknappen varje gång du gjort en liten ändring.",
-"maintenancebacklink" => "Tillbaka till underhållssidorna",
-"disambiguations" => "Sidor med tvetydiga länkar",
-"disambiguationspage" => "Wikipedia:Länkar till sidor med tvetydiga titlar",
-"disambiguationstext" => "Följande artiklar länkar till en <i>sidor med tvetydliga titlar</i>. De ska länka till en sidor med en korrekt titel.<br>En sida behandlar som tvetydig om den länkar från $1. <br>Länkar från andra namngrupper är <i>inte</i> listade här.",
+"maintenance" => "Underhållssida",
+"maintnancepagetext" => "Den här sidan innehåller flera verktyg för att sköta sidan. Vissa av dessa funktioner tenderar att stressa databasen (allt tar lång tid), så var snäll och tryck inte på reloadknappen varje gång du gjort en liten ändring.",
+"maintenancebacklink" => "Tillbaka till underhållssidorna",
+"disambiguations" => "Sidor med tvetydiga länkar",
+"disambiguationspage" => "Wikipedia:Länkar till sidor med tvetydiga titlar",
+"disambiguationstext" => "Följande artiklar länkar till en <i>sidor med tvetydliga titlar</i>. De ska länka till en sidor med en korrekt titel.<br>En sida behandlar som tvetydig om den länkar från $1. <br>Länkar från andra namngrupper är <i>inte</i> listade här.",
"doubleredirects" => "Dubbla omdirigeringar",
-"doubleredirectstext" => "<b>OBS:</b> Denna lista kan innehålla falska resultat. Detta betyder normalt att det finns ytterligare text under den första #REDIRECT.<br>\n Varje rad innehåller en länk till den första och andra omdirigering och den första raden av den andra omdirigeringen ger oftast den \"riktiga\" artikeln, vilket egentligen den första omdirigeringen ska peka på.",
-"brokenredirects" => "Dåliga omdirigeringar",
-"brokenredirectstext" => "Följande länkar omdirigerar till en artikel som inte existerar.",
-"selflinks" => "Sidor med länkar till sig själva",
-"selflinkstext" => "Följande sidor innehåller länkar till sig själv, vilket de inte ska göra.",
+"doubleredirectstext" => "<b>OBS:</b> Den här listan kan innehålla falska resultat. Detta betyder normalt att det finns ytterligare text under den första #REDIRECT.<br>\n Varje rad innehåller en länk till den första och andra omdirigering och den första raden av den andra omdirigeringen ger oftast den \"riktiga\" artikeln, vilket egentligen den första omdirigeringen ska peka på.",
+"brokenredirects" => "DÃ¥liga omdirigeringar",
+"brokenredirectstext" => "Följande länkar omdirigerar till en artikel som inte existerar.",
+"selflinks" => "Sidor med länkar till sig själva",
+"selflinkstext" => "Följande sidor innehåller länkar till sig själv, vilket de inte ska göra.",
"mispeelings" => "Sidor med felstavningar",
-"mispeelingstext" => "Följande sidor innerhåller vanliga felstavningar, som visas i $1. Den korrekta stavningen kanske ska se ut såhär.",
+"mispeelingstext" => "Följande sidor innerhåller vanliga felstavningar, som visas i $1. Den korrekta stavningen kanske ska se ut såhär.",
"mispeelingspage" => "Lista med vanliga stavfel",
-"missinglanguagelinks" => "Saknade språklänkar",
-"missinglanguagelinksbutton" => "Sök efter saknade språklänkar för",
-"missinglanguagelinkstext" => "De här artiklarna är <i>inte</i> länkade
+"missinglanguagelinks" => "Saknade språklänkar",
+"missinglanguagelinksbutton" => "Sök efter saknade språklänkar för",
+"missinglanguagelinkstext" => "De här artiklarna är <i>inte</i> länkade
till deras i $1. Redirects och undersidor visas <i>inte</i>.",
// Miscellaneous special pages
//
-"orphans" => "Föräldralösa sidor",
-"lonelypages" => "Föräldralösa sidor",
-"unusedimages" => "Oanvända bilder",
-"popularpages" => "Populära sidor",
+"orphans" => "Föräldralösa sidor",
+"lonelypages" => "Föräldralösa sidor",
+"unusedimages" => "Oanvända bilder",
+"popularpages" => "Populära sidor",
"nviews" => "$1 visningar",
-"wantedpages" => "Önskelista",
-"nlinks" => "$1 länkar",
+"wantedpages" => "Önskelista",
+"nlinks" => "$1 länkar",
"allpages" => "Alla sidor",
"randompage" => "Slumpartikel",
"shortpages" => "Korta sidor",
-"longpages" => "Långa sidor",
-"listusers" => "Användarlista",
+"longpages" => "LÃ¥nga sidor",
+"listusers" => "Användarlista",
"specialpages" => "Speciella sidor",
"spheading" => "Speciella sidor",
-"sysopspheading" => "Speciella sidor för sysop",
-"developerspheading" => "Speciella sidor för utvecklare",
+"sysopspheading" => "Speciella sidor för sysop",
+"developerspheading" => "Speciella sidor för utvecklare",
"protectpage" => "Skydda sida",
-"recentchangeslinked" => "Relaterade ändringar",
-"rclsub" => "(till sidor som är länkade från \"$1\")",
+"recentchangeslinked" => "Relaterade ändringar",
+"rclsub" => "(till sidor som är länkade från \"$1\")",
"debug" => "Debug",
"newpages" => "Nya sidor",
-"movethispage" => "Flytta den här sidan",
-"unusedimagestext" => "<p>Lägg märket till att andra hemsidor
-som till exempel de internationella wikipedias kan länka till bilder
-med en direkt URL, och kan därför bli listade här trots att de används kontinuerligt.",
-"booksources" => "Bokkällor",
-"booksourcetext" => "Nedan följer en lista över länkar till hemsidor som säljer
-nya och begagnade böcker, och mycket annan information om de böcker du söker.
-Wikipedia har <b>inget</b> affärssamarbete med ovanstående företag och ska inte heller tolkas som en uppmuntran.",
+"movethispage" => "Flytta den här sidan",
+"unusedimagestext" => "<p>Lägg märket till att andra hemsidor
+som till exempel de internationella wikipedias kan länka till bilder
+med en direkt URL, och kan därför bli listade här trots att de används kontinuerligt.",
+"booksources" => "Bokkällor",
+"booksourcetext" => "Nedan följer en lista över länkar till hemsidor som säljer
+nya och begagnade böcker, och mycket annan information om de böcker du söker.
+Wikipedia har <b>inget</b> affärssamarbete med ovanstående företag och ska inte heller tolkas som en uppmuntran.",
// Email this user
//
@@ -644,141 +709,143 @@ Wikipedia har <b>inget</b> affärssamarbete med ovanstående företag och ska inte
"mailnologintext" => "Du ska vara<a href=\"" .
wfLocalUrl( "Special:Userlogin" ) . "\">inloggad</a>
och ha angivit en korrekt epost-adress i dina <a href=\"" .
- wfLocalUrl( "Special:Preferences" ) . "\">användarinställningar</a>
-för att kunna skicka e-post till andra användare.",
-"emailuser" => "Skicka e-post till den här användaren",
-"emailpage" => "Skicka e-post till annan användare",
-"emailpagetext" => "Om den här användaren har skrivit in en korrekt e-postadress, i sina
-användarinställningar, kommer formuläret nedan skicka ett meddelande.
-Den epost-adress du anget i dina användarinställningar kommer att skrivas
-i \"Från\"fältet i detta e-post, så mottagaren har möjlighet att svara.",
+ wfLocalUrl( "Special:Preferences" ) . "\">användarinställningar</a>
+för att kunna skicka e-post till andra användare.",
+"emailuser" => "Skicka e-post till den här användaren",
+"emailpage" => "Skicka e-post till annan användare",
+"emailpagetext" => "Om den här användaren har skrivit in en korrekt e-postadress, i sina
+användarinställningar, kommer formuläret nedan skicka ett meddelande.
+Den epost-adress du anget i dina användarinställningar kommer att skrivas
+i \"Från\"fältet i detta e-post, så mottagaren har möjlighet att svara.",
"noemailtitle" => "Ingen e-postadress",
-"noemailtext" => "Den här användaren har inte angivet en korrekt e-postadress eller
-valt att inte ta emot något mail från andra användare.",
-"emailfrom" => "Från",
+"noemailtext" => "Den här användaren har inte angivet en korrekt e-postadress eller
+valt att inte ta emot något mail från andra användare.",
+"emailfrom" => "Från",
"emailto" => "Till",
-"emailsubject" => "Ämne",
+"emailsubject" => "Ämne",
"emailmessage" => "Meddelande",
"emailsend" => "Skickat",
-"emailsent" => "E-post är nu skickat",
+"emailsent" => "E-post är nu skickat",
"emailsenttext" => "Din e-post har skickats.",
// Watchlist
//
-"watchlist" => "Min övervakningslista",
-"watchlistsub" => "(för användare \"$1\")",
-"nowatchlist" => "Du har inga sidor upptagna på din övervakningslista.",
-"watchnologin" => "Du är inte inloggad",
+"watchlist" => "Min övervakningslista",
+"watchlistsub" => "(för användare \"$1\")",
+"nowatchlist" => "Du har inga sidor upptagna på din övervakningslista.",
+"watchnologin" => "Du är inte inloggad",
"watchnologintext" => "Du ska vara<a href=\"" .
wfLocalUrl( "Special:Userlogin" ) . "\">inloggad</a>
-för att kunna göra ändringar på din övervakningslista.",
-"addedwatch" => "Tillagd på övervakningslistan",
-"addedwatchtext" => "Sidan \"$1\" har satts upp på din <a href=\"" .
- wfLocalUrl( "Special:Watchlist" ) . "\">övervakningslista</a>.
-Framtida ändringar av den här sidan och dess diskussionssida vill listas där,
+för att kunna göra ändringar på din övervakningslista.",
+"addedwatch" => "Tillagd på övervakningslistan",
+"addedwatchtext" => "Sidan \"$1\" har satts upp på din <a href=\"" .
+ wfLocalUrl( "Special:Watchlist" ) . "\">övervakningslista</a>.
+Framtida ändringar av den här sidan och dess diskussionssida vill listas där,
och sidan kommer att markeras med <b>fet stil</b> i <a href=\"" .
- wfLocalUrl( "Special:Recentchanges" ) . "\">listan över de senaste ändringarna
-</a> för att lättare kunna hittas</p>
-
-<p>Om du vill ta bort denna sida från din övervakningslista, så klicka
-\"Ta bort övervakning\" ute i sidan.",
-"removedwatch" => "Borttagen från övervakningslista",
-"removedwatchtext" => "Sidan \"$1\" har blivit borttagen från din övervakningslista",
-"watchthispage" => "Övervaka sida",
-"unwatchthispage" => "Stoppa övervakning",
+ wfLocalUrl( "Special:Recentchanges" ) . "\">listan över de senaste ändringarna
+</a> för att lättare kunna hittas</p>
+
+<p>Om du vill ta bort den här sidan från din övervakningslista, så klicka
+\"Ta bort övervakning\" ute i sidan.",
+"removedwatch" => "Borttagen från övervakningslista",
+"removedwatchtext" => "Sidan \"$1\" har blivit borttagen från din övervakningslista",
+"watchthispage" => "Övervaka sida",
+"unwatchthispage" => "Stoppa övervakning",
"notanarticle" => "Inte en artikel",
+'watch' => 'Bevaka',
+'unwatch' => 'Obevaka',
// Delete/protect/revert
//
"deletepage" => "Ta bort sida",
-"confirm" => "Bekräfta",
-"excontent" => "före radering:",
-"exbeforeblank" => "före tömning:",
+"confirm" => "Bekräfta",
+"excontent" => "före radering:",
+"exbeforeblank" => "före tömning:",
"exblank" => "sidan var tom",
-"confirmdelete" => "Bekräfta borttagning",
+"confirmdelete" => "Bekräfta borttagning",
"deletesub" => "(Tar bort \"$1\")",
-"confirmdeletetext" => "Du håller på och permanent ta bort en sida
-eller bild med all dess historia från databasen.
-Bekräfta att du förstår vad du håller på med och vilka konsekvenser
-detta leder till, och att det följer
+"confirmdeletetext" => "Du håller på och permanent ta bort en sida
+eller bild med all dess historia från databasen.
+Bekräfta att du förstår vad du håller på med och vilka konsekvenser
+detta leder till, och att det följer
[[Wikipedia:Policy]].",
-"confirmcheck" => "Ja, jag vill verkligen ta bort det här.", //"
-"actioncomplete" => "Genomfört",
+"confirmcheck" => "Ja, jag vill verkligen ta bort det här.", //"
+"actioncomplete" => "Genomfört",
"deletedtext" => "\"$1\" har blivit borttagen.
-Se $2 för lista över senaste borttagningar",
+Se $2 för lista över senaste borttagningar",
"deletedarticle" => "borttagen \"\$1\"",
"dellogpage" => "Borttagningslogg",
-"dellogpagetext" => "Nedan är en lista över de senaste borttagningarna.
-De tidsangivelser som anges följer serverns klocka (UTC).
+"dellogpagetext" => "Nedan är en lista över de senaste borttagningarna.
+De tidsangivelser som anges följer serverns klocka (UTC).
<ul>
</ul>
",
"deletionlog" => "borttagningslogg",
-"reverted" => "Återgått till yngre version",
+"reverted" => "Återgått till yngre version",
"deletecomment" => "Anledningen till borttagning",
-"imagereverted" => "Återställandet av nyare artikelversion lyckades",
+"imagereverted" => "Återställandet av nyare artikelversion lyckades",
// Undelete
//
-"undelete" => "Återställ borttagna sidor",
-"undeletepage" => "Visa och återställ borttagna sidor",
-"undeletepagetext" => "Följande sidor har blivit borttagna, men är fortfarande i arkivet och kan användas vid återställning.
-Arkivet kan ibland rensas på gamla versioner.",
-"undeletearticle" => "Återställ borttagen artikel",
+"undelete" => "Återställ borttagna sidor",
+"undeletepage" => "Visa och återställ borttagna sidor",
+"undeletepagetext" => "Följande sidor har blivit borttagna, men är fortfarande i arkivet och kan användas vid återställning.
+Arkivet kan ibland rensas på gamla versioner.",
+"undeletearticle" => "Återställ borttagen artikel",
"undeleterevisions" => "$1 versioner arkiverade",
-"undeletehistory" => "Om du återställer sidan kommer allt tidigare versioner att sparas i versionshanteraren.
-Om en ny sida med samma namn har blivit skapad sedan borttagningen så kommer den återställda versionen att
-hamna i den äldre versionshanteraren och den senaste versionen av sidan kommer inte blir automatiskt ersatt.",
+"undeletehistory" => "Om du återställer sidan kommer allt tidigare versioner att sparas i versionshanteraren.
+Om en ny sida med samma namn har blivit skapad sedan borttagningen så kommer den återställda versionen att
+hamna i den äldre versionshanteraren och den senaste versionen av sidan kommer inte blir automatiskt ersatt.",
"undeleterevision" => "Tog bort version $1",
-"undeletebtn" => "Återställd!",
-"undeletedarticle" => "återställd \"$1\"",
-"undeletedtext" => "Artikeln [[$1]] har blivit återställd
-Se [[Wikipedia:Borttagningslogg]] för en lista över nyligen gjorda borttagningar och återställningar",
+"undeletebtn" => "Återställd!",
+"undeletedarticle" => "återställd \"$1\"",
+"undeletedtext" => "Artikeln [[$1]] har blivit återställd
+Se [[Wikipedia:Borttagningslogg]] för en lista över nyligen gjorda borttagningar och återställningar",
// Contributions
//
-"contributions" => "Användarbidrag",
+"contributions" => "Användarbidrag",
"mycontris" => "Mina bidrag",
-"contribsub" => "För $1",
-"nocontribs" => "Inga ändringar var funna som motsvarar dessa kriterier",
-"ucnote" => "Nedan visas dennes användares senaste <b>$1</b> ändringar, under de senaste <b>$2</b> dagarna.",
-"uclinks" => "Visa de senaste $1 ändringarna. Visa de senaste $2 dagarna.",
+"contribsub" => "För $1",
+"nocontribs" => "Inga ändringar var funna som motsvarar dessa kriterier",
+"ucnote" => "Nedan visas dennes användares senaste <b>$1</b> ändringar, under de senaste <b>$2</b> dagarna.",
+"uclinks" => "Visa de senaste $1 ändringarna. Visa de senaste $2 dagarna.",
"uctop" => " (top)",
// What links here
//
-"whatlinkshere" => "Vilka sidor länkar hit",
-"notargettitle" => "Inget mål",
-"notargettext" => "Du har inte specificerat en sida eller användare
-för att genomföra den här funktionen.",
-"linklistsub" => "(Länklista)",
-"linkshere" => "Följande sidor länkas hit:",
-"nolinkshere" => "Inga sidor länkar hit.",
-"isredirect" => "Länka vidare sida",
+"whatlinkshere" => "Vilka sidor länkar hit",
+"notargettitle" => "Inget mål",
+"notargettext" => "Du har inte specificerat en sida eller användare
+för att genomföra den här funktionen.",
+"linklistsub" => "(Länklista)",
+"linkshere" => "Följande sidor länkas hit:",
+"nolinkshere" => "Inga sidor länkar hit.",
+"isredirect" => "Länka vidare sida",
// Block/unblock IP
//
"blockip" => "Blockera IP-adress",
-"blockiptext" => "Använd formuläret nedan för att blockera skrivåtkomst
-från en viss IP-adress
-Detta ska bara genomföras för att stoppa klotter och
-överstämma med [[Wikipedia:Politik|Wikipedia politik]].
+"blockiptext" => "Använd formuläret nedan för att blockera skrivåtkomst
+från en viss IP-adress
+Detta ska bara genomföras för att stoppa klotter och
+överstämma med [[Wikipedia:Politik|Wikipedia politik]].
Fyll i anledningen till blockering nedan (till exempel vilka artiklar som klottrats ner).",
"ipaddress" => "IP-adress",
"ipbreason" => "Anledning",
-"ipbsubmit" => "Blockera den här IP-adressen",
+"ipbsubmit" => "Blockera den här IP-adressen",
"badipaddress" => "Du har inte skrivit IP-adressen korrekt.",
-"noblockreason" => "Du måste ange en anledning till varför du blockerar.",
+"noblockreason" => "Du måste ange en anledning till varför du blockerar.",
"blockipsuccesssub" => "Blockeringen lyckades",
"blockipsuccesstext" => "IP-adressen \"$1\" har blockerats.
-<br>Se [[Speciel:Ipblocklist|IP blockeringslistan]] för alla blockeringar.",
+<br>Se [[Speciel:Ipblocklist|IP blockeringslistan]] för alla blockeringar.",
"unblockip" => "Ta bort blockering av IP-adress",
-"unblockiptext" => "Använd nedanstående formulär för att återställa skrivrättigheten för en tidigare blockerad IP-adress.",
-"ipusubmit" => "Ta bort blockering för denna adress",
-"ipusuccess" => "Blockeringen för IP-adressen \"$1\" har tagits bort",
+"unblockiptext" => "Använd nedanstående formulär för att återställa skrivrättigheten för en tidigare blockerad IP-adress.",
+"ipusubmit" => "Ta bort blockering för den här adressen",
+"ipusuccess" => "Blockeringen för IP-adressen \"$1\" har tagits bort",
-"ipblocklist" => "Lista över blockerade IP-adresser",
+"ipblocklist" => "Lista över blockerade IP-adresser",
"blocklistline" => "$1, $2 blockerade $3",
"blocklink" => "blockera",
"unblocklink" => "ta bort blockering",
@@ -786,174 +853,294 @@ Fyll i anledningen till blockering nedan (till exempel vilka artiklar som klottr
// Developer tools
//
-"lockdb" => "Lås databas",
-"unlockdb" => "Lås upp databas",
-"lockdbtext" => "En låsning av databasen hindrar alla användare från att redigera sidor, ändra inställningar och andra saker som kräver ändringar i databasen.
-Bekräfta att du verkligen vill göra detta och att du kommer att låsa upp databasen när underhållet är utfört.",
-"unlockdbtext" => "Genom att låsa upp databasen kommer alla användare att kunna redigera sidor, ändra inställningar etc. igen.
-Bekräfta att du vill göra detta.",
-"lockconfirm" => "Ja, jag vill verkligen låsa databasen.",
-"unlockconfirm" => "Ja, jag vill verkligen låsa upp databasen.",
-"lockbtn" => "Lås databasen",
-"unlockbtn" => "Lås upp databasen",
-"locknoconfirm" => "Du har inte bekräftat låsningen.",
-"lockdbsuccesssub" => "Databasen har låsts",
-"unlockdbsuccesssub" => "Databasen har låsts upp",
-"lockdbsuccesstext" => "Wikipediadatabasen är låst.
-<br>Kom ihåg att ta bort låsningen när du är färdig med ditt underhåll.",
-"unlockdbsuccesstext" => "Wikipediadatabasen är upplåst.",
+"lockdb" => "LÃ¥s databas",
+"unlockdb" => "LÃ¥s upp databas",
+"lockdbtext" => "En låsning av databasen hindrar alla användare från att redigera sidor, ändra inställningar och andra saker som kräver ändringar i databasen.
+Bekräfta att du verkligen vill göra detta och att du kommer att låsa upp databasen när underhållet är utfört.",
+"unlockdbtext" => "Genom att låsa upp databasen kommer alla användare att kunna redigera sidor, ändra inställningar etc. igen.
+Bekräfta att du vill göra detta.",
+"lockconfirm" => "Ja, jag vill verkligen låsa databasen.",
+"unlockconfirm" => "Ja, jag vill verkligen låsa upp databasen.",
+"lockbtn" => "LÃ¥s databasen",
+"unlockbtn" => "LÃ¥s upp databasen",
+"locknoconfirm" => "Du har inte bekräftat låsningen.",
+"lockdbsuccesssub" => "Databasen har låsts",
+"unlockdbsuccesssub" => "Databasen har låsts upp",
+"lockdbsuccesstext" => "Wikipediadatabasen är låst.
+<br>Kom ihåg att ta bort låsningen när du är färdig med ditt underhåll.",
+"unlockdbsuccesstext" => "Wikipediadatabasen är upplåst.",
// SQL query
//
-"asksql" => "SQL-fråga",
-"asksqltext" => "Använd nedanstående formulär för att ställa frågor direkt till Wikipedias databas.
-Använd enkla citationstecken ('så här') för att markera strängar.
-Detta belastar ofta servern hårt, så använd denna funktion med omtanke.",
-"sqlquery" => "Skriv fråga",
-"querybtn" => "Skicka fråga",
-"selectonly" => "Andra frågor än \"SELECT\" får endast utföras av Wikipedias utvecklare.",
-"querysuccessful" => "Frågan genomfördes korrekt",
+"asksql" => "SQL-fråga",
+"asksqltext" => "Använd nedanstående formulär för att ställa frågor direkt till Wikipedias databas.
+Använd enkla citationstecken ('så här') för att markera strängar.
+Detta belastar ofta servern hårt, så använd den här funktionen med omtanke.",
+"sqlquery" => "Skriv fråga",
+"querybtn" => "Skicka fråga",
+"selectonly" => "Andra frågor än \"SELECT\" får endast utföras av Wikipedias utvecklare.",
+"querysuccessful" => "Frågan genomfördes korrekt",
// Move page
//
"movepage" => "Flytta sida",
-"movepagetext" => "Formuläret nedan byter namn på sidan och flyttar hela dess historia till det nya namnet. Den gamla sidan blir en omdirigeringssida till den nya. Länkar till den gamla sidan kommer inte att ändras. Om det finns en diskussionssida kommer den inte att flyttas. <b>OBS!</b> Detta kan innebära en drastisk ändring på en populär sida; var säker på att du inser konsekvenserna i förväg.",
+"movepagetext" => "Formuläret nedan byter namn på sidan och flyttar hela dess
+ historia till det nya namnet. Den gamla sidan blir en omdirigeringssida till den nya.
+Länkar till den gamla sidan kommer inte att ändras. Om det finns en diskussionssida
+kommer den inte att flyttas.
+
+<b>OBS!</b> Detta kan innebära en drastisk ändring på en populär sida;
+var säker på att du inser konsekvenserna i förväg.",
+
"movearticle" => "Flytta sida",
"movenologin" => "Ej inloggad",
-"movenologintext" => "Du måste vara registrerad användare och ha <a href=\"" .
+"movenologintext" => "Du måste vara registrerad användare och ha <a href=\"" .
wfLocalUrl( "Speciel:Userlogin" ) . "\">loggat in</a>
-för att kunna flytta en sida.",
+för att kunna flytta en sida.",
"newtitle" => "Till ny titel",
"movepagebtn" => "Flytta sida",
"pagemovedsub" => "Sidan har flyttats",
"pagemovedtext" => "Sidan \"[[$1]]\" har flyttats till \"[[$2]]\".",
-"articleexists" => "Det finns redan en sida med detta namn eller så är namnet du angett ogiltigt. Välj ett annat namn.",
-"talkexists" => "Sidan flyttades korrekt, men den tilhörande diskussionssidan kunde inte flyttas, eftersom det redan existerar en sida med denna nya titel. Du måste sammanfoga dem manuellt.",
+"articleexists" => "Det finns redan en sida med detta namn eller så är namnet du angett ogiltigt. Välj ett annat namn.",
+"talkexists" => "Sidan flyttades korrekt, men den tilhörande diskussionssidan kunde inte flyttas, eftersom det redan existerar en sida med den här nya titeln. Du måste sammanfoga dem manuellt.",
"movedto" => "flyttat till",
-"movetalk" => "Flytta även diskussionssidan, om den finns.",
-"talkpagemoved" => "Sidans diskussionssida flyttades också.",
+"movetalk" => "Flytta även diskussionssidan, om den finns.",
+"talkpagemoved" => "Sidans diskussionssida flyttades också.",
"talkpagenotmoved" => "Sidans diskussionssida flyttades <strong>inte</strong>.",
-);
-
-class LanguageSv extends Language {
-
- function getNamespaces() {
- global $wgNamespaceNamesSv;
- return $wgNamespaceNamesSv;
- }
+# Move page
+#
+"movepage" => "Move page",
+"movepagetext" => "Using the form below will rename a page, moving all
+of its history to the new name.
+The old title will become a redirect page to the new title.
+Links to the old page title will not be changed; be sure to
+[[Special:Maintenance|check]] for double or broken redirects.
+You are responsible for making sure that links continue to
+point where they are supposed to go.
+
+Note that the page will '''not''' be moved if there is already
+a page at the new title, unless it is empty or a redirect and has no
+past edit history. This means that you can rename a page back to where
+it was just renamed from if you make a mistake, and you cannot overwrite
+an existing page.
+
+<b>WARNING!</b>
+This can be a drastic and unexpected change for a popular page;
+please be sure you understand the consequences of this before
+proceeding.",
+"movepagetalktext" => "The associated talk page, if any, will be automatically moved along with it '''unless:'''
+*You are moving the page across namespaces,
+*A non-empty talk page already exists under the new name, or
+*You uncheck the box below.
+
+In those cases, you will have to move or merge the page manually if desired.",
+"movearticle" => "Move page",
+"movenologin" => "Not logged in",
+"movenologintext" => "You must be a registered user and <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
+to move a page.",
+"newtitle" => "To new title",
+"movepagebtn" => "Move page",
+"pagemovedsub" => "Move succeeded",
+"pagemovedtext" => "Page \"[[$1]]\" moved to \"[[$2]]\".",
+"articleexists" => "A page of that name already exists, or the
+name you have chosen is not valid.
+Please choose another name.",
+"talkexists" => "The page itself was moved successfully, but the
+talk page could not be moved because one already exists at the new
+title. Please merge them manually.",
+"movedto" => "moved to",
+"movetalk" => "Move \"talk\" page as well, if applicable.",
+"talkpagemoved" => "The corresponding talk page was also moved.",
+"talkpagenotmoved" => "The corresponding talk page was <strong>not</strong> moved.",
+"1movedto2" => "$1 moved to $2",
+
+// Export
+
+"export" => "Exportera sidor",
+"exporttext" => "Du kan exportera texten och redigeringshistoriken av en specifik
+sida eller ställa in sidor wrappade i lite XML; detta kan sedan importeras till en annan
+wiki som kör MediaWiki-programvara, konverterad, eller bara sparad som syns skull.",
+"exportcuronly" => "Inkludera endast nuvarande revisionen, inte hela historiken",
+
+# Namespace 8 related
+
+"allmessages" => "Alla systemmeddelanden",
+"allmessagestext" => "Detta är en lista över alla systemmeddelanden tillgängliga i Metawiki-namespacet.",
+
+# Thumbnails
+
+"thumbnail-more" => "Förstora",
+"missingimage" => "<b>Bild saknas</b><br /><i>$1</i>\n",
+
+# tooltip help for the main actions
+'tooltip-atom' => 'Atom feed for this page',
+'tooltip-article' => 'Visa artikel [alt-a]',
+'tooltip-talk' => 'Diskutera artikel [alt-t]',
+'tooltip-edit' => 'Du kan ändra den här sidan. Var god anvand förhandsgranskningsknappen innan du sparar. [alt-e]',
+'tooltip-addsection' => 'Lägg till en kommentar på den här sidan. [alt-+]',
+'tooltip-viewsource' => 'Den här sidan är skyddad. Du kan inte se dess källa. [alt-e]',
+'tooltip-history' => 'Tidigare versioner av den här sidan, [alt-h]',
+'tooltip-protect' => 'Skydda den här sidan [alt-=]',
+'tooltip-delete' => 'Ta bort den här sidan [alt-d]',
+'tooltip-undelete' => 'Återställ $1 borttagna ändringar till den här sidan [alt-d]',
+'tooltip-move' => 'Flytta den här sidan [alt-m]',
+'tooltip-nomove' => 'Du har inte rättighet att flytta den här sidan',
+'tooltip-watch' => 'Lägg till den här sidan till din bevakningslista [alt-w]',
+'tooltip-unwatch' => 'Ta bort den här sidan från din bevakningslista [alt-w]',
+'tooltip-watchlist' => 'Lista över sidor som du bevakar [alt-l]',
+'tooltip-userpage' => 'Min användarsida [alt-.]',
+'tooltip-anonuserpage' => 'Användarsidan för ip:et du ändrar [alt-.]',
+'tooltip-mytalk' => 'Min diskussionssida [alt-n]',
+'tooltip-anontalk' => 'Diskutera ändringar från den här ip-addressen [alt-n]',
+'tooltip-preferences' => 'Mina inställningar',
+'tooltip-mycontris' => 'Lista över mina bidrag [alt-y]',
+'tooltip-login' => 'Du är uppmuntrad att logga in, men det är inget krav. [alt-o]',
+'tooltip-logout' => 'Logga ut [alt-o]',
+'tooltip-search' => 'Sök den här wikin [alt-f]',
+'tooltip-mainpage' => 'Besöka Huvudsidan [alt-z]',
+'tooltip-portal' => 'Om projektet, vad du kan göra och vart du hittar saker och ting',
+'tooltip-randompage' => 'Ladda en slumpmässig sida [alt-x]',
+'tooltip-currentevents' => 'Hitta bakgrundsinformation till nuvarande händelser',
+'tooltip-sitesupport' => 'Stöd {{SITENAME}}',
+'tooltip-help' => 'The place to find out.',
+'tooltip-recentchanges' => 'Lista över senaste ändringar på wikin. [alt-r]',
+'tooltip-recentchangeslinked' => 'Senaste ändringar till sidor som länkar hit [alt-c]',
+'tooltip-whatlinkshere' => 'Lista alla wikisidor som länkar hit [alt-b]',
+'tooltip-specialpages' => 'Lista alla specialsidor [alt-q]',
+'tooltip-upload' => 'Ladda upp bilder och media filer [alt-u]',
+'tooltip-specialpage' => 'Detta är en specialsida, du kan inte ändra den.',
+'tooltip-minoredit' => 'Markera som en mindre ändring [alt-i]',
+'tooltip-save' => 'Spara dina ändringar changes [alt-s]',
+'tooltip-preview' => 'Förhandsgranska dina ändringar, gör detta innan du sparar! [alt-p]',
+'tooltip-contributions' => 'Visa lista över bidrag från den här änvändaren',
+'tooltip-emailuser' => 'Skicka ett mail till användaren',
+'tooltip-rss' => 'RSS-matning för den här sidan',
+'tooltip-compareselectedversions' => 'Visa skillnaden mellan de två markerade versionerna av den här sidan. [alt-v]',
+
+# Metadata
+"nodublincore" => "Dublin Core RDF metadata avstängt för på den här servern.",
+"nocreativecommons" => "Creative Commons RDF metadata avstängt på den här servern.",
+"notacceptable" => "Den här wiki-servern kan inte erbjuda data i ett format som din klient kan läsa.",
+
+# Attribution
+
+"anonymous" => "Anonym användare av $wgSitename",
+"siteuser" => "$wgSitename användare $1",
+"lastmodifiedby" => "Den här sidan var senaste ändrad $1 av $2.",
+"and" => "och",
+"othercontribs" => "Baserad på arbete utfört av $1.",
+"siteusers" => "$wgSitename användare $1"
- function getBookstoreList () {
- global $wgBookstoreListSv ;
- return $wgBookstoreListSv ;
- }
-
- function getNsText( $index ) {
- global $wgNamespaceNamesSv;
- return $wgNamespaceNamesSv[$index];
- }
-
- function getNsIndex( $text ) {
- global $wgNamespaceNamesSv;
+);
- foreach ( $wgNamespaceNamesSv as $i => $n ) {
- if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
- }
+class LanguageSv extends LanguageUtf8 {
+
+ function getNamespaces() {
+ global $wgNamespaceNamesSv;
+ return $wgNamespaceNamesSv;
+ }
+
+ function getBookstoreList () {
+ global $wgBookstoreListSv ;
+ return $wgBookstoreListSv ;
+ }
+
+ function getNsText( $index ) {
+ global $wgNamespaceNamesSv;
+ return $wgNamespaceNamesSv[$index];
+ }
+
+ function getNsIndex( $text ) {
+ global $wgNamespaceNamesSv;
- // Consider Special: and Speciel: equal... which is preferred?
- if ( 0 == strcasecmp( "speciel", $text ) ) { return -1; }
- return false;
- }
-
- // inherit specialPage()
-
- function getQuickbarSettings() {
- global $wgQuickbarSettingsSv;
- return $wgQuickbarSettingsSv;
- }
-
- function getSkinNames() {
- global $wgSkinNamesSv;
- return $wgSkinNamesSv;
- }
-
- function getUserToggles() {
- global $wgUserTogglesSv;
- return $wgUserTogglesSv;
- }
-
- function getMonthName( $key )
- {
- global $wgMonthNamesSv;
- return $wgMonthNamesSv[$key-1];
- }
-
- function getMonthAbbreviation( $key )
- {
- global $wgMonthAbbreviationsSv;
- return $wgMonthAbbreviationsSv[$key-1];
- }
-
- function getWeekdayName( $key )
- {
- global $wgWeekdayNamesSv;
- return $wgWeekdayNamesSv[$key-1];
- }
-
- # Inherit userAdjust()
-
- function date( $ts, $adj = false )
- {
- if ( $adj ) { $ts = $this->userAdjust( $ts ); }
-
- $d = (0 + substr( $ts, 6, 2 )) . " " .
- $this->getMonthName( substr( $ts, 4, 2 ) ) . " " .
- substr( $ts, 0, 4 );
- return $d;
- }
-
+ foreach ( $wgNamespaceNamesSv as $i => $n ) {
+ if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
+ }
+
+ // Consider Special: and Speciel: equal... which is preferred?
+ if ( 0 == strcasecmp( "speciel", $text ) ) { return -1; }
+ return false;
+ }
+
+ // inherit specialPage()
+
+ function getQuickbarSettings() {
+ global $wgQuickbarSettingsSv;
+ return $wgQuickbarSettingsSv;
+ }
+
+ function getSkinNames() {
+ global $wgSkinNamesSv;
+ return $wgSkinNamesSv;
+ }
+
+ function getUserToggles() {
+ global $wgUserTogglesSv;
+ return $wgUserTogglesSv;
+ }
+
+ function getMonthName( $key ) {
+ global $wgMonthNamesSv;
+ return $wgMonthNamesSv[$key-1];
+ }
+
+ function getMonthAbbreviation( $key ) {
+ global $wgMonthAbbreviationsSv;
+ return $wgMonthAbbreviationsSv[$key-1];
+ }
+
+ function getWeekdayName( $key ) {
+ global $wgWeekdayNamesSv;
+ return $wgWeekdayNamesSv[$key-1];
+ }
+
+ # Inherit userAdjust()
+
+ function date( $ts, $adj = false ) {
+ if ( $adj ) { $ts = $this->userAdjust( $ts ); }
+
+ $d = (0 + substr( $ts, 6, 2 )) . " " .
+ $this->getMonthName( substr( $ts, 4, 2 ) ) . " " .
+ substr( $ts, 0, 4 );
+ return $d;
+ }
+
// "." is used as the character to separate the
// hours from the minutes in the date output
- function time( $ts, $adj = false )
- {
- if ( $adj ) { $ts = $this->userAdjust( $ts ); }
-
- $t = substr( $ts, 8, 2 ) . "." . substr( $ts, 10, 2 );
- return $t;
- }
-
- function timeanddate( $ts, $adj = false )
- {
- return $this->date( $ts, $adj ) . " kl." . $this->time( $ts, $adj );
- }
-
- function getValidSpecialPages()
- {
- global $wgValidSpecialPagesSv;
- return $wgValidSpecialPagesSv;
- }
-
- function getSysopSpecialPages()
- {
- global $wgSysopSpecialPagesSv;
- return $wgSysopSpecialPagesSv;
- }
-
- function getDeveloperSpecialPages()
- {
- global $wgDeveloperSpecialPagesSv;
- return $wgDeveloperSpecialPagesSv;
- }
-
- function getMessage( $key )
- {
- global $wgAllMessagesSv;
- if( array_key_exists( $key, $wgAllMessagesSv ) )
- return $wgAllMessagesSv[$key];
- else
- return Language::getMessage($key);
- }
-
+ function time( $ts, $adj = false ) {
+ if ( $adj ) { $ts = $this->userAdjust( $ts ); }
+
+ $t = substr( $ts, 8, 2 ) . "." . substr( $ts, 10, 2 );
+ return $t;
+ }
+
+ function timeanddate( $ts, $adj = false ) {
+ return $this->date( $ts, $adj ) . " kl." . $this->time( $ts, $adj );
+ }
+
+ function getValidSpecialPages() {
+ global $wgValidSpecialPagesSv;
+ return $wgValidSpecialPagesSv;
+ }
+
+ function getSysopSpecialPages() {
+ global $wgSysopSpecialPagesSv;
+ return $wgSysopSpecialPagesSv;
+ }
+
+ function getDeveloperSpecialPages() {
+ global $wgDeveloperSpecialPagesSv;
+ return $wgDeveloperSpecialPagesSv;
+ }
+
+ function getMessage( $key ) {
+ global $wgAllMessagesSv;
+ if( array_key_exists( $key, $wgAllMessagesSv ) )
+ return $wgAllMessagesSv[$key];
+ return "";
+ }
+
}
?>
diff --git a/languages/LanguageTa.php b/languages/LanguageTa.php
index 94e6e0309430..6c1712cb0684 100644
--- a/languages/LanguageTa.php
+++ b/languages/LanguageTa.php
@@ -43,7 +43,8 @@ require_once( "LanguageUtf8.php" );
'montparnasse' => "மொணà¯à®Ÿà¯à®ªà®¾à®°à¯à®©à®¾à®šà¯‡ (Montparnasse)",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesTa = array(
diff --git a/languages/LanguageTh.php b/languages/LanguageTh.php
index e36c9b7f5644..db6eb70b098a 100644
--- a/languages/LanguageTh.php
+++ b/languages/LanguageTh.php
@@ -34,7 +34,8 @@
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesTh = array(
diff --git a/languages/LanguageTlh.php b/languages/LanguageTlh.php
new file mode 100644
index 000000000000..6c5083397650
--- /dev/null
+++ b/languages/LanguageTlh.php
@@ -0,0 +1,56 @@
+<?php
+
+# Hooray for Klingon, the most controversial language addition to date
+
+require_once( "LanguageUtf8.php" );
+
+if ( $wgMetaNamespace == "Wikipedia" ) {
+ $wgMetaNamespace = "wIqIpe'DIya";
+}
+
+/* private */ $wgNamespaceNamesTlh = array(
+ NS_MEDIA => "Doch",
+ NS_SPECIAL => "le'",
+ NS_MAIN => "",
+ NS_TALK => "ja'chuq",
+ NS_USER => "lo'wI'",
+ NS_USER_TALK => "lo'wI'_ja'chuq",
+ NS_WIKIPEDIA => $wgMetaNamespace,
+ NS_WIKIPEDIA_TALK => $wgMetaNamespace . "_ja'chuq",
+ NS_IMAGE => "nagh_beQ",
+ NS_IMAGE_TALK => "nagh_beQ_ja'chuq",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "MediaWiki_ja'chuq",
+ NS_TEMPLATE => "chen'ay'",
+ NS_TEMPLATE_TALK => "chen'ay'_ja'chuq",
+ NS_HELP => "QaH",
+ NS_HELP_TALK => "QaH_ja'chuq",
+ NS_CATEGORY => "Segh",
+ NS_CATEGORY_TALK => "Segh_ja'chuq"
+);
+
+class LanguageTlh extends LanguageUtf8
+{
+ function getNamespaces() {
+ global $wgNamespaceNamesTlh;
+ return $wgNamespaceNamesTlh;
+ }
+
+ function getNsText( $index ) {
+ global $wgNamespaceNamesTlh;
+ return $wgNamespaceNamesTlh[$index];
+ }
+
+ function getNsIndex( $text ) {
+ global $wgNamespaceNamesTlh;
+
+ foreach ( $wgNamespaceNamesTlh as $i => $n ) {
+ if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
+ }
+ return false;
+ }
+}
+
+?>
+
+
diff --git a/languages/LanguageUk.php b/languages/LanguageUk.php
index 0ade181e1aa1..84074c2fe85b 100755
--- a/languages/LanguageUk.php
+++ b/languages/LanguageUk.php
@@ -38,6 +38,8 @@ require_once( "LanguageUtf8.php" );
'davinci' => "DaVinci",
'mono' => "Mono",
'monobook' => "MonoBook"
+,
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesUk = array(
diff --git a/languages/LanguageUr.php b/languages/LanguageUr.php
index 06a879797937..a2db1d8aaafe 100644
--- a/languages/LanguageUr.php
+++ b/languages/LanguageUr.php
@@ -19,4 +19,4 @@ class LanguageUr extends LanguageUtf8 {
}
}
-?> \ No newline at end of file
+?>
diff --git a/languages/LanguageUtf8.php b/languages/LanguageUtf8.php
index 26d8fdd411e6..45086914aeab 100644
--- a/languages/LanguageUtf8.php
+++ b/languages/LanguageUtf8.php
@@ -19,7 +19,7 @@ class LanguageUtf8 extends Language {
function ucfirst( $string ) {
# For most languages, this is a wrapper for ucfirst()
# But that doesn't work right in a UTF-8 locale
- global $wikiUpperChars, $wikiLowerChars;
+ global $wikiUpperChars;
return preg_replace (
"/^([\\x00-\\x7f]|[\\xc0-\\xff][\\x80-\\xbf]*)/e",
"strtr ( \"\$1\" , \$wikiUpperChars )",
@@ -27,7 +27,7 @@ class LanguageUtf8 extends Language {
}
function lcfirst( $string ) {
- global $wikiUpperChars, $wikiLowerChars;
+ global $wikiLowerChars;
return preg_replace (
"/^([\\x00-\\x7f]|[\\xc0-\\xff][\\x80-\\xbf]*)/e",
"strtr ( \"\$1\" , \$wikiLowerChars )",
@@ -64,6 +64,13 @@ class LanguageUtf8 extends Language {
return $this->iconv( $this->fallback8bitEncoding(), "utf-8", $s );
}
+
+ function firstChar( $s ) {
+ preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
+ '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})/', $s, $matches);
+
+ return isset( $matches[1] ) ? $matches[1] : "";
+ }
}
} # ifdef MEDIAWIKI
diff --git a/languages/LanguageWa.php b/languages/LanguageWa.php
new file mode 100644
index 000000000000..3cb704182d60
--- /dev/null
+++ b/languages/LanguageWa.php
@@ -0,0 +1,1321 @@
+<?php
+
+require_once( "LanguageUtf8.php" );
+
+# NOTE: cweri après "NOTE:" po des racsegnes so des ratournaedjes
+# k' i gn a.
+
+# NOTE: To turn off "Current Events" in the sidebar,
+# set "currentevents" => "-"
+
+# The names of the namespaces can be set here, but the numbers
+# are magical, so don't change or move them! The Namespace class
+# encapsulates some of the magic-ness.
+#
+/* private */ $wgNamespaceNamesWa = array(
+ NS_MEDIA => "Media", /* Media */
+ NS_SPECIAL => "Sipeciås", /* Special */
+ NS_MAIN => "",
+ NS_TALK => "Copene", /* Talk */
+ NS_USER => "Uzeu", /* User */
+ NS_USER_TALK => "Uzeu_copene", /* User_talk */
+ NS_WIKIPEDIA => "Wikipedia", /* Wikipedia */
+ NS_WIKIPEDIA_TALK => "Wikipedia_copene", /* Wikipedia_talk */
+ NS_IMAGE => "Imådje", /* Image */
+ NS_IMAGE_TALK => "Imådje_copene", /* Image_talk */
+ NS_MEDIAWIKI => "MediaWiki", /* MediaWiki */
+ NS_MEDIAWIKI_TALK => "MediaWiki_copene", /* MediaWiki_talk */
+ NS_TEMPLATE => "Modele",
+ NS_TEMPLATE_TALK => "Modele_copene",
+ NS_HELP => "Aidance",
+ NS_HELP_TALK => "Aidance_copene",
+ NS_CATEGORY => "Categoreye",
+ NS_CATEGORY_TALK => "Categoreye_copene",
+);
+
+/* private */ $wgQuickbarSettingsWa = array(
+ "Nole bår", "Aclawêye a hintche", "Aclawêye a droete", "Flotante a hintche"
+);
+
+/* private */ $wgSkinNamesWa = array(
+ "Sitandård", "Nostaldjike", "Bleu Cologne", "Paddington", "Montparnasse"
+);
+
+/* private */ $wgMathNamesWa = array(
+ "Håyner tofer come ene imådje PNG",
+ "Håyner en HTML si c'&nbsp;est foirt simpe, ôtmint e PNG",
+ "Håyner en HTML si c'&nbsp;est possibe, ôtmint e PNG",
+ "El leyî e TeX (po les betchteus e môde tecse)",
+ "Ricmandé po les betchteus modienes"
+);
+
+/* private */ $wgDateFormatsWa = array( /* cwè fé chal ??? */
+ "Nole preferince",
+ "January 15, 2001",
+ "15 January 2001",
+ "2001 January 15",
+ "2001-01-15"
+);
+
+/* private */ $wgUserTogglesWa = array(
+ "hover" => "Racsegnes cwand on passe so les loyéns",
+ "underline" => "Sorlignî les loyéns",
+ "highlightbroken" => "Håyner les vudes loyéns
+ <a href=\"\" class=\"new\">come çouchal</a><br> &nbsp;&nbsp;&nbsp;
+ (oudonbén: come çouchal<a href=\"\" class=\"internal\">?</a>).",
+ "justify" => "Djustifyî les hagnons",
+ "hideminor" => "Èn nén moster les <i>dierins candjmints</i> mineurs",
+ "usenewrc" => "Ramidrés <i>dierins candjmints</i> (nén tos les betchteus)",
+ "numberheadings" => "Limerotaedje otomatike des tites",
+ "editondblclick" => "Candjî les pådjes avou on dobe-clitch (JavaScript)",
+ "editsection" => "Eployî les loyéns «[candjî]» po candjî rén k'&nbsp;ene seccion",
+ "editsectiononrightclick" => "Candjî les seccions avou on dobe-clitch sol tite (JavaScript)",
+ "showtoc" => "Mostrer l'&nbsp;tåvlea d'&nbsp;ådvins<br>(po ls årtikes avou pus di 3 seccions)",
+ "rememberpassword" => "Rimimbrer li scret inte les sessions",
+ "editwidth" => "Li boesse d'&nbsp;aspougnaedje prind tote li lårdjeu",
+ "watchdefault" => "Shuve les årtikes ki dj'&nbsp;fwai ou ki dj'&nbsp;candje",
+ "minordefault" => "Prémete mes candjmints come mineurs",
+ "previewontop" => "Prévey l'&nbsp;årtike å dzeu del boesse d'&nbsp;aspougnaedje",
+ "nocache" => "Èn nén eployî d'&nbsp;muchete pol håynaedje des pådjes"
+);
+
+/* private */ $wgBookstoreListWa = array(
+ "AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
+ "PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
+ "Barnes & Noble" => "http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+ "Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1"
+);
+
+/* private */ $wgWeekdayNamesWa = array(
+ "dimegne", "londi", "mårdi", "mierkidi", "djudi",
+ "vénrdi", "semdi"
+);
+
+/* private */ $wgMonthNamesWa = array(
+ "djanvî", "fevrî", "måss", "avri", "may", "djun",
+ "djulete", "awousse", "setimbe", "octôbe", "nôvimbe",
+ "decimbe"
+);
+
+/* private */ $wgMonthAbbreviationsWa = array(
+ "dja", "fev", "mås", "avr", "may", "djn", "djl", "awo",
+ "set", "oct", "nôv", "dec"
+);
+
+# 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).
+#
+####
+#### Li no des pådjes ni s' pout nén (co?) ratourner
+#### Name of the pages is not (yet?) translatable
+####
+/* private */ $wgValidSpecialPagesWa = array(
+ "Userlogin" => "",
+ "Userlogout" => "",
+ "Preferences" => "Candjî mes preferinces",
+ "Watchlist" => "Mes pådjes shuvowes",
+ "Recentchanges" => "Dierins candjmints",
+ "Upload" => "Eberweter des imådjes",
+ "Imagelist" => "Djivêye des imådjes",
+ "Listusers" => "Uzeus eredjîstrés",
+ "Statistics" => "Sitatistikes del waibe",
+ "Randompage" => "Ã…rtike a l'&nbsp;astcheyance",
+
+ "Lonelypages" => "Årtikes ôrfulins",
+ "Unusedimages" => "Imådjes ôrfulinnes",
+ "Popularpages" => "Årtikes les pus léjhous",
+ "Wantedpages" => "Ã…rtikes les pus rcwerous",
+ "Shortpages" => "Ã…rtikes les pus courts",
+ "Longpages" => "Ã…rtikes les pus longous",
+ "Newpages" => "Årtikes novelmint askepyîs",
+ "Ancientpages" => "Årtikes les pus vîs",
+ "Intl" => "Loyéns eterlingaedjes",
+ "Allpages" => "Totes les påjdes reléjhowes sol tite",
+
+ "Ipblocklist" => "Uzeus/adresses IP di blokés",
+ "Maintenance" => "PÃ¥dje di manaedjmint",
+ "Specialpages" => "",
+ "Contributions" => "",
+ "Emailuser" => "",
+ "Whatlinkshere" => "",
+ "Recentchangeslinked" => "",
+ "Movepage" => "",
+ "Booksources" => "External book sources", # co a fé
+ "Categories" => "Categoreyes des pådjes",
+ "Export" => "XML page export", # co a fé
+
+);
+
+/* private */ $wgSysopSpecialPagesWa = array(
+ "Makesysop" => "Diner a èn uzeu on livea di manaedjeu",
+ "Blockip" => "Bloker èn uzeu/ene adresse IP",
+ "Asksql" => "Query the database", # co a fé
+ "Undelete" => "Rapexhî des disfacêyès pådjes"
+);
+
+/* private */ $wgDeveloperSpecialPagesWa = array(
+ "Lockdb" => "Mete li båze di dnêyes e môde seulmint-lére",
+ "Unlockdb" => "Rimete l'&nbsp;accès po scrire al båze di dnêyes",
+ "Debug" => "Informåcion di disbugaedje"
+);
+
+/* private */ $wgAllMessagesWa = array(
+
+# Bits of text used by many pages:
+#
+# the [] is only for *bytes*, real chars should be one by one :-(
+#"linktrail" => "/^(?:å|â|ê|î|ô|û|ç|é|è|[a-z]+)(.*)\$/sD",
+"linktrail" => "/^(å|â|ê|î|ô|û|ç|é|è|[a-z]+)(.*)\$/sD",
+"categories" => "Categoreyes des pådjes",
+"category" => "categoreye",
+"category_header" => "Årtikes el categoreye «%s»",
+"subcategories" => "Dizo-categoreyes",
+"mainpage" => "Mwaisse pådje",
+"mainpagetext" => "Li programe Wiki a stî astalé a l'&nbsp;idêye.",
+"about" => "Ã… dfait",
+"aboutwikipedia" => "Ã… dfait di Wikipedia",
+"aboutpage" => "Wikipedia:Ã… dfait",
+"help" => "Aidance",
+"helppage" => "Wikipedia:Aidance",
+"wikititlesuffix" => "Wikipedia",
+"bugreports" => "Rapoirts di bugs",
+"bugreportspage" => "Wikipedia:Rapoirts di bugs",
+"sitesupport" => "Ecwårlaedje",
+"sitesupportpage" => "", # If not set, won't appear. Can be wiki page or URL
+"faq" => "FAQ", # co a fé
+"faqpage" => "Wikipedia:FAQ", # co a fé
+"edithelp" => "Aidance",
+"edithelppage" => "Wikipedia:Kimint_candjî_ene_pådje",
+"cancel" => "Rinoncî",
+"qbfind" => "Trover",
+"qbbrowse" => "Foyter",
+"qbedit" => "Candjî",
+"qbpageoptions" => "Cisse pådje ci",
+"qbpageinfo" => "Contecse",
+"qbmyoptions" => "Mes pådjes",
+"qbspecialpages" => "Pådjes sipeciåles",
+"moredotdotdot" => "Co dpus...",
+"mypage" => "Mi pådje",
+"mytalk" => "Mi copinaedje",
+#"currentevents" => "-", /* pol dismete */
+"currentevents" => "Actouwålités",
+"errorpagetitle" => "Aroke",
+"returnto" => "Rivni al pådje «$1».",
+"fromwikipedia" => "Èn årtike di Wikipedia, li libe eciclopedeye.",
+"help" => "Aidance",
+"search" => "Cweri",
+"history" => "Istwere del pådje",
+"printableversion" => "Modêye sicrirece-amishtåve",
+"editthispage" => "Candjî&nbsp;l'&nbsp;pådje",
+"deletethispage" => "Disfacer l'&nbsp;pådje",
+"protectthispage" => "Protedjî l'&nbsp;pådje",
+"unprotectthispage" => "Disprotedjî l'&nbsp;pådje",
+"newpage" => "Novele pådje",
+"talkpage" => "Copene sol pådje",
+"postcomment" => "Sicrire on comintaire",
+"articlepage" => "Vey l'&nbsp;Ã¥rtike",
+"subjectpage" => "Vey li sudjet", # For compatibility
+"userpage" => "Vey li pådje di l'&nbsp;uzeu",
+"wikipediapage" => "Vey li meta-pådje",
+"imagepage" => "Vey li pådje di l'&nbsp;imådje",
+"viewtalkpage" => "Vey li pådje di copene",
+"otherlanguages" => "Ôtes lingaedjes",
+"redirectedfrom" => "(Redjiblé di $1)",
+"lastmodified" => "Cisse pådje a stî candjeye pol dierin côp li $1.",
+"viewcount" => "Cisse pådje la a stî léjhowe $1 côps.",
+"gnunote" => "Tos les tecses chal sont dizo l'&nbsp;libe licince <a class=internal href='/wiki/GFDL'>GFDL (licince di documintåcion libe di GNU)</a>.",
+"printsubtitle" => "(di http://wikipedia.walon.org)",
+"protectedpage" => "PÃ¥dje protedjeye",
+"administrators" => "Wikipedia:Manaedjeus",
+"sysoptitle" => "I vs fåt esse manaedjeu",
+"sysoptext" => "The action you have requested can only be
+performed by users with \"sysop\" status.
+See $1.", # co a fé
+"developertitle" => "I vs fåt esse diswalpeu",
+"developertext" => "The action you have requested can only be
+performed by users with \"developer\" status.
+See $1.", # co a fé
+"nbytes" => "$1 octets",
+"go" => "Potchî",
+"ok" => "'l est bon",
+"sitetitle" => "Wikipedia",
+"sitesubtitle" => "Li libe eciclopedeye",
+"retrievedfrom" => "Prin del pådje «$1»",
+"newmessages" => "Vos avoz des $1.",
+"newmessageslink" => "noveas messaedjes",
+"editsection" => "candjî",
+"toc" => "Ã…dvins",
+"showtoc" => "mostrer",
+"hidetoc" => "catchî",
+"thisisdeleted" => "Vey ou rapexhî $1?",
+"restorelink" => "$1 candjmints disfacés",
+
+# Main script and global functions
+#
+"nosuchaction" => "Nole sifwaite accion",
+"nosuchactiontext" => "L'&nbsp;accion specifieye pal hårdêye n'&nbsp;est
+nén ricnoxhowe på wiki.",
+"nosuchspecialpage" => "Nole sifwaite pådje",
+"nospecialpagetext" => "Vos avoz dmandé ene pådje sipeciåle ki n'&nbsp;est
+nén ricnoxhowe på wiki.",
+
+# General errors
+#
+"error" => "Aroke",
+"databaseerror" => "Åk n'&nbsp;a nén stî avou l'&nbsp;båze di dnêyes",
+"dberrortext" => "A database query syntax error has occurred.
+This could be because of an illegal search query (see $5),
+or it may indicate a bug in the software.
+The last attempted database query was:
+<blockquote><tt>$1</tt></blockquote>
+from within function \"<tt>$2</tt>\".
+MySQL returned error \"<tt>$3: $4</tt>\".", # co a fé
+"dberrortextcl" => "A database query syntax error has occurred.
+The last attempted database query was:
+\"$1\"
+from within function \"$2\".
+MySQL returned error \"$3: $4\".\n", # co a fé
+"noconnect" => "Mande escuzes! Li wiki a des rujhes tecnikes pol moumint, eyet c'&nbsp;est nén possibe di s'&nbsp;raloyî al båze di dnêyes.",
+"nodb" => "Dji n'&nbsp;sai tchoezi l'&nbsp;båze di dnêyes $1",
+"cachederror" => "The following is a cached copy of the requested page, and may not be up to date.", # co a fé
+"readonly" => "Database locked", # co a fé
+"enterlockreason" => "Enter a reason for the lock, including an estimate
+of when the lock will be released", # co a fé
+"readonlytext" => "The database is currently locked to new
+entries and other modifications, probably for routine database maintenance,
+after which it will be back to normal.
+The administrator who locked it offered this explanation:
+<p>$1", # co a fé
+"missingarticle" => "The database did not find the text of a page
+that it should have found, named \"$1\".
+
+<p>This is usually caused by following an outdated diff or history link to a
+page that has been deleted.
+
+<p>If this is not the case, you may have found a bug in the software.
+Please report this to an administrator, making note of the URL.", # co a fé
+"internalerror" => "Divintrinne aroke",
+"filecopyerror" => "Dji n'&nbsp;a savou copyî l'&nbsp;fitchî «$1» viè «$2».",
+"filerenameerror" => "Dji n'&nbsp;a savou rlomer l'&nbsp;fitchî «$1» e «$2».",
+"filedeleteerror" => "Dji n'&nbsp;a savou disfacer l'&nbsp;fitchî «$1».",
+"filenotfound" => "Dji n'&nbsp;a savou trover l'&nbsp;fitchî «$1».",
+"unexpected" => "Valixhance nén ratindowe: «$1»=«$2».",
+"formerror" => "Error: could not submit form", # co a fé
+"badarticleerror" => "This action cannot be performed on this page.", # co a fé
+"cannotdelete" => "Could not delete the page or image specified. (It may have already been deleted by someone else.)", # co a fé
+"badtitle" => "MÃ¥va tite",
+"badtitletext" => "The requested page title was invalid, empty, or
+an incorrectly linked inter-language or inter-wiki title.", # co a fé
+"perfdisabled" => "Mande escuzes! mins cisse fonccionålité ci a stî essoctêye
+pol moumint pask'&nbsp;ele est trop pezante pol båze di dnêyes, ki dvént
+si télmint londjinne k'&nbsp;on s'&nbsp;endè pout pus siervi a môde di djin.",
+"perfdisabledsub" => "Vochal ene copeye k'&nbsp;a stî schapêye di $1:",
+"wrong_wfQuery_params" => "Parametes incoreks po wfQuery()<br />
+Fonccion: $1<br />
+Cweraedje: $2
+",
+"viewsource" => "Vey côde sourdant",
+"protectedtext" => "Cisse pådje chal a stî protedjeye siconte des candjmints;
+i gn a sacwantès råjhons po çoula, loukîz
+[[{{ns:4}}:PÃ¥dje protedjeye]] s'&nbsp;i vs plait.
+
+Mins nerén vos ploz vey eyet copyî li côde sourdant del pådje:",
+
+
+# Login and logout pages
+#
+"logouttitle" => "Dislodjaedje",
+"logouttext" => "Vos vs avoz dislodjî.
+Vos ploz continouwer a naivyî so {{SITENAME}} anonimmint, oudonbén
+vos relodjî dizo l'&nbsp;minme uzeu ou dizo èn uzeu diferin.",
+
+"welcomecreation" => "<h2>Bénvnowe, $1!</h2>
+<p>
+Vosse conte a stî ahivé.
+Èn rovyîz nén di candjî les preferinces di {{SITENAME}} a vosse môde.",
+
+"loginpagetitle" => "Elodjaedje",
+"yourname" => "Vosse no d'&nbsp;elodjaedje",
+"yourpassword" => "Vosse sicret",
+"yourpasswordagain" => "Ritapez vosse sicret",
+"newusersonly" => " (seulmint po les noveas uzeus)",
+"remembermypassword" => "Rimimbrer m'&nbsp;sicret inte les sessions.",
+"loginproblem" => "<b>Åk n'&nbsp;a nén stî tot vs elodjant.</b><br />Rissayîz!",
+"alreadyloggedin" => "<font color=red><b>Uzeu $1, vos estoz ddja elodjî!</b></font><br />",
+
+"areyounew" => "Si vos estoz novea so {{SITENAME}} et ki vos vloz
+on conte d'&nbsp;uzeu, tapez on no no d'&nbsp;uzeu ki vos vloz eployî,
+et poy deus côps on on scret (li minme, on côp dins tchake boesse).
+Come rawete vos ploz (mins c'&nbsp;est nén oblidjî) dner voste adresse
+emile; ça vént a pont si vos rovyîz vosse sicret, po dmander k'&nbsp;on
+vs evoye èn ôte pa emile.<br>\n",
+
+"login" => "S'&nbsp;elodjî",
+"loginprompt" => "Vos dvoz permete les coûkes po vs elodjî so Wikipedia.",
+"userlogin" => "S' elodjî", # pont d' "nbsp" chal
+"logout" => "Si dislodjî",
+"userlogout" => "Si dislodjî",
+"notloggedin" => "Nén elodjî",
+"createaccount" => "Ahiver on novea conte",
+"createaccountmail" => "pa emile",
+"badretype" => "Vos avoz dné deus screts diferins.",
+"userexists" => "Li no d'&nbsp;uzeu ki vs avoz tchoezi est ddja eployî. Tchoezixhoz è èn ôte s'&nbsp;i vs plait.",
+"youremail" => "Vost emile*",
+"yournick" => "Vosse no metou (po les sinateures)",
+"emailforlost" => "Les tchamps avou ene sitoele (*)
+èn sont nén obligatweres.<br />
+L'&nbsp;adresse emile, si vos ndè dnez ene, vos permetrè di rçure et
+d'&nbsp;evoyî des emiles å dtruviè di cisse waibe chal, sins vos dveur
+diner voste adresse emile, çoula vos srè eto foirt ahessåve si vos rovyîz
+måy vosse sicret (on novea scret vos pôrè-st esse evoyî pa emile).<br />
+Vosse vraiy no, si vos l'&nbsp;dinez, pôrè esse eployî po mete a costé
+di vos ovraedjes.",
+"loginerror" => "Aroke d'&nbsp;elodjaedje",
+"nocookiesnew" => "Li conte a stî ahivé, mins vos n'&nbsp;estoz nén elodjî. {{SITENAME}} eploye des coûkes po l'&nbsp;elodjaedje des uzeus. Vos avoz dismetou l'&nbsp;sopoirt des coûkes dins vosse betchteu waibe; rimetoz l'&nbsp;en alaedje et relodjîz vs avou vosse novea no d'&nbsp;elodjaedje eyet scret, s'&nbsp;i vs plait.",
+"nocookieslogin" => "{{SITENAME}} eploye des coûkes po l'&nbsp;elodjaedje des uzeus. Vos avoz dismetou l'&nbsp;sopoirt des coûkes dins vosse betchteu waibe; rimetoz l'&nbsp;en alaedje et relodjîz vs s'&nbsp;i vs plait.",
+"noname" => "Vos n'&nbsp;avoz nén dné di no d'&nbsp;uzeu valide.",
+"loginsuccesstitle" => "Vos estoz elodjî",
+"loginsuccess" => "L'&nbsp;elodjaedje a stî comifåt, asteure vos estoz elodjî dins {{SITENAME}} dizo l'&nbsp;no d'&nbsp;uzeu «$1».",
+"nosuchuser" => "I gn a nou uzeu dizo l'&nbsp;no «$1».
+Verifyîz çou k'&nbsp;vos avoz tapé, oudonbén rimplixhoz les ôtes tchamps
+et clitchîz sol boton po-z ahiver on novea conte.",
+"wrongpassword" => "Li scret ki vs avoz dné est måva. Rissayîz s'&nbsp;i vs plait.",
+"mailmypassword" => "M'&nbsp;emiler on novea scret",
+"passwordremindertitle" => "Rimimbraedje do scret po Wikipedia",
+"passwordremindertext" => "Ene sakî (probåblumint vos minme, avou l' adresse IP $1)
+a dmandé k' on vs emile on novea scret po vs elodjî so Wikipedia.
+Li scret po l' uzeu «$2» est asteure «$3».
+Po pus di såvrité, vos dvrîz vos elodjî eyet rcandjî vosse sicret å pus abeye.", # pont d' "&nbsp;" chal, ca c' est po-z esse emilé.
+"noemail" => "I gn a pont d'&nbsp;adresse emile di cnoxhowe po l'&nbsp;uzeu «$1».",
+"passwordsent" => "On novea scret a stî emilé a l'&nbsp;adresse emile
+racsegneye po l'&nbsp;uzeu «$1».
+Relodjîz vs avou ç'&nbsp;noû scret on côp ki vos l'&nbsp;åroz rçuvou s'&nbsp;i vs plait.",
+
+# Edit pages
+#
+"summary" => "Rascourti",
+"subject" => "Sudjet/tiestire",
+"minoredit" => "C'&nbsp;est on candjmint mineur",
+"watchthis" => "Shure cist årtike",
+"savearticle" => "Schaper l'&nbsp;pådje",
+"preview" => "Vey divant",
+"showpreview" => "Vey divant",
+"blockedtitle" => "L'&nbsp;uzeu est bloké",
+"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:Manaedjeus|administrators]] to discuss the block.
+
+Note that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Sipeciås:Preferences|user preferences]].
+
+Your IP address is $3. Please include this address in any queries you make.
+
+==Note to AOL users==
+Due to continuing acts of vandalism by one particular AOL user, Wikipedia often blocks AOL proxies. Unfortunately, a single proxy server may be used by a large number of AOL users, and hence innocent AOL users are often inadvertently blocked. We apologise for any inconvenience caused.
+
+If this happens to you, please email an administrator, using an AOL email address. Be sure to include the IP address given above.
+", # co a fé
+"whitelistedittitle" => "S'&nbsp;elodjî po candjî",
+"whitelistedittext" => "I vs fåt [[Sipeciås:Userlogin|elodjî]] po pleur candjî les årtikes.",
+"whitelistreadtitle" => "S'&nbsp;elodjî po lére",
+"whitelistreadtext" => "I vs fåt [[Sipeciås:Userlogin|elodjî]] po pleur lére les årtikes.",
+"whitelistacctitle" => "Vos n'&nbsp;avoz nén l'&nbsp;permission d'&nbsp;ahiver on conte chal",
+"whitelistacctext" => "Po pleur ahiver on conte so ç'&nbsp;Wiki chal, vos dvoz esse [[Sipeciås:Userlogin|elodjî]] ey aveur les bounès permissions.",
+"accmailtitle" => "Li scret a stî evoyî.",
+"accmailtext" => "Li scret po «$1» a stî evoyî a $2.",
+"newarticle" => "(Novea)",
+"newarticletext" =>
+"Vos avoz clitchî so on loyén viè ene pådje ki n'&nbsp;egzistêye nén co.
+Mins '''vos''' l'&nbsp;poloz askepyî! Po çoula, vos n'&nbsp;avoz k'&nbsp;a
+cmincî a taper vosse tecse dins l'&nbsp;boesse di tecse chal pa dzo
+(alez vey li [[Wikipedia:Aidance|pådje d'&nbsp;aidance]] po pus
+d'&nbsp;informåcion).
+Si vos n'&nbsp;voloz nén scrire cisse pådje chal, clitchîz simplumint
+sol boton '''En erî''' di vosse betchteu waibe po rivni al pådje di dvant.",
+"anontalkpagetext" => "---- ''Çouchal c'&nbsp;est li pådje di copene po
+èn uzeu anonime ki n'&nbsp;a nén (co) fwait on conte por lu s'&nbsp;elodjî,
+ou ki nel eploye nén. Do côp, on doet eployî si [[adresse IP]] limerike po
+l'&nbsp;idintifyî. Come ene sifwaite adresse IP pout esse eployeye pa pus
+d'&nbsp;èn uzeu, i s'&nbsp;pout ki vos voeyoz chal des rimåkes et des
+messaedjes ki n'&nbsp;sont nén por vos, loukîz s'&nbsp;i vs plait po
+[[Sipeciås:Userlogin|fé on novea conte ou s'&nbsp;elodjî]] po n'&nbsp;pus
+aveur di confuzion avou des ôtes uzeus anonimes.'' ",
+"noarticletext" => "(I gn a pol moumint nou tecse e cisse pådje chal)",
+"updated" => "(Ramidré)",
+"note" => "<strong>Note:</strong> ",
+"previewnote" => "Èn rovyîz nén ki c'&nbsp;est djusse on
+prévoeyaedje, li pådje n'&nbsp;est nén co schapêye!",
+"previewconflict" => "Ci prévoeyaedje ci mostere kimint kel tecse del
+boesse di tecse do dzeu sereut håyné si vos decidez di clitchî so «schaper».",
+"editing" => "Candjant $1",
+"sectionedit" => " (seccion)",
+"commentedit" => " (comintaire)",
+"editconflict" => "Conflit inte deus candjmints: $1",
+"explainconflict" => "Ene sakî a candjî l'&nbsp;pådje do tins ki vos
+estîz a scrire.
+Li boesse di tecse do dzeur mostere li tecse del pådje come il est
+pol moumint sol sierveu.
+Li tecse da vosse est sol boesse di tecse do dzo.
+Les diferinces sont håynêyes å mitan.
+Vos dvoz mete vos candjmints dins l'&nbsp;tecse d'&nbsp;asteure (Ã¥ dzeur)
+si vos lez vloz co evoyî.
+<b>Seulmint</b> li tecse do dzeur serè candjî cwand vos clitchroz sol
+boton «Schaper l'nbsp;pådje».\n<p>",
+"yourtext" => "Li tecse da vosse",
+"storedversion" => "Modêye sol sierveu",
+"editingold" => "<strong>ASTEME: Vos estoz ki candje ene viye modêye
+del pådje. Si vos l'&nbsp;schapez, tos les candjmints k'&nbsp;ont stî
+fwaits dispoy adon si vont piede.</strong>\n",
+"yourdiff" => "Diferinces",
+"copyrightwarning" => "Notez ki totes les contribucions fwaites po {{SITENAME}}
+dvèt esse dizo li licince di documintåcion libe di GNU
+(GFDL, loukîz $1 po pus di racsegnes).
+Si&nbsp;vos n'&nbsp;voloz nén ki vosse tecse poye esse candjî eyet spårdou
+pa tot l'&nbsp;minme kî, adon nel evoyîz nén chal.
+<br>
+Vos nos acertinez eto ki vos avoz scrît l'&nbsp;tecse vos minme, oudonbén
+l'&nbsp;avoz copyî d'&nbsp;on sourdant libe (dominne publik ou on sourdant
+pareymint libe).
+<br>
+<strong>N'&nbsp;EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION&nbsp;!</strong>",
+"longpagewarning" => "ASTEME: Cisse pådje fwait $1 kilo-octets; des
+betchteus waibes k'&nbsp;i gn a polèt aveut des rujhes po-z aspougnî
+des pådjes k'&nbsp;aprepièt ou di pus di 32&nbsp;Ko.
+Vos dvrîz tuzer a pårti l'&nbsp;pådje e pus ptits bokets.",
+"readonlywarning" => "ASTEME: On-z overe sol båze di dnêyes pol moumint, ey elle a stî metowe e mode seulmint-lére.
+Do côp, vos n'&nbsp;såroz schaper vos candjmints asteure; motoit vos dvrîz copyî et aclaper l'&nbsp;tecse dins on fitchî da vosse pol poleur rimete sol {{SITENAME}} pus tård.",
+"protectedpagewarning" => "ASTEME: Cisse pådje chal a stî protedjeye siconte
+des candjmints, seulmint les uzeus avou èn accès di manaedjeu el polèt candjî.
+Acertinez vs ki vos shuvoz les
+<a href='/wiki/Wikipedia:Rîles_po_les_pådjes_protedjeyes'>rîles po les pådjes
+protedjeyes</a>.",
+
+# History pages
+#
+"revhistory" => "Istwere des modêyes",
+"nohistory" => "I gn a pont d'&nbsp;istwere des modêyes po cisse pådje chal.",
+"revnotfound" => "Modêye nén trovêye",
+"revnotfoundtext" => "Li viye modêye del pådje ki vos avoz dmandé n'&nbsp;a nén stî trovêye.
+Verifyîz l'&nbsp;hårdêye ki vs avoz eployî po-z ariver sol pådje s'&nbsp;i vs plait.\n",
+"loadhist" => "Tcherdjaedje del pådje di l'&nbsp;istwere",
+"currentrev" => "Modêye d'&nbsp;asteure",
+"revisionasof" => "Modêye do $1",
+"cur" => "ast.",
+"next" => "shuv.",
+"last" => "dif.",
+"orig" => "oridj.",
+"histlegend" => "Ledjinde: (ast.) = diferince avou l'&nbsp;modêye d'&nbsp;asteure,
+(dif.) = diferince avou l'&nbsp;modêye di dvant, M = candjmint mineur",
+
+# Diffs
+#
+"difference" => "(Diferinces inte les modêyes)",
+"loadingrev" => "tcherdjaedje del modêye po les diferinces",
+"lineno" => "Roye $1:",
+"editcurrent" => "Candjî li modêye do moumint di cisse pådje chal",
+
+# Search results
+#
+"searchresults" => "Rizultats do cweraedje",
+"searchhelppage" => "Wikipedia:Cweraedje",
+"searchingwikipedia" => "Cweraedje so Wikipedia",
+"searchresulttext" => "Po pus di racsegnes sol manire di fé des cweraedjes so Wikipedia, loukîz $1.",
+"searchquery" => "Pol cweraedje «$1»",
+"badquery" => "Badly formed search query", # co a fé
+"badquerytext" => "We could not process your query.
+This is probably because you have attempted to search for a
+word fewer than three letters long, which is not yet supported.
+It could also be that you have mistyped the expression, for
+example \"fish and and scales\".
+Please try another query.", # co a fé
+"matchtotals" => "Li cweraedje «$1» a trové $2 årtikes avou l'&nbsp;tite
+ki corespond eyet $3 årtikes avou l'&nbsp;tecse ki corespond.",
+"nogomatch" => "I n'&nbsp;a nole pådje avou ç'&nbsp;tite la, dji saye on cweraedje dins l'&nbsp;tecse des årtikes.",
+"titlematches" => "Ã…rtikes avou on tites ki corespond",
+"notitlematches" => "Nol årtike avou on tite ki corespond",
+"textmatches" => "Ã…rtikes avou do tecse ki corespond",
+"notextmatches" => "Nol årtike avou do tecse ki corespond",
+"prevn" => "$1 di dvant",
+"nextn" => "$1 shuvants",
+"viewprevnext" => "Vey ($1) ($2) ($3).",
+"showingresults" => "Chal pa dzo <b>$1</b> rizultats a pårti do limero <b>$2</b>.",
+"showingresultsnum" => "Chal pa dzo <b>$3</b> rizultats a pårti do limero <b>$2</b>.",
+"nonefound" => "<strong>Note</strong>: des cweraedjes ki n'&nbsp;dinèt nou rzultat c'&nbsp;est sovint li cweraedje di ptits mots trop corants (come «les», «des») ki n'&nbsp;sont nén indecsés, oudonbén des cweraedjes di pus d'&nbsp;on mot (seulmint les pådjes avou tos les mots dmandés sront håynêyes dins l'&nbsp;rizultat do cweraedje).",
+"powersearch" => "Cweri",
+"powersearchtext" => "
+Cweraedje ezès espåces di nos&nbsp;:<br>
+$1<br>
+$2 Håyner les redjiblaedjes &nbsp; Cweri après $3 $9",
+"searchdisabled" => "<p>Mande escuzes! Li cweraedje å dvins des årtikes a stî dismetou
+pol moumint, cåze ki l'&nbsp;sierveu est fortcherdjî.
+Tot ratindant, vos ploz eployî Google po fé les rcweraedjes,
+mins çoula pout esse ene miete vî.</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=\"$1\">
+<INPUT type=submit name=btnG VALUE=\"Cweri avou Google\">
+<font size=-1>
+<input type=hidden name=domains value=\"{$wgServer}\"><br>
+<input type=radio name=sitesearch value=\"\"> sol waibe
+<input type=radio name=sitesearch value=\"{$wgServer}\" checked> so {$wgServer} <br>
+<input type='hidden' name='hl' value='wa'>
+<input type='hidden' name='ie' value='$2'>
+<input type='hidden' name='oe' value='$2'>
+</font>
+</td></tr></TABLE>
+</FORM>
+<!-- SiteSearch Google -->",
+"blanknamespace" => "(Mwaisse)",
+
+# Preferences page
+#
+"preferences" => "Preferinces",
+"prefsnologin" => "Vos n'&nbsp;estoz nén elodjî",
+"prefsnologintext" => "I vs fåt esse <a href=\"" .
+ wfLocalUrl( "Sipeciås:Userlogin" ) . "\">elodjî</a>
+po pleur candjî vos preferinces.",
+"prefslogintext" => "Vos estoz elodjî dizo l'&nbsp;uzeu «$1».
+Vosse divintrin idintifiant est l'&nbsp;limero $2.
+
+Loukîz a [[Wikipedia:Aidance so les preferinces]] po saveur çou k'&nbsp;c'&nbsp;est tchaeke des tchuzes des preferinces des uzeus.",
+"prefsreset" => "Les preferinces ont stî rmetowes come d'&nbsp;avance a
+pårti des wårdêyès valixhances.",
+"qbsettings" => "Apontiaedjes pol bår di menu",
+"changepassword" => "Candjî l'&nbsp;sicret",
+"skin" => "Pea",
+"math" => "HÃ¥ynaedje des formules matematikes",
+"dateformat" => "Cogne del date",
+"math_failure" => "Failed to parse", # co a fé
+"math_unknown_error" => "aroke nén cnoxhowe",
+"math_unknown_function" => "fonccion nén cnoxhowe ",
+"math_lexing_error" => "lexing error", # co a fé
+"math_syntax_error" => "aroke di sintacse",
+"saveprefs" => "Schaper les preferinces",
+"resetprefs" => "Rimete les prémetowès valixhances",
+"oldpassword" => "Vî scret",
+"newpassword" => "Noû scret",
+"retypenew" => "Ritapez l'&nbsp;noû scret",
+"textboxsize" => "Grandeu del boesse di tecse",
+"rows" => "Royes",
+"columns" => "Colones",
+"searchresultshead" => "HÃ¥ynaedje des rzultats di cweraedje",
+"resultsperpage" => "Nombe di responses a håyner so en pådje",
+"contextlines" => "Nombe di royes a håyner po ene response",
+"contextchars" => "Nombe di caracteres di contecse pa roye",
+"stubthreshold" => "Grandeu minimom po håyner les courts årtikes",
+"recentchangescount" => "Nombe di tites dins les <i>dierins candjmints</i>",
+"savedprefs" => "Vos preferinces ont stî schapêyes.",
+"timezonetext" => "Tapez li nombe d'&nbsp;eures di diferince avou
+l'&nbsp;tins univiersel (UTC).",
+"localtime" => "Håyner l'&nbsp;eure locåle",
+"timezoneoffset" => "Diferince d'&nbsp;eures",
+"servertime" => "Server time is now", # co a fé
+"guesstimezone" => "Fill in from browser", # co a fé
+"emailflag" => "Èn nén riçure des emiles des ôtes uzeus",
+"defaultns" => "Prémetous spåces di nos pol cweraedje:",
+
+# Recent changes
+#
+"changes" => "candjmints",
+"recentchanges" => "Dierins candjmints",
+"recentchangestext" => "Shuvoz chal les dierins candjmints k'&nbsp;i gn a yeu
+dzo Wikipedia.",
+"rcloaderr" => "Tcherdjant les dierins candjmints",
+"rcnote" => "Chal pa dzo les <strong>$1</strong> dierins candjmints des dierins <strong>$2</strong> djoûs.",
+"rcnotefrom" => "Chal pa dzo les candjmints dispoy li <b>$2</b> (disk'&nbsp;a <b>$1</b> di mostrés).",
+"rclistfrom" => "Mostrer les candjmints k'&nbsp;i gn a yeu a pårti do $1",
+# "rclinks" => "Mostrer les $1 dierins candjmints des dierins $2 djoûs.",
+"showhideminor" => "$1 candmints mineurs",
+"rclinks" => "Mostrer les $1 dierins candjmints des dierins $2 djoûs; $3",
+"rchide" => "e $4; $1 candjmints mineurs; $2 nos d'&nbsp;espåces segondaires; $3 candjmints multipes.",
+"rcliu" => "; $1 candjmints pa des uzeus eredjîstrés",
+"diff" => "dif.",
+"hist" => "ist.",
+"hide" => "cat.",
+"show" => "håy.",
+"tableform" => "tåvlea",
+"listform" => "djivêye",
+"nchanges" => "$1 candjmints",
+"minoreditletter" => "M",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload" => "Eberweter on fitchî",
+"uploadbtn" => "Eberweter",
+"uploadlink" => "Eberweter des imådjes",
+"reupload" => "Reberweter",
+"reuploaddesc" => "Rivni al pådje d'&nbsp;eberwetaedje.",
+"uploadnologin" => "Nén elodjî",
+"uploadnologintext" => "I vs fåt esse <a href=\"" .
+ wfLocalUrl( "Sipeciås:Userlogin" ) . "\">elodjî</a> por
+vos pleur eberweter des fitchîs.",
+"uploadfile" => "Eberweter des imådjes, des sons, evnd.",
+"uploaderror" => "Aroke d'&nbsp;eberwetaedje",
+"uploadtext" => "<strong>ASTEME!</strong> Divant d'&nbsp;eberweter on
+fitchî chal, léjhoz et s'&nbsp;vos asseurer di bén shure
+les <a href=\"" .
+wfLocalUrlE( "Wikipedia:Rîles_po_l'_eployaedje_des_imådjes" ) . "\">rîles po
+l'&nbsp;eployaedje des imådjes</a> di Wikipedia.
+<p>
+Si on fitchî avou l'&nbsp;minme no egzistêye dedja, i srè replaecî
+sins adviertixhmint pa l'&nbsp;ci ki vos årîz eberweté.
+Dj'&nbsp;ô bén ki, a moens ki vos vôrîz mete a djoû on fitchî tot
+l'&nbsp;replaeçant pa on pus noû, vos dvrîz tofer vos acertiner
+k'&nbsp;i n'&nbsp;a nén ddja on fitchî do minme no.
+<p>
+Po håyner ou cweri des imådjes k'&nbsp;ont ddja stî rçuvowes,
+alez sol <a href=\"" . wfLocalUrlE( "Sipeciås:Imagelist" ) .
+"\">djivêye des imådjes dedja eberwetêyes</a>.
+Les eberwetaedjes et disfaçaedjes sont metous èn on <a href=\"" .
+wfLocalUrlE( "Wikipedia:Djournå_des_eberwetaedjes" ) . "\">djournå des eberwetaedjes</a>.
+<p>
+Eployîz les boesses d'&nbsp;intrêye chal pa dzo po-z eberweter
+des noveas fitchîs d'&nbsp;imådjes po vos årtikes.
+Sol plupårt des betchteus, vos voeroz on boton «Foyter...» (ou «Browse...»)
+ki vs permetrè di foyter dins les ridants del deure plake da vosse
+po tchoezi l'&nbsp;fitchî, çou ki rimplirè otomaticmint li tchamp
+do no do fitchî k'&nbsp;est a costé.
+Vos dvoz eto clitchî sol boesse por vos acertiner ki vos n'&nbsp;violez
+nou abondroet et ki l'&nbsp;fitchî ki vos evoyîz si pout bén eployî
+dins l'&nbsp;Wikipedia.
+Clitchîz sol boton «Eberweter» po-z evoyî l'&nbsp;fitchî sol sierveu.
+çoula pout prinde do tins si l'&nbsp;raloyaedje al daegntoele est
+londjin.
+<p>
+Les cognes di fitchîs k'&nbsp;on-z a ptchî c'&nbsp;est li JPEG po
+les imådjes foto, eyet li PNG po les dessins, mapes, drapeas, imådjetes...
+et li OGG po les sons.
+S'&nbsp;i vs plait, dinez a vosse fitchî on no ki dit bén çou
+k'&nbsp;c'&nbsp;est, c'&nbsp;est pus åjhey insi.
+Po håyner l'&nbsp;imådje dins èn årtike, eployîz on loyén del
+foûme <b>[[imådje:fitchî.jpg]]</b> ou <b>[[imådje:fitchî.png|tecse po les betchteus nén grafikes]]</b>
+ou co <b>[[media:fitchî.ogg]]</b> po les sons.
+<p>
+Notez bén ki, tot come po les pådjes del Wikipedia, les ôtès djins polèt
+candjî ou disfacer vos eberwetaedjes s'&nbsp;i pinsèt ki c'&nbsp;est mî
+po l'&nbsp;eciclopedeye; eyet vos ploz esse espaitchî d'&nbsp;eberweter
+des fitchîs si vos n'&nbsp;rispectez nén l'&nbsp;sistinme.",
+"uploadlog" => "djournå des eberwetaedjes",
+"uploadlogpage" => "Djournå_des_eberwetaedjes",
+"uploadlogpagetext" => "Chal pa dzo li djivêye des dierins eberwetaedjes.
+Totes les eures sont metowes e tins univiersel (UTC).
+<ul>
+</ul>
+",
+"filename" => "No do fitchî",
+"filedesc" => "Discrijhaedje",
+"filestatus" => "Abondroets ey eployaedje",
+"filesource" => "Sourdant",
+"affirmation" => "Dj'&nbsp;acertinêye ki l'&nbsp;djin k'&nbsp;a les
+abondroets po ci fitchî chal est d'&nbsp;acoird di l'&nbsp;eplaidî dizo
+les condicions del $1.",
+"copyrightpage" => "Wikipedia:Abondroets",
+"copyrightpagename" => "Abondroets Wikipedia",
+"uploadedfiles" => "Fitchîs eberwetés",
+"noaffirmation" => "Vos dvoz acertiner ki l'&nbsp;fitchî ki vos eberwetez
+pout bén esse eployî sins aler siconte des abondroets do fitchî.",
+"ignorewarning" => "Passer houte des adviertixhmints eyet schaper tot l'&nbsp;minme li fitchî.",
+"minlength" => "Les imådjes divèt aveur des nos di pol moens troes letes.",
+"badfilename" => "Li no d'&nbsp;l'&nbsp;imådje a stî candjî a «$1».",
+"badfiletype" => "«.$1» n'&nbsp;est nén ene sôre d'&nbsp;imådje ricmandêye.",
+"largefile" => "C'&nbsp;est mî ki les imådjes åyexhe ene grandeu di moens di 100&nbsp;Ko.",
+"successfulupload" => "L'&nbsp;eberwetaedje a stî comifåt",
+"fileuploaded" => "L'&nbsp;eberwetaedje do fitchî «$1» a stî å paire des pôces.
+Shuvoz ci loyén chal: ($2) pol pådje di discrijhaedje eyet rimplixhoz les
+informåcions sol fitchî, come di wice k'&nbsp;i vént, cwand il a stî
+fwait, et pa kî, et tot l'&nbsp;minme kéne informåcion interessante ki vos ploz
+saveur å dfait do fitchî.",
+"uploadwarning" => "Adviertixhmint so l'&nbsp;eberwetaedje",
+"savefile" => "Schaper l'&nbsp;fitchî",
+"uploadedimage" => "eberwetaedje di «$1»",
+
+# Image list
+#
+"imagelist" => "Djivêye des imådjes",
+"imagelisttext" => "Chal pa dzo c'&nbsp;est ene djivêye di $1 imådjes relîtes $2.",
+"getimagelist" => "fetching image list", # co a fé
+"ilshowmatch" => "Mostrer totes les imådjes avou des nos ki corespondèt a",
+"ilsubmit" => "Cweri",
+"showlast" => "Mostrer les $1 dierinnès imådjes relîtes $2.",
+"all" => "totes",
+"byname" => "påzès nos",
+"bydate" => "pazès dates",
+"bysize" => "pa grandeu",
+"imgdelete" => "oist.",
+"imgdesc" => "disc.",
+"imglegend" => "Ledjinde: (disc.) = håyner/candjî l'&nbsp;discrijhaedje di l'&nbsp;imådje.",
+"imghistory" => "Istwere di l'&nbsp;imådje",
+"revertimg" => "mod.",
+"deleteimg" => "oist.",
+"imghistlegend" => "Ledjinde: (ast.) = c'&nbsp;est l'&nbsp;imådje k'&nbsp;i gn a asteure, (oist.) = oister (disfacer)
+cisse viye modêye la, (mod.) = rivni a cisse viye modêye la.
+<br><i>Clitchîz sol date po vey l'&nbsp;imådje evoyeye a cisse date la.</i>",
+"imagelinks" => "Loyéns viè ciste imådje chal",
+"linkstoimage" => "Les pådjes shuvantes eployèt ciste imådje chal:",
+"nolinkstoimage" => "I n'&nbsp;a nole pådje k'&nbsp;eploye ciste imådje chal.",
+
+# Statistics
+#
+"statistics" => "Sitatistikes",
+"sitestats" => "Sitatistikes del waibe",
+"userstats" => "Sitatistikes des uzeus",
+"sitestatstext" => "I gn a <b>$1</b> pådjes å totå el båze di dnêyes.
+Çoula tot contant les pådjes di «Copenes», les pådjes å dfait di Wikipedia,
+les pådjes «stub» (pådjes sins waire di contnou), les redjiblaedjes,
+eyet co ds ôtes ki n'&nbsp;sont nén vormint des årtikes.
+Si on n'&nbsp;conte nén ces la, i gn a <b>$2</b> pådjes ki sont
+probåblumint des vraiys årtikes.<p>
+I gn a-st avou å totå <b>$3</b> riwaitaedjes di pådjes, eyet <b>$4</b>
+candjmints do contnou des pådjes dispoy li 20 di djulete 2003.
+Dj'&nbsp;ô bén k'&nbsp;i gn a ene moyene di <b>$5</b> candjmints par pådje,
+eyet <b>$6</b> riwaitaedjes po on candjmint.",
+"userstatstext" => "I gn a <b>$1</b> uzeus d'&nbsp;eredjîstrés.
+<b>$2</b> di zels sont eto des manaedjeus (riloukîz a $3).
+
+<p><h2>Des ôtes pus spepieusès statistikes</h2><p>
+Des pus spepieusès statistikes åd dilong des moes sont
+<a href='/stats/WA/Sitemap.htm' class='internal'>chal</a>.
+", # NOTE: loyén viè les statistikes
+
+# Maintenance Page
+#
+"maintenance" => "PÃ¥dje di manaedjmint",
+"maintnancepagetext" => "Cisse pådje chal a sacwantès ahessåvès usteyes
+po manaedjî les årtikes. Sacwantes di ces fonccions chal polèt esse
+sitréndåves pol båze di dnêyes, do côp on vs dimandrè di n'&nbsp;nén
+clitchî sol boton «rafrister» di vosse betchteu a tchaeke côp
+ki vos fjhoz on ptit candjmint ;-)",
+"maintenancebacklink" => "Rivni al pådje di manaedjmint",
+"disambiguations" => "PÃ¥djes d'&nbsp;omonimeye",
+"disambiguationspage" => "Wikipedia:Loyéns_viè_les_pådjes_d'_omonimeye",
+"disambiguationstext" => "Les årtikes shuvants ont des loyéns viè en <i>pådje d'&nbsp;omonimeye</i>. I dvrént purade loyî viè l'&nbsp;bon årtike.<br>
+Ene pådje est considerêye come pådje d'&nbsp;omonimeye si elle aparexhe e $1.<br>
+Les loyéns a pårti d'&nbsp;ôtes espåces di lomaedje èn sont <i>nén</i> håynés chal.",
+"doubleredirects" => "Dobes redjiblaedjes",
+"doubleredirectstext" => "<b>Asteme:</b> Cisse djivêye chal pout aveur des fås pôzitifs. Dj'&nbsp;ô bén k'&nbsp;i pout aveur do tecse di pus, avou des loyéns, après li prumî «#REDIRECT».<br>\n
+Tchaeke roye a-st on loyén viè l'&nbsp;prumî eyet l'&nbsp;deujhinme redjiblaedje, avou on mostraedje del prumire roye do tecse do deujhinme redjiblaedje, çou ki å pus sovint dene li «vraiy» årtike såme, ki l'&nbsp;prumî redjiblaedje dvreut evoyî viè lu.",
+"brokenredirects" => "Pierdous redjiblaedjes",
+"brokenredirectstext" => "Les redjiblaedjes shuvants evoyèt so ene pådje ki n'&nbsp;egzistêye nén.",
+"selflinks" => "Pådjes avou des loyéns viè zeles minmes",
+"selflinkstext" => "Les pådjes shuvantes ont on loyén viè zeles minmes, çou ki n'&nbsp;si dvreut nén fé.",
+"mispeelings" => "PÃ¥djes avou des flotches",
+"mispeelingstext" => "Les pådjes shuvantes ont ene ou sacwante
+flotche, di cenes metowes so $1. Li scrijhaedje corek pout esse mostré inte
+åtchetes a costé do mot må scrît.",
+"mispeelingspage" => "Djivêye des flotches les pus corantes",
+"missinglanguagelinks" => "Loyéns di lingaedjes ki mankèt",
+"missinglanguagelinksbutton" => "Trover les loyéns di lingaedjes ki mankèt po",
+"missinglanguagelinkstext" => "Ces årtikes chal èn loynut <i>nén</i> viè leu-z omologues so «$1». Les redjiblaedjes eyet les dzo-pådjes èn sont <i>nén</i> mostrêyes.",
+
+
+# Miscellaneous special pages
+#
+"orphans" => "Pådjes ôrfulinnes",
+"lonelypages" => "Pådjes ôrfulinnes",
+"unusedimages" => "Imådjes nén eployeyes",
+"popularpages" => "Pådjes les pus léjhowes",
+"nviews" => "léjhowe $1 côps",
+"wantedpages" => "PÃ¥djes les pus rcwerowes",
+"nlinks" => "$1 loyéns",
+"allpages" => "Totes les pådjes",
+"randompage" => "Ã…rtike a l'&nbsp;astcheyance", # TODO: trop longou?
+"shortpages" => "Coûtès pådjes",
+"longpages" => "Longowès pådjes",
+"listusers" => "Djivêye des uzeus",
+"specialpages" => "Pådjes sipeciåles",
+"spheading" => "Pådjes sipeciåles po tos ls uzeus",
+"sysopspheading" => "Pådjes sipeciåles po les manaedjeus",
+"developerspheading" => "Pådjes sipeciåles po les diswalpeus",
+"protectpage" => "Protedjî l'&nbsp;pådje",
+"recentchangeslinked" => "Candjmints aloyîs",
+"rclsub" => "(ezès pådjes ki «$1» a-st on loyén dzeu)",
+"debug" => "Disbugaedje",
+"newpages" => "Novelès pådjes",
+"ancientpages" => "Viyådjes",
+"intl" => "Loyéns eterlingaedjes",
+"movethispage" => "Displaecî cisse pådje",
+"unusedimagestext" => "<p>Notez tot l'&nbsp;minme ki d'&nbsp;ôtès waibes,
+come li cenes des ôtes Wikipedias, polèt aveur des loyéns viè ces imådjes la
+gråcès a ene direke hårdêye. Do côp, ces imådjes aparexhèt chal, mågré
+k'&nbsp;ele soeyexhe eployeyes.",
+"booksources" => "Sourdants po les lives",
+"booksourcetext" => "Chal pa dzo c'&nbsp;est ene djivêye di hårdêyes viè
+des waibes ki vindèt des lives, noûs ou di deujhinme mwin, et ki polèt
+aveur pus d'&nbsp;informåcions å dfait des lives ki vos cweroz après.
+{{SITENAME}} n'&nbsp;a rén a vey avou ces eterprijhes la, eyet cisse djivêye
+chal èn doet nén esse veyowe come èn aspoya ou nerén ene reclame.",
+"alphaindexline" => "di $1 a $2",
+
+# Email this user
+#
+"mailnologin" => "Nole adresse d'&nbsp;evoyeu",
+"mailnologintext" => "Po-z evoyî èn emile a èn ôte uzeu i vs fåt esse <a href=\"" .
+ wfLocalUrl( "Sipeciås:Userlogin" ) . "\">elodjî</a>
+eyet aveur ene adresse emile d'&nbsp;evoyeu ki soeye valide
+dins vos <a href=\"" .
+ wfLocalUrl( "Sipeciås:Preferences" ) . "\">preferinces</a>.",
+"emailuser" => "Emiler a l'&nbsp;uzeu",
+"emailpage" => "Emilaedje a èn uzeu",
+"emailpagetext" => "Si cist uzeu chal a dné ene adresse emile valide dins
+ses preferins, vos lyi ploz evoyî èn emile a pårti di cisse pådje chal.
+L'&nbsp;adresse emile k'&nbsp;i gn a dins vos preferinces serè-st eployeye
+come adresse di l'&nbsp;evoyeu (adresse «From:» di l'&nbsp;emile),
+po ki l'&nbsp;riçuveu poye risponde.",
+"noemailtitle" => "Pont d'&nbsp;adresse emile",
+"noemailtext" => "Cist uzeu chal n'&nbsp;a nén dné d'&nbsp;adresse emile
+valide, ou n'&nbsp;vout nén rçure des emiles des ôtes uzeus.
+Do côp, c'&nbsp;est nén possibe di lyi evoyî èn emile.",
+"emailfrom" => "Di",
+"emailto" => "Po",
+"emailsubject" => "Sudjet",
+"emailmessage" => "Messaedje",
+"emailsend" => "Evoyî",
+"emailsent" => "Emile evoyî",
+"emailsenttext" => "Vost emilaedje a stî evoyî comifåt.",
+
+# Watchlist
+#
+"watchlist" => "Mes pådjes shuvowes",
+"watchlistsub" => "(po l'&nbsp;uzeu «$1»)",
+"nowatchlist" => "Vosse djivêye des pådjes a shuve est vude.",
+"watchnologin" => "Vos n'&nbsp;estoz nén elodjî",
+"watchnologintext" => "I vs fåt esse <a href=\"" .
+ wfLocalUrl( "Sipeciås:Userlogin" ) . "\">elodjî</a>
+po pleur candjî vosse djivêye des pådjes a shuve.",
+"addedwatch" => "Radjouté ås shuvous",
+"addedwatchtext" => "Li pådje «$1» a stî radjoutêye a vosse <a href=\"" .
+ wfLocalUrl( "Sipeciås:Watchlist" ) . "\">djivêye des pådjes a shuve</a>.
+Tos les candjmints k'&nbsp;i gn årè di cisse pådje chal, eyet di si pådje
+di copene, seront håynés chal, eyet li pådje serè metowe e <b>cråssès letes</b>
+el <a href=\"" .
+ wfLocalUrl( "Sipeciås:Recentchanges" ) . "\">djivêye des dierins candjmints</a> po k'&nbsp;ça soeye pus åjhey por vos del rimårker.</p>
+<p>
+Si vos vloz bodjî l'&nbsp;pådje foû di vosse djivêye des shuvous,
+clitchîz so «Èn pus shuve li pådje» dins l'&nbsp;bår di menu sol costé.",
+"removedwatchtext" => "Li pådje «$1» a stî bodjeye foû di vosse djivêye des pådjes a shuve.",
+"watchthispage" => "Shuve cisse pådje",
+"unwatchthispage" => "Èn pus shuve li pådje",
+"notanarticle" => "Nén èn årtike",
+"watchnochange" => "Nole des pådjes di vosse djivêye di pådjes a shuve n'&nbsp;a stî candjeye dins l'&nbsp;termene di tins dmandêye.",
+"watchdetails" => "($1 pådjes shuvowes, sins conter les pådjes di copene;
+$2 total pages edited since cutoff;
+$3...
+<a href='$4'>mostrer eyet candjî l'&bsp;djivêye etire</a>.)", # co a fé
+"watchmethod-recent" => "checking recent edits for watched pages", # co a fé
+"watchmethod-list" => "checking watched pages for recent edits", # co a fé
+"removechecked" => "Bodjî les cayets tchoezis foû del djivêye des pådjes a shuve",
+"watchlistcontains" => "I gn a $1 pådjes e vossse djivêye des pådjes a shuve.",
+"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.", # co a fé
+"removingchecked" => "Removing requested items from watchlist...", # co a fé
+"couldntremove" => "Couldn't remove item '$1'...", # co a fé
+"iteminvalidname" => "Åk n'&nbsp;a nén stî avou «$1», no nén valide...",
+"wlnote" => "Chal pa dzo les $1 dierins candjmints des <b>$2</b> dierinnès eures.",
+"wlshowlast" => "Mostrer les dierin(nè)s $1 eures, $2 djoûs $3",
+
+
+# Delete/protect/revert
+#
+"deletepage" => "Disfacer l'&nbsp;pådje",
+"confirm" => "Acertiner",
+"excontent" => "li contnou esteut:",
+"exbeforeblank" => "li contnou dvant l'&nbsp;disfaçaedje esteut:",
+"exblank" => "li pådje esteut vude",
+"confirmdelete" => "Acertinaedje do disfaçaedje",
+"deletesub" => "(Djisfaçaedje di «$1»)",
+"historywarning" => "Adviertixhmint: Li pådje ki vos alez disfacer a-st ene istwere: ",
+"confirmdeletetext" => "Vos alez disfacer po tofer del båze di dnêyes ene
+pådje ou ene imådje, avou tote si istwere.
+Acertinez s'&nbsp;i vs plait ki c'&nbsp;est bén çoula ki vos vloz fé,
+ki vos comprindoz les consecwinces, et ki vos fjhoz çoula
+tot [[Wikipedia:Rîles a shure|shuvant les rîles]].",
+"confirmcheck" => "Oyi, dji vou vormint disfacer ci fitchî chal.",
+"actioncomplete" => "Fwait",
+"deletedtext" => "Li pådje «$1» a stî disfacêye. Loukîz li $2 po ene
+djivêye des dierins disfaçaedjes.",
+"deletedarticle" => "pådje «$1» disfacêye",
+"dellogpage" => "Djournå_des_disfaçaedjes",
+"dellogpagetext" => "Chal pa dzo c'&nbsp;est l'&nbsp;djivêye des dierins
+disfaçaedjes. Totes les dates et eures sont-st e tins univiersel (UTC).
+<ul>
+</ul>
+",
+"deletionlog" => "djournå des disfaçaedjes",
+"reverted" => "Rimetou ene modêye di dvant",
+"deletecomment" => "Råjhon do disfaçaedje",
+"imagereverted" => "Li rmetaedje del modêye di dvant a stî comifåt.",
+"rollback" => "Roll back edits", # co a fé
+"rollbacklink" => "rollback", # co a fé
+"rollbackfailed" => "Rollback failed", # co a fé
+"cantrollback" => "Cannot revert edit; last contributor is only author of this article.", # co a fé
+"alreadyrolled" => "Cannot rollback last edit of [[$1]]
+by [[Uzeu:$2|$2]] ([[Uzeu copene:$2|Copene]]); someone else has edited or rolled back the article already.
+
+Li dierin candjmint a stî fwait pa [[Uzeu:$3|$3]] ([[Uzeu copene:$3|Copene]]). ",
+# only shown if there is an edit comment
+"editcomment" => "The edit comment was: \"<i>$1</i>\".", # co a fé
+"revertpage" => "Rivnou å dierin candjmint da $1",
+"protectlogpage" => "Protection_log", # co a fé
+"protectlogtext" => "Chal pa dzo c'&nbsp;est ene djivêye des protedjaedjes
+et disprotedjaedjes des pådjes.
+Loukîz [[{{ns:4}}:Pådje protedjeye]] po pus di racsegnes.",
+"protectedarticle" => "[[$1]] protedjî",
+"unprotectedarticle" => "[[$1]] disprotedjî",
+
+# Undelete
+"undelete" => "Rapexhî des disfacêyès pådjes",
+"undeletepage" => "Vey et rapexhî des disfacêyès pådjes",
+"undeletepagetext" => "Les pådjes shuvantes ont stî disfacêyes mins ele sont
+co ezès årtchives, do côp ele polèt esse rapexheyes.
+Les årtchives sont netieyes di tins en tins.",
+"undeletearticle" => "Rapexhî on disfacé årtike",
+"undeleterevisions" => "$1 modêyes ezès årtchives",
+"undeletehistory" => "Si vos rapexhîz l'&nbsp;pådje, l'&nbsp;istwere del pådje
+serè rapexheye eto, avou totes les modêyes co ezès årtchives.
+Si ene novele pådje avou l'&nbsp;minme a stî askepieye dispoy li disfaçaedje
+di cisse chal, les rapexheyès modêyes seront metowes e l'&nbsp;istwere mins
+c'&nbsp;est l'&nbsp;modêye do moumint, et nén l'&nbsp;cisse rapexheye, ki
+srè håynêye.",
+"undeleterevision" => "Modêye disfacêye li $1",
+"undeletebtn" => "Rapexhî!",
+"undeletedarticle" => "a rapexhî l'&nbsp;pådje «$1»",
+"undeletedtext" => "L'&nbsp;årtike [[$1]] a stî rapexhî comifåt.
+Loukîz [[Wikipedia:Djournå_des_disfaçaedjes]] po ene djivêye des dierins
+disfaçaedjes eyet rapexhaedjes.",
+
+# Contributions
+#
+"contributions" => "Ovraedjes di l'&nbsp;uzeu", /* TODO: problinme di longeu */
+"mycontris" => "Mes contribucions",
+"contribsub" => "Po l'&nbsp;uzeu $1",
+"nocontribs" => "Nou candjmint di trové ki corespondreut a ç'&nbsp;critere la.",
+"ucnote" => "Chal pa dzo les <b>$1</b> dierins candjmints di l'&nbsp;uzeu so les <b>$2</b> dierins djoûs.",
+"uclinks" => "Vey les $1 dierins candjmints; vey les $2 dierins djoûs.",
+"uctop" => " (top)" ,
+
+# What links here
+#
+"whatlinkshere" => "PÃ¥djes ki loynut chal",
+"notargettitle" => "No target", # co a fé
+"notargettext" => "You have not specified a target page or user
+to perform this function on.", # co a fé
+"linklistsub" => "(Djivêye des loyéns)",
+"linkshere" => "Les pådjes ki shuvèt ont des loyéns viè cisse ci:",
+"nolinkshere" => "Nole pådje avou des loyéns viè cisse ci.",
+"isredirect" => "pådje di redjiblaedje",
+
+# Block/unblock IP
+#
+"blockip" => "Bloker èn uzeu",
+"blockiptext" => "Use the form below to block write access
+from a specific IP address or username.
+This should be done only only to prevent vandalism, and in
+accordance with [[Wikipedia:Rîles a shure|{{SITENAME}} policy]].
+Fill in a specific reason below (for example, citing particular
+pages that were vandalized).", # co a fé
+"ipaddress" => "Adresse IP/no d'&nbsp;uzeu",
+"ipbreason" => "RÃ¥jhon",
+"ipbsubmit" => "Bloker cist uzeu",
+"badipaddress" => "Nol uzeu avou ç'&nbsp;no la.",
+"noblockreason" => "Vos dvoz dner ene råjhon pol blocaedje.",
+"blockipsuccesssub" => "Li blocaedje a stî comifåt",
+"blockipsuccesstext" => "«$1» a stî bloké.
+<br>Loukîz li [[Sipeciås:Ipblocklist|Djivêye des blocaedjes]] po candjî on blocaedje.",
+"unblockip" => "Disbloker èn uzeu",
+"unblockiptext" => "Use the form below to restore write access
+to a previously blocked IP address.", # co a fé
+"ipusubmit" => "Unblock this address", # co a fé
+"ipusuccess" => "«%s» a stî disbloké",
+"ipblocklist" => "Djivêye d'&nbsp;adresses IP et di nos d'&nbsp;uzeus ki sont blokés",
+"blocklistline" => "$1, $2 a bloké $3",
+"blocklink" => "bloker",
+"unblocklink" => "disbloker",
+"contribslink" => "contribs", # co a fé
+"autoblocker" => "Bloké otomaticmint paski vos eployîz li minme adresse IP ki «%s». Råjhon do blocaedje «%s».",
+"blocklogpage" => "Block_log", # co a fé
+"blocklogentry" => '«$1» a stî bloké',
+"blocklogtext" => "This is a log of user blocking and unblocking actions. Automatically
+blocked IP addresses are not be listed. See the [[Special:Ipblocklist|IP block list]] for
+the list of currently operational bans and blocks.", # co a fé
+"unblocklogentry" => '«$1» a stî disbloké',
+
+# Developer tools
+#
+"lockdb" => "Lock database", # co a fé
+"unlockdb" => "Unlock database", # co a fé
+"lockdbtext" => "Locking the database will suspend the ability of all
+users to edit pages, change their preferences, edit their watchlists, and
+other things requiring changes in the database.
+Please confirm that this is what you intend to do, and that you will
+unlock the database when your maintenance is done.", # co a fé
+"unlockdbtext" => "Unlocking the database will restore the ability of all
+users to edit pages, change their preferences, edit their watchlists, and
+other things requiring changes in the database.
+Please confirm that this is what you intend to do.", # co a fé
+"lockconfirm" => "Yes, I really want to lock the database.", # co a fé
+"unlockconfirm" => "Yes, I really want to unlock the database.", # co a fé
+"lockbtn" => "Lock database", # co a fé
+"unlockbtn" => "Unlock database", # co a fé
+"locknoconfirm" => "You did not check the confirmation box.", # co a fé
+"lockdbsuccesssub" => "Database lock succeeded", # co a fé
+"unlockdbsuccesssub" => "Database lock removed", # co a fé
+"lockdbsuccesstext" => "The database has been locked.
+<br>Remember to remove the lock after your maintenance is complete.", # co a fé
+"unlockdbsuccesstext" => "The database has been unlocked.", # co a fé
+
+# SQL query
+#
+"asksql" => "SQL query", # co a fé
+"asksqltext" => "Use the form below to make a direct query of the
+database.
+Use single quotes ('like this') to delimit string literals.
+This can often add considerable load to the server, so please use
+this function sparingly.", # co a fé
+"sqlislogged" => "Please note that all queries are logged.", # co a fé
+"sqlquery" => "Enter query", # co a fé
+"querybtn" => "Submit query", # co a fé
+"selectonly" => "Only read-only queries are allowed.", # co a fé
+"querysuccessful" => "Query successful", # co a fé
+
+# Move page
+#
+"movepage" => "Displaecî l'&nbsp;pådje",
+"movepagetext" => "Chal vos ploz candjî l'&nbsp;no d'&nbsp;ene pådje,
+dj'&nbsp;ô bén displaecî l'&nbsp;pådje, eyet si istwere, viè l'&nbsp;novea no.
+Li vî tite divénrè-st ene pådje di redjiblaedje viè l'&nbsp;novele/
+Les loyéns viè l'&nbsp;viye pådje èn seront nén candjîs; acertinez vs di
+[[Sipeciås:Maintenance|verifyî]] s'&nbsp;i n'&nbsp;a nén des dobes
+ou crons redjiblaedjes.
+Vos estoz responsåve di fé çou k'&nbsp;i fåt po k'&nbsp;les loyéns
+continouwexhe di moenner la k'&nbsp;i fåt.
+
+Notez k'anbsp;el pådje èn serè '''nén''' displaeceye s'anbsp;i gn a ddja ene
+pådje avou l'&nbsp;novea tite, a moens k'&nbsp;ele soeye vude, ou ene pådje
+di redjiblaedje, et k'&nbsp;ele n'&nbsp;Ã¥ye nole istwere.
+Çoula vout dire ki vos ploz ri-displaecî ene pådje viè l'&nbsp;no k'&nbsp;ele
+aveut djusse divant, et insi disfé vosse prumî displaeçaedje, å cas ou vos vs
+rindrîz conte ki vos avoz fwait ene flotche; ey eto ki vos n'&nbsp;poloz nén
+spotchî par accidint ene pådje k'&nbsp;egzistêye dedja.
+
+<b>ASTEME!</b>
+On displaeçaedje pout esse on consecant et nén atindou candjmint po ene
+pådje foirt léjhowe; s'&nbsp;i vs plait tuzez bén åzès consecwinces divant
+d'&nbsp;continouwer.",
+"movepagetalktext" => "Li pådje di copene associeye, s'&nbsp;end a ene, serè
+displaeceye otomaticmint avou, '''a moens ki:'''
+*Vos displaecîz l'&nbsp;pådje d'&nbsp;èn espåce di lomaedje a èn ôte,
+*Ene pådje di copene nén vude egzistêye dedja dizo l'&nbsp;novea no,
+*Vos disclitchrîz l'&nbsp;boesse a clitchî chal pa dzo.
+
+Dins ces cas la, vos dvroz displaecî l'&nbsp;pådje di copene al mwin, ou rcopyî
+si contnou, si vos l'&nbsp;vloz mete adlé l'&nbsp;novea no
+d'&nbsp;l'&nbsp;Ã¥rtike.",
+"movearticle" => "Displaecî di",
+"movenologin" => "Nén elodjî",
+"movenologintext" => "I vs fåt esse èn uzeu eredjîstré eyet esse <a href=\"" .
+ wfLocalUrl( "Sipeciås:Userlogin" ) . "\">elodjî</a> por vos
+pleur displaecî ene pådje.",
+"newtitle" => "Viè l'&nbsp;novea tite",
+"movepagebtn" => "Displaecî",
+"pagemovedsub" => "Li displaeçaedje a stî comifåt",
+"pagemovedtext" => "Li pådje «[[$1]]» a stî displaeceye viè «[[$2]]».",
+"articleexists" => "Ene pådje egzistêye dedja avou ç'&nbsp;no la, oudonbén
+li no k'&nbsp;vos avoz tchoezi n'&nbsp;est nén valide.
+Tchoezixhoz è èn ôte s'&nbsp;i vs plait.",
+"talkexists" => "The page itself was moved successfully, but the
+talk page could not be moved because one already exists at the new
+title. Please merge them manually.", # co a fé
+"movedto" => "displaecî viè",
+"movetalk" => "Displaecî li pådje di copene avou, si ça astchait.",
+"talkpagemoved" => "Li pådje di copene corespondante a stî displaeceye avou.",
+"talkpagenotmoved" => "Li pådje di copene corespondante n'&nbsp;a <strong>nén</strong> stî displaeceye.",
+
+"export" => "Export pages", # co a fé
+"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.", # co a fé
+"exportcuronly" => "Inclure fok li modêye do moumint, nén tote l'&nbsp;istwere",
+
+# Namespace 8 related
+
+"allmessages" => "Tos les messaedjes",
+"allmessagestext" => "Çouchal est ene djivêye di tos les messaedjes k'&nbsp;i gn a dins l'&nbsp;espåce di lomaedje ''MediaWiki:''",
+);
+
+#--------------------------------------------------------------------------
+# Internationalisation code
+#--------------------------------------------------------------------------
+
+class LanguageWa extends LanguageUtf8 {
+
+ function getBookstoreList () {
+ global $wgBookstoreListWa ;
+ return $wgBookstoreListWa ;
+ }
+
+ function getNamespaces() {
+ global $wgNamespaceNamesWa;
+ return $wgNamespaceNamesWa;
+ }
+
+ function getNsText( $index ) {
+ global $wgNamespaceNamesWa;
+ return $wgNamespaceNamesWa[$index];
+ }
+
+ function getNsIndex( $text ) {
+ global $wgNamespaceNamesWa;
+
+ foreach ( $wgNamespaceNamesWa as $i => $n ) {
+ if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
+ }
+ return false;
+ }
+
+ function getQuickbarSettings() {
+ global $wgQuickbarSettingsWa;
+ return $wgQuickbarSettingsWa;
+ }
+
+ function getSkinNames() {
+ global $wgSkinNamesWa;
+ return $wgSkinNamesWa;
+ }
+
+ function getMathNames() {
+ global $wgMathNamesWa;
+ return $wgMathNamesWa;
+ }
+
+ function getDateFormats() {
+ global $wgDateFormatsWa;
+ return $wgDateFormatsWa;
+ }
+
+ function getUserToggles() {
+ global $wgUserTogglesWa;
+ return $wgUserTogglesWa;
+ }
+
+ function getMonthName( $key )
+ {
+ global $wgMonthNamesWa;
+ return $wgMonthNamesWa[$key-1];
+ }
+
+ /* by default we just return base form */
+ function getMonthNameGen( $key )
+ {
+ global $wgMonthNamesWa;
+ return $wgMonthNamesWa[$key-1];
+ }
+
+ function getMonthAbbreviation( $key )
+ {
+ global $wgMonthAbbreviationsWa;
+ return $wgMonthAbbreviationsWa[$key-1];
+ }
+
+ function getWeekdayName( $key )
+ {
+ global $wgWeekdayNamesWa;
+ return $wgWeekdayNamesWa[$key-1];
+ }
+
+ # Inherit userAdjust()
+
+ ###
+ ### Dates in Walloon are "1î d' <monthname>" for 1st of the month,
+ ### "<day> di <monthname>" for months starting by a consoun, and
+ ### "<day> d' <monthname>" for months starting with a vowel
+ ###
+ function date( $ts, $adj = false )
+ {
+ global $wgAmericanDates, $wgUser, $wgUseDynamicDates;
+
+ if ( $adj ) { $ts = $this->userAdjust( $ts ); }
+
+ $m = substr( $ts, 4, 2 );
+ $n = substr( $ts, 6, 2 );
+
+ if ($n == 1) {
+ $d = "1î d'&nbsp;" . $this->getMonthName( $m ) .
+ " " . substr( $ts, 0, 4 );
+ } else if ($n == 2 || $n == 3 || $n == 20 || $n == 22 || $n == 23) {
+ $d = (0 + $n) . " d'&nbsp;" . $this->getMonthName( $m ) .
+ " " . substr( $ts, 0, 4 );
+ } else if ($m == 4 || $m == 8 || $m == 10) {
+ $d = (0 + $n) . " d'&nbsp;" . $this->getMonthName( $m ) .
+ " " . substr( $ts, 0, 4 );
+ } else {
+ $d = (0 + $n) . " di " . $this->getMonthName( $m ) .
+ " " . substr( $ts, 0, 4 );
+ }
+
+ return $d;
+ }
+
+ function time( $ts, $adj = false )
+ {
+ if ( $adj ) { $ts = $this->userAdjust( $ts ); }
+
+ $t = substr( $ts, 8, 2 ) . ":" . substr( $ts, 10, 2 );
+ return $t;
+ }
+
+ function timeanddate( $ts, $adj = false )
+ {
+ #return $this->time( $ts, $adj ) . " " . $this->date( $ts, $adj );
+ return $this->date( $ts, $adj ) . " a " . $this->time( $ts, $adj );
+ }
+
+ # Inherit rfc1123()
+
+ function getValidSpecialPages()
+ {
+ global $wgValidSpecialPagesWa;
+ return $wgValidSpecialPagesWa;
+ }
+
+ function getSysopSpecialPages()
+ {
+ global $wgSysopSpecialPagesWa;
+ return $wgSysopSpecialPagesWa;
+ }
+
+ function getDeveloperSpecialPages()
+ {
+ global $wgDeveloperSpecialPagesWa;
+ return $wgDeveloperSpecialPagesWa;
+ }
+
+ function getMessage( $key )
+ {
+ global $wgAllMessagesWa;
+
+ if(array_key_exists($key, $wgAllMessagesWa))
+ return $wgAllMessagesWa[$key];
+ else
+ return Language::getMessage($key);
+ }
+
+ function getAllMessages()
+ {
+ global $wgAllMessagesWa;
+ return $wgAllMessagesWa;
+ }
+
+}
+
+?>
diff --git a/languages/LanguageYi.php b/languages/LanguageYi.php
index 60d8b93215dc..3d69102f7704 100644
--- a/languages/LanguageYi.php
+++ b/languages/LanguageYi.php
@@ -18,4 +18,4 @@ class LanguageYi extends LanguageUtf8 {
}
}
-?> \ No newline at end of file
+?>
diff --git a/languages/LanguageZh.php b/languages/LanguageZh.php
index 3f714cf81504..99693c20898a 100644
--- a/languages/LanguageZh.php
+++ b/languages/LanguageZh.php
@@ -9,20 +9,24 @@ require_once( "LanguageUtf8.php" );
# encapsulates some of the magic-ness.
#
/* private */ $wgNamespaceNamesZh = array(
- -2 => "Media",
- -1 => "Special",
- 0 => "",
- 1 => "Talk",
- 2 => "User",
- 3 => "User_talk",
- 4 => "Wikipedia",
- 5 => "Wikipedia_talk",
- 6 => "Image",
- 7 => "Image_talk",
- 8 => "MediaWiki",
- 9 => "MediaWiki_talk",
- 10 => "Template",
- 11 => "Template_talk"
+ NS_MEDIA => "Media",
+ NS_SPECIAL => "Special",
+ NS_MAIN => "",
+ NS_TALK => "Talk",
+ NS_USER => "User",
+ NS_USER_TALK => "User_talk",
+ NS_WIKIPEDIA => $wgMetaNamespace,
+ NS_WIKIPEDIA_TALK => $wgMetaNamespace . "_talk",
+ NS_IMAGE => "Image",
+ NS_IMAGE_TALK => "Image_talk",
+ NS_MEDIAWIKI => "MediaWiki",
+ NS_MEDIAWIKI_TALK => "MediaWiki_talk",
+ NS_TEMPLATE => "Template",
+ NS_TEMPLATE_TALK => "Template_talk",
+ NS_HELP => "Help",
+ NS_HELP_TALK => "Help_talk",
+ NS_CATEGORY => "Category",
+ NS_CATEGORY_TALK => "Category_talk"
);
@@ -41,7 +45,8 @@ require_once( "LanguageUtf8.php" );
'montparnasse' => "Montparnasse",
'davinci' => "DaVinci",
'mono' => "Mono",
- 'monobook' => "MonoBook"
+ 'monobook' => "MonoBook",
+ "myskin" => "MySkin"
);
/* private */ $wgMathNamesZh = array(
diff --git a/languages/Names.php b/languages/Names.php
new file mode 100644
index 000000000000..9dacdbaacf7c
--- /dev/null
+++ b/languages/Names.php
@@ -0,0 +1,204 @@
+<?php
+/* private */ $wgLanguageNames = array(
+ 'aa' => 'Afar', # Afar
+ 'ab' => 'Abkhazian', # Abkhazian - FIXME
+ 'af' => 'Afrikaans', # Afrikaans
+ 'ak' => 'Akana', # Akan
+ 'an' => 'Aragon&eacute;s', # Aragonese
+ 'als' => 'Els&auml;ssisch', # Alsatian
+ 'am' => '&#4768;&#4635;&#4653;&#4763;', # Amharic
+ 'ar' => '&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;', # Arabic
+ 'arc' => '&#1813;&#1829;&#1810;&#1834;&#1848;&#1821;&#1819;', # Aramaic
+ 'as' => '&#2437;&#2488;&#2478;&#2496;&#2527;&#2494;', # Assamese
+ 'ast' => 'Asturleon&eacute;s', # Asturian
+ 'av' => '&#1040;&#1074;&#1072;&#1088;', # Avar
+ 'ay' => 'Aymar', # Aymara
+ 'az' => 'Az&#601;rbaycan', # Azerbaijani
+ 'ba' => '&#1041;&#1072;&#1096;&#1185;&#1086;&#1088;&#1090;', # Bashkir
+ 'be' => '&#1041;&#1077;&#1083;&#1072;&#1088;&#1091;&#1089;&#1082;&#1072;&#1103;', # Belarusian ''or'' Byelarussian
+ 'bg' => '&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;', # Bulgarian
+ 'bh' => '&#2349;&#2379;&#2332;&#2346;&#2369;&#2352;&#2368;', # Bihara
+ 'bi' => 'Bislama', # Bislama
+ 'bn' => '&#2476;&#2494;&#2434;&#2482;&#2494; - (Bangla)', # Bengali
+ 'bm' => 'Bambara',
+ 'bo' => 'Bod skad', # Tibetan
+ 'br' => 'Brezhoneg', # Breton
+ 'bs' => 'Bosanski', # Bosnian
+ 'ca' => 'Catal&agrave;', # Catalan
+ 'ce' => '&#1053;&#1086;&#1093;&#1095;&#1080;&#1081;&#1085;', # Chechen
+ 'ch' => 'Chamoru', # Chamorro
+ 'chr' => '&#5091;&#5043;&#5033;', # Cherokee
+ 'chy' => 'Tsets&ecirc;hest&acirc;hese', # Cheyenne
+ 'co' => 'Corsu', # Corsican
+ 'cr' => 'Nehiyaw', # Cree
+ 'cs' => '&#268;esky', # Czech
+ 'csb' => 'Kasz&euml;bscziej', # Cassubian - FIXME
+ 'cv' => '&#1063;&#1233;&#1074;&#1072;&#1096; - (&#264;&#259;va&#349;)', # Chuvash
+ 'cy' => 'Cymraeg', # Welsh
+ 'da' => 'Dansk', # Danish
+ 'de' => 'Deutsch', # German
+ 'dk' => 'Dansk', # 'da' is correct for the language.
+ 'dv' => 'Dhivehi', # Dhivehi
+ 'dz' => 'Dzongkha', # Bhutani
+ 'ee' => 'Eve', # Eve
+ 'el' => '&#917;&#955;&#955;&#951;&#957;&#953;&#954;&#940;', # Greek
+ 'en' => 'English', # English
+ 'eo' => 'Esperanto', # Esperanto
+ 'es' => 'Espa&ntilde;ol', # Spanish
+ 'et' => 'Eesti', # Estonian
+ 'eu' => 'Euskara', # Basque
+ 'fa' => '&#1601;&#1575;&#1585;&#1587;&#1740;', # Persian
+ 'ff' => 'Fulfulde', # Fulfulde
+ 'fi' => 'Suomi', # Finnish
+ 'fj' => 'Na Vosa Vakaviti', # Fijian
+ 'fo' => 'F&oslash;royskt', # Faroese
+ 'fr' => 'Fran&ccedil;ais', # French
+ 'fy' => 'Frysk', # Frisian
+ 'ga' => 'Gaeilge', # Irish
+ 'gd' => 'G&agrave;idhlig', # Scots Gaelic
+ 'gl' => 'Galego', # Gallegan
+ 'gn' => 'Ava&ntilde;e\'&#7869;', # Guarani
+ 'gu' => '&#2711;&#2753;&#2716;&#2736;&#2750;&#2724;&#2752;', # Gujarati
+ 'gv' => 'Gaelg', # Manx
+ 'ha' => '&#1607;&#1614;&#1608;&#1615;&#1587;&#1614;', # Hausa
+ 'haw' => 'Hawai`i', # Hawaiian
+ 'he' => '&#1506;&#1489;&#1512;&#1497;&#1514;', # Hebrew
+ 'hi' => '&#2361;&#2367;&#2344;&#2381;&#2342;&#2368;', # Hindi
+ 'ho' => 'Hiri Motu',
+ 'hr' => 'Hrvatski', # Croatian
+ 'ht' => 'Haitian', # Haitian (FIXME!)
+ 'hu' => 'Magyar', # Hungarian
+ 'hy' => '&#1344;&#1377;&#1397;&#1381;&#1408;&#1381;&#1398;', # Armenian
+ 'hz' => 'Otsiherero', # Herero
+ 'ia' => 'Interlingua', # Interlingua (IALA)
+ 'id' => 'Bahasa Indonesia', # Indonesian
+ 'ie' => 'Interlingue', # Interlingue (Occidental)
+ 'ig' => 'Igbo', # Igbo
+ 'ii' => 'Yi', # Sichuan Yi (FIXME!)
+ 'ik' => 'I&ntilde;upiak', # Inupiak
+ 'io' => 'Ido', # Ido
+ 'is' => '&Iacute;slensk', # Icelandic
+ 'it' => 'Italiano', # Italian
+ 'iu' => '&#5123;&#5316;&#5251;&#5198;&#5200;&#5222;', # Inuktitut
+ 'ja' => '&#26085;&#26412;&#35486;', # Japanese
+ 'jv' => 'Bahasa Jawa', # Javanese
+ 'ka' => '&#4325;&#4304;&#4320;&#4311;&#4323;&#4314;&#4312;', # Georgian
+ 'kg' => 'Kongo', # Kongo (FIXME!)
+ 'ki' => 'Kikuyu', # Kikuyu (FIXME!)
+ 'kj' => 'Kuanyama', # Kuanyama (FIXME!)
+ 'kk' => '&#1179;&#1072;&#1079;&#1072;&#1179;&#1096;&#1072;', # Kazakh
+ 'kl' => 'Kalaallisut', # Greenlandic
+ 'km' => '&#6039;&#6070;&#6047;&#6070;&#6017;&#6098;&#6040;&#6082;&#6042;', # Cambodian
+ 'kn' => '&#3221;&#3240;&#3277;&#3240;&#3233;', # Kannada
+ 'ko' => '&#54620;&#44397;&#50612;', # Korean
+ 'kr' => 'Kanuri',
+ 'ks' => '&#2325;&#2358;&#2381;&#2350;&#2368;&#2352;&#2368; - (&#1603;&#1588;&#1605;&#1610;&#1585;&#1610;)', # Kashmiri
+ 'ku' => 'Kurd&icirc;', # Kurdish
+ 'kv' => 'Komi',
+ 'kw' => 'Kernewek', # Cornish
+ 'ky' => 'K&#305;rg&#305;zca', # Kirghiz
+ 'la' => 'Latina', # Latin
+ 'lb' => 'L&euml;tzebuergesch', # Luxemburguish
+ 'lg' => 'Luganda', # Ganda
+ 'li' => 'Limburgs', # Limburgian
+ 'ln' => 'Lingala', # Lingala
+ 'lo' => 'Pha xa lao', # Laotian
+ 'lt' => 'Lietuvi&#371;', # Lithuanian
+ 'lv' => 'Latvie&scaron;u', # Latvian
+ 'mg' => 'Malagasy', # Malagasy - FIXME
+ 'mh' => 'Ebon', # Marshallese
+ 'mi' => 'M&#257;ori', # Maori
+ 'mk' => '&#1052;&#1072;&#1082;&#1077;&#1076;&#1086;&#1085;&#1089;&#1082;&#1080;', # Macedonian
+ 'ml' => '&#3374;&#3378;&#3375;&#3390;&#3379;&#3330;', # Malayalam
+ 'mn' => '&#1052;&#1086;&#1085;&#1075;&#1086;&#1083;', # Mongoloian
+ 'mo' => 'Moldoveana', # Moldovan
+ 'mr' => '&#2350;&#2352;&#2366;&#2336;&#2368;', # Marathi
+ 'ms' => 'Bahasa Melayu', # Malay
+ 'mt' => 'bil-Malti', # Maltese
+ 'my' => 'Myanmasa', # Burmese
+ 'na' => 'Nauru', # Nauruan
+ 'nb' => 'Bokm&aring;l', # Norwegian (Bokmal)
+ 'nah' => 'Nahuatl',
+ 'nds' => 'Platd&uuml;&uuml;tsch', # Low German ''or'' Low Saxon
+ 'ne' => '&#2344;&#2375;&#2346;&#2366;&#2354;&#2368;', # Nepali
+ 'ng' => 'Ndonga',
+ 'nl' => 'Nederlands', # Dutch
+ 'nb' => 'Norsk', # Norwegian [currently using old '''no''' code]
+ 'ne' => '&#2344;&#2375;&#2346;&#2366;&#2354;&#2368;', # Nepali
+ 'nn' => 'Nynorsk' , # (Norwegian) Nynorsk
+ 'no' => 'Norsk', # Norwegian
+ 'nv' => 'Din&eacute; bizaad', # Navajo
+ 'ny' => 'Chi-Chewa', # Chichewa
+ 'oc' => 'Occitan', # Occitan
+ 'om' => 'Oromoo', # Oromo
+ 'or' => 'Oriya', # Oriya - FIXME
+ 'pa' => '&#2346;&#2306;&#2332;&#2366;&#2348;&#2368; / &#2602;&#2588;&#2622;&#2604;&#2624; / &#1662;&#1606;&#1580;&#1575;&#1576;&#1610;', # Punjabi
+ 'pi' => '&#2346;&#2366;&#2367;&#2356;', # Pali
+ 'pl' => 'Polski', # Polish
+ 'ps' => '&#1662;&#1690;&#1578;&#1608;', # Pashto
+ 'pt' => 'Portugu&ecirc;s', # Portuguese
+ 'qu' => 'Runa Simi', # Quechua
+ 'rm' => 'Rumantsch', # Raeto-Romance
+ 'rn' => 'Kirundi', # Kirundi
+ 'ro' => 'Rom&acirc;n&#259;', # Romanian
+ 'roa-rup' => 'Arm&#226;neashti', # Aromanian
+ 'ru' => '&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;', # Russian
+ 'rw' => 'Kinyarwanda',
+ 'sa' => '&#2360;&#2306;&#2360;&#2381;&#2325;&#2371;&#2340;', # Sanskrit
+ 'sc' => 'Sardu', # Sardinian
+ 'sd' => '&#2360;&#2367;&#2344;&#2343;&#2367;', # Sindhi
+ 'se' => 'S&aacute;megiella', # (Northern) Sami
+ 'sg' => 'Sangro',
+# 'sh' => '&#1057;&#1088;&#1087;&#1089;&#1082;&#1086;&#1093;&#1088;&#1074;&#1072;&#1090;&#1089;&#1082;&#1080; (Srbskohrvatski)', ## Serbocroatian -- Obsolete
+ 'si' => 'Simhala', # Sinhalese
+ 'simple' => 'Simple English',
+ 'sk' => 'Sloven&#269;ina', # Slovak
+ 'sl' => 'Sloven&scaron;&#269;ina', # Slovenian
+ 'sm' => 'Gagana Samoa', # Samoan
+ 'sn' => 'chiShona', # Shona
+ 'so' => 'Soomaaliga', # Somali
+ 'sq' => 'Shqip', # Albanian
+ 'sr' => '&#1057;&#1088;&#1087;&#1089;&#1082;&#1080; / Srpski', # Serbian
+ 'ss' => 'SiSwati', # Swati
+ 'st' => 'seSotho', # (Southern) Sotho
+ 'su' => 'Bahasa Sunda', # Sundanese
+ 'sv' => 'Svenska', # Swedish
+ 'sw' => 'Kiswahili', # Swahili
+ 'ta' => '&#2980;&#2990;&#3007;&#2996;&#3021;', # Tamil
+ 'te' => '&#3108;&#3142;&#3122;&#3137;&#3095;&#3137;', # Telugu
+ 'tg' => '&#1058;&#1086;&#1207;&#1080;&#1082;&#1251;', # Tajik
+ 'th' => '&#3652;&#3607;&#3618;', # Thai
+ 'ti' => 'Tigrinya', # Tigrinya - FIXME
+ 'tk' => '&#1578;&#1585;&#1603;&#1605;&#1606; / &#1058;&#1091;&#1088;&#1082;&#1084;&#1077;&#1085;', # Turkmen
+ 'tl' => 'Tagalog', # Tagalog (Filipino)
+ #'tlh' => 'tlhIngan-Hol', # Klingon - no interlanguage links allowed
+ 'tn' => 'Setswana', # Setswana
+ 'to' => 'Tonga', # Tonga - FIXME
+ 'tokipona' => 'Toki Pona', # Toki Pona
+ 'tp' => 'Toki Pona', # Toki Pona - non-standard language code
+ 'tpi' => 'Tok Pisin', # Tok Pisin
+ 'tr' => 'T&uuml;rk&ccedil;e', # Turkish
+ 'ts' => 'Xitsonga', # Tsonga
+ 'tt' => 'Tatar', # Tatar
+ 'tw' => 'Twi', # Twi -- FIXME
+ 'ty' => 'Reo M&#257;`ohi', # Tahitian
+ 'ug' => 'Oyghurque', # Uyghur
+ 'uk' => '&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;', # Ukrainian
+ 'ur' => '&#1575;&#1585;&#1583;&#1608;', # Urdu
+ 'uz' => '&#1038;&#1079;&#1073;&#1077;&#1082;', # Uzbek
+ 've' => 'Venda', # Venda
+ 'vi' => 'Ti&#7871;ng Vi&#7879;t', # Vietnamese
+ 'vo' => 'Volap&uuml;k', # Volapük
+ 'wa' => 'Walon', # Walloon
+ 'wo' => 'Wollof', # Wolof
+ 'xh' => 'isiXhosa', # Xhosan
+ 'yi' => '&#1497;&#1497;&#1460;&#1491;&#1497;&#1513;', # Yiddish
+ 'yo' => 'Yor&ugrave;b&aacute;', # Yoruba
+ 'za' => '(Cuengh)', # Zhuang
+ 'zh' => '&#20013;&#25991;', # (Zh&#333;ng Wén) - Chinese
+ 'zh-cfr' => '&#38313;&#21335;&#35486;', # Min-nan
+ 'zh-cn' => '&#20013;&#25991;(&#31616;&#20307;)', # Simplified
+ 'zh-tw' => '&#20013;&#25991;(&#32321;&#20307;)', # Traditional
+ 'zu' => 'isiZulu', # Zulu
+);
+?>
diff --git a/maintenance/DiffLanguage.php b/maintenance/DiffLanguage.php
index 7857635f43c2..0d97d22911a7 100644
--- a/maintenance/DiffLanguage.php
+++ b/maintenance/DiffLanguage.php
@@ -34,26 +34,14 @@
# The script then print a list of wgAllMessagesXX keys that aren't
# localised, a percentage of messages correctly localised and the
# number of messages to be translated.
-#
-#
-# Known bugs:
-# - File paths are hardcoded
-#
-
-
-$wgCommandLineMode = true;
-# Turn off output buffering if it's on
-@ob_end_flush();
-require_once("../LocalSettings.php");
-require_once( "../includes/Setup.php" );
-require_once( "../install-utils.inc" );
+require_once( "commandLine.inc" );
$wgLanguageCode = strtoupper(substr($wgLanguageCode,0,1)).strtolower(substr($wgLanguageCode,1));
# read command line argument
-if ( isset($argv[1]) ) {
- $lang = $argv[1];
+if ( isset($args[0]) ) {
+ $lang = $args[0];
# or prompt a simple menu
} else {
diff --git a/maintenance/InitialiseMessages.inc b/maintenance/InitialiseMessages.inc
index 12522466c1aa..699ec66d5e64 100755
--- a/maintenance/InitialiseMessages.inc
+++ b/maintenance/InitialiseMessages.inc
@@ -9,20 +9,26 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
global $wgOut, $wgArticle, $wgUser;
global $wgMessageCache, $wgMemc, $wgDBname, $wgUseMemCached;
+ # Initialise $wgOut and $wgUser for a command line script
+ $wgOut->disable();
+
+ $wgUser = new User;
+ $wgUser->setLoaded( true ); # Don't load from DB
+ $wgUser->setName( 'MediaWiki default' );
+
# Don't try to draw messages from the database we're initialising
$wgMessageCache->disable();
- $fname = "initialiseMessages";
+ $fname = 'initialiseMessages';
$ns = NS_MEDIAWIKI;
# cur_user_text responsible for the modifications
# Don't change it unless you're prepared to update the DBs accordingly, otherwise the
# default messages won't be overwritte
- $username = "MediaWiki default";
+ $username = 'MediaWiki default';
$timestamp = wfTimestampNow();
$invTimestamp = wfInvertTimestamp( $timestamp );
- $mwMsg =& MagicWord::get( MAG_MSG );
- $navText = str_replace( "$1", "allmessagestext", $mwMsg->getSynonym( 0 ) );
+ $navText = '{{int:allmessagestext}}';
$navText .= "
<table border=1 width=100%><tr><td>
@@ -39,7 +45,7 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
# Get keys from $wgAllMessagesEn, which is more complete than the local language
$first = true;
if ( $messageArray ) {
- $sortedArray = $wgAllMessagesEn;
+ $sortedArray = $messageArray;
} else {
$sortedArray = $wgAllMessagesEn;
}
@@ -48,19 +54,19 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
# SELECT all existing messages
foreach ( $sortedArray as $key => $enMsg ) {
- if ( $key == "" ) {
+ if ( $key == '' ) {
continue; // Skip odd members
}
if ( $first ) {
$first = false;
} else {
- $sql .= ",";
+ $sql .= ',';
}
$titleObj = Title::newFromText( $key );
$enctitle = wfStrencode($titleObj->getDBkey());
$sql .= "'$enctitle'";
}
- $sql .= ")";
+ $sql .= ')';
$res = wfQuery( $sql, DB_READ );
$row = wfFetchObject( $res );
@@ -68,10 +74,10 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
# Decide whether or not each one needs to be overwritten
$existingTitles = array();
while ( $row ) {
- if ( !$row->cur_is_new || $row->cur_user_text != $username ) {
- $existingTitles[$row->cur_title] = "keep";
+ if ( $row->cur_user_text != $username ) {
+ $existingTitles[$row->cur_title] = 'keep';
} else {
- $existingTitles[$row->cur_title] = "chuck";
+ $existingTitles[$row->cur_title] = 'chuck';
}
$row = wfFetchObject( $res );
@@ -83,14 +89,12 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
cur_user_text, cur_timestamp, cur_restrictions,
cur_is_new, inverse_timestamp, cur_touched) VALUES ";
$first = true;
- $mwObj =& MagicWord::get( MAG_MSGNW );
- $msgnw = $mwObj->getSynonym( 0 );
$talk = $wgLang->getNsText( NS_TALK );
$mwtalk = $wgLang->getNsText( NS_MEDIAWIKI_TALK );
# Process each message
foreach ( $sortedArray as $key => $enMsg ) {
- if ( $key == "" ) {
+ if ( $key == '' ) {
continue; // Skip odd members
}
# Get message text
@@ -104,19 +108,12 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
$dbencMsg = wfStrencode( $message );
# Update messages which already exist
- # Note: UPDATE is now used instead of DELETE/INSERT to avoid wiping cur_restrictions
if ( array_key_exists( $title, $existingTitles ) ) {
- if ( $existingTitles[$title] == "chuck" || $overwrite) {
- wfQuery( "UPDATE cur
- SET
- cur_text='$dbencMsg',
- cur_user=0,
- cur_user_text='$username',
- cur_timestamp='$timestamp',
- cur_touched='$timestamp',
- inverse_timestamp='$invTimestamp'
- WHERE cur_namespace=8 and cur_title='$title'", DB_WRITE
- );
+ if ( $existingTitles[$title] == 'chuck' || $overwrite) {
+ # print "$title\n";
+ $mwTitleObj = Title::makeTitle( NS_MEDIAWIKI, $title );
+ $article = new Article( $mwTitleObj );
+ $article->quickEdit( $message );
}
$doInsert = false;
} else {
@@ -124,7 +121,7 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
if ( $first ) {
$first = false;
} else {
- $sql .= ",";
+ $sql .= ',';
}
$sql .=
"($ns,
@@ -139,8 +136,6 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
}
# Make table row for navigation page
- $mw = str_replace( "$1", $key, $msgnw );
-
$message = wfEscapeWikiText( $message );
$navText .=
"<tr><td>
@@ -149,7 +144,7 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
</td><td>
$message
</td><td>
-$mw
+{{int:$title}}
</td></tr>";
}
@@ -160,9 +155,9 @@ $mw
# Write the navigation page
- $navText .= "</table>";
- $title = wfMsgNoDB( "allmessages" );
- $titleObj = Title::makeTitle( NS_MEDIAWIKI, $title );
+ $navText .= '</table>';
+ $title = wfMsgNoDB( 'allmessages' );
+ $titleObj = Title::makeTitle( NS_WIKIPEDIA, $title );
$wgArticle = new Article( $titleObj );
$wgOut->disable();
$wgUser = User::newFromName( 'MediaWiki default' );
@@ -174,16 +169,25 @@ $mw
# Clear the relevant memcached key
if( $wgUseMemCached ) {
- print "Clearing message cache...";
- $wgMemc->delete( "$wgDBname:messages" );
+ print 'Clearing message cache...';
+ $wgMemc->delete( $wgDBname.':messages' );
print "Done.\n";
}
}
-function loadArrayFromFile( $filename )
+function loadLanguageFile( $filename )
{
$contents = file_get_contents( $filename );
+ # Remove header line
+ $p = strpos( $contents, "\n" ) + 1;
+ $contents = substr( $contents, $p );
+ # Unserialize
return unserialize( $contents );
}
+function doUpdates() {
+ global $wgDeferredUpdateList;
+ foreach ( $wgDeferredUpdateList as $up ) { $up->doUpdate(); }
+}
+
?>
diff --git a/maintenance/archives/moveCustomMessages.inc b/maintenance/archives/moveCustomMessages.inc
new file mode 100644
index 000000000000..5438194690a1
--- /dev/null
+++ b/maintenance/archives/moveCustomMessages.inc
@@ -0,0 +1,149 @@
+<?php
+
+function isTemplateInitialised() {
+ $sql = "SELECT 1 FROM cur WHERE cur_namespace=" . NS_TEMPLATE . " LIMIT 1";
+ $res = wfQuery( $sql, DB_READ );
+ return wfNumRows( $res ) ? true : false;
+}
+
+function moveCustomMessages( $phase ) {
+ global $wgUser, $wgAllMessagesEn, $wgDeferredUpdateList, $wgLang;
+ global $targets, $template, $replaceCount;
+
+ $wgUser = new User;
+ $wgUser->setLoaded( true ); # Don't load from DB
+ $wgUser->setName( "Template namespace initialisation script" );
+ $wgUser->addRight( "bot" );
+
+ wfIgnoreSQLErrors( true );
+
+ # Compose DB key array
+ $dbkeys = array();
+
+ foreach ( $wgAllMessagesEn as $key => $enValue ) {
+ $title = Title::newFromText( $key );
+ $dbkeys[$title->getDBkey()] = 1;
+ }
+
+ $sql = "SELECT cur_id, cur_title FROM cur WHERE cur_namespace= " . NS_MEDIAWIKI;
+ $res = wfQuery( $sql, DB_READ );
+
+ # Compile target array
+ $targets = array();
+ while ( $row = wfFetchObject( $res ) ) {
+ if ( !array_key_exists( $row->cur_title, $dbkeys ) ) {
+ $targets[$row->cur_title] = 1;
+ }
+ }
+ wfFreeResult( $res );
+
+ # Create redirects from destination to source
+ if ( $phase == 0 || $phase == 1 ) {
+ print "Creating redirects\n";
+ foreach ( $targets as $partial => $dummy ) {
+ print "$partial...";
+ $nt = Title::makeTitle( NS_TEMPLATE, $partial );
+ $ot = Title::makeTitle( NS_MEDIAWIKI, $partial );
+
+ if ( $nt->createRedirect( $ot, "" ) ) {
+ print "redirected\n";
+ } else {
+ print "not redirected\n";
+ }
+ }
+ if ( $phase == 0 ) {
+ print "\nRedirects created. Update live script files now.\nPress ENTER to continue.\n\n";
+ readconsole();
+ }
+ }
+
+ # Move pages
+ if ( $phase == 0 || $phase == 2 ) {
+ print "\nMoving pages...\n";
+ foreach ( $targets as $partial => $dummy ) {
+ wfQuery( "BEGIN", DB_WRITE );
+ $ot = Title::makeTitle( NS_MEDIAWIKI, $partial );
+ $nt = Title::makeTitle( NS_TEMPLATE, $partial );
+ print "$partial...";
+
+ if ( $ot->moveNoAuth( $nt ) === true ) {
+ print "moved\n";
+ } else {
+ print "not moved\n";
+ }
+ # Do deferred updates
+ while ( count( $wgDeferredUpdateList ) ) {
+ $up = array_pop( $wgDeferredUpdateList );
+ $up->doUpdate();
+ }
+ wfQuery( "COMMIT", DB_WRITE );
+ }
+ }
+
+ # Convert text
+ if ( $phase == 0 || $phase == 3 ) {
+ print "\nConverting text...\n";
+
+ $parser = new Parser;
+ $options = ParserOptions::newFromUser( $wgUser );
+ $completedTitles = array();
+ $titleChars = Title::legalChars();
+ $mediaWiki = $wgLang->getNsText( NS_MEDIAWIKI );
+ $template = $wgLang->getNsText( NS_TEMPLATE );
+ $linkRegex = "/\[\[$mediaWiki:([$titleChars]*?)\]\]/";
+ $msgRegex = "/{{msg:([$titleChars]*?)}}/";
+
+ foreach ( $targets as $partial => $dummy ) {
+ $dest = Title::makeTitle( NS_MEDIAWIKI, $partial );
+ $linksTo = $dest->getLinksTo();
+ foreach( $linksTo as $source ) {
+ wfQuery( "BEGIN", DB_WRITE );
+ $pdbk = $source->getPrefixedDBkey();
+ if ( !array_key_exists( $pdbk, $completedTitles ) ) {
+ $completedTitles[$pdbk] = 1;
+ $id = $source->getArticleID();
+ $row = wfGetArray( 'cur', array( 'cur_text' ),
+ array( 'cur_id' => $source->getArticleID() ) );
+ $parser->startExternalParse( $source, $options, OT_WIKI );
+ $text = $parser->strip( $row->cur_text, $stripState, false );
+ # {{msg}} -> {{}}
+ $text = preg_replace( $msgRegex, "{{\$1}}", $text );
+ # [[MediaWiki:]] -> [[Template:]]
+ $text = preg_replace_callback( $linkRegex, "wfReplaceMediaWiki", $text );
+ $text = $parser->unstrip( $text, $stripState );
+ $text = $parser->unstripNoWiki( $text, $stripState );
+ if ( $text != $row->cur_text ) {
+ print "$pdbk\n";
+ $art = new Article( $source );
+ $art->updateArticle( $text, "", false, false );
+ # Do deferred updates
+ while ( count( $wgDeferredUpdateList ) ) {
+ $up = array_pop( $wgDeferredUpdateList );
+ $up->doUpdate();
+ }
+ } else {
+ print "($pdbk)\n";
+ }
+ }
+ wfQuery( "COMMIT", DB_WRITE );
+ }
+ }
+ }
+}
+
+
+#--------------------------------------------------------------------------------------------------------------
+function wfReplaceMediaWiki( $m ) {
+ global $targets, $template, $replaceCount;
+ $title = Title::newFromText( $m[1] );
+ $partial = $title->getDBkey();
+
+ if ( array_key_exists( $partial, $targets ) ) {
+ $text = "[[$template:{$m[1]}]]";
+ } else {
+ $text = $m[0];
+ }
+ return $text;
+}
+
+?>
diff --git a/maintenance/archives/moveCustomMessages.php b/maintenance/archives/moveCustomMessages.php
index bcd49743501c..454bc830781d 100644
--- a/maintenance/archives/moveCustomMessages.php
+++ b/maintenance/archives/moveCustomMessages.php
@@ -8,132 +8,14 @@
# 3. Convert the text to suit the new syntax
chdir( ".." );
-require_once( "commandLine.inc" );
+require_once( "liveCmdLine.inc" );
+require_once( "moveCustomMessages.inc" );
$phase = 0;
-if ( is_numeric( @$argv[2] ) && $argv[2] > 0) {
- $phase = intval($argv[2]);
+if ( is_numeric( @$argv[3] ) && $argv[3] > 0) {
+ $phase = intval($argv[3]);
}
-$wgUser = new User;
-$wgUser->setLoaded( true ); # Don't load from DB
-$wgUser->setName( "Template namespace initialisation script" );
-$wgUser->addRight( "bot" );
+moveCustomMessages( $phase );
-# Compose DB key array
-global $wgAllMessagesEn;
-$dbkeys = array();
-
-foreach ( $wgAllMessagesEn as $key => $enValue ) {
- $title = Title::newFromText( $key );
- $dbkeys[$title->getDBkey()] = 1;
-}
-
-$sql = "SELECT cur_id, cur_title FROM cur WHERE cur_namespace= " . NS_MEDIAWIKI;
-$res = wfQuery( $sql, DB_READ );
-
-# Compile target array
-$targets = array();
-while ( $row = wfFetchObject( $res ) ) {
- if ( !array_key_exists( $row->cur_title, $dbkeys ) ) {
- $targets[$row->cur_title] = 1;
- }
-}
-wfFreeResult( $res );
-
-# Create redirects from destination to source
-if ( $phase == 0 || $phase == 1 ) {
- foreach ( $targets as $partial => $dummy ) {
- print "$partial...";
- $nt = Title::makeTitle( NS_TEMPLATE, $partial );
- $ot = Title::makeTitle( NS_MEDIAWIKI, $partial );
-
- if ( $nt->createRedirect( $ot, "" ) ) {
- print "redirected\n";
- } else {
- print "not redirected\n";
- }
- }
- if ( $phase == 0 ) {
- print "\nRedirects created. Update live script files now.\nPress ENTER to continue.\n\n";
- readconsole();
- }
-}
-
-# Move pages
-if ( $phase == 0 || $phase == 2 ) {
- print "\n";
- foreach ( $targets as $partial => $dummy ) {
- $ot = Title::makeTitle( NS_MEDIAWIKI, $partial );
- $nt = Title::makeTitle( NS_TEMPLATE, $partial );
- print "$partial...";
-
- if ( $ot->moveNoAuth( $nt ) === true ) {
- print "moved\n";
- } else {
- print "not moved\n";
- }
- # Do deferred updates
- while ( count( $wgDeferredUpdateList ) ) {
- $up = array_pop( $wgDeferredUpdateList );
- $up->doUpdate();
- }
- }
-}
-
-# Convert text
-if ( $phase == 0 || $phase == 3 ) {
- print "\n";
-
- $parser = new Parser;
- $options = ParserOptions::newFromUser( $wgUser );
- $completedTitles = array();
- $titleChars = Title::legalChars();
- $mediaWiki = $wgLang->getNsText( NS_MEDIAWIKI );
- $template = $wgLang->getNsText( NS_TEMPLATE );
- $linkRegex = "/\[\[$mediaWiki:([$titleChars]*?)\]\]/";
- $msgRegex = "/{{msg:([$titleChars]*?)}}/";
-
- foreach ( $targets as $partial => $dummy ) {
- $dest = Title::makeTitle( NS_TEMPLATE, $partial );
- $linksTo = $dest->getLinksTo();
- foreach( $linksTo as $source ) {
- $pdbk = $source->getPrefixedDBkey();
- print "$pdbk...";
- if ( !array_key_exists( $pdbk, $completedTitles ) ) {
- $completedTitles[$pdbk] = 1;
- $id = $source->getArticleID();
- $row = wfGetArray( 'cur', array( 'cur_text' ),
- array( 'cur_id' => $source->getArticleID() ) );
- $parser->startExternalParse( $source, $options, OT_WIKI );
- $text = $parser->strip( $row->cur_text, $stripState, false );
- # {{msg}} -> {{}}
- $text = preg_replace( $msgRegex, "{{\$1}}", $text );
- # [[MediaWiki:]] -> [[Template:]]
- $text = preg_replace_callback( $linkRegex, "wfReplaceMediaWiki", $text );
- $text = $parser->unstrip( $text, $stripState );
- if ( $text != $row->cur_text ) {
- wfUpdateArray( 'cur', array( 'cur_text' => $text ), array( 'cur_id' => $id ) );
- print "modified\n";
- } else {
- print "not modified\n";
- }
- }
- }
- }
-}
-
-#--------------------------------------------------------------------------------------------------------------
-function wfReplaceMediaWiki( $m ) {
- global $targets, $template, $replaceCount;
- $title = Title::newFromText( $m[1] );
- $partial = $title->getDBkey();
-
- if ( array_key_exists( $partial, $targets ) ) {
- $text = "[[$template:{$m[1]}]]";
- } else {
- $text = $m[0];
- }
- return $text;
-}
?>
diff --git a/maintenance/archives/patch-linkscc-1.3.sql b/maintenance/archives/patch-linkscc-1.3.sql
new file mode 100644
index 000000000000..6f9e6313532e
--- /dev/null
+++ b/maintenance/archives/patch-linkscc-1.3.sql
@@ -0,0 +1,6 @@
+--
+-- linkscc table used to cache link lists in easier to digest form.
+-- New schema for 1.3 - removes old lcc_title column.
+-- May 2004
+--
+ALTER TABLE linkscc DROP COLUMN lcc_title; \ No newline at end of file
diff --git a/maintenance/archives/patch-profiling.sql b/maintenance/archives/patch-profiling.sql
new file mode 100644
index 000000000000..ea9974ce3f76
--- /dev/null
+++ b/maintenance/archives/patch-profiling.sql
@@ -0,0 +1,10 @@
+-- profiling table
+-- This is optional
+
+CREATE TABLE profiling (
+ pf_count integer not null default 0,
+ pf_time float not null default 0,
+ pf_name varchar(255) not null default '',
+ UNIQUE KEY pf_name (pf_name)
+);
+
diff --git a/maintenance/attribute.php b/maintenance/attribute.php
index 56c2d2acb3ec..a6dcf4a67346 100644
--- a/maintenance/attribute.php
+++ b/maintenance/attribute.php
@@ -1,31 +1,20 @@
<?php
+# Script for re-attributing edits
+require_once( "commandLine.inc" );
# Parameters
-
-if ($argc < 4) {
+if ( count( $args ) < 2 ) {
print "Not enough parameters\n";
- print "Usage: php attribute.php <lang> <source> <destination>\n";
+ if ( $wgWikiFarm ) {
+ print "Usage: php attribute.php <language> <site> <source> <destination>\n";
+ } else {
+ print "Usage: php attribute.php <source> <destination>\n";
+ }
exit;
}
-$lang = $argv[1];
-$source = $argv[2];
-$dest = $argv[3];
-
-# Initialisation
-
-$wgCommandLineMode = true;
-$DP = "../includes";
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-ini_set( "include_path", "$IP$sep$include_path" );
-
-require_once( "/apache/htdocs/$lang/w/LocalSettings.php" );
-require_once( "Setup.php" );
-
-$wgTitle = Title::newFromText( "Changing attribution script" );
-set_time_limit(0);
-$wgCommandLineMode = true;
+$source = $args[0];
+$dest = $args[1];
$eSource = wfStrencode( $source );
$eDest = wfStrencode( $dest );
diff --git a/maintenance/commandLine.inc b/maintenance/commandLine.inc
index f868b0bfc783..ee1d78e863e2 100644
--- a/maintenance/commandLine.inc
+++ b/maintenance/commandLine.inc
@@ -1,41 +1,118 @@
<?php
+# Abort if called from a web server
if ( isset( $_SERVER ) && array_key_exists( 'REQUEST_METHOD', $_SERVER ) ) {
print "This script must be run from the command line\n";
exit();
}
-$wgCommandLineMode = true;
+# Process command line arguments
+# $options becomes an array with keys set to the option names
+# $optionsWithArgs is an array of GNU-style options that take an argument. The arguments are returned
+# in the values of $options.
+
+if ( !isset( $optionsWithArgs ) ) {
+ $optionsWithArgs = array();
+}
+
+$self = array_shift( $argv );
+$IP = realpath( dirname( $self ) . "/.." );
+chdir( $IP );
+
+$options = array();
+$args = array();
+for( $arg = reset( $argv ); $arg !== false; $arg = next( $argv ) ) {
+ if ( substr( $arg, 0, 2 ) == '--' ) {
+ # Long options
+ $option = substr( $arg, 2 );
+ if ( in_array( $option, $optionsWithArgs ) ) {
+ $param = next( $argv );
+ if ( $param === false ) {
+ die( "$arg needs an value after it\n" );
+ }
+ $options[$option] = $param;
+ } else {
+ $options[$option] = 1;
+ }
+ } elseif ( $arg{0} == '-' ) {
+ # Short options
+ for ( $p=1; $p<strlen( $arg ); $p++ ) {
+ $option = $arg{$p};
+ if ( in_array( $option, $optionsWithArgs ) ) {
+ $param = next( $argv );
+ if ( $param === false ) {
+ die( "$arg needs an value after it\n" );
+ }
+ $options[$option] = $param;
+ } else {
+ $options[$option] = 1;
+ }
+ }
+ } else {
+ $args[] = $arg;
+ }
+}
+
+# General initialisation
+
+$wgCommandLineMode = true;
+# Turn off output buffering if it's on
+@ob_end_flush();
$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-if ( @$argv[1] && @$argv[1] != "-" ) {
- $lang = $argv[1];
+
+if ( $sep == ":" && strpos( `hostname -a`, "wikimedia.org" ) !== false ) {
+ $wgWikiFarm = true;
+ if ( isset( $args[0] ) ) {
+ $lang = array_shift( $args );
+ } else {
+ $lang = "aa";
+ }
+ if ( isset( $args[0] ) ) {
+ $site = array_shift( $args );
+ } else {
+ $site = "wikipedia";
+ }
+
+ # This is for the IRC scripts, which now run as the apache user
+ # The apache user doesn't have access to the wikiadmin_pass command
+ if ( $_ENV['USER'] != "apache" ) {
+ $wgDBadminuser = "wikiadmin";
+ $wgDBadminpassword = trim(`wikiadmin_pass`);
+ }
+
putenv( "wikilang=$lang");
- $settingsFile = "/apache/htdocs/{$argv[1]}/w/LocalSettings.php";
- $newpath = "/apache/common/php$sep";
+
+ $DP = $IP;
+ ini_set( "include_path", ".:$IP:$IP/includes:$IP/languages:$IP/maintenance" );
+
+ require_once( "/home/wikipedia/common/php-new/CommonSettings.php" );
} else {
- $settingsFile = "../LocalSettings.php";
- $newpath = "";
-}
+ $wgWikiFarm = false;
+ $settingsFile = "$IP/LocalSettings.php";
-if ( ! is_readable( $settingsFile ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
+ if ( ! is_readable( $settingsFile ) ) {
+ print "A copy of your installation's LocalSettings.php\n" .
+ "must exist in the source directory.\n";
+ exit();
+ }
+ $wgCommandLineMode = true;
+ $DP = $IP;
+ include_once( $settingsFile );
+ ini_set( "include_path", ".$sep$IP$sep$IP/includes$sep$IP/languages$sep$IP/maintenance" );
+ include_once( "$IP/AdminSettings.php" );
}
-
+# Turn off output buffering again, it might have been turned on in the settings files
+@ob_end_flush();
+# Same with this one
$wgCommandLineMode = true;
-$DP = "../includes";
-include_once( $settingsFile );
-ini_set( "include_path", "../includes$sep../languages$sep$newpath$IP$sep$include_path" );
$wgUsePHPTal = false;
define("MEDIAWIKI",true);
-include_once( "Setup.php" );
-include_once( "./InitialiseMessages.inc" );
-include_once( "../install-utils.inc" );
-$wgTitle = Title::newFromText( "Rebuild messages script" );
-$wgCommandLineMode = true;
+require_once( "Setup.php" );
+require_once( "install-utils.inc" );
+$wgTitle = Title::newFromText( "Command line script" );
set_time_limit(0);
+
?>
diff --git a/maintenance/compressOld.inc b/maintenance/compressOld.inc
index ff47e15f96d7..8da4272571c2 100644
--- a/maintenance/compressOld.inc
+++ b/maintenance/compressOld.inc
@@ -1,7 +1,5 @@
<?php
-include_once( "Article.php" );
-
function compressOldPages( $start = 0 ) {
$chunksize = 50;
print "Starting from old_id $start...\n";
diff --git a/maintenance/compressOld.php b/maintenance/compressOld.php
index d3b88ddf9927..0d3531376efa 100644
--- a/maintenance/compressOld.php
+++ b/maintenance/compressOld.php
@@ -1,29 +1,9 @@
<?php
-# Rebuild search index table from scratch. This takes several
-# hours, depending on the database size and server configuration.
+# Compress the old table, old_flags=gzip
-if ( ! is_readable( "../LocalSettings.php" ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
-}
-
-$wgCommandLineMode = true;
-$DP = "../includes";
-require_once( "../LocalSettings.php" );
-require_once( "../AdminSettings.php" );
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-ini_set( "include_path", "$IP$sep$include_path" );
-
-require_once( "Setup.php" );
-require_once( "./compressOld.inc" );
-$wgTitle = Title::newFromText( "Compress old pages script" );
-set_time_limit(0);
-
-$wgDBuser = $wgDBadminuser;
-$wgDBpassword = $wgDBadminpassword;
+require_once( "commandLine.inc" );
+require_once( "compressOld.inc" );
if( !function_exists( "gzdeflate" ) ) {
print "You must enable zlib support in PHP to compress old revisions!\n";
diff --git a/maintenance/convertLinks.inc b/maintenance/convertLinks.inc
new file mode 100644
index 000000000000..c9b7fb54cbe6
--- /dev/null
+++ b/maintenance/convertLinks.inc
@@ -0,0 +1,202 @@
+<?php
+
+function convertLinks() {
+ print "Converting links table to ID-ID...\n";
+
+ global $wgLang, $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname;
+ global $noKeys, $logPerformance, $fh;
+
+ $numRows = $tuplesAdded = $numBadLinks = $curRowsRead = 0; #counters etc
+ $totalTuplesInserted = 0; # total tuples INSERTed into links_temp
+
+ $reportCurReadProgress = true; #whether or not to give progress reports while reading IDs from cur table
+ $curReadReportInterval = 1000; #number of rows between progress reports
+
+ $reportLinksConvProgress = true; #whether or not to give progress reports during conversion
+ $linksConvInsertInterval = 1000; #number of rows per INSERT
+
+ $initialRowOffset = 0;
+ #$finalRowOffset = 0; # not used yet; highest row number from links table to process
+
+ # Overwrite the old links table with the new one. If this is set to false,
+ # the new table will be left at links_temp.
+ $overwriteLinksTable = true;
+
+ # Don't create keys, and so allow duplicates in the new links table.
+ # This gives a huge speed improvement for very large links tables which are MyISAM. (What about InnoDB?)
+ $noKeys = false;
+
+
+ $logPerformance = false; # output performance data to a file
+ $perfLogFilename = "convLinksPerf.txt";
+ #--------------------------------------------------------------------
+
+ $res = wfQuery( "SELECT l_from FROM links LIMIT 1", DB_READ );
+ if ( mysql_field_type( $res, 0 ) == "int" ) {
+ print "Schema already converted\n";
+ return;
+ }
+
+ $res = wfQuery( "SELECT COUNT(*) AS count FROM links", DB_WRITE );
+ $row = wfFetchObject($res);
+ $numRows = $row->count;
+ wfFreeResult( $res );
+
+ if ( $numRows == 0 ) {
+ print "Updating schema (no rows to convert)...\n";
+ createTempTable();
+ } else {
+ if ( $logPerformance ) { $fh = fopen ( $perfLogFilename, "w" ); }
+ $baseTime = $startTime = getMicroTime();
+ # Create a title -> cur_id map
+ print "Loading IDs from cur table...\n";
+ performanceLog ( "Reading $numRows rows from cur table...\n" );
+ performanceLog ( "rows read vs seconds elapsed:\n" );
+ wfBufferSQLResults( false );
+ $res = wfQuery( "SELECT cur_namespace,cur_title,cur_id FROM cur", DB_WRITE );
+ $ids = array();
+
+ while ( $row = wfFetchObject( $res ) ) {
+ $title = $row->cur_title;
+ if ( $row->cur_namespace ) {
+ $title = $wgLang->getNsText( $row->cur_namespace ) . ":$title";
+ }
+ $ids[$title] = $row->cur_id;
+ $curRowsRead++;
+ if ($reportCurReadProgress) {
+ if (($curRowsRead % $curReadReportInterval) == 0) {
+ performanceLog( $curRowsRead . " " . (getMicroTime() - $baseTime) . "\n" );
+ print "\t$curRowsRead rows of cur table read.\n";
+ }
+ }
+ }
+ wfFreeResult( $res );
+ wfBufferSQLResults( true );
+ print "Finished loading IDs.\n\n";
+ performanceLog( "Took " . (getMicroTime() - $baseTime) . " seconds to load IDs.\n\n" );
+ #--------------------------------------------------------------------
+
+ # Now, step through the links table (in chunks of $linksConvInsertInterval rows),
+ # convert, and write to the new table.
+ createTempTable();
+ performanceLog( "Resetting timer.\n\n" );
+ $baseTime = getMicroTime();
+ print "Processing $numRows rows from links table...\n";
+ performanceLog( "Processing $numRows rows from links table...\n" );
+ performanceLog( "rows inserted vs seconds elapsed:\n" );
+
+ for ($rowOffset = $initialRowOffset; $rowOffset < $numRows; $rowOffset += $linksConvInsertInterval) {
+ $sqlRead = "SELECT * FROM links LIMIT $linksConvInsertInterval OFFSET $rowOffset";
+ $res = wfQuery($sqlRead, DB_READ);
+ if ( $noKeys ) {
+ $sqlWrite = array("INSERT INTO links_temp(l_from,l_to) VALUES ");
+ } else {
+ $sqlWrite = array("INSERT IGNORE INTO links_temp(l_from,l_to) VALUES ");
+ }
+
+ $tuplesAdded = 0; # no tuples added to INSERT yet
+ while ( $row = wfFetchObject($res) ) {
+ $fromTitle = $row->l_from;
+ if ( array_key_exists( $fromTitle, $ids ) ) { # valid title
+ $from = $ids[$fromTitle];
+ $to = $row->l_to;
+ if ( $tuplesAdded != 0 ) {
+ $sqlWrite[] = ",";
+ }
+ $sqlWrite[] = "($from,$to)";
+ $tuplesAdded++;
+ } else { # invalid title
+ $numBadLinks++;
+ }
+ }
+ wfFreeResult($res);
+ #print "rowOffset: $rowOffset\ttuplesAdded: $tuplesAdded\tnumBadLinks: $numBadLinks\n";
+ if ( $tuplesAdded != 0 ) {
+ if ($reportLinksConvProgress) {
+ print "Inserting $tuplesAdded tuples into links_temp...";
+ }
+ wfQuery( implode("",$sqlWrite) , DB_WRITE );
+ $totalTuplesInserted += $tuplesAdded;
+ if ($reportLinksConvProgress)
+ print " done. Total $totalTuplesInserted tuples inserted.\n";
+ performanceLog( $totalTuplesInserted . " " . (getMicroTime() - $baseTime) . "\n" );
+ }
+ }
+ print "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n\n";
+ performanceLog( "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n" );
+ performanceLog( "Total execution time: " . (getMicroTime() - $startTime) . " seconds.\n" );
+ if ( $logPerformance ) { fclose ( $fh ); }
+ }
+ #--------------------------------------------------------------------
+
+ if ( $overwriteLinksTable ) {
+ $dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+ if (!($dbConn->isOpen())) {
+ print "Opening connection to database failed.\n";
+ return;
+ }
+ # Check for existing links_backup, and delete it if it exists.
+ print "Dropping backup links table if it exists...";
+ $dbConn->query( "DROP TABLE IF EXISTS links_backup", DB_WRITE);
+ print " done.\n";
+
+ # Swap in the new table, and move old links table to links_backup
+ print "Swapping tables 'links' to 'links_backup'; 'links_temp' to 'links'...";
+ $dbConn->query( "RENAME TABLE links TO links_backup, links_temp TO links", DB_WRITE );
+ print " done.\n\n";
+
+ $dbConn->close();
+ print "Conversion complete. The old table remains at links_backup;\n";
+ print "delete at your leisure.\n";
+ } else {
+ print "Conversion complete. The converted table is at links_temp;\n";
+ print "the original links table is unchanged.\n";
+ }
+}
+
+#--------------------------------------------------------------------
+
+function createTempTable() {
+ global $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname;
+ global $noKeys;
+ $dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+
+ if (!($dbConn->isOpen())) {
+ print "Opening connection to database failed.\n";
+ return;
+ }
+
+ print "Dropping temporary links table if it exists...";
+ $dbConn->query( "DROP TABLE IF EXISTS links_temp", DB_WRITE);
+ print " done.\n";
+
+ print "Creating temporary links table...";
+ if ( $noKeys ) {
+ $dbConn->query( "CREATE TABLE links_temp ( " .
+ "l_from int(8) unsigned NOT NULL default '0', " .
+ "l_to int(8) unsigned NOT NULL default '0')", DB_WRITE);
+ } else {
+ $dbConn->query( "CREATE TABLE links_temp ( " .
+ "l_from int(8) unsigned NOT NULL default '0', " .
+ "l_to int(8) unsigned NOT NULL default '0', " .
+ "UNIQUE KEY l_from(l_from,l_to), " .
+ "KEY (l_to))", DB_WRITE);
+ }
+ print " done.\n\n";
+}
+
+function performanceLog( $text ) {
+ global $logPerformance, $fh;
+ if ( $logPerformance ) {
+ fwrite( $fh, $text );
+ }
+}
+
+function getMicroTime() { # return time in seconds, with microsecond accuracy
+ list($usec, $sec) = explode(" ", microtime());
+ return ((float)$usec + (float)$sec);
+}
+
+
+
+?>
diff --git a/maintenance/convertLinks.php b/maintenance/convertLinks.php
index 8e3bb51799e4..3511e407d5ce 100644
--- a/maintenance/convertLinks.php
+++ b/maintenance/convertLinks.php
@@ -3,196 +3,8 @@
# The wiki should be put into read-only mode while this script executes
require_once( "commandLine.inc" );
-# the below should probably be moved into commandLine.inc at some point
-require_once( "../AdminSettings.php" );
+require_once( "convertLinks.inc" );
-$numRows = $tuplesAdded = $numBadLinks = $curRowsRead = 0; #counters etc
-$totalTuplesInserted = 0; # total tuples INSERTed into links_temp
+convertLinks();
-$reportCurReadProgress = true; #whether or not to give progress reports while reading IDs from cur table
-$curReadReportInterval = 1000; #number of rows between progress reports
-
-$reportLinksConvProgress = true; #whether or not to give progress reports during conversion
-$linksConvInsertInterval = 1000; #number of rows per INSERT
-
-$initialRowOffset = 0;
-#$finalRowOffset = 0; # not used yet; highest row number from links table to process
-
-# Overwrite the old links table with the new one. If this is set to false,
-# the new table will be left at links_temp.
-$overwriteLinksTable = true;
-
-# Don't create keys, and so allow duplicates in the new links table.
-# This gives a huge speed improvement for very large links tables which are MyISAM. (What about InnoDB?)
-$noKeys = false;
-
-
-$logPerformance = false; # output performance data to a file
-$perfLogFilename = "convLinksPerf.txt";
-#--------------------------------------------------------------------
-
-$res = wfQuery( "SELECT COUNT(*) AS count FROM links", DB_WRITE );
-$row = wfFetchObject($res);
-$numRows = $row->count;
-wfFreeResult( $res );
-
-if ( $numRows == 0 ) {
- print "No rows to convert. Updating schema...\n";
- createTempTable();
-} else {
- $row = wfFetchObject( $res );
- if ( is_numeric( $row->l_from ) ) {
- print "Schema already converted\n";
- exit;
- }
-
- if ( $logPerformance ) { $fh = fopen ( $perfLogFilename, "w" ); }
- $baseTime = $startTime = getMicroTime();
- # Create a title -> cur_id map
- print "Loading IDs from cur table...\n";
- performanceLog ( "Reading $numRows rows from cur table...\n" );
- performanceLog ( "rows read vs seconds elapsed:\n" );
- wfBufferSQLResults( false );
- $res = wfQuery( "SELECT cur_namespace,cur_title,cur_id FROM cur", DB_WRITE );
- $ids = array();
-
- while ( $row = wfFetchObject( $res ) ) {
- $title = $row->cur_title;
- if ( $row->cur_namespace ) {
- $title = $wgLang->getNsText( $row->cur_namespace ) . ":$title";
- }
- $ids[$title] = $row->cur_id;
- $curRowsRead++;
- if ($reportCurReadProgress) {
- if (($curRowsRead % $curReadReportInterval) == 0) {
- performanceLog( $curRowsRead . " " . (getMicroTime() - $baseTime) . "\n" );
- print "\t$curRowsRead rows of cur table read.\n";
- }
- }
- }
- wfFreeResult( $res );
- wfBufferSQLResults( true );
- print "Finished loading IDs.\n\n";
- performanceLog( "Took " . (getMicroTime() - $baseTime) . " seconds to load IDs.\n\n" );
-#--------------------------------------------------------------------
-
- # Now, step through the links table (in chunks of $linksConvInsertInterval rows),
- # convert, and write to the new table.
- createTempTable();
- performanceLog( "Resetting timer.\n\n" );
- $baseTime = getMicroTime();
- print "Processing $numRows rows from links table...\n";
- performanceLog( "Processing $numRows rows from links table...\n" );
- performanceLog( "rows inserted vs seconds elapsed:\n" );
-
- for ($rowOffset = $initialRowOffset; $rowOffset < $numRows; $rowOffset += $linksConvInsertInterval) {
- $sqlRead = "SELECT * FROM links LIMIT $linksConvInsertInterval OFFSET $rowOffset";
- $res = wfQuery($sqlRead, DB_READ);
- if ( $noKeys ) {
- $sqlWrite = array("INSERT INTO links_temp(l_from,l_to) VALUES ");
- } else {
- $sqlWrite = array("INSERT IGNORE INTO links_temp(l_from,l_to) VALUES ");
- }
-
- $tuplesAdded = 0; # no tuples added to INSERT yet
- while ( $row = wfFetchObject($res) ) {
- $fromTitle = $row->l_from;
- if ( array_key_exists( $fromTitle, $ids ) ) { # valid title
- $from = $ids[$fromTitle];
- $to = $row->l_to;
- if ( $tuplesAdded != 0 ) {
- $sqlWrite[] = ",";
- }
- $sqlWrite[] = "($from,$to)";
- $tuplesAdded++;
- } else { # invalid title
- $numBadLinks++;
- }
- }
- wfFreeResult($res);
- #print "rowOffset: $rowOffset\ttuplesAdded: $tuplesAdded\tnumBadLinks: $numBadLinks\n";
- if ( $tuplesAdded != 0 ) {
- if ($reportLinksConvProgress) {
- print "Inserting $tuplesAdded tuples into links_temp...";
- }
- wfQuery( implode("",$sqlWrite) , DB_WRITE );
- $totalTuplesInserted += $tuplesAdded;
- if ($reportLinksConvProgress)
- print " done. Total $totalTuplesInserted tuples inserted.\n";
- performanceLog( $totalTuplesInserted . " " . (getMicroTime() - $baseTime) . "\n" );
- }
- }
- print "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n\n";
- performanceLog( "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n" );
- performanceLog( "Total execution time: " . (getMicroTime() - $startTime) . " seconds.\n" );
- if ( $logPerformance ) { fclose ( $fh ); }
-}
-#--------------------------------------------------------------------
-
-if ( $overwriteLinksTable ) {
- $dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
- if (!($dbConn->isOpen())) {
- print "Opening connection to database failed.\n";
- exit;
- }
- # Check for existing links_backup, and delete it if it exists.
- print "Dropping backup links table if it exists...";
- $dbConn->query( "DROP TABLE IF EXISTS links_backup", DB_WRITE);
- print " done.\n";
-
- # Swap in the new table, and move old links table to links_backup
- print "Swapping tables 'links' to 'links_backup'; 'links_temp' to 'links'...";
- $dbConn->query( "RENAME TABLE links TO links_backup, links_temp TO links", DB_WRITE );
- print " done.\n\n";
-
- $dbConn->close();
- print "Conversion complete. The old table remains at links_backup;\n";
- print "delete at your leisure.\n";
-} else {
- print "Conversion complete. The converted table is at links_temp;\n";
- print "the original links table is unchanged.\n";
-}
-
-#--------------------------------------------------------------------
-
-function createTempTable() {
- global $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname;
- global $noKeys;
- $dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
-
- if (!($dbConn->isOpen())) {
- print "Opening connection to database failed.\n";
- exit;
- }
-
- print "Dropping temporary links table if it exists...";
- $dbConn->query( "DROP TABLE IF EXISTS links_temp", DB_WRITE);
- print " done.\n";
-
- print "Creating temporary links table...";
- if ( $noKeys ) {
- $dbConn->query( "CREATE TABLE links_temp ( " .
- "l_from int(8) unsigned NOT NULL default '0', " .
- "l_to int(8) unsigned NOT NULL default '0')", DB_WRITE);
- } else {
- $dbConn->query( "CREATE TABLE links_temp ( " .
- "l_from int(8) unsigned NOT NULL default '0', " .
- "l_to int(8) unsigned NOT NULL default '0', " .
- "UNIQUE KEY l_from(l_from,l_to), " .
- "KEY (l_to))", DB_WRITE);
- }
- print " done.\n\n";
-}
-
-function performanceLog( $text ) {
- global $logPerformance, $fh;
- if ( $logPerformance ) {
- fwrite( $fh, $text );
- }
-}
-
-function getMicroTime() { # return time in seconds, with microsecond accuracy
- list($usec, $sec) = explode(" ", microtime());
- return ((float)$usec + (float)$sec);
-}
?>
diff --git a/maintenance/dumpMessages.php b/maintenance/dumpMessages.php
index e4c54601d0cc..1983f7cb711f 100644
--- a/maintenance/dumpMessages.php
+++ b/maintenance/dumpMessages.php
@@ -6,12 +6,7 @@ foreach ( $wgAllMessagesEn as $key => $englishValue )
{
$messages[$key] = wfMsg( $key );
}
-
-if ( count( $argv ) >= 2 ) {
- $res = fopen( $argv[2] );
- fwrite( $res, serialize( $messages ) );
-} else {
- print serialize( $messages );
-}
+print "MediaWiki $wgVersion language file\n";
+print serialize( $messages );
?>
diff --git a/maintenance/eval.php b/maintenance/eval.php
new file mode 100755
index 000000000000..6c59d0c38c4f
--- /dev/null
+++ b/maintenance/eval.php
@@ -0,0 +1,16 @@
+<?php
+require_once( "commandLine.inc" );
+
+do {
+ $line = readconsole( "> " );
+ eval( $line . ";" );
+ if ( function_exists( "readline_add_history" ) ) {
+ readline_add_history( $line );
+ }
+} while ( 1 );
+
+
+
+
+?>
+
diff --git a/maintenance/indexes.sql b/maintenance/indexes.sql
index ffa0782aeb06..fa0359069e70 100644
--- a/maintenance/indexes.sql
+++ b/maintenance/indexes.sql
@@ -51,7 +51,8 @@ ALTER TABLE recentchanges
ADD INDEX rc_timestamp (rc_timestamp),
ADD INDEX rc_namespace_title (rc_namespace, rc_title),
ADD INDEX rc_cur_id (rc_cur_id),
- ADD INDEX new_name_timestamp(rc_new,rc_namespace,rc_timestamp);
+ ADD INDEX new_name_timestamp(rc_new,rc_namespace,rc_timestamp),
+ ADD INDEX rc_ip (rc_ip);
ALTER TABLE archive
ADD KEY `name_title_timestamp` (`ar_namespace`,`ar_title`,`ar_timestamp`);
diff --git a/maintenance/liveCmdLine.inc b/maintenance/liveCmdLine.inc
new file mode 100644
index 000000000000..67d09d19c275
--- /dev/null
+++ b/maintenance/liveCmdLine.inc
@@ -0,0 +1,53 @@
+<?php
+
+# This is a drop-in replacement for commandLine.inc, for use only on
+# the Wikimedia wikis.
+# Call your command-line script with the language name and site name,
+# e.g. php convertLinks.php aa wikipedia
+
+if ( isset( $_SERVER ) && array_key_exists( 'REQUEST_METHOD', $_SERVER ) ) {
+ print "This script must be run from the command line\n";
+ exit();
+}
+
+$wgCommandLineMode = true;
+$self = array_shift( $argv );
+# Turn off output buffering if it's on
+@ob_end_flush();
+
+if ( isset( $argv[0] ) ) {
+ $lang = array_shift( $argv );
+} else {
+ $lang = "aa";
+}
+if ( isset( $argv[0] ) ) {
+ $site = array_shift( $argv );
+} else {
+ $site = "wikipedia";
+}
+
+# This is for the IRC scripts, which now run as the apache user
+if ( $_ENV['USER'] != "apache" ) {
+ $wgDBadminuser = "wikiadmin";
+ $wgDBadminpassword = trim(`wikiadmin_pass`);
+}
+
+$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
+putenv( "wikilang=$lang");
+$newpath = "/home/wikipedia/common/php-new$sep";
+
+$DP = "../includes";
+#ini_set( "include_path", "$newpath$sep$include_path" );
+ini_set( "include_path", "/home/wikipedia/common/php-new:/home/wikipedia/common/php-new/includes" );
+
+require_once( "/home/wikipedia/common/php-new/CommonSettings.php" );
+
+$wgUsePHPTal = false;
+
+define("MEDIAWIKI",true);
+require_once( "Setup.php" );
+require_once( "../install-utils.inc" );
+$wgTitle = Title::newFromText( "Command line script" );
+$wgCommandLineMode = true;
+set_time_limit(0);
+?>
diff --git a/maintenance/mcc.php b/maintenance/mcc.php
index a6b524916ac5..6ebbfc1b35f7 100755
--- a/maintenance/mcc.php
+++ b/maintenance/mcc.php
@@ -1,10 +1,10 @@
<?php
-require_once( "../includes/DefaultSettings.php" );
-require_once( "../LocalSettings.php" );
-require_once( "../includes/MemCachedClient.inc.php" );
-$mcc = new MemCachedClient();
+require_once( "commandLine.inc" );
+
+$mcc = new memcached( array('persistant' => true) );
$mcc->set_servers( $wgMemCachedServers );
+$mcc->set_debug( true );
do {
$bad = false;
@@ -20,7 +20,8 @@ do {
$res = $res[$args[1]];
}
if ( $res === false ) {
- print 'Error: ' . $mcc->error_string() . "\n";
+ #print 'Error: ' . $mcc->error_string() . "\n";
+ print "MemCached error\n";
} elseif ( is_string( $res ) ) {
print "$res\n";
} else {
@@ -35,13 +36,15 @@ do {
$value = implode( " ", $args );
}
if ( !$mcc->set( $key, $value, 0 ) ) {
- print 'Error: ' . $mcc->error_string() . "\n";
+ #print 'Error: ' . $mcc->error_string() . "\n";
+ print "MemCached error\n";
}
break;
case "delete":
$key = implode( " ", $args );
if ( !$mcc->delete( $key ) ) {
- print 'Error: ' . $mcc->error_string() . "\n";
+ #print 'Error: ' . $mcc->error_string() . "\n";
+ print "MemCached error\n";
}
break;
case "quit":
@@ -61,19 +64,5 @@ do {
}
} while ( !$quit );
-function readconsole( $prompt = "" ) {
- if ( function_exists( "readline" ) ) {
- return readline( $prompt );
- } else {
- print $prompt;
- $fp = fopen( "php://stdin", "r" );
- $resp = trim( fgets( $fp, 1024 ) );
- fclose( $fp );
- return $resp;
- }
-}
-
-
-
?>
diff --git a/maintenance/rebuildMessages.php b/maintenance/rebuildMessages.php
index d97d16f452d9..eb549b463032 100755
--- a/maintenance/rebuildMessages.php
+++ b/maintenance/rebuildMessages.php
@@ -1,48 +1,21 @@
<?php
-$wgCommandLineMode = true;
-# Turn off output buffering if it's on
-@ob_end_flush();
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-if ( isset($argv[1]) && $argv[1] ) {
- $lang = $argv[1];
- putenv( "wikilang=$lang");
- $settingsFile = "/apache/htdocs/{$argv[1]}/w/LocalSettings.php";
- $newpath = "/apache/common/php$sep";
-} else {
- $settingsFile = "../LocalSettings.php";
- $newpath = "";
-}
+require_once( "commandLine.inc" );
+include_once( "InitialiseMessages.inc" );
+
+$wgTitle = Title::newFromText( "Rebuild messages script" );
-if ( isset($argv[2]) && $argv[2] == "update" ) {
- $response = 1;
-} elseif ( isset($argv[2]) && $argv[2] == "reinitialise" ) {
- $response = 2;
+if ( isset( $args[0] ) ) {
+ $response = array_shift( $args );
+ if ( $response == "update" ) {
+ $response = 1;
+ } elseif ( $response == "rebuild" ) {
+ $response = 2;
+ }
} else {
$response = 0;
}
-
-if ( ! is_readable( $settingsFile ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
-}
-
-ini_set( "include_path", "../includes$sep../languages$sep$newpath$IP$sep$include_path" );
-
-$wgCommandLineMode = true;
-$DP = "../includes";
-require_once( $settingsFile );
-
-require_once( "Setup.php" );
-require_once( "./InitialiseMessages.inc" );
-require_once( "../install-utils.inc" );
-$wgTitle = Title::newFromText( "Rebuild messages script" );
-$wgCommandLineMode = true;
-set_time_limit(0);
-
-if ( isset($argv) && count( $argv ) >= 3 ) {
- $messages = loadArrayFromFile( $argv[3] );
+if ( isset( $args[0] ) ) {
+ $messages = loadLanguageFile( array_shift( $args ) );
} else {
$messages = false;
}
diff --git a/maintenance/rebuildall.php b/maintenance/rebuildall.php
index a9d0a9760430..d9ec307c06c0 100644
--- a/maintenance/rebuildall.php
+++ b/maintenance/rebuildall.php
@@ -3,31 +3,21 @@
# Rebuild link tracking tables from scratch. This takes several
# hours, depending on the database size and server configuration.
-if ( ! is_readable( "../LocalSettings.php" ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
-}
-
-$wgCommandLineMode = true;
-$DP = "../includes";
-require_once( "../LocalSettings.php" );
-require_once( "../AdminSettings.php" );
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-ini_set( "include_path", "$IP$sep$include_path" );
-
-require_once( "Setup.php" );
-require_once( "./rebuildlinks.inc" );
-require_once( "./rebuildtextindex.inc" );
-require_once( "./rebuildrecentchanges.inc" );
-$wgTitle = Title::newFromText( "Rebuild links script" );
-set_time_limit(0);
+require_once( "commandLine.inc" );
+
+#require_once( "rebuildlinks.inc" );
+require_once( "refreshlinks.inc" );
+require_once( "rebuildtextindex.inc" );
+require_once( "rebuildrecentchanges.inc" );
$wgDBuser = $wgDBadminuser;
$wgDBpassword = $wgDBadminpassword;
-rebuildLinkTables();
+# Doesn't work anymore
+# rebuildLinkTables();
+
+# Use the slow incomplete one instead. It's designed to work in the background
+#refreshLinks( 1 );
dropTextIndex();
rebuildTextIndex();
diff --git a/maintenance/rebuildlinks.php b/maintenance/rebuildlinks.php
index bc4a291f976c..f47b922dbe3b 100644
--- a/maintenance/rebuildlinks.php
+++ b/maintenance/rebuildlinks.php
@@ -3,26 +3,10 @@
# Rebuild link tracking tables from scratch. This takes several
# hours, depending on the database size and server configuration.
-if ( ! is_readable( "../LocalSettings.php" ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
-}
-
-$wgCommandLineMode = true;
-ini_set("implicit_flush", 1);
-
-$DP = "../includes";
-require_once( "../LocalSettings.php" );
-require_once( "../AdminSettings.php" );
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-ini_set( "include_path", "$IP$sep$include_path" );
-
-require_once( "Setup.php" );
+require_once( "commandLine.inc" );
require_once( "./rebuildlinks.inc" );
+
$wgTitle = Title::newFromText( "Rebuild links script" );
-set_time_limit(0);
$wgDBuser = $wgDBadminuser;
$wgDBpassword = $wgDBadminpassword;
diff --git a/maintenance/rebuildrecentchanges.php b/maintenance/rebuildrecentchanges.php
index 3ea838b613c7..6e342b2b1609 100644
--- a/maintenance/rebuildrecentchanges.php
+++ b/maintenance/rebuildrecentchanges.php
@@ -3,24 +3,9 @@
# Rebuild link tracking tables from scratch. This takes several
# hours, depending on the database size and server configuration.
-if ( ! is_readable( "../LocalSettings.php" ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
-}
-
-$wgCommandLineMode = true;
-$DP = "../includes";
-require_once( "../LocalSettings.php" );
-require_once( "../AdminSettings.php" );
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-ini_set( "include_path", "$IP$sep$include_path" );
-
-require_once( "Setup.php" );
+require_once( "commandLine.inc" );
require_once( "./rebuildrecentchanges.inc" );
$wgTitle = Title::newFromText( "Rebuild recent changes script" );
-set_time_limit(0);
$wgDBuser = $wgDBadminuser;
$wgDBpassword = $wgDBadminpassword;
diff --git a/maintenance/rebuildtextindex.php b/maintenance/rebuildtextindex.php
index e9366817292f..83a4ea94e58d 100644
--- a/maintenance/rebuildtextindex.php
+++ b/maintenance/rebuildtextindex.php
@@ -1,26 +1,10 @@
<?php
-
# Rebuild search index table from scratch. This takes several
# hours, depending on the database size and server configuration.
-if ( ! is_readable( "../LocalSettings.php" ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
-}
-
-$wgCommandLineMode = true;
-$DP = "../includes";
-require_once( "../LocalSettings.php" );
-require_once( "../AdminSettings.php" );
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-ini_set( "include_path", "$IP$sep$include_path" );
-
-require_once( "Setup.php" );
+require_once( "commandLine.inc" );
require_once( "./rebuildtextindex.inc" );
$wgTitle = Title::newFromText( "Rebuild text index script" );
-set_time_limit(0);
$wgDBuser = $wgDBadminuser;
$wgDBpassword = $wgDBadminpassword;
diff --git a/maintenance/refreshLinks.inc b/maintenance/refreshLinks.inc
new file mode 100644
index 000000000000..42e1138e0e86
--- /dev/null
+++ b/maintenance/refreshLinks.inc
@@ -0,0 +1,46 @@
+<?php
+
+define( "REPORTING_INTERVAL", 50 );
+define( "PAUSE_INTERVAL", 50 );
+
+function refreshLinks( $start ) {
+ global $wgUser, $wgTitle, $wgArticle, $wgEnablePersistentLC, $wgLinkCache, $wgOut;
+
+ $res = wfQuery("SELECT max(cur_id) as m FROM cur", DB_READ);
+ $row = wfFetchObject( $res );
+ $end = $row->m;
+
+ print("Refreshing link table. Starting from cur_id $start of $end.\n");
+
+ # Don't generate TeX PNGs (lack of a sensible current directory causes errors anyway)
+ $wgUser->setOption("math", 3);
+
+ for ($id = $start; $id <= $end; $id++) {
+ if ( !($id % REPORTING_INTERVAL) ) {
+ print "$id\n";
+ }
+
+ if ( !($id % PAUSE_INTERVAL) ) {
+ sleep(1);
+ }
+
+ $wgTitle = Title::newFromID( $id );
+ if ( is_null( $wgTitle ) ) {
+ continue;
+ }
+
+ $wgArticle = new Article( $wgTitle );
+ $text = $wgArticle->getContent( true );
+ $wgLinkCache = new LinkCache;
+ $wgOut->addWikiText( $text );
+
+ if ( $wgEnablePersistentLC ) {
+ $wgLinkCache->saveToLinkscc( $id, wfStrencode( $wgTitle->getPrefixedDBkey() ) );
+ }
+
+ $linksUpdate = new LinksUpdate( $id, $wgTitle->getPrefixedDBkey() );
+ $linksUpdate->doDumbUpdate();
+ $linksUpdate->fixBrokenLinks();
+ }
+}
+?>
diff --git a/maintenance/refreshLinks.php b/maintenance/refreshLinks.php
index 089e6a70b5b0..6d6ddc3f0494 100644
--- a/maintenance/refreshLinks.php
+++ b/maintenance/refreshLinks.php
@@ -1,8 +1,8 @@
<?php
-define( "REPORTING_INTERVAL", 50 );
-define( "PAUSE_INTERVAL", 50 );
require_once( "commandLine.inc" );
+require_once( "refreshLinks.inc" );
+
error_reporting( E_ALL & (~E_NOTICE) );
@@ -12,42 +12,7 @@ if ($argv[2]) {
$start = 1;
}
-$res = wfQuery("SELECT max(cur_id) as m FROM cur", DB_READ);
-$row = wfFetchObject( $res );
-$end = $row->m;
-
-print("Refreshing link table. Starting from cur_id $start of $end.\n");
-
-# Don't generate TeX PNGs (lack of a sensible current directory causes errors anyway)
-$wgUser->setOption("math", 3);
-
-for ($id = $start; $id <= $end; $id++) {
- if ( !($id % REPORTING_INTERVAL) ) {
- print "$id\n";
- }
-
- if ( !($id % PAUSE_INTERVAL) ) {
- sleep(1);
- }
-
- $wgTitle = Title::newFromID( $id );
- if ( is_null( $wgTitle ) ) {
- continue;
- }
-
- $wgArticle = new Article( $wgTitle );
- $text = $wgArticle->getContent( true );
- $wgLinkCache = new LinkCache;
- @$wgOut->addWikiText( $text );
-
- if ( $wgEnablePersistentLC ) {
- $wgLinkCache->saveToLinkscc( $id, wfStrencode( $wgTitle->getPrefixedDBkey() ) );
- }
-
- $linksUpdate = new LinksUpdate( $id, $wgTitle->getPrefixedDBkey() );
- $linksUpdate->doDumbUpdate();
- $linksUpdate->fixBrokenLinks();
-}
+refreshLinks( $start );
exit();
diff --git a/maintenance/remove-brokenlinks.php b/maintenance/remove-brokenlinks.php
index 89a30033990e..7faecef568dd 100644
--- a/maintenance/remove-brokenlinks.php
+++ b/maintenance/remove-brokenlinks.php
@@ -1,25 +1,9 @@
<?php
# Remove spurious brokenlinks
-
-if ( ! is_readable( "../LocalSettings.php" ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
-}
-
-$wgCommandLineMode = true;
-$DP = "../includes";
-require_once( "../LocalSettings.php" );
-require_once( "../AdminSettings.php" );
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-ini_set( "include_path", "$IP$sep$include_path" );
-
-require_once( "Setup.php" );
+require_once( "commandLine.inc" );
require_once( "./rebuildrecentchanges.inc" );
$wgTitle = Title::newFromText( "Rebuild brokenlinks script" );
-set_time_limit(0);
$wgDBuser = $wgDBadminuser;
$wgDBpassword = $wgDBadminpassword;
diff --git a/maintenance/tables.sql b/maintenance/tables.sql
index 4f256c702fd9..f3fefe876835 100644
--- a/maintenance/tables.sql
+++ b/maintenance/tables.sql
@@ -189,7 +189,8 @@ CREATE TABLE recentchanges (
rc_last_oldid int(10) unsigned NOT NULL default '0',
rc_type tinyint(3) unsigned NOT NULL default '0',
rc_moved_to_ns tinyint(3) unsigned NOT NULL default '0',
- rc_moved_to_title varchar(255) binary NOT NULL default ''
+ rc_moved_to_title varchar(255) binary NOT NULL default '',
+ rc_ip char(15) NOT NULL default ''
) PACK_KEYS=1;
CREATE TABLE watchlist (
@@ -242,3 +243,10 @@ CREATE TABLE objectcache (
unique key (keyname),
key (exptime)
);
+
+-- For storing revision text
+CREATE TABLE blobs (
+ blob_index char(255) binary NOT NULL default '',
+ blob_data longblob NOT NULL default '',
+ UNIQUE key blob_index (blob_index),
+);
diff --git a/maintenance/trivialCmdLine.php b/maintenance/trivialCmdLine.php
new file mode 100644
index 000000000000..4a0bb39cfa4b
--- /dev/null
+++ b/maintenance/trivialCmdLine.php
@@ -0,0 +1,11 @@
+<?php
+require_once( "commandLine.inc" );
+print "DB name: $wgDBname\n";
+print "DB user: $wgDBuser\n";
+print "DB password: $wgDBpassword\n";
+
+$res = wfQuery( "SELECT MAX(cur_id) as m FROM cur", DB_READ );
+$row = wfFetchObject( $res );
+print "Max cur_id: {$row->m}\n";
+
+?>
diff --git a/maintenance/update2.php b/maintenance/update2.php
new file mode 100644
index 000000000000..b8712091cde6
--- /dev/null
+++ b/maintenance/update2.php
@@ -0,0 +1,43 @@
+<?php
+
+# This script was used to convert the live Wikimedia wikis from 1.2 to 1.3
+
+$maintenance = "/home/wikipedia/common/php-new/maintenance";
+require_once( "$maintenance/liveCmdLine.inc" );
+require_once( "$maintenance/InitialiseMessages.inc" );
+require_once( "$maintenance/updaters.inc" );
+require_once( "$maintenance/archives/moveCustomMessages.inc" );
+require_once( "$maintenance/convertLinks.inc" );
+require_once( "$maintenance/../install-utils.inc" );
+
+$wgDatabase = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+do_ipblocks_update(); flush();
+do_interwiki_update(); flush();
+do_index_update(); flush();
+do_linkscc_update(); flush();
+do_linkscc_1_3_update(); flush();
+do_hitcounter_update(); flush();
+do_recentchanges_update(); flush();
+do_user_real_name_update(); flush();
+do_querycache_update(); flush();
+do_objectcache_update(); flush();
+do_categorylinks_update(); flush();
+initialiseMessages(); flush();
+moveCustomMessages( 1 );
+
+if ( file_exists( $wgReadOnlyFile ) ) {
+ $alreadyExists = true;
+} else {
+ $file = fopen( $wgReadOnlyFile, "w" );
+ fwrite( $file, "The database is temporarily locked for a software upgrade\n" );
+ fclose( $file );
+ $alreadyExists = false;
+}
+
+convertLinks();
+
+if ( !$alreadyExists ) {
+ unlink( $wgReadOnlyFile );
+}
+
+?>
diff --git a/maintenance/updaters.inc b/maintenance/updaters.inc
index d557ebb5e8fa..8ed663be0c8b 100644
--- a/maintenance/updaters.inc
+++ b/maintenance/updaters.inc
@@ -102,6 +102,19 @@ function do_linkscc_update() {
}
}
+function do_linkscc_1_3_update() {
+ // Update linkscc table to 1.3 schema if necessary
+ global $wgDatabase, $wgVersion;
+ if( ( strpos( "1.3", $wgVersion ) === 0 ) && $wgDatabase->tableExists( "linkscc" )
+ && $wgDatabase->fieldExists( "linkscc", "lcc_title" ) ) {
+ echo "Altering lcc_title field from linkscc table... ";
+ dbsource( "maintenance/archives/patch-linkscc-1.3.sql", $wgDatabase );
+ echo "ok\n";
+ } else {
+ echo "...linkscc is up to date, or does not exist. Good.\n";
+ }
+}
+
function do_hitcounter_update() {
// Create hitcounter if necessary
global $wgDatabase;
@@ -121,6 +134,11 @@ function do_recentchanges_update() {
dbsource( "maintenance/archives/patch-rc_type.sql" , $wgDatabase );
echo "ok\n";
}
+ if ( !$wgDatabase->fieldExists( "recentchanges", "rc_ip" ) ) {
+ echo "Adding rc_ip...";
+ dbsource( "maintenance/archives/patch-rc_ip.sql", $wgDatabase );
+ echo "ok\n";
+ }
}
function do_user_real_name_update() {
@@ -166,5 +184,4 @@ function do_categorylinks_update() {
echo "ok\n";
}
}
-
-?> \ No newline at end of file
+?>
diff --git a/maintenance/wikipedia-interwiki.sql b/maintenance/wikipedia-interwiki.sql
index 36ad2c5b9341..c42b47d8f681 100644
--- a/maintenance/wikipedia-interwiki.sql
+++ b/maintenance/wikipedia-interwiki.sql
@@ -25,6 +25,7 @@ REPLACE INTO interwiki (iw_prefix,iw_url,iw_local) VALUES
('bo','http://bo.wikipedia.org/wiki/$1',1),
('bs','http://bs.wikipedia.org/wiki/$1',1),
('ca','http://ca.wikipedia.org/wiki/$1',1),
+('chr','http://chr.wikipedia.org/wiki/$1',1),
('co','http://co.wikipedia.org/wiki/$1',1),
('cs','http://cs.wikipedia.org/wiki/$1',1),
('csb','http://csb.wikipedia.org/wiki/$1',1),
diff --git a/maintenance/wiktionary-interwiki.sql b/maintenance/wiktionary-interwiki.sql
index d01dcd4b211d..a2863a87ccd3 100644
--- a/maintenance/wiktionary-interwiki.sql
+++ b/maintenance/wiktionary-interwiki.sql
@@ -25,6 +25,7 @@ REPLACE INTO interwiki (iw_prefix,iw_url,iw_local) VALUES
('bo','http://bo.wiktionary.org/wiki/$1',1),
('bs','http://bs.wiktionary.org/wiki/$1',1),
('ca','http://ca.wiktionary.org/wiki/$1',1),
+('chr','http://chr.wiktionary.org/wiki/$1',1),
('co','http://co.wiktionary.org/wiki/$1',1),
('cs','http://cs.wiktionary.org/wiki/$1',1),
('csb','http://csb.wiktionary.org/wiki/$1',1),
diff --git a/stylesheets/cologneblue.css b/stylesheets/cologneblue.css
index 1bcba666c125..a138309084b1 100644
--- a/stylesheets/cologneblue.css
+++ b/stylesheets/cologneblue.css
@@ -93,3 +93,7 @@ a.stub { color:#772233; text-decoration:none; }
h2, h3, h4, h5, h6 { margin-bottom: 0; }
small { font-size: 75%; }
+#siteNotice {
+ border: 1px solid red;
+}
+
diff --git a/stylesheets/common.css b/stylesheets/common.css
index 712e4fe78ae0..b32503f42fb4 100644
--- a/stylesheets/common.css
+++ b/stylesheets/common.css
@@ -18,7 +18,6 @@ div.floatleft p { font-style: italic; }
/* table standards */
table.rimage {
float:right;
- width:1pt;
margin-left:1em;
margin-bottom:1em;
text-align:center;
@@ -30,6 +29,7 @@ div.thumb {
margin: 10px;
text-align: center;
width: auto;
+ overflow: hidden;
}
div.thumb div {
border: 1px solid #8888aa;
@@ -66,7 +66,7 @@ div.tleft {
/* Page history styling */
/* the auto-generated edit comments */
-.autocomment { color: gray; }
+.autocomment { color: #4b4b4b; }
#pagehistory span.user {
margin-left: 1.4em;
margin-right: 0.4em;
@@ -78,27 +78,26 @@ div.tleft {
border:1px dashed #aaaaaa;
}
-table.diff {
- background:white;
+table.diff { background:white; }
+td.diff-otitle { background:#cccccc; }
+td.diff-ntitle { background:#cccccc; }
+td.diff-addedline {
+ background:#ccffcc;
+ font-size: smaller;
}
-td.diff-otitle {
- background:#cccccc;
-}
-td.diff-ntitle {
- background:#cccccc;
-}
-td.diff-addedline {
- background:#ccffcc;
-}
-td.diff-deletedline {
- background:#ffffaa;
+td.diff-deletedline {
+ background:#ffffaa;
+ font-size: smaller;
}
td.diff-context {
- background:#eeeeee;
+ background:#eeeeee;
+ font-size: smaller;
}
+span.diffchange { color: red; }
img { border: none; }
img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
#toc {
@@ -107,6 +106,14 @@ img.tex { vertical-align: middle; }
padding: 5px;
font-size: 95%;
}
+#toc .tocindent { margin-left: 2em; }
+#toc .tocline { margin-bottom: 0px; }
+#toc p { margin: 0 }
+#toc .toctoggle { font-size: 94%; }
+#toc .editsection {
+ margin-top: 0.7em;
+ font-size: 94%;
+}
.error {
color: red;
@@ -140,3 +147,45 @@ div.prefsectiontip {
}
fieldset.prefsection { margin-top: 1em }
fieldset.operaprefsection { margin-left: 15em }
+
+/* emulate center */
+.center {
+ width: 100%;
+ text-align: center;
+}
+*.center * {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+div.townBox {
+ position:relative;
+ float:right;
+ background:White;
+ margin-left:1em;
+ border: 1px solid Grey;
+ padding:0.3em;
+ width: 200px;
+ overflow: hidden;
+ clear: right;
+}
+div.townBox dl {
+ padding: 0;
+ margin: 0 0 0.3em 0;
+ font-size: 96%;
+}
+div.townBox dl dt {
+ background: none;
+ margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+ margin: 0.1em 0 0 1.1em;
+ background-color: #f3f3f3;
+}
+/* use this instead of #toc for page content */
+.toccolours {
+ border:1px solid #aaaaaa;
+ background-color:#f9f9f9;
+ padding:5px;
+ font-size: 95%;
+}
diff --git a/stylesheets/commonPrint.css b/stylesheets/commonPrint.css
index 872e4d0984cd..a348b73f20ac 100644
--- a/stylesheets/commonPrint.css
+++ b/stylesheets/commonPrint.css
@@ -25,6 +25,7 @@ a.new{ color:#ba0000; text-decoration:none; }
.toctoggle, .editsection {
font-size: smaller;
}
+
/* images */
div.floatright {
float: right;
@@ -47,31 +48,34 @@ div.thumb {
margin-bottom: 0.5em;
border-style: solid; border-color: White;
width: auto;
+ overflow: hidden;
}
div.thumb div {
border:1px solid #cccccc;
padding: 3px !important;
background-color:#f9f9f9;
font-size: 94%;
+ text-align: center;
}
div.thumb div a img {
border:1px solid #cccccc;
}
-div div.thumbcaption {
+div.thumb div div.thumbcaption {
border: none;
text-align: left;
- padding: 0.3em 0 0.1em 0 !important;
+ padding: 0.3em 0 0.1em 0;
}
-div.magnify {
+div.magnify { display: none; }
+div.tright {
float: right;
- border: none !important;
- background: none !important;
+ border-width: 0.5em 0 0.8em 1.4em;
}
-div.magnify a, div.magnify img {
- display: block;
- border: none !important;
- background: none !important;
+div.tleft {
+ float: left;
+ margin-right:0.5em;
+ border: 0.5em 1.4em 0.8em 0;
}
+
/* table standards */
table.rimage {
float:right;
@@ -84,8 +88,7 @@ table.rimage {
body {
background: White;
- font-family: "Bitstream Vera Sans",Verdana, sans;
- font-size: 11pt !important;
+ /*font-size: 11pt !important;*/
color: Black;
margin: 0;
padding: 0;
@@ -186,8 +189,36 @@ a, a.external, a.new, a.stub {
text-decoration: inherit ! important;
}
+img { border: none; }
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
/* Show some stuff */
.urlexpansion {
display: inline ! important;
}
+
+div.townBox {
+ position:relative;
+ float:right;
+ background:White;
+ margin-left:1em;
+ border: 1px solid Grey;
+ padding:0.3em;
+ width: 200px;
+ overflow: hidden;
+ clear: right;
+}
+div.townBox dl {
+ padding: 0;
+ margin: 0 0 0.3em 0;
+ font-size: 96%;
+}
+div.townBox dl dt {
+ background: none;
+ margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+ margin: 0.1em 0 0 1.1em;
+ background-color: #f3f3f3;
+}
diff --git a/stylesheets/monobook/IE55Fixes.css b/stylesheets/monobook/IE55Fixes.css
index 4c2c384ad5d2..b3258d5132e8 100644
--- a/stylesheets/monobook/IE55Fixes.css
+++ b/stylesheets/monobook/IE55Fixes.css
@@ -1,17 +1,36 @@
/* IE5.5/win- only fixes */
-#column-content { display: inline; }
-#column-content #content {
- margin-top: 3em;
- overflow: auto;
+#column-content {
+ float: none;
+ margin-left: 0;
height: 1%;
}
+#column-content #content {
+ position: relative;
+ z-index: 5;
+ margin-left: 12.2em;
+ margin-top: 3em;
+ height: 1%;
+}
+#column-one {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 4;
+ width: 100%;
+}
+#footer {
+ margin-left: 13.6em;
+ border-left: 1px solid #fabd23;
+}
+
/*#bodyContent div,
#bodyContent pre { overflow: auto; }*/
#p-personal { padding-bottom: 0.1em; }
body { font-size: xx-small; }
+
#p-cactions {
width: 76% !important;
z-index: 3 !important;
diff --git a/stylesheets/monobook/IE60Fixes.css b/stylesheets/monobook/IE60Fixes.css
index b71cb2d099f7..ab5a97a7c729 100644
--- a/stylesheets/monobook/IE60Fixes.css
+++ b/stylesheets/monobook/IE60Fixes.css
@@ -1,16 +1,26 @@
/* 6.0 - only fixes */
/* content area */
-
/* workaround for various ie float bugs */
+#column-content {
+ float: none;
+ margin-left: 0;
+ height: 1%;
+}
#column-content #content {
+ margin-left: 12.2em;
margin-top: 3em;
height: 1%;
}
-#bodyContent {
- height: 1%;
+#column-one {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 4;
+}
+#footer {
+ margin-left: 13.6em;
+ border-left: 1px solid #fabd23;
}
-
-#column-content { display: inline; }
/* the tabs */
@@ -53,7 +63,7 @@ div.visualClear {
}
textarea {
overflow: auto;
- width: 97%;
+ width: 96%;
}
div.editsection,
diff --git a/stylesheets/monobook/main.css b/stylesheets/monobook/main.css
index 8facf54b1c99..eda78023b4ea 100644
--- a/stylesheets/monobook/main.css
+++ b/stylesheets/monobook/main.css
@@ -37,7 +37,7 @@
*/
body {
- font: x-small "Bitstream Vera Sans", "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ font: x-small sans-serif;
background: #f9f9f9 url("headbg.jpg") 0px 0px no-repeat;
color: Black;
margin: 0;
@@ -46,7 +46,7 @@ body {
/* scale back up to a sane default */
#globalWrapper {
- font-size:123%;
+ font-size:127%;
width: 100%;
margin: 0;
padding: 0;
@@ -61,21 +61,24 @@ table {
}
a {
text-decoration: none;
- color: #005189;
+ color: #002bb8;
background: none;
}
a:visited { color: #5a3696; }
a:active { color: Orange; }
a:hover { text-decoration: underline; }
-a.stub,
-a.new { color:#ba0000; }
+a.stub { color: #772233; }
+a.new,
+#p-personal a.new { color:#ba0000; }
+a.new:visited,
+#p-personal a.new:visited { color:#a55858; }
img {
border: none;
vertical-align: middle;
}
p {
- margin: 0.4em 0em 0.7em 0em;
+ margin: 0.4em 0em 0.5em 0em;
line-height: 1.5em;
}
@@ -92,7 +95,6 @@ hr {
h1, h2, h3, h4, h5, h6 {
color: Black;
background: none;
- font-family: "Bitstream Vera Sans", "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
font-weight: normal;
margin: 0;
padding-top: 0.5em;
@@ -121,13 +123,21 @@ ol {
line-height: 1.5em;
margin: 0.3em 0 0 3.2em;
padding:0;
+ list-style-image: none;
}
li { margin-bottom: 0.1em; }
-dt { font-weight: bold; }
+dt {
+ font-weight: bold;
+ margin-bottom: 0.1em;
+}
+dl{
+ margin-top: 0.2em;
+ margin-bottom: 0.5em;
+}
dd {
line-height: 1.5em;
- margin-bottom: 0.8em;
margin-left: 2em;
+ margin-bottom: 0.1em;
}
fieldset {
@@ -157,7 +167,6 @@ textarea {
/* hide this from ie/mac and konq2.2 */
@media All {
head:first-child+body input {
- font-family: "Bitstream Vera Sans", "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
visibility: visible;
border: 1px solid #2f6fab;
color: Black;
@@ -166,6 +175,13 @@ textarea {
padding: 0.2em;
}
}
+input.historysubmit {
+ padding: 0 0.3em 0.3em 0.3em !important;
+ font-size: 94%;
+ cursor: pointer;
+ height: 1.7em !important;
+ margin-left: 1.6em;
+}
input[type="radio"],
input[type="checkbox"] { border:none; }
select {
@@ -194,6 +210,7 @@ pre {
border: 1px dashed #2f6fab;
color: Black;
background-color: #f9f9f9;
+ line-height: 1.1em;
}
@@ -210,13 +227,6 @@ pre {
width: auto;
}
span.subpages { display: block; }
-#catlinks {
- margin: 0;
- padding: 0;
- width: 34%;
- text-align: right;
- float: right;
-}
/* Some space under the headers in the content area */
#bodyContent h1,
@@ -242,6 +252,13 @@ span.subpages { display: block; }
color: red;
font-size: larger;
}
+#catlinks {
+ border:1px solid #aaaaaa;
+ background-color:#f9f9f9;
+ padding:5px;
+ margin-top: 1em;
+ clear: both;
+}
/* currently unused, intended to be used by a metadata box
in the bottom-right corner of the content area */
.documentDescription {
@@ -281,10 +298,11 @@ in the bottom-right corner of the content area */
padding:5px;
font-size: 95%;
}
-.tocindent { margin-left: 2em; }
-.tocline { margin-bottom: 0px; }
-.toctoggle { font-size: 94%; }
-.editsection {
+#toc .tocindent { margin-left: 2em; }
+#toc .tocline { margin-bottom: 0px; }
+#toc p { margin: 0 }
+#toc .toctoggle { font-size: 94%; }
+#toc .editsection {
margin-top: 0.7em;
font-size: 94%;
}
@@ -318,6 +336,7 @@ div.thumb div {
background-color:#f9f9f9;
font-size: 94%;
text-align: center;
+ overflow: hidden;
}
div.thumb div a img {
border:1px solid #cccccc;
@@ -325,6 +344,7 @@ div.thumb div a img {
div.thumb div div.thumbcaption {
border: none;
text-align: left;
+ line-height: 1.4;
padding: 0.3em 0 0.1em 0;
}
div.magnify {
@@ -337,35 +357,45 @@ div.magnify a, div.magnify img {
border: none !important;
background: none !important;
}
+div.tright {
+ float: right;
+ border-width: 0.5em 0 0.8em 1.4em;
+}
+div.tleft {
+ float: left;
+ margin-right:0.5em;
+ border: 0.5em 1.4em 0.8em 0;
+}
.urlexpansion,
.hiddenStructure {
display: none;
}
img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
/*
** classes for special content elements like town boxes
** intended to be referenced directly from the wiki src
*/
+
+/*
+** User styles
+*/
+
/* table standards */
table.rimage {
float:right;
- width:1pt;
position:relative;
margin-left:1em;
margin-bottom:1em;
text-align:center;
}
-div.tright {
- float: right;
- border-width: 0.5em 0 0.8em 1.4em;
-}
-div.tleft {
- float: left;
- margin-right:0.5em;
- border: 0.5em 1.4em 0.8em 0;
+.toccolours {
+ border:1px solid #aaaaaa;
+ background-color:#f9f9f9;
+ padding:5px;
+ font-size: 95%;
}
-
div.townBox {
position:relative;
float:right;
@@ -421,9 +451,19 @@ div.townBox dl dd {
table.diff { background:white; }
td.diff-otitle { background:#ffffff; }
td.diff-ntitle { background:#ffffff; }
-td.diff-addedline { background:#ccffcc; }
-td.diff-deletedline { background:#ffffaa; }
-td.diff-context { background:#eeeeee; }
+td.diff-addedline {
+ background:#ccffcc;
+ font-size: smaller;
+}
+td.diff-deletedline {
+ background:#ffffaa;
+ font-size: smaller;
+}
+td.diff-context {
+ background:#eeeeee;
+ font-size: smaller;
+}
+span.diffchange { color: red; }
/*
** keep the whitespace in front of the ^=, hides rule from konqueror
@@ -458,7 +498,20 @@ td.diff-context { background:#eeeeee; }
background: url("discussionitem_icon.gif") center right no-repeat;
padding-right: 18px;
}
-
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+ color: #3366bb;
+ background: none;
+ padding: 0;
+}
+#bodyContent a.external { color: #3366bb; }
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+ background: none !important;
+ padding: 0;
+}
/*
** Structural Elements
*/
@@ -668,7 +721,6 @@ li#pt-login {
padding-left: 20px;
text-transform: none;
}
-#p-personal a.new { color:#ba0000; }
/*
** the page-related actions- page/talk, edit etc
@@ -708,7 +760,7 @@ li#pt-login {
}
#p-cactions li a {
background-color: White;
- color: #005189;
+ color: #002bb8;
border: none;
padding: 0 0.8em 0.3em 0.8em;
text-decoration: none;
@@ -732,7 +784,7 @@ li#pt-login {
}
/* offsets to distinguish the tab groups */
li#ca-talk { margin-right: 1.6em; }
-li#ca-watch { margin-left: 1.6em; }
+li#ca-watch, li#ca-watch { margin-left: 1.6em; }
/*
@@ -776,15 +828,6 @@ head:first-child+body #footer li { white-space: nowrap; }
height: 1%;
}
-/* JeLuF's js-based preference dialog */
-#bar #p-cactions {
- top: 8.0em;
- left: 5em;
-}
-form #content {
- left: -8em;
-}
-
/* js pref toc */
#preftoc {
float: left;
@@ -799,7 +842,7 @@ form #content {
#preftoc a,
#preftoc a:active {
display: block;
- color: #005189;
+ color: #0014a6;
}
#prefcontrol {
clear: both;
@@ -819,29 +862,49 @@ fieldset.operaprefsection { margin-left: 15em }
*/
/* tabs: border on the a, not the div */
-*>html #p-cactions li { border:none; }
-*>html #p-cactions li a {
+* > html #p-cactions li { border:none; }
+* > html #p-cactions li a {
border: 1px solid #aaaaaa;
border-bottom: none;
}
-*>html #p-cactions li.selected a { border-color: #fabd23; }
+* > html #p-cactions li.selected a { border-color: #fabd23; }
/* footer icons need a fixed width */
-*>html #f-poweredbyico,
-*>html #f-copyrightico { width: 88px; }
-
-/* more IE fixes */
-/* float/negative margin brokenness */
-* html #bodyContent {
+* > html #f-poweredbyico,
+* > html #f-copyrightico { width: 88px; }
+* > html #bodyContent,
+* > html #bodyContent pre {
overflow-x: auto;
width: 100%;
padding-bottom: 25px;
}
+
+/* more IE fixes */
+/* float/negative margin brokenness */
* html #footer {margin-top: 0;}
* html #column-content {
display: inline;
margin-bottom: 0;
}
* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
/* debugging tool.. */
/*div{ border:1px solid #000000;}*/
+
+#siteNotice {
+ border: 1px solid red;
+}
+
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+ float: none;
+}
+* > html #column-one {
+ position: absolute;
+ left: 0;
+ top: 0;
+}
+* > html #footer {
+ margin-left: 13.2em;
+}
diff --git a/stylesheets/monobook/null b/stylesheets/monobook/null
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/stylesheets/monobook/null
diff --git a/stylesheets/monobook/rtl.css b/stylesheets/monobook/rtl.css
index 2dd986ccab67..aafcd59ea89c 100644
--- a/stylesheets/monobook/rtl.css
+++ b/stylesheets/monobook/rtl.css
@@ -57,7 +57,6 @@ html>body .portlet {
}
/* Fix alignment */
-#catlinks,
.documentByLine,
.portletDetails,
.portletMore,
@@ -69,7 +68,6 @@ div div.thumbcaption {
text-align: right;
}
-#catlinks,
div.magnify,
#div.townBox,
#p-logo {
@@ -104,7 +102,7 @@ li#ca-talk {
margin-right: auto;
margin-left: 1.6em;
}
-li#ca-watch {
+li#ca-watch,li#ca-unwatch {
margin-right: 1.6em !important;
}
@@ -167,6 +165,23 @@ li#pt-login {
#footer {
clear: both;
}
+* html #footer {
+ margin-left: 0;
+ margin-right: 13.6em;
+ border-left: 0;
+ border-right: 1px solid #fabd23;
+}
+* html #column-content {
+ float: none;
+ margin-left: 0;
+ margin-right: 0;
+}
+* html #column-content #content {
+ margin-left: 0;
+ margin-top: 3em;
+}
+* html #column-one { right: 0; }
+
/* js pref toc */
#preftoc { float: right; }
/* workaround for moz bug, displayed bullets on left side */
@@ -174,6 +189,6 @@ li#pt-login {
#prefcontrol { float: right; }
fieldset.prefsection,
fieldset.operaprefsection {
+ margin-left: 0 !important;
margin-right: 15em;
- margin-left: 0;
}
diff --git a/stylesheets/wikibits.js b/stylesheets/wikibits.js
index bab8d8a54002..d297157b52ea 100644
--- a/stylesheets/wikibits.js
+++ b/stylesheets/wikibits.js
@@ -1,11 +1,10 @@
// Wikipedia JavaScript support functions
-
// if this is true, the toolbar will no longer overwrite the infobox when you move the mouse over individual items
var noOverwrite=false;
var alertText;
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
- && (clientPC.indexOf('khtml') == -1));
+ && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
if (clientPC.indexOf('opera')!=-1) {
@@ -21,21 +20,19 @@ function onloadhook () {
histrowinit();
unhidetzbutton();
tabbedprefs();
+ akeytt();
}
if (window.addEventListener) window.addEventListener("load",onloadhook,false);
else if (window.attachEvent) window.attachEvent("onload",onloadhook);
// document.write special stylesheet links
-function addcss ( stylepath ) {
- if (is_opera_preseven) {
- document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'Opera6Fixes.css">');
- } else if (is_opera_seven) {
- document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'Opera7Fixes.css">');
- } else if (is_khtml) {
- document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'KHTMLFixes.css">');
- }
- return;
+if (is_opera_preseven) {
+ document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera6Fixes.css">');
+} else if (is_opera_seven) {
+ document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera7Fixes.css">');
+} else if (is_khtml) {
+ document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/KHTMLFixes.css">');
}
// Un-trap us from framesets
@@ -62,7 +59,7 @@ function toggleVisibility( _levelId, _otherId, _linkId) {
function histrowinit () {
hf = document.getElementById('pagehistory');
if(!hf) return;
- lis = hf.getElementsByTagName('li');
+ lis = hf.getElementsByTagName('LI');
for (i=0;i<lis.length;i++) {
inputs=lis[i].getElementsByTagName('INPUT');
if(inputs[0] && inputs[1]) {
@@ -78,7 +75,7 @@ function diffcheck() {
var oli = false; // the li where the oldid radio is checked
hf = document.getElementById('pagehistory');
if(!hf) return;
- lis = hf.getElementsByTagName('li');
+ lis = hf.getElementsByTagName('LI');
for (i=0;i<lis.length;i++) {
inputs=lis[i].getElementsByTagName('INPUT');
if(inputs[1] && inputs[0]) {
@@ -361,3 +358,33 @@ function insertTags(tagOpen, tagClose, sampleText) {
// reposition cursor if possible
if (txtarea.createTextRange) txtarea.caretPos = document.selection.createRange().duplicate();
}
+
+function akeytt() {
+ if(typeof ta == "undefined" || !ta) return;
+ pref = 'alt-';
+ if(is_safari || navigator.userAgent.toLowerCase().indexOf( 'mac' ) + 1 ) pref = 'control-';
+ if(is_opera) pref = 'shift-esc-';
+ for(id in ta) {
+ n = document.getElementById(id);
+ if(n){
+ a = n.childNodes[0];
+ if(a){
+ if(ta[id][0].length > 0) {
+ a.accessKey = ta[id][0];
+ ak = ' ['+pref+ta[id][0]+']';
+ } else {
+ ak = '';
+ }
+ a.title = ta[id][1]+ak;
+ } else {
+ if(ta[id][0].length > 0) {
+ n.accessKey = ta[id][0];
+ ak = ' ['+pref+ta[id][0]+']';
+ } else {
+ ak = '';
+ }
+ n.title = ta[id][1]+ak;
+ }
+ }
+ }
+}
diff --git a/stylesheets/wikiprintable.css b/stylesheets/wikiprintable.css
index 686850ade5f8..22e71935809b 100644
--- a/stylesheets/wikiprintable.css
+++ b/stylesheets/wikiprintable.css
@@ -21,7 +21,7 @@ a, a.external, a.new, a.stub {
}
/* Hide ugly UI stuff */
-#quickbar, #topbar, #footer,
+#quickbar, #topbar, #footer, #siteNotice,
.editsection, .toctoggle {
display: none;
}
diff --git a/stylesheets/wikistandard.css b/stylesheets/wikistandard.css
index 2f70ea55616e..dbfcfb1b1eff 100644
--- a/stylesheets/wikistandard.css
+++ b/stylesheets/wikistandard.css
@@ -12,15 +12,7 @@
/* Table of contents */
-.tocindent {
- margin-left: 2em;
-}
-.tocline {
- margin-bottom: 0px;
-}
-.toctoggle, .editsection {
- font-size: smaller;
-}
+.toctoggle, .editsection { font-size: smaller; }
/* ... */
#toolbar { padding:0px; }
@@ -50,3 +42,8 @@ p.catlinks { font-size:small; margin-top:0; text-align:right;}
td { empty-cells:show; }
td.bottom { border-top: 1px solid gray; }
td.top { border-bottom: 1px solid gray; }
+
+
+#siteNotice {
+ border: 1px solid red;
+}
diff --git a/templates/xhtml_slim.pt b/templates/xhtml_slim.pt
index f255a4df0c06..7da0f397ef68 100644
--- a/templates/xhtml_slim.pt
+++ b/templates/xhtml_slim.pt
@@ -1,73 +1,61 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="${lang}" lang="${lang}" dir="${dir}">
<head>
<meta http-equiv="Content-Type" content="${mimetype}; charset=${charset}" />
${headlinks}
<title tal:content="pagetitle">Exciting xhtml slimfast</title>
- <style type="text/css" media="screen">/*<![CDATA[*/ @import url(${stylepath}/${skinname}/main.css); /*]]>*/</style>
+ <style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "${stylepath}/${skinname}/main.css"; /*]]>*/</style>
<link rel="stylesheet" type="text/css" media="print" href="${stylepath}/commonPrint.css" />
- <!--[if IE]><style type="text/css" media="all">@import url(${stylepath}/${skinname}/IEFixes.css);</style>
+ <!--[if IE]><style type="text/css" media="all">@import "${stylepath}/${skinname}/IEFixes.css";</style>
<script type="text/javascript" src="${stylepath}/IEFixes.js"></script>
<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
+ <script type="text/javascript" tal:attributes="src jsvarurl"></script>
<script type="text/javascript" src="${stylepath}/wikibits.js"></script>
- <script type="text/javascript"> /*<![CDATA[*/ if(addcss){addcss('${stylepath}/${skinname}/');} /*]]>*/</script>
- <style tal:condition="rtl" type="text/css">/*<![CDATA[*/@import url(${stylepath}/${skinname}/rtl.css);/*]]>*/</style>
<style tal:condition="usercss" type="text/css">/*<![CDATA[*/ ${usercss} /*]]>*/</style>
<script tal:condition="userjs" type="text/javascript" tal:attributes="src userjs"></script><script
tal:condition="userjsprev" type="text/javascript">/*<![CDATA[*/${userjsprev}/*]]>*/</script>
</head>
-
- <body tal:attributes="ondblclick body-ondblclick|default">
+ <body tal:attributes="ondblclick body-ondblclick|default; class nsclass|default">
<div id="globalWrapper">
<div id="column-content">
<div id="content">
<a name="top" id="contentTop"></a>
<h1 class="firstHeading" tal:content="title">Leonardo da Vinci</h1>
<div id="bodyContent">
- <div tal:condition="catlinks" id="catlinks" tal:content="structure catlinks"></div>
<h3 id="siteSub" i18n:translate="string:fromwikipedia">From Wikipedia, the free encyclopedia.</h3>
<div id="contentSub" tal:content="structure subtitle"></div>
- <!-- <esi:include src="userxy/message"/> cached per user, purged on new message-->
+ <div id="contentSub" tal:condition="undelete" tal:content="structure undelete"></div>
+ <div id="siteNotice" tal:condition="sitenotice" tal:content="structure sitenotice"></div>
<div tal:condition="newtalk" class="usermessage" tal:content="structure newtalk"></div>
- <!-- the content area is cached with the remaining inexpensive skeleton, one version for all.
- The edit links and right-click section stuff can be attached from js -->
<!-- start content -->
-
${bodytext}
-
+ <div tal:condition="catlinks" id="catlinks" tal:content="structure catlinks"></div>
<!-- end content -->
<div class="visualClear"></div>
</div>
</div>
</div>
- <!-- end of main content block -->
- <!-- start of the left (by default at least) column -->
<div id="column-one">
- <!--<esi:include src="thisurl?esiview=contentviews&watch=0&priv=sysop"/> tricky to purge because of the many different versions,
- might not be worth it for non-anons -->
<div id="p-cactions" class="portlet">
<h5>Views</h5>
<ul>
<li tal:repeat="action content_actions"
tal:attributes="id string:ca-${repeat/action/key}; class action/class|default"><a
- tal:attributes="title action/ttip|default;accesskey action/akey|default;href action/href|default"
+ tal:attributes="href action/href|default"
tal:content="action/text">Linktext</a></li>
</ul>
</div>
- <!--<esi:include src="userxy?ptools"/> cached per user, just rendered once per session -->
<div class="portlet" id="p-personal">
<h5 i18n:translate="string:personaltools">Personal Tools</h5>
<div class="pBody">
<ul>
<li tal:repeat="item personal_urls"
tal:attributes="id string:pt-${repeat/item/key};"><a href="myuserpage"
- tal:attributes="href item/href; accesskey item/akey|default; title item/ttip|default; class item/class|default"
+ tal:attributes="href item/href; class item/class|default"
tal:content="item/text">Log in</a></li>
</ul>
</div>
</div>
- <!--<esi:include src="staticLogoNaviSearch"/> same for all pages, contains quite a few messages that are worth caching -->
<div class="portlet" id="p-logo">
<a style="background-image: url(${logopath});" href="${nav_urls/mainpage/href}" i18n:attributes="title string:mainpage"></a>
</div>
@@ -75,26 +63,19 @@
<h5 i18n:translate="string:navigation">Navigation</h5>
<div class="pBody">
<ul>
- <li><a href="${nav_urls/mainpage/href}"
- i18n:attributes="accesskey string:accesskey-mainpage | default; title string:tooltip-mainpage"
+ <li id="n-mainpage"><a href="${nav_urls/mainpage/href}"
i18n:translate="string:mainpage">Main Page</a></li>
- <li tal:condition="nav_urls/portal/href"><a href="${nav_urls/portal/href}"
- i18n:attributes="accesskey string:accesskey-portal | default; title string:tooltip-portal|default"
+ <li id="n-portal" tal:condition="nav_urls/portal/href"><a href="${nav_urls/portal/href}"
i18n:translate="string:portal">Community Portal</a></li>
- <li tal:condition="nav_urls/currentevents/href"><a href="${nav_urls/currentevents/href}"
- i18n:attributes="title string:tooltip-currentevents|default"
+ <li id="n-currentevents" tal:condition="nav_urls/currentevents/href"><a href="${nav_urls/currentevents/href}"
i18n:translate="string:currentevents">Current Events</a></li>
- <li><a href="${nav_urls/recentchanges/href}"
- i18n:attributes="accesskey string:accesskey-recentchanges|default; title string:tooltip-recentchanges|default"
+ <li id="n-recentchanges"><a href="${nav_urls/recentchanges/href}"
i18n:translate="string:recentchanges">Recent Changes</a></li>
- <li><a href="${nav_urls/randompage/href}"
- i18n:attributes="accesskey string:accesskey-randompage | default; title string:tooltip-randompage"
+ <li id="n-randompage"><a href="${nav_urls/randompage/href}"
i18n:translate="string:randompage">Random Page</a></li>
- <li><a href="${nav_urls/help/href}"
- i18n:attributes="title string:tooltip-help|default"
+ <li id="n-help"><a href="${nav_urls/help/href}"
i18n:translate="string:help">Help</a></li>
- <li tal:condition="nav_urls/sitesupport/href"><a href="${nav_urls/sitesupport/href}"
- i18n:attributes="title string:tooltip-sitesupport|default"
+ <li id="n-sitesupport" tal:condition="nav_urls/sitesupport/href"><a href="${nav_urls/sitesupport/href}"
i18n:translate="string:sitesupport">Donations</a></li>
</ul>
</div>
@@ -103,50 +84,41 @@
<h5 i18n:translate="string:search">Search</h5>
<div class="pBody">
<form name="searchform" action="${searchaction}" id="searchform">
- <input id="searchInput" name="search" type="text" tabindex="30001"
+ <input id="searchInput" name="search" type="text"
i18n:attributes="accesskey string:accesskey-search | default"/>
<input type='submit' name="go" value="Go" class="searchButton"
- i18n:attributes="value string:go"/>&nbsp;<input type='submit'
+ i18n:attributes="value string:go"/>&nbsp;<input type='submit' name="fulltext"
value="Search" class="searchButton"
i18n:attributes="value string:search"/>
</form>
</div>
</div>
- <!--<esi:include src="thisurl?esiview=toolbox&loggedin=0"/> one anon, one logged-in user version per page because of the links -->
<div class="portlet" id="p-tb">
<h5 i18n:translate="string:toolbox">Toolbox</h5>
<div class="pBody">
<ul>
- <li><a href="${nav_urls/whatlinkshere/href}"
- i18n:attributes="accesskey string:accesskey-whatlinkshere|default; title string:tooltip-whatlinkshere|default"
+ <li id="t-whatlinkshere"><a href="${nav_urls/whatlinkshere/href}"
i18n:translate="string:whatlinkshere">What links here</a></li>
- <li><a href="${nav_urls/recentchangeslinked/href}"
- i18n:attributes="accesskey string:accesskey-recentchangeslinked|default;title string:tooltip-recentchangeslinked | default"
+ <li id="t-recentchangeslinked"><a href="${nav_urls/recentchangeslinked/href}"
i18n:translate="string:recentchangeslinked">Related Changes</a></li>
<li tal:condition="feeds" id="feedlinks">
<span i18n:translate="string:feedlinks">Feeds:</span>
<span tal:repeat="feed feeds"
tal:attributes="id string:feed-${repeat/feed/key};"><a
- tal:attributes="href feed/href; title feed/ttip|default"
+ tal:attributes="href feed/href;"
tal:content="feed/text">rss</a>&nbsp;</span>
</li>
- <li tal:condition="nav_urls/contributions/href"><a href="${nav_urls/contributions/href}"
- i18n:attributes="accesskey string:accesskey-contributions|default; title string:tooltip-contributions|default"
+ <li id="t-contributions" tal:condition="nav_urls/contributions/href"><a href="${nav_urls/contributions/href}"
i18n:translate="string:contributions">Contributions</a></li>
- <li tal:condition="nav_urls/emailuser/href"><a href="${nav_urls/emailuser/href}"
- i18n:attributes="accesskey string:accesskey-emailuser|default; title string:tooltip-emailuser|default"
+ <li id="t-emailuser" tal:condition="nav_urls/emailuser/href"><a href="${nav_urls/emailuser/href}"
i18n:translate="string:emailuser">Email this user</a></li>
- <li tal:condition="loggedin"><a href="${nav_urls/upload/href}"
- i18n:attributes="accesskey string:accesskey-upload|default; title string:tooltip-upload|default"
+ <li id="t-upload" tal:condition="loggedin"><a href="${nav_urls/upload/href}"
i18n:translate="string:upload">Upload a file</a></li>
- <li><a href="${nav_urls/specialpages/href}"
- i18n:attributes="accesskey string:accesskey-specialpages|default;title string:tooltip-specialpages|default"
+ <li id="t-specialpages"><a href="${nav_urls/specialpages/href}"
i18n:translate="string:specialpages">Special Pages</a></li>
</ul>
</div>
</div>
- <!-- end staticLogoNaviSearch -->
-
<div id="p-lang" class="portlet" tal:condition="language_urls">
<h5 i18n:translate="string:otherlanguages">Language</h5>
<div class="pBody">
@@ -159,7 +131,6 @@
</div>
</div>
</div><!-- end of the left (by default at least) column -->
- <!--<esi:include src="thisurl?esiview=toolbox&loggedin=0"/> static footer, same for all pages but contains a few messaged that are worth caching -->
<div class="visualClear"></div>
<div id="footer">
<div id="f-poweredbyico" tal:condition="poweredbyico">${poweredbyico}</div>
@@ -172,7 +143,7 @@
<li id="f-disclaimer" tal:condition="disclaimer">${disclaimer}</li>
</ul>
</div>
- <div id="colophon"></div>
</div>
+ ${reporttime}
</body>
</html>
diff --git a/update.php b/update.php
index 150e01b47d7f..94dba69b76fe 100644
--- a/update.php
+++ b/update.php
@@ -63,6 +63,7 @@ do_ipblocks_update();
do_interwiki_update();
do_index_update();
do_linkscc_update();
+do_linkscc_1_3_update();
do_hitcounter_update();
do_recentchanges_update();
do_user_real_name_update();