summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <nobody@localhost>2004-06-06 05:50:45 +0000
committernobody <nobody@localhost>2004-06-06 05:50:45 +0000
commit5a4927f7593aaa5ceafe6f3f7cec3bb5c5798d3d (patch)
treebb0bcdddf7c9b80383096942159d5ea454b1fdd3
parentaad104e3606aabd61e2eb4bf757c292144c9aac6 (diff)
parent053bac5ef5a68347b619256f8d8e4d4b07de29c8 (diff)
This commit was manufactured by cvs2svn to create tag1.3.0beta2
'REL1_3_0beta2'.
-rw-r--r--RELEASE-NOTES2
-rw-r--r--config/index.php55
-rw-r--r--includes/Article.php185
-rw-r--r--includes/BlockCache.php2
-rw-r--r--includes/Database.php14
-rw-r--r--includes/DefaultSettings.php11
-rw-r--r--includes/EditPage.php48
-rw-r--r--includes/GlobalFunctions.php6
-rw-r--r--includes/Image.php21
-rw-r--r--includes/ImagePage.php6
-rw-r--r--includes/LinkCache.php28
-rw-r--r--includes/MagicWord.php2
-rwxr-xr-xincludes/MessageCache.php2
-rw-r--r--includes/OutputPage.php65
-rw-r--r--includes/PageHistory.php18
-rw-r--r--includes/Parser.php816
-rw-r--r--includes/ParserCache.php89
-rwxr-xr-xincludes/Profiling.php2
-rw-r--r--includes/RawPage.php12
-rw-r--r--includes/Setup.php37
-rw-r--r--includes/SiteConfiguration.php65
-rw-r--r--includes/Skin.php90
-rw-r--r--includes/SkinCologneBlue.php4
-rw-r--r--includes/SkinNostalgia.php3
-rw-r--r--includes/SkinPHPTal.php47
-rw-r--r--includes/SpecialCategories.php75
-rw-r--r--includes/SpecialDeadendpages.php30
-rw-r--r--includes/SpecialLonelypages.php12
-rw-r--r--includes/SpecialPreferences.php25
-rw-r--r--includes/SpecialRecentchanges.php4
-rw-r--r--includes/SpecialUserlogin.php41
-rw-r--r--includes/SpecialWhatlinkshere.php2
-rw-r--r--includes/Title.php153
-rw-r--r--includes/User.php14
-rw-r--r--includes/memcached-client.php8
-rw-r--r--index.php4
-rw-r--r--irc/rc2irc.php2
-rw-r--r--irc/rcdumper.php16
-rw-r--r--languages/Language.php114
-rw-r--r--languages/LanguageBg.php1870
-rw-r--r--languages/LanguageCy.php19
-rw-r--r--languages/LanguageDa.php45
-rw-r--r--languages/LanguageDe.php38
-rw-r--r--languages/LanguageEo.php2
-rw-r--r--languages/LanguageFr.php25
-rw-r--r--languages/LanguageNl.php32
-rw-r--r--languages/LanguageNo.php41
-rw-r--r--languages/LanguagePl.php94
-rw-r--r--languages/LanguagePt.php31
-rw-r--r--languages/LanguageSv.php304
-rw-r--r--languages/LanguageUtf8.php11
-rw-r--r--languages/LanguageWa.php1321
-rw-r--r--languages/LanguageZh.php32
-rwxr-xr-xmaintenance/InitialiseMessages.inc38
-rw-r--r--maintenance/archives/moveCustomMessages.inc29
-rw-r--r--maintenance/archives/moveCustomMessages.php6
-rw-r--r--maintenance/archives/patch-linkscc-1.3.sql6
-rw-r--r--maintenance/convertLinks.inc17
-rwxr-xr-xmaintenance/eval.php32
-rw-r--r--maintenance/liveCmdLine.inc49
-rwxr-xr-xmaintenance/mcc.php19
-rw-r--r--maintenance/rebuildtextindex.php2
-rw-r--r--maintenance/update2.php1
-rw-r--r--maintenance/updaters.inc13
-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.css45
-rw-r--r--stylesheets/commonPrint.css49
-rw-r--r--stylesheets/monobook/IE55Fixes.css27
-rw-r--r--stylesheets/monobook/IE60Fixes.css22
-rw-r--r--stylesheets/monobook/main.css105
-rw-r--r--stylesheets/monobook/null0
-rw-r--r--stylesheets/monobook/rtl.css21
-rw-r--r--stylesheets/wikibits.js6
-rw-r--r--stylesheets/wikistandard.css15
-rw-r--r--templates/xhtml_slim.pt17
-rw-r--r--update.php1
78 files changed, 4473 insertions, 2048 deletions
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 8ad826ba9d1a..6f506edac96d 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,6 +1,6 @@
= MediaWiki release notes =
-== Version 1.3.0beta1, 2004-05-21 ==
+== Version 1.3.0beta2, 2004-06-05 ==
**** THIS IS A BETA AND MAY STUNT YOUR GROWTH OR KILL YOUR PETS ****
diff --git a/config/index.php b/config/index.php
index 16d17a2f716f..b46428795be8 100644
--- a/config/index.php
+++ b/config/index.php
@@ -153,6 +153,9 @@ 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
@@ -397,13 +400,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" );
@@ -686,8 +699,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,7 +722,7 @@ function writeLocalSettings( $conf ) {
# If you make manual changes, please keep track in case you need to
# recreate them later.
-\$IP = \"{$slconf[IP]}\";
+\$IP = \"{$slconf['IP']}\";
ini_set( \"include_path\", \"\$IP/includes$sep\$IP/languages$sep\" . ini_get(\"include_path\") );
include_once( \"DefaultSettings.php\" );
@@ -711,9 +735,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 +752,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 +788,15 @@ if ( \$wgCommandLineMode ) {
\$wgLocalInterwiki = \$wgSitename;
-\$wgLanguageCode = \"{$slconf[LanguageCode]}\";
-" . ($conf->Encoding ? "\$wgInputEncoding = \$wgOutputEncoding = \"{$slconf[Encoding]}\";" : "" ) . "
+\$wgLanguageCode = \"{$slconf['LanguageCode']}\";
+" . ($conf->Encoding ? "\$wgInputEncoding = \$wgOutputEncoding = \"{$slconf['Encoding']}\";" : "" ) . "
+
+\$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.
diff --git a/includes/Article.php b/includes/Article.php
index 6ccdb7bb2a40..c9f773198efa 100644
--- a/includes/Article.php
+++ b/includes/Article.php
@@ -139,7 +139,7 @@ class Article {
$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
@@ -154,7 +154,7 @@ 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) {
$subhlevel=strlen($subhlevel);
@@ -171,6 +171,7 @@ class Article {
}
# reinsert stripped tags
$rv=$parser->unstrip($rv,$striparray);
+ $rv=$parser->unstripNoWiki($rv,$striparray);
$rv=trim($rv);
return $rv;
@@ -208,7 +209,7 @@ class Article {
if ( 0 == $id ) return;
$sql = "SELECT " .
- "cur_text,cur_timestamp,cur_user,cur_counter,cur_restrictions,cur_touched " .
+ "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 );
@@ -239,7 +240,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,6 +256,8 @@ 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;
@@ -262,7 +265,7 @@ class Article {
$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 " .
+ $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 ) ) {
@@ -278,6 +281,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 );
@@ -533,48 +538,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('usercssjs'));
+ $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() ;
@@ -677,7 +701,7 @@ 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
@@ -692,7 +716,7 @@ class Article {
$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) {
$subhlevel=strlen($subhlevel);
@@ -713,6 +737,7 @@ class Article {
$text=join("",$secs);
# reinsert the stuff that we stripped out earlier
$text=$parser->unstrip($text,$striparray);
+ $text=$parser->unstripNoWiki($text,$striparray);
}
}
@@ -1501,6 +1526,7 @@ 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";
@@ -1512,7 +1538,55 @@ class Article {
return false;
}
}
-
+
+ # Edit an article without doing all that other stuff
+ function quickEdit( $text, $comment = "", $minor = 0 ) {
+ global $wgUser, $wgMwRedir;
+ $fname = "Article::quickEdit";
+ wfProfileIn( $fname );
+
+ $ns = $this->mTitle->getNamespace();
+ $dbkey = $this->mTitle->getDBkey();
+ $encDbKey = wfStrencode( $dbkey );
+ $timestamp = wfTimestampNow();
+
+ # Save to history
+ $sql = "INSERT INTO old (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 );
@@ -1567,7 +1641,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 +1656,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/BlockCache.php b/includes/BlockCache.php
index 5b65bdc20a56..135d206d9bec 100644
--- a/includes/BlockCache.php
+++ b/includes/BlockCache.php
@@ -36,7 +36,7 @@ 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()
diff --git a/includes/Database.php b/includes/Database.php
index d84625492f8e..a3b4c4512816 100644
--- a/includes/Database.php
+++ b/includes/Database.php
@@ -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 );
}
}
}
@@ -314,7 +316,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 +339,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 ) {
diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index 52eb0b1ef1d8..7f962dfd99ae 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -6,7 +6,7 @@
# like $wgScriptPath, you must also localize everything that
# depends on it.
-$wgVersion = "1.3.0beta1";
+$wgVersion = "1.3.0beta2";
$wgSitename = "MediaWiki"; # Please customize!
$wgMetaNamespace = FALSE; # will be same as you set $wgSitename
@@ -142,6 +142,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
@@ -390,6 +395,10 @@ $wgTidyOpts = '';
# See list of skins and their symbolic names in language/Language.php
$wgDefaultSkin = "monobook";
+# Whether or not to allow real name fields. Defaults to true.
+
+$wgAllowRealName = true;
+
# Extensions
$wgExtensionFunctions = array();
?>
diff --git a/includes/EditPage.php b/includes/EditPage.php
index d9959ae39f97..06910ecee24e 100644
--- a/includes/EditPage.php
+++ b/includes/EditPage.php
@@ -131,8 +131,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 +204,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,11 +311,11 @@ 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.'">'.
+ "'$edithelpurl', 'helpwindow', 'width=610,height=400,left=10,top=10,scrollbars=yes'".'); return false;" href="'.$edithelpurl.'">'.
wfMsg( "edithelp" ).'</a>';
$copywarn = wfMsg( "copyrightwarning", $sk->makeKnownLink(
wfMsg( "copyrightpage" ) ) );
@@ -354,7 +364,6 @@ class EditPage {
$previewhead.="<h2>" . wfMsg( "previewconflict" ) .
"</h2>\n";
}
- $previewtext = wfUnescapeHTML( $this->textbox1 );
$parserOptions = ParserOptions::newFromUser( $wgUser );
$parserOptions->setUseCategoryMagic( false );
@@ -371,7 +380,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 +388,7 @@ class EditPage {
$wgOut->addHTML($previewhead);
$wgOut->addHTML($previewHTML);
}
+ $wgOut->addLanguageLinks($parserOutput->getLanguageLinks());
$wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
}
}
@@ -472,6 +482,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()
@@ -524,10 +546,12 @@ 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 ".
+ $res = wfQuery("SELECT old_text,old_flags FROM old 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/GlobalFunctions.php b/includes/GlobalFunctions.php
index 8989b6078d75..719b61515d54 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -235,7 +235,7 @@ function logProfilingData()
list( $usec, $sec ) = explode( " ", $wgRequestTime );
$start = (float)$sec + (float)$usec;
$elapsed = $now - $start;
- if ( "" != $wgDebugLogFile ) {
+ if ( $wgProfiling ) {
$prof = wfGetProfilingOutput( $start, $elapsed );
$forward = "";
if( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
@@ -251,7 +251,9 @@ function logProfilingData()
$log = sprintf( "%s\t%04.3f\t%s\n",
gmdate( "YmdHis" ), $elapsed,
urldecode( $_SERVER['REQUEST_URI'] . $forward ) );
- error_log( $log . $prof, 3, $wgDebugLogFile );
+ if ( "" != $wgDebugLogFile ) {
+ error_log( $log . $prof, 3, $wgDebugLogFile );
+ }
}
}
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..d2e188003cf2 100644
--- a/includes/LinkCache.php
+++ b/includes/LinkCache.php
@@ -171,6 +171,7 @@ class LinkCache {
if ( $wgEnablePersistentLC ) {
if( $this->fillFromLinkscc( $id ) ){
+ wfProfileOut( $fname );
return;
}
}
@@ -313,23 +314,32 @@ class LinkCache {
# $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;
+ if ( $wgEnablePersistentLC ) {
+ $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);
+ }
}
# $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;
+ if ( $wgEnablePersistentLC ) {
+ $title = wfStrencode( $title );
+ wfQuery("DELETE linkscc FROM linkscc,brokenlinks ".
+ "WHERE lcc_pageid=bl_from AND 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/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/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/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..34c6856dd092 100644
--- a/includes/PageHistory.php
+++ b/includes/PageHistory.php
@@ -77,6 +77,10 @@ class PageHistory {
$this->mTitle->getPrefixedText(),
"action=history", $atend );
$s = $numbar;
+ $this->submitbuttonhtml = ( $this->linesonpage > 1) ? '<input class="historysubmit"
+ type="submit" accesskey="'.wfMsg('accesskey-compareselectedversions').
+ '" title="'.wfMsg('tooltip-compareselectedversions').'" value="'.wfMsg('compareselectedversions')."\" />" :
+ '';
$s .= $this->beginHistoryList();
$counter = 1;
if( $offset == 0 ){
@@ -110,9 +114,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->submitbuttonhtml) ? $this->submitbuttonhtml."\n":'';
+ $s .= "" . "\n<ul id=\"pagehistory\" >";
return $s;
}
@@ -121,11 +126,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->submitbuttonhtml) ? $this->submitbuttonhtml."\n":'';
$s .= "</form>\n";
return $s;
}
diff --git a/includes/Parser.php b/includes/Parser.php
index c345e28eec22..9be150ff544a 100644
--- a/includes/Parser.php
+++ b/includes/Parser.php
@@ -1,6 +1,6 @@
<?php
-require_once('Tokenizer.php');
+// require_once('Tokenizer.php');
if( $GLOBALS['wgUseWikiHiero'] ){
require_once('extensions/wikihiero/wikihiero.php');
@@ -77,6 +77,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
@@ -105,8 +106,13 @@ class Parser
# Clean up special characters, only run once, next-to-last before doBlockLevels
if(!$wgUseTidy) {
$fixtags = array(
- "/<hr *>/i" => '<hr/>',
- "/<br *>/i" => '<br/>',
+ # 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
@@ -116,6 +122,10 @@ class Parser
$text = preg_replace( array_keys($fixtags), array_values($fixtags), $text );
} else {
$fixtags = array(
+ # 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>'
);
@@ -123,6 +133,7 @@ class Parser
}
# only once and last
$text = $this->doBlockLevels( $text, $linestart );
+ $text = $this->unstripNoWiki( $text, $this->mStripState );
if($wgUseTidy) {
$text = $this->tidy($text);
}
@@ -192,6 +203,7 @@ class Parser
$render = ($this->mOutputType == OT_HTML);
$nowiki_content = array();
$hiero_content = array();
+ $timeline_content = array();
$math_content = array();
$pre_content = array();
$comment_content = array();
@@ -217,6 +229,15 @@ class Parser
$hiero_content[$marker] = "<hiero>$content</hiero>";
}
}
+
+ $text = Parser::extractTags("timeline", $text, $timeline_content, $uniq_prefix);
+ foreach( $timeline_content as $marker => $content ){
+ if( $render && $GLOBALS['wgUseTimeline']){
+ $timeline_content[$marker] = renderTimeline( $content );
+ } else {
+ $timeline_content[$marker] = "<timeline>$content</timeline>";
+ }
+ }
$text = Parser::extractTags("math", $text, $math_content, $uniq_prefix);
foreach( $math_content as $marker => $content ){
@@ -250,6 +271,7 @@ class Parser
if ( $state ) {
$state['nowiki'] = $state['nowiki'] + $nowiki_content;
$state['hiero'] = $state['hiero'] + $hiero_content;
+ $state['timeline'] = $state['timeline'] + $timeline_content;
$state['math'] = $state['math'] + $math_content;
$state['pre'] = $state['pre'] + $pre_content;
$state['comment'] = $state['comment'] + $comment_content;
@@ -257,6 +279,7 @@ class Parser
$state = array(
'nowiki' => $nowiki_content,
'hiero' => $hiero_content,
+ 'timeline' => $timeline_content,
'math' => $math_content,
'pre' => $pre_content,
'comment' => $comment_content
@@ -265,18 +288,31 @@ class Parser
return $text;
}
+ # 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
@@ -355,6 +391,7 @@ class Parser
return $r ;
}
+ # Return allowed HTML attributes
function getHTMLattrs ()
{
$htmlattrs = array( # Allowed attributes--no scripting, etc.
@@ -372,6 +409,7 @@ class Parser
return $htmlattrs ;
}
+ # Remove non approved attributes and javascript in css
function fixTagAttributes ( $t )
{
if ( trim ( $t ) == "" ) return "" ; # Saves runtime ;-)
@@ -395,10 +433,13 @@ class Parser
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,7 +452,7 @@ 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(
@@ -421,7 +462,7 @@ class Parser
);
$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,13 +470,18 @@ 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;
}
}
+ # parse the wiki syntax used to render tables
function doTableStuff ( $t )
{
$t = explode ( "\n" , $t ) ;
@@ -536,6 +582,15 @@ class Parser
return $t ;
}
+ # Parses the text and adds the result to the strip state
+ # Returns the strip tag
+ function stripParse( $text, $newline, $args )
+ {
+ $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";
@@ -544,16 +599,21 @@ class Parser
$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,17 +627,82 @@ class Parser
return $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 );
$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.
@@ -664,301 +789,32 @@ 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" );
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,99 +827,129 @@ 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;
+ $nt = Title::newFromText( $link );
+ if( !$nt ) {
+ $s .= $prefix . "[[" . $line;
+ continue;
}
- if( $ns == $image ) {
- $s .= $prefix . $sk->makeImageLinkObj( $nt, $text ) . $trail;
- $wgLinkCache->addImageLinkObj( $nt );
- 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 ( $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 ;
+ 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;
}
@@ -1236,10 +1122,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 );
+ "<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 +1137,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,7 +1149,7 @@ class Parser
// paragraph
if ( '' == trim($t) ) {
if ( $paragraphStack ) {
- $output .= $paragraphStack.'<br/>';
+ $output .= $paragraphStack.'<br />';
$paragraphStack = false;
$this->mLastSection = 'p';
} else {
@@ -1305,6 +1191,7 @@ class Parser
return $output;
}
+ # Return value of a magic variable (like PAGENAME)
function getVariableValue( $index ) {
global $wgLang, $wgSitename, $wgServer;
@@ -1339,6 +1226,7 @@ class Parser
}
}
+ # initialise the magic variables (like CURRENTMONTHNAME)
function initialiseVariables()
{
global $wgVariableIDs;
@@ -1361,17 +1249,40 @@ 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;
+
+
+ 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 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;
}
@@ -1381,6 +1292,8 @@ class Parser
$fname = "Parser::braceSubstitution";
$found = false;
$nowiki = false;
+ $noparse = false;
+
$title = NULL;
# $newline is an optional newline character before the braces
@@ -1396,20 +1309,30 @@ class Parser
$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
@@ -1484,14 +1407,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 );
@@ -1520,7 +1443,7 @@ 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;
@@ -1546,13 +1469,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,6 +1485,21 @@ 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 )
{
@@ -1639,8 +1571,8 @@ 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" ) {
@@ -1676,7 +1608,7 @@ class Parser
$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 ); }
}
@@ -1813,13 +1745,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 );
$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
@@ -1899,25 +1835,17 @@ 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";
+ foreach ( $a as $x ) {
$isbn = $blank = "" ;
while ( " " == $x{0} ) {
$blank .= " ";
@@ -1931,38 +1859,29 @@ class Parser
$num = str_replace( " ", "", $num );
if ( "" == $num ) {
- $text = "ISBN $blank$x";
+ $text .= "ISBN $blank$x";
} else {
$titleObj = Title::makeTitle( NS_SPECIAL, "Booksources" );
- $text = "<a href=\"" .
+ $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";
+ foreach ( $a as $x ) {
$rfc = $blank = "" ;
while ( " " == $x{0} ) {
$blank .= " ";
@@ -1980,10 +1899,8 @@ class Parser
$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;
}
@@ -2004,14 +1921,17 @@ 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;
}
@@ -2122,6 +2042,7 @@ class Parser
class ParserOutput
{
var $mText, $mLanguageLinks, $mCategoryLinks, $mContainsOldMagic;
+ var $mCacheTime; # Used in ParserCache
function ParserOutput( $text = "", $languageLinks = array(), $categoryLinks = array(),
$containsOldMagic = false )
@@ -2130,16 +2051,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 );
@@ -2229,4 +2153,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/RawPage.php b/includes/RawPage.php
index b218612a9637..d0b029750e5c 100644
--- a/includes/RawPage.php
+++ b/includes/RawPage.php
@@ -21,12 +21,14 @@ class RawPage {
$charset = $wgRequest->getText( 'charset' );
$this->mCharset = !empty($charset) ? $charset : $wgInputEncoding;
+ $smaxage = $wgRequest->getText( 'smaxage' );
+ $this->mSmaxage = !empty($smaxage) ? $smaxage : 0;
$this->mOldId = $wgRequest->getInt( 'oldid' );
}
function view() {
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' );
+ header( 'Cache-Control: s-maxage='.$this->mSmaxage.', max-age=86400' );
echo $this->getrawtext();
wfAbruptExit();
}
@@ -36,6 +38,14 @@ class RawPage {
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 " .
"WHERE old_id={$this->mOldId}";
diff --git a/includes/Setup.php b/includes/Setup.php
index 7a668080fa0a..7ac48f9d994d 100644
--- a/includes/Setup.php
+++ b/includes/Setup.php
@@ -71,7 +71,7 @@ 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, $wgDontTrustMemcachedWithImportantStuff;
# Useful debug output
if ( $wgCommandLineMode ) {
@@ -142,8 +142,7 @@ if( $wgUseMemCached ) {
}
wfProfileOut( "$fname-memcached" );
-wfProfileIn( "$fname-misc" );
-
+wfProfileIn( "$fname-language" );
require_once( "languages/Language.php" );
$wgMessageCache = new MessageCache;
@@ -158,22 +157,41 @@ $wgLang = new $wgLangClass();
if ( !is_object($wgLang) ) {
print "No language class ($wgLang)\N";
}
+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" );
global $wgDateFormatter;
$wgDateFormatter = new DateFormatter;
}
+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 +199,10 @@ if( $wgCommandLineMode ) {
} else {
$wgUser = User::loadFromSession();
}
+
+wfProfileOut( "$fname-User" );
+wfProfileIn( "$fname-misc" );
+
$wgDeferredUpdateList = array();
$wgLinkCache = new LinkCache();
$wgMagicWords = array();
@@ -193,6 +215,13 @@ 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
# of the extension file. This allows the extension to perform
@@ -201,7 +230,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/Skin.php b/includes/Skin.php
index 91faf5b5d590..0e76bfd860cf 100644
--- a/includes/Skin.php
+++ b/includes/Skin.php
@@ -221,7 +221,7 @@ class Skin {
return $a;
}
- function getExternalLinkAttributes( $link, $text )
+ function getExternalLinkAttributes( $link, $text, $class='' )
{
global $wgUser, $wgOut, $wgLang;
@@ -230,7 +230,7 @@ class Skin {
$link = str_replace( "_", " ", $link );
$link = wfEscapeHTML( $link );
- $r = " class='external'";
+ $r = ($class != '') ? " class='$class'" : " class='external'";
if ( 1 == $wgUser->getOption( "hover" ) ) {
$r .= " title=\"{$link}\"";
@@ -292,7 +292,7 @@ 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 = "";
}
@@ -358,9 +358,9 @@ class Skin {
return $s;
}
- function getCategories () {
+ function getCategoryLinks () {
global $wgOut, $wgTitle, $wgUser, $wgParser;
- global $wgUseCategoryMagic;
+ global $wgUseCategoryMagic, $wgUseCategoryBrowser, $wgLang;
if( !$wgUseCategoryMagic ) return "" ;
if( count( $wgOut->mCategoryLinks ) == 0 ) return "";
if( !$wgOut->isArticle() ) return "";
@@ -369,7 +369,25 @@ class Skin {
$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();
+ $wgTitle->getAllParentCategories(&$catstack);
+ foreach ($catstack as $key => $cat)
+ {
+ $s .= $this->makeLink($wgLang->getNSText( Namespace::getCategory() ).":".$key, $key )." &gt; ".$cat."<br/>\n";
+ }
+ }
+
+ return $s;
+ }
+
+ function getCategories() {
+ $catlinks=$this->getCategoryLinks();
+ if(!empty($catlinks)) {
+ return "<p class='catlinks'>{$catlinks}</p>";
+ }
}
function getQuickbarCompensator( $rows = 1 )
@@ -489,17 +507,27 @@ class Skin {
$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;
@@ -1456,7 +1484,7 @@ class Skin {
$u = $nt->getFullURL();
$link = $nt->getPrefixedURL();
if ( "" == $text ) { $text = $nt->getPrefixedText(); }
- $style = $this->getExternalLinkAttributes( $link, $text );
+ $style = $this->getExternalLinkAttributes( $link, $text, 'extiw' );
$inside = "";
if ( "" != $trail ) {
@@ -1651,6 +1679,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='' ) {
@@ -1833,9 +1867,9 @@ class Skin {
"<img src=\"{$url}\" alt=\"{$alt}\" /></a>";
}
if ( "" != $align ) {
- $s = "<div class=\"float{$align}\"><span>{$s}</span>\n</div>";
+ $s = "<div class=\"float{$align}\"><span>{$s}</span></div>";
}
- return $prefix.$s.$postfix;
+ return str_replace("\n", ' ',$prefix.$s.$postfix);
}
@@ -1897,8 +1931,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 +1942,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;
}
diff --git a/includes/SkinCologneBlue.php b/includes/SkinCologneBlue.php
index 09336459db17..c0c2a3b6c775 100644
--- a/includes/SkinCologneBlue.php
+++ b/includes/SkinCologneBlue.php
@@ -32,7 +32,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>";
diff --git a/includes/SkinNostalgia.php b/includes/SkinNostalgia.php
index 3d990ee6705e..e402ba6e087e 100644
--- a/includes/SkinNostalgia.php
+++ b/includes/SkinNostalgia.php
@@ -28,6 +28,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..6030bb7465ec 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' ) );
@@ -97,6 +97,13 @@
'<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();
@@ -114,6 +121,7 @@
$tpl->set( 'headlinks', $out->getHeadLinks() );
$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 );
@@ -171,7 +179,8 @@
$tpl->setRef( "debug", &$out->mDebugtext );
$tpl->set( "reporttime", $out->reportTime() );
-
+ $tpl->set( "sitenotice", $wgSiteNotice );
+
$tpl->setRef( "bodytext", &$out->mBodytext );
$language_urls = array();
@@ -244,13 +253,13 @@
);
$personal_urls['mycontris'] = array(
'text' => wfMsg('mycontris'),
- 'href' => $this->makeSpecialUrl('Contributions','target=' . $this->username),
+ 'href' => $this->makeSpecialUrl('Contributions','target=' . urlencode( $this->username ) ),
'ttip' => wfMsg('tooltip-mycontris'),
'akey' => wfMsg('accesskey-mycontris')
);
$personal_urls['logout'] = array(
'text' => wfMsg('userlogout'),
- 'href' => $this->makeSpecialUrl('Userlogout','returnto=' . $this->thisurl),
+ 'href' => $this->makeSpecialUrl('Userlogout','returnto=' . $this->thisurl ),
'ttip' => wfMsg('tooltip-logout'),
'akey' => wfMsg('accesskey-logout')
);
@@ -273,7 +282,7 @@
);
$personal_urls['anonlogin'] = array(
'text' => wfMsg('userlogin'),
- 'href' => $this->makeSpecialUrl('Userlogin', 'returnto='.$this->thisurl),
+ 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl ),
'ttip' => wfMsg('tooltip-login'),
'akey' => wfMsg('accesskey-login')
);
@@ -281,7 +290,7 @@
$personal_urls['login'] = array(
'text' => wfMsg('userlogin'),
- 'href' => $this->makeSpecialUrl('Userlogin', 'returnto='.$this->thisurl),
+ 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl ),
'ttip' => wfMsg('tooltip-login'),
'akey' => wfMsg('accesskey-login')
);
@@ -409,7 +418,7 @@
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),
+ 'href' => $this->makeSpecialUrl('Movepage', 'target='. urlencode( $this->thispage )),
'ttip' => wfMsg('tooltip-move'),
'akey' => wfMsg('accesskey-move'));
} else {
@@ -478,10 +487,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 +498,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(
@@ -546,13 +559,17 @@
}
}
/* private */ function setupUserCssJs () {
- global $wgRequest, $wgTitle;
+ global $wgRequest, $wgTitle, $wgSquidMaxage;
$action = $wgRequest->getText('action');
+ # global site css from MediaWiki NS
+ $this->usercss = '@import url('.
+ $this->makeNSUrl(ucfirst($this->skinname).'.css', 'action=raw&ctype=text/css&smaxage='.$wgSquidMaxage, NS_MEDIAWIKI).');'."\n";
+
if($wgTitle->isCssSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) {
// css preview
- $this->usercss = $wgRequest->getText('wpTextbox1');
+ $this->usercss .= $wgRequest->getText('wpTextbox1');
} else {
- $this->usercss = '@import url('.
+ $this->usercss .= '@import url('.
$this->makeUrl($this->userpage.'/'.$this->skinname.'.css', 'action=raw&ctype=text/css').');';
}
if($wgTitle->isJsSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) {
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/SpecialDeadendpages.php b/includes/SpecialDeadendpages.php
index 84641a5d51fd..2e1335e780bc 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( $offset, $limit ) {
+ return "SELECT 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/SpecialLonelypages.php b/includes/SpecialLonelypages.php
index bd5286414c6f..f271d0863c99 100644
--- a/includes/SpecialLonelypages.php
+++ b/includes/SpecialLonelypages.php
@@ -11,12 +11,16 @@ class LonelyPagesPage extends PageQueryPage {
function isExpensive() {
return 1;
}
-
+
+ function sortDescending() {
+ return false;
+ }
+
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}";
+ return "SELECT 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";
}
}
diff --git a/includes/SpecialPreferences.php b/includes/SpecialPreferences.php
index 11696a02efa7..49904c03ea87 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" );
@@ -301,12 +302,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 +334,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 );
@@ -426,7 +431,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/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/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/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..cc5be068ef86 100644
--- a/includes/Title.php
+++ b/includes/Title.php
@@ -90,11 +90,11 @@ class Title {
{
global $wgLang, $wgServer;
$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.
@@ -182,11 +182,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;
}
@@ -486,15 +487,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 +644,7 @@ class Title {
# Initialisation
if ( $imgpre === false ) {
$imgpre = ":" . $wgLang->getNsText( Namespace::getImage() ) . ":";
+ # % is needed as well
$rxTc = "/[^" . Title::legalChars() . "]/";
}
@@ -716,8 +723,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 +763,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 +785,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 +943,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 +1054,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 +1167,61 @@ 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 cl_from,cur_namespace,cur_title,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 = array();
+ }
+ return $data;
+ }
+
+ # will get the parents and grand-parents
+ function getAllParentCategories(&$stack)
+ {
+ global $wgUser;
+ $sk =& $wgUser->getSkin() ;
+
+ # getting parents
+ $parents = $this->getParentCategories( );
+
+ foreach($parents as $parent)
+ {
+ # create a title object for the parent
+ $tpar = Title::newFromID($parent->cur_id);
+
+ if(isset($stack[$this->getText()]))
+ {
+ $stack[$tpar->getText()] = $sk->makeLink( $this->getPrefixedDBkey(), $this->getText() );
+ $stack[$tpar->getText()] .= " &gt; ".$stack[$this->getText()];
+ } else {
+ # don't make a link for current page
+ $stack[$tpar->getText()] = $this->getText();
+ }
+
+ unset( $stack[$this->getText()] );
+ $tpar->getAllParentCategories(&$stack);
+ }
+ }
+
+
}
?>
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/memcached-client.php b/includes/memcached-client.php
index 3f0eb44f9e0f..27521809ebc3 100644
--- a/includes/memcached-client.php
+++ b/includes/memcached-client.php
@@ -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..97a7f1237e28 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" ) );
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..d6959d26dc3a 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -105,7 +105,7 @@ this</a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
"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)",
+ "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",
@@ -122,6 +122,7 @@ this</a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
);
/* The following list is in native languages, not in English */
+global $wgLanguageNames;
/* private */ $wgLanguageNames = array(
"aa" => "Afar", # Afar
"ab" => "Abkhazian", # Abkhazian - FIXME
@@ -150,6 +151,7 @@ this</a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
"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
@@ -263,6 +265,7 @@ this</a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
"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
@@ -292,7 +295,7 @@ this</a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
"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
+ #"tlh" => "tlhIngan-Hol", # Klingon - no interlanguage links allowed
"tn" => "Setswana", # Setswana
"to" => "Tonga", # Tonga - FIXME
"tokipona" => "Toki Pona", # Toki Pona
@@ -317,6 +320,7 @@ this</a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
"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
@@ -418,7 +422,7 @@ and the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] f
"about" => "About",
"aboutwikipedia" => "About {{SITENAME}}",
"aboutpage" => "{{ns:4}}:About",
-'article' => 'Article',
+'article' => 'Content page',
"help" => "Help",
"helppage" => "{{ns:12}}:Contents",
"wikititlesuffix" => "{{SITENAME}}",
@@ -447,7 +451,7 @@ and the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] f
"disclaimerpage" => "{{ns:4}}:General_disclaimer",
"errorpagetitle" => "Error",
"returnto" => "Return to $1.",
-"fromwikipedia" => "From {{SITENAME}}, the free encyclopedia.",
+"fromwikipedia" => "From {{SITENAME}}",
"whatlinkshere" => "Pages that link here",
"help" => "Help",
"search" => "Search",
@@ -459,7 +463,7 @@ and the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] f
"editthispage" => "Edit this page",
'delete' => 'Delete',
"deletethispage" => "Delete this page",
-"undelete_short" => "Undelete",
+"undelete_short" => "Undelete $1 edits",
'protect' => 'Protect',
"protectthispage" => "Protect this page",
'unprotect' => 'Unprotect',
@@ -470,12 +474,12 @@ and the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] f
'personaltools' => 'Personal tools',
"postcomment" => "Post a comment",
"addsection" => "+",
-"articlepage" => "View article",
+"articlepage" => "View content page",
"subjectpage" => "View subject", # For compatibility
'talk' => 'Discussion',
'toolbox' => 'Toolbox',
"userpage" => "View user page",
-"wikipediapage" => "View meta page",
+"wikipediapage" => "View project page",
"imagepage" => "View image page",
"viewtalkpage" => "View discussion",
"otherlanguages" => "Other languages",
@@ -691,7 +695,7 @@ Please log in again after you receive it.",
"summary" => "Summary",
"subject" => "Subject/headline",
"minoredit" => "This is a minor edit",
-"watchthis" => "Watch this article",
+"watchthis" => "Watch this page",
"savearticle" => "Save page",
"preview" => "Preview",
"showpreview" => "Show preview",
@@ -705,9 +709,9 @@ 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.",
+"whitelistedittext" => "You have to [[Special:Userlogin|login]] to edit pages.",
"whitelistreadtitle" => "Login required to read",
-"whitelistreadtext" => "You have to [[Special:Userlogin|login]] to read articles.",
+"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",
@@ -811,13 +815,13 @@ 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.",
+"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 article title matches",
-"textmatches" => "Article text matches",
-"notextmatches" => "No article text 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).",
@@ -897,6 +901,7 @@ See [[{{ns:4}}:User preferences help]] for help deciphering the options.",
"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",
@@ -954,7 +959,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,11 +971,11 @@ 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",
@@ -1038,9 +1043,9 @@ this old version, (rev) = revert to this old version.
"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.
@@ -1055,11 +1060,11 @@ That comes to '''$5''' average edits per page, and '''$6''' views per edit.",
"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.",
+"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\" taget article, which the first redirect should point to.",
+"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 article.",
+"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",
@@ -1067,7 +1072,7 @@ That comes to '''$5''' average edits per page, and '''$6''' views per edit.",
"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.",
+"missinglanguagelinkstext" => "These pages do <i>not</i> link to their counterpart in $1. Redirects and subpages are <i>not</i> shown.",
# Miscellaneous special pages
@@ -1094,7 +1099,7 @@ That comes to '''$5''' average edits per page, and '''$6''' views per edit.",
"rclsub" => "(to pages linked from \"$1\")",
"debug" => "Debug",
"newpages" => "New pages",
-"ancientpages" => "Oldest articles",
+"ancientpages" => "Oldest pages",
"intl" => "Interlanguage links",
'move' => 'Move',
"movethispage" => "Move this page",
@@ -1160,7 +1165,7 @@ make it easier to pick out.
"watchthispage" => "Watch this page",
'unwatch' => 'Unwatch',
"unwatchthispage" => "Stop watching",
-"notanarticle" => "Not an article",
+"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;
@@ -1216,9 +1221,9 @@ All times shown are server time (UTC).
'rollback_short' => 'Rollback',
"rollbacklink" => "rollback",
"rollbackfailed" => "Rollback failed",
-"cantrollback" => "Cannot revert edit; last contributor is only author of this article.",
+"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 article already.
+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
@@ -1244,7 +1249,7 @@ See [[{{ns:4}}:Protected page]] for more information.",
"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",
+"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
@@ -1253,7 +1258,7 @@ will not be automatically replaced.",
"undeleterevision" => "Deleted revision as of $1",
"undeletebtn" => "Restore!",
"undeletedarticle" => "restored \"$1\"",
-"undeletedtext" => "The article [[$1]] has been successfully restored.
+"undeletedtext" => "[[$1]] has been successfully restored.
See [[{{ns:4}}:Deletion_log]] for a record of recent deletions and restorations.",
# Contributions
@@ -1492,15 +1497,15 @@ amusement.",
# 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-article' => 'View the content page [alt-a]',
+'tooltip-talk' => 'Discussion about the content page [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-viewsource' => 'This page is protected. You can view its 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-undelete' => "Restore the $1 edits done to this page before it was deleted [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]',
@@ -1528,13 +1533,18 @@ amusement.",
'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.",
@@ -1547,7 +1557,12 @@ amusement.",
"lastmodifiedby" => "This page was last modified $1 by $2.",
"and" => "and",
"othercontribs" => "Based on work by $1.",
-"siteusers" => "$wgSitename user(s) $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:"
+
);
@@ -1770,7 +1785,7 @@ class Language {
function getMessage( $key )
{
global $wgAllMessagesEn;
- return $wgAllMessagesEn[$key];
+ return @$wgAllMessagesEn[$key];
}
function getAllMessages()
@@ -1820,6 +1835,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
@@ -1877,7 +1898,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 );
}
@@ -1888,18 +1913,6 @@ class Language {
return "<em>$text</em>";
}
- # returns additional Regex for the tokenizer. See LanguageFr.php for an example
- function tokenizerRegex()
- {
- return "";
- }
-
- # 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
@@ -1926,5 +1939,4 @@ class Language {
# This should fail gracefully if there's not a localization available
@include_once( "Language" . ucfirst( $wgLanguageCode ) . ".php" );
-
?>
diff --git a/languages/LanguageBg.php b/languages/LanguageBg.php
index 19e32c2df953..f7660213d4b1 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,23 @@
);
/* 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'
);
/* 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 +58,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 +106,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 +215,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 +436,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 +571,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 +594,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 +799,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 +1219,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 +1484,4 @@ class LanguageBg extends LanguageUtf8 {
}
?>
+
diff --git a/languages/LanguageCy.php b/languages/LanguageCy.php
index 5138e6992424..5c773e55d0ba 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"
);
@@ -1042,11 +1030,6 @@ require_once( "LanguageUtf8.php" );
class LanguageCy extends LanguageUtf8 {
- function getDefaultUserOptions () {
- global $wgDefaultUserOptionsCy;
- return $wgDefaultUserOptionsCy;
- }
-
function getBookstoreList () {
global $wgBookstoreListCy;
return $wgBookstoreListCy;
@@ -1136,7 +1119,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..886481d86ad5 100644
--- a/languages/LanguageDa.php
+++ b/languages/LanguageDa.php
@@ -1,7 +1,8 @@
<?php
-# NOTE: To turn off "Current Events" in the sidebar,
-# set "currentevents" => "-"
+#--------------------------------------------------------------------------
+# 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,8 +21,12 @@
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"
);
@@ -41,11 +46,12 @@
);
/* 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(
@@ -120,7 +126,7 @@
"Lonelypages" => "Forældreløse artikler",
"Unusedimages" => "Forældreløse filer",
-# "Popularpages" => "Populære artikler",
+ "Popularpages" => "Populære artikler",
"Wantedpages" => "Mest ønskede artikler",
"Shortpages" => "Korte artikler",
"Longpages" => "Lange artikler",
@@ -139,7 +145,7 @@
"Recentchangeslinked" => "",
"Movepage" => "",
"Booksources" => "Eksterne bogkilder",
-# "Categories" => "Sidekategorier",
+ "Categories" => "Kategorier",
"Export" => "Eksportér sider i XML format",
"Version" => "Vis MediaWiki version",
);
@@ -156,6 +162,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:
diff --git a/languages/LanguageDe.php b/languages/LanguageDe.php
index 90648b781d27..251b9435e2b7 100644
--- a/languages/LanguageDe.php
+++ b/languages/LanguageDe.php
@@ -5,21 +5,24 @@ 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(
@@ -143,7 +146,7 @@ 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",
@@ -435,7 +438,7 @@ Bitte fügen Sie Ihre Änderungen in das obere Textfeld ein.
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>
+<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.
@@ -572,6 +575,7 @@ Ihre interne ID-Nummer ist $2.",
"stubthreshold" => "Kurze Artikel markieren bis",
"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",
diff --git a/languages/LanguageEo.php b/languages/LanguageEo.php
index a2778b72793c..9e38848fb14b 100644
--- a/languages/LanguageEo.php
+++ b/languages/LanguageEo.php
@@ -446,7 +446,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/LanguageFr.php b/languages/LanguageFr.php
index 1aa2c84dc217..e6a2ec83ea60 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(
@@ -76,8 +75,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 +639,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,11 +1284,11 @@ 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];
+ }
}
}
diff --git a/languages/LanguageNl.php b/languages/LanguageNl.php
index 38bbe829d004..71e0ab60e1c8 100644
--- a/languages/LanguageNl.php
+++ b/languages/LanguageNl.php
@@ -7,20 +7,24 @@
# 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 => "Wikipedia",
+ NS_WIKIPEDIA_TALK => "Overleg_Wikipedia",
+ 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"
);
diff --git a/languages/LanguageNo.php b/languages/LanguageNo.php
index f61cf40a1546..5e8c3988385b 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(
@@ -1159,8 +1162,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/LanguagePl.php b/languages/LanguagePl.php
index 76ef80b6642d..f4a8dbc72cb6 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(
@@ -163,18 +179,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 +230,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 +242,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 +279,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 +316,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 +358,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 +379,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 +426,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 +458,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 +527,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 +569,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 +602,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 +643,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 +712,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 +776,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 +863,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 +908,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 +940,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..d24e3b6d1403 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"
);
diff --git a/languages/LanguageSv.php b/languages/LanguageSv.php
index 760367f0bce1..3bc2670b2908 100644
--- a/languages/LanguageSv.php
+++ b/languages/LanguageSv.php
@@ -1,35 +1,35 @@
<?php
-// 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.
-//
+// $Id$
/* 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"
-
+ 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(
@@ -43,15 +43,40 @@
'monobook' => "MonoBook"
);
+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",
+ "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",
+ "hideminor" => "Göm mindre redigeringar vid senaste ändring",
"usenewrc" => "Avancerad 'Senaste ändringar'",
"numberheadings" => "Automatisk numrering av överskrifter",
- "showtoolbar" => "Show edit toolbar",
+ "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)",
@@ -150,10 +175,12 @@ $wgValidSpecialPagesSv = array(
//
"linktrail" => "/^([a-zäöå]+)(.*)\$/sD",
"mainpage" => "Huvudsida",
+'portal' => 'Kollektivportal',
+'portal-url' => '{{ns:4}}:Kollektivportal',
"about" => "Om",
-"aboutwikipedia" => "Om Wikipedia",
-"aboutpage" => "Wikipedia:Om",
-
+"aboutwikipedia" => "Om {{SITENAME}}",
+"aboutpage" => "{{ns:4}}:Om",
+'article' => 'Artikel',
"help" => "Hjälp",
"helppage" => "Wikipedia:Hjälp",
"wikititlesuffix" => "Wikipedia",
@@ -182,39 +209,53 @@ $wgValidSpecialPagesSv = array(
"help" => "Hjälp",
"search" => "Sök",
"history" => "Versionshistorik",
+"history_short" => "Historik",
"printableversion" => "Skrivarvänlig version",
+"edit" => "Redigera",
"editthispage" => "Redigera den här sidan",
-"deletethispage" => "Radera den här sidan",
+"delete" => "Ta bort",
+"deletethispage" => "Ta bort den här sidan",
+"protect" => "Skydda",
"protectthispage" => "Skydda den här sidan",
-"unprotectthispage" => "Ta bort skydd av denna sida",
+"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",
+"talk" => "Diskussion",
+"toolbox" => "Verktygslåda",
"userpage" => "Visa användarsida",
"wikipediapage" => "Visa metasida",
"imagepage" => "Visa bildsida",
+"viewtalkpage" => "Visa diskussion",
"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>.",
+"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.
+"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.
+"developertext" => "Den här funktionen kan bara utföras av användare med \"developer\" status.
Se $1.",
-"nbyte" => " bytes",
+"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",
@@ -223,6 +264,20 @@ Se $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
//
@@ -264,7 +319,7 @@ URL:en.",
"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.",
+"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
@@ -337,12 +392,12 @@ Anledning är att:<br>''$2''<p>Ta kontakt med $1 eller en av de andra
"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
+"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.
+"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.
@@ -350,7 +405,7 @@ Du måste infoga dina ändringar i den existerande texten.
"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
att betrakta som utgivna under GNU Free Documentation License
@@ -371,9 +426,9 @@ Försäkra dig om att du följer rekommendationerna för <a href='$wgScriptPath/$wgM
// 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",
+"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",
@@ -390,7 +445,7 @@ Försäkra dig om att du följer rekommendationerna för <a href='$wgScriptPath/$wgM
"difference" => "(Skillnad mellan versioner)",
"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
//
@@ -462,7 +517,7 @@ Den blir automatiskt inställd efter svensk tid eller skulle man till exempel för
// Recent changes
//
"recentchanges" => "Senaste ändringarna",
-"recentchangestext" => "Se de senaste redigerade sidorna i Wikipedia på denna sida.",
+"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.",
@@ -536,7 +591,7 @@ Alla tider visas efter serverns tid (UTC).
"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
+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",
@@ -565,8 +620,8 @@ när den skapades och vem som gjort den och allt annat du vet om den.",
(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.",
+"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
//
@@ -593,7 +648,7 @@ och <b>$6</b> sidvisningar per ändring.",
"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å.",
+"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",
@@ -681,13 +736,15 @@ 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
+<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
//
@@ -775,7 +832,7 @@ Fyll i anledningen till blockering nedan (till exempel vilka artiklar som klottr
<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",
+"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",
@@ -808,7 +865,7 @@ Bekräfta att du vill göra detta.",
"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.",
+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.",
@@ -817,7 +874,14 @@ Detta belastar ofta servern hårt, så använd denna funktion med omtanke.",
// 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=\"" .
@@ -828,12 +892,136 @@ för att kunna flytta en 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.",
+"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å.",
"talkpagenotmoved" => "Sidans diskussionssida flyttades <strong>inte</strong>.",
+# 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"
+
);
class LanguageSv extends Language {
diff --git a/languages/LanguageUtf8.php b/languages/LanguageUtf8.php
index 26d8fdd411e6..805589dd2f53 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/LanguageZh.php b/languages/LanguageZh.php
index 3f714cf81504..2f8859cac6ee 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"
);
diff --git a/maintenance/InitialiseMessages.inc b/maintenance/InitialiseMessages.inc
index 12522466c1aa..0301835fc57e 100755
--- a/maintenance/InitialiseMessages.inc
+++ b/maintenance/InitialiseMessages.inc
@@ -9,6 +9,13 @@ 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();
@@ -21,8 +28,7 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
$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>
@@ -68,7 +74,7 @@ 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 ) {
+ if ( $row->cur_user_text != $username ) {
$existingTitles[$row->cur_title] = "keep";
} else {
$existingTitles[$row->cur_title] = "chuck";
@@ -83,8 +89,6 @@ 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 );
@@ -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
- );
+ print "$title\n";
+ $mwTitleObj = Title::makeTitle( NS_MEDIAWIKI, $title );
+ $article = new Article( $mwTitleObj );
+ $article->quickEdit( $message );
}
$doInsert = false;
} else {
@@ -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>";
}
@@ -186,4 +181,9 @@ function loadArrayFromFile( $filename )
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
index 8ad118d6c71f..abab1a57f7d1 100644
--- a/maintenance/archives/moveCustomMessages.inc
+++ b/maintenance/archives/moveCustomMessages.inc
@@ -1,7 +1,15 @@
-<?
+<?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" );
@@ -29,6 +37,7 @@ function moveCustomMessages( $phase ) {
# 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 );
@@ -48,7 +57,7 @@ function moveCustomMessages( $phase ) {
# Move pages
if ( $phase == 0 || $phase == 2 ) {
- print "\n";
+ print "\nMoving pages...\n";
foreach ( $targets as $partial => $dummy ) {
$ot = Title::makeTitle( NS_MEDIAWIKI, $partial );
$nt = Title::makeTitle( NS_TEMPLATE, $partial );
@@ -69,7 +78,7 @@ function moveCustomMessages( $phase ) {
# Convert text
if ( $phase == 0 || $phase == 3 ) {
- print "\n";
+ print "\nConverting text...\n";
$parser = new Parser;
$options = ParserOptions::newFromUser( $wgUser );
@@ -81,11 +90,10 @@ function moveCustomMessages( $phase ) {
$msgRegex = "/{{msg:([$titleChars]*?)}}/";
foreach ( $targets as $partial => $dummy ) {
- $dest = Title::makeTitle( NS_TEMPLATE, $partial );
+ $dest = Title::makeTitle( NS_MEDIAWIKI, $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();
@@ -98,13 +106,15 @@ function moveCustomMessages( $phase ) {
# [[MediaWiki:]] -> [[Template:]]
$text = preg_replace_callback( $linkRegex, "wfReplaceMediaWiki", $text );
$text = $parser->unstrip( $text, $stripState );
+ $text = $parser->unstripNoWiki( $text, $stripState );
if ( $text != $row->cur_text ) {
- wfUpdateArray( 'cur', array( 'cur_text' => $text ), array( 'cur_id' => $id ) );
- print "modified\n";
+ print "$pdbk\n";
+ $art = new Article( $source );
+ $art->quickEdit( $text );
} else {
- print "not modified\n";
+ print "($pdbk)\n";
}
- }
+ }
}
}
}
@@ -125,3 +135,4 @@ function wfReplaceMediaWiki( $m ) {
return $text;
}
+?>
diff --git a/maintenance/archives/moveCustomMessages.php b/maintenance/archives/moveCustomMessages.php
index bfb761369afa..454bc830781d 100644
--- a/maintenance/archives/moveCustomMessages.php
+++ b/maintenance/archives/moveCustomMessages.php
@@ -8,12 +8,12 @@
# 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]);
}
moveCustomMessages( $phase );
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/convertLinks.inc b/maintenance/convertLinks.inc
index a2acf67eb849..f56a771f9649 100644
--- a/maintenance/convertLinks.inc
+++ b/maintenance/convertLinks.inc
@@ -1,7 +1,10 @@
<?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
@@ -37,12 +40,11 @@ function convertLinks() {
print "No rows to convert. Updating schema...\n";
createTempTable();
} else {
- $row = wfFetchObject( $res );
- if ( is_numeric( $row->l_from ) ) {
+ $res = wfQuery( "SELECT l_from FROM links LIMIT 1", DB_READ );
+ if ( mysql_field_type( $res, 0 ) == "int" ) {
print "Schema already converted\n";
- exit;
- }
-
+ return;
+ }
if ( $logPerformance ) { $fh = fopen ( $perfLogFilename, "w" ); }
$baseTime = $startTime = getMicroTime();
# Create a title -> cur_id map
@@ -130,7 +132,7 @@ function convertLinks() {
$dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
if (!($dbConn->isOpen())) {
print "Opening connection to database failed.\n";
- exit;
+ return;
}
# Check for existing links_backup, and delete it if it exists.
print "Dropping backup links table if it exists...";
@@ -149,6 +151,7 @@ function convertLinks() {
print "Conversion complete. The converted table is at links_temp;\n";
print "the original links table is unchanged.\n";
}
+}
#--------------------------------------------------------------------
@@ -159,7 +162,7 @@ function createTempTable() {
if (!($dbConn->isOpen())) {
print "Opening connection to database failed.\n";
- exit;
+ return;
}
print "Dropping temporary links table if it exists...";
diff --git a/maintenance/eval.php b/maintenance/eval.php
new file mode 100755
index 000000000000..5ba2f04b6bcb
--- /dev/null
+++ b/maintenance/eval.php
@@ -0,0 +1,32 @@
+<?php
+/*require_once( "../includes/DefaultSettings.php" );
+require_once( "../LocalSettings.php" );
+require_once( "../includes/MemCachedClient.inc.php" );*/
+
+
+require_once( "liveCmdLine.inc" );
+
+do {
+ $line = readconsole( "> " ). ";" ;
+ eval( $line );
+ if ( function_exists( "readline_add_history" ) ) {
+ readline_add_history( $line );
+ }
+} while ( 1 );
+
+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/liveCmdLine.inc b/maintenance/liveCmdLine.inc
new file mode 100644
index 000000000000..5d51a6a683a7
--- /dev/null
+++ b/maintenance/liveCmdLine.inc
@@ -0,0 +1,49 @@
+<?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;
+
+if ( isset( $argv[1] ) ) {
+ $lang = $argv[1];
+} else {
+ $lang = "aa";
+}
+if ( isset( $argv[2] ) ) {
+ $site = $argv[2];
+} 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);
+include_once( "Setup.php" );
+$wgTitle = Title::newFromText( "Command line script" );
+$wgCommandLineMode = true;
+set_time_limit(0);
+?>
diff --git a/maintenance/mcc.php b/maintenance/mcc.php
index a6b524916ac5..f0b68264e8b9 100755
--- a/maintenance/mcc.php
+++ b/maintenance/mcc.php
@@ -1,10 +1,14 @@
<?php
-require_once( "../includes/DefaultSettings.php" );
+/*require_once( "../includes/DefaultSettings.php" );
require_once( "../LocalSettings.php" );
-require_once( "../includes/MemCachedClient.inc.php" );
+require_once( "../includes/MemCachedClient.inc.php" );*/
-$mcc = new MemCachedClient();
+
+require_once( "liveCmdLine.inc" );
+
+$mcc = new memcached( array('persistant' => true) );
$mcc->set_servers( $wgMemCachedServers );
+$mcc->set_debug( true );
do {
$bad = false;
@@ -20,7 +24,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 +40,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":
diff --git a/maintenance/rebuildtextindex.php b/maintenance/rebuildtextindex.php
index e9366817292f..d99cea25e8aa 100644
--- a/maintenance/rebuildtextindex.php
+++ b/maintenance/rebuildtextindex.php
@@ -1,5 +1,5 @@
<?php
-
+define("MEDIAWIKI",true);
# Rebuild search index table from scratch. This takes several
# hours, depending on the database size and server configuration.
diff --git a/maintenance/update2.php b/maintenance/update2.php
index afd07e0a9160..7d4a19929c31 100644
--- a/maintenance/update2.php
+++ b/maintenance/update2.php
@@ -12,6 +12,7 @@ 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();
diff --git a/maintenance/updaters.inc b/maintenance/updaters.inc
index d557ebb5e8fa..9f5b4a2bc958 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;
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..a7f5e02d3756 100644
--- a/stylesheets/common.css
+++ b/stylesheets/common.css
@@ -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;
@@ -107,6 +107,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 +148,38 @@ 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;
+}
diff --git a/stylesheets/commonPrint.css b/stylesheets/commonPrint.css
index 872e4d0984cd..517db1f98724 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;
@@ -53,25 +54,27 @@ div.thumb div {
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 +87,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;
@@ -191,3 +193,28 @@ a, a.external, a.new, a.stub {
.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..c8a21fd53071 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,13 +61,13 @@ table {
}
a {
text-decoration: none;
- color: #005189;
+ color: #004ba6;
background: none;
}
a:visited { color: #5a3696; }
a:active { color: Orange; }
a:hover { text-decoration: underline; }
-a.stub,
+a.stub { color: #772233; }
a.new { color:#ba0000; }
img {
@@ -92,7 +92,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;
@@ -157,7 +156,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 +164,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 +199,7 @@ pre {
border: 1px dashed #2f6fab;
color: Black;
background-color: #f9f9f9;
+ line-height: 1.1em;
}
@@ -210,13 +216,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 +241,12 @@ span.subpages { display: block; }
color: red;
font-size: larger;
}
+#catlinks {
+ border:1px solid #aaaaaa;
+ background-color:#f9f9f9;
+ padding:5px;
+ margin-top: 1em;
+}
/* currently unused, intended to be used by a metadata box
in the bottom-right corner of the content area */
.documentDescription {
@@ -281,10 +286,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%;
}
@@ -458,7 +464,19 @@ td.diff-context { background:#eeeeee; }
background: url("discussionitem_icon.gif") center right no-repeat;
padding-right: 18px;
}
-
+/* disable interwiki styling */
+#bodyContent a.extiw {
+ 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;
+ padding: 0;
+}
/*
** Structural Elements
*/
@@ -708,7 +726,7 @@ li#pt-login {
}
#p-cactions li a {
background-color: White;
- color: #005189;
+ color: #0014a6;
border: none;
padding: 0 0.8em 0.3em 0.8em;
text-decoration: none;
@@ -776,15 +794,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 +808,7 @@ form #content {
#preftoc a,
#preftoc a:active {
display: block;
- color: #005189;
+ color: #0014a6;
}
#prefcontrol {
clear: both;
@@ -819,29 +828,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..b382056952fc 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 {
@@ -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..b5768e1fe0c6 100644
--- a/stylesheets/wikibits.js
+++ b/stylesheets/wikibits.js
@@ -5,7 +5,7 @@ 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) {
@@ -62,7 +62,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 +78,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]) {
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..b1ad90f83685 100644
--- a/templates/xhtml_slim.pt
+++ b/templates/xhtml_slim.pt
@@ -5,29 +5,31 @@
<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">/*<![CDATA[*/ @import "${stylepath}/${skinname}/main.css"; /*]]>*/</style>
+ <style type="text/css" media="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" 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="rtl" type="text/css">/*<![CDATA[*/@import "${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>
+ <div id="contentSub" tal:condition="undelete" tal:content="structure undelete"></div>
+ <div id="siteNotice" tal:condition="sitenotice" tal:content="structure sitenotice"></div>
<!-- <esi:include src="userxy/message"/> cached per user, purged on new message-->
<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.
@@ -36,6 +38,7 @@
${bodytext}
+ <div tal:condition="catlinks" id="catlinks" tal:content="structure catlinks"></div>
<!-- end content -->
<div class="visualClear"></div>
</div>
@@ -103,7 +106,7 @@
<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'
@@ -172,7 +175,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();