From: IAlex ' . wfMessage( 'newpage' )->text() . ' ' . htmlspecialchars( $revision->getUserText() ) . $msg .
htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
- " and don't parse
- $m = array();
- preg_match( '!\.(css|js)$!u', $this->getTitle()->getText(), $m );
- $outputPage->addHTML( "
\n" );
- $outputPage->addHTML( htmlspecialchars( $this->mContent ) );
- $outputPage->addHTML( "\n
\n" );
+ if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
+ $po = $this->mContentObject->getParserOutput( $this->getTitle() );
+ $outputPage->addHTML( $po->getText() );
}
}
@@ -1377,7 +1470,13 @@ class Article extends Page {
// Generate deletion reason
$hasHistory = false;
if ( !$reason ) {
- $reason = $this->generateReason( $hasHistory );
+ try {
+ $reason = $this->generateReason( $hasHistory );
+ } catch ( MWException $e ) {
+ # if a page is horribly broken, we still want to be able to delete it. so be lenient about errors here.
+ wfDebug("Error while building auto delete summary: $e");
+ $reason = '';
+ }
}
// If the page has a history, insert a warning
@@ -1617,6 +1716,8 @@ class Article extends Page {
* @return ParserOutput or false if the given revsion ID is not found
*/
public function getParserOutput( $oldid = null, User $user = null ) {
+ //XXX: bypasses mParserOptions and thus setParserOptions()
+
if ( $user === null ) {
$parserOptions = $this->getParserOptions();
} else {
@@ -1626,6 +1727,21 @@ class Article extends Page {
return $this->mPage->getParserOutput( $parserOptions, $oldid );
}
+ /**
+ * Override the ParserOptions used to render the primary article wikitext.
+ *
+ * @param ParserOptions $options
+ * @throws MWException if the parser options where already initialized.
+ */
+ public function setParserOptions( ParserOptions $options ) {
+ if ( $this->mParserOptions ) {
+ throw new MWException( "can't change parser options after they have already been set" );
+ }
+
+ // clone, so if $options is modified later, it doesn't confuse the parser cache.
+ $this->mParserOptions = clone $options;
+ }
+
/**
* Get parser options suitable for rendering the primary article wikitext
* @return ParserOptions
@@ -1845,7 +1961,13 @@ class Article extends Page {
* @return bool
*/
public function updateRestrictions( $limit = array(), $reason = '', &$cascade = 0, $expiry = array() ) {
- return $this->mPage->updateRestrictions( $limit, $reason, $cascade, $expiry );
+ return $this->mPage->doUpdateRestrictions(
+ $limit,
+ $expiry,
+ $cascade,
+ $reason,
+ $this->getContext()->getUser()
+ );
}
/**
@@ -1892,7 +2014,9 @@ class Article extends Page {
* @return mixed
*/
public function generateReason( &$hasHistory ) {
- return $this->mPage->getAutoDeleteReason( $hasHistory );
+ $title = $this->mPage->getTitle();
+ $handler = ContentHandler::getForTitle( $title );
+ return $handler->getAutoDeleteReason( $title, $hasHistory );
}
// ****** B/C functions for static methods ( __callStatic is PHP>=5.3 ) ****** //
@@ -1930,6 +2054,7 @@ class Article extends Page {
* @param $newtext
* @param $flags
* @return string
+ * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
*/
public static function getAutosummary( $oldtext, $newtext, $flags ) {
return WikiPage::getAutosummary( $oldtext, $newtext, $flags );
diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php
index 706e1c83e2..1cf66348d6 100644
--- a/includes/AutoLoader.php
+++ b/includes/AutoLoader.php
@@ -246,6 +246,7 @@ $wgAutoloadLocalClasses = array(
'StubUserLang' => 'includes/StubObject.php',
'TablePager' => 'includes/Pager.php',
'MWTimestamp' => 'includes/Timestamp.php',
+ 'TimestampException' => 'includes/Timestamp.php',
'Title' => 'includes/Title.php',
'TitleArray' => 'includes/TitleArray.php',
'TitleArrayFromResult' => 'includes/TitleArray.php',
@@ -253,6 +254,7 @@ $wgAutoloadLocalClasses = array(
'UnlistedSpecialPage' => 'includes/SpecialPage.php',
'UploadSourceAdapter' => 'includes/Import.php',
'UppercaseCollation' => 'includes/Collation.php',
+ 'Uri' => 'includes/Uri.php',
'User' => 'includes/User.php',
'UserArray' => 'includes/UserArray.php',
'UserArrayFromResult' => 'includes/UserArray.php',
@@ -288,6 +290,20 @@ $wgAutoloadLocalClasses = array(
'ZipDirectoryReader' => 'includes/ZipDirectoryReader.php',
'ZipDirectoryReaderError' => 'includes/ZipDirectoryReader.php',
+ # content handler
+ 'AbstractContent' => 'includes/content/AbstractContent.php',
+ 'ContentHandler' => 'includes/content/ContentHandler.php',
+ 'Content' => 'includes/content/Content.php',
+ 'CssContentHandler' => 'includes/content/CssContentHandler.php',
+ 'CssContent' => 'includes/content/CssContent.php',
+ 'JavaScriptContentHandler' => 'includes/content/JavaScriptContentHandler.php',
+ 'JavaScriptContent' => 'includes/content/JavaScriptContent.php',
+ 'MessageContent' => 'includes/content/MessageContent.php',
+ 'TextContentHandler' => 'includes/content/TextContentHandler.php',
+ 'TextContent' => 'includes/content/TextContent.php',
+ 'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
+ 'WikitextContent' => 'includes/content/WikitextContent.php',
+
# includes/actions
'CachedAction' => 'includes/actions/CachedAction.php',
'CreditsAction' => 'includes/actions/CreditsAction.php',
@@ -330,6 +346,7 @@ $wgAutoloadLocalClasses = array(
'ApiFormatDump' => 'includes/api/ApiFormatDump.php',
'ApiFormatFeedWrapper' => 'includes/api/ApiFormatBase.php',
'ApiFormatJson' => 'includes/api/ApiFormatJson.php',
+ 'ApiFormatNone' => 'includes/api/ApiFormatNone.php',
'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php',
'ApiFormatRaw' => 'includes/api/ApiFormatRaw.php',
'ApiFormatTxt' => 'includes/api/ApiFormatTxt.php',
@@ -382,6 +399,7 @@ $wgAutoloadLocalClasses = array(
'ApiQueryLangLinks' => 'includes/api/ApiQueryLangLinks.php',
'ApiQueryLinks' => 'includes/api/ApiQueryLinks.php',
'ApiQueryLogEvents' => 'includes/api/ApiQueryLogEvents.php',
+ 'ApiQueryORM' => 'includes/api/ApiQueryORM.php',
'ApiQueryPageProps' => 'includes/api/ApiQueryPageProps.php',
'ApiQueryProtectedTitles' => 'includes/api/ApiQueryProtectedTitles.php',
'ApiQueryQueryPage' => 'includes/api/ApiQueryQueryPage.php',
@@ -447,7 +465,6 @@ $wgAutoloadLocalClasses = array(
'Blob' => 'includes/db/DatabaseUtility.php',
'ChronologyProtector' => 'includes/db/LBFactory.php',
'CloneDatabase' => 'includes/db/CloneDatabase.php',
- 'Database' => 'includes/db/DatabaseMysql.php',
'DatabaseBase' => 'includes/db/Database.php',
'DatabaseIbm_db2' => 'includes/db/DatabaseIbm_db2.php',
'DatabaseMssql' => 'includes/db/DatabaseMssql.php',
@@ -639,6 +656,9 @@ $wgAutoloadLocalClasses = array(
'EmaillingJob' => 'includes/job/EmaillingJob.php',
'EnotifNotifyJob' => 'includes/job/EnotifNotifyJob.php',
'Job' => 'includes/job/Job.php',
+ 'JobQueue' => 'includes/job/JobQueue.php',
+ 'JobQueueDB' => 'includes/job/JobQueueDB.php',
+ 'JobQueueGroup' => 'includes/job/JobQueueGroup.php',
'RefreshLinksJob' => 'includes/job/RefreshLinksJob.php',
'RefreshLinksJob2' => 'includes/job/RefreshLinksJob.php',
'UploadFromUrlJob' => 'includes/job/UploadFromUrlJob.php',
@@ -858,6 +878,15 @@ $wgAutoloadLocalClasses = array(
'SqliteSearchResultSet' => 'includes/search/SearchSqlite.php',
'SqlSearchResultSet' => 'includes/search/SearchEngine.php',
+ # includes/site
+ 'MediaWikiSite' => 'includes/site/MediaWikiSite.php',
+ 'Site' => 'includes/site/Site.php',
+ 'SiteArray' => 'includes/site/SiteArray.php',
+ 'SiteList' => 'includes/site/SiteList.php',
+ 'SiteObject' => 'includes/site/SiteObject.php',
+ 'Sites' => 'includes/site/Sites.php',
+ 'SitesTable' => 'includes/site/SitesTable.php',
+
# includes/specials
'ActiveUsersPager' => 'includes/specials/SpecialActiveusers.php',
'AllmessagesTablePager' => 'includes/specials/SpecialAllmessages.php',
@@ -1007,7 +1036,12 @@ $wgAutoloadLocalClasses = array(
'FakeConverter' => 'languages/Language.php',
'Language' => 'languages/Language.php',
'LanguageConverter' => 'languages/LanguageConverter.php',
+ 'CLDRPluralRuleConverter' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+ 'CLDRPluralRuleConverter_Expression' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+ 'CLDRPluralRuleConverter_Fragment' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+ 'CLDRPluralRuleConverter_Operator' => 'languages/utils/CLDRPluralRuleEvaluator.php',
'CLDRPluralRuleEvaluator' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+ 'CLDRPluralRuleEvaluator_Range' => 'languages/utils/CLDRPluralRuleEvaluator.php',
'CLDRPluralRuleError' => 'languages/utils/CLDRPluralRuleEvaluator.php',
# maintenance
@@ -1021,6 +1055,7 @@ $wgAutoloadLocalClasses = array(
'FixExtLinksProtocolRelative' => 'maintenance/fixExtLinksProtocolRelative.php',
'PopulateCategory' => 'maintenance/populateCategory.php',
'PopulateImageSha1' => 'maintenance/populateImageSha1.php',
+ 'PopulateFilearchiveSha1' => 'maintenance/populateFilearchiveSha1.php',
'PopulateLogSearch' => 'maintenance/populateLogSearch.php',
'PopulateLogUsertext' => 'maintenance/populateLogUsertext.php',
'PopulateParentId' => 'maintenance/populateParentId.php',
@@ -1057,12 +1092,24 @@ $wgAutoloadLocalClasses = array(
'TestFileIterator' => 'tests/testHelpers.inc',
'TestRecorder' => 'tests/testHelpers.inc',
+ # tests/phpunit
+ 'DummyContentHandlerForTesting' => 'tests/phpunit/includes/ContentHandlerTest.php',
+ 'DummyContentForTesting' => 'tests/phpunit/includes/ContentHandlerTest.php',
+ 'JavascriptContentTest' => 'tests/phpunit/includes/JavascriptContentTest.php',
+ 'RevisionStorageTest' => 'tests/phpunit/includes/RevisionStorageTest.php',
+ 'TextContentTest' => 'tests/phpunit/includes/TextContentTest.php',
+ 'WikiPageTest' => 'tests/phpunit/includes/WikiPageTest.php',
+
# tests/phpunit/includes
'GenericArrayObjectTest' => 'tests/phpunit/includes/libs/GenericArrayObjectTest.php',
# tests/phpunit/includes/db
'ORMRowTest' => 'tests/phpunit/includes/db/ORMRowTest.php',
+ # tests/phpunit/includes/site
+ 'SiteObjectTest' => 'tests/phpunit/includes/site/SiteObjectTest.php',
+ 'TestSites' => 'tests/phpunit/includes/site/TestSites.php',
+
# tests/parser
'ParserTest' => 'tests/parser/parserTest.inc',
'ParserTestParserHook' => 'tests/parser/parserTestsParserHook.php',
diff --git a/includes/Autopromote.php b/includes/Autopromote.php
index 9c77855d74..d7ed2f904b 100644
--- a/includes/Autopromote.php
+++ b/includes/Autopromote.php
@@ -157,6 +157,7 @@ class Autopromote {
*
* @param $cond Array: A condition, which must not contain other conditions
* @param $user User The user to check the condition against
+ * @throws MWException
* @return bool Whether the condition is true for the user
*/
private static function checkCondition( $cond, User $user ) {
diff --git a/includes/BacklinkCache.php b/includes/BacklinkCache.php
index d2055dd5c5..ba8691b292 100644
--- a/includes/BacklinkCache.php
+++ b/includes/BacklinkCache.php
@@ -217,6 +217,7 @@ class BacklinkCache {
/**
* Get the field name prefix for a given table
* @param $table String
+ * @throws MWException
* @return null|string
*/
protected function getPrefix( $table ) {
@@ -245,6 +246,7 @@ class BacklinkCache {
* Get the SQL condition array for selecting backlinks, with a join
* on the page table.
* @param $table String
+ * @throws MWException
* @return array|null
*/
protected function getConditions( $table ) {
@@ -381,6 +383,7 @@ class BacklinkCache {
* Partition a DB result with backlinks in it into batches
* @param $res ResultWrapper database result
* @param $batchSize integer
+ * @throws MWException
* @return array @see
*/
protected function partitionResult( $res, $batchSize ) {
diff --git a/includes/Block.php b/includes/Block.php
index 732699dce6..86b4d13d36 100644
--- a/includes/Block.php
+++ b/includes/Block.php
@@ -231,6 +231,7 @@ class Block {
* 3) An autoblock on the given IP
* @param $vagueTarget User|String also search for blocks affecting this target. Doesn't
* make any sense to use TYPE_AUTO / TYPE_ID here. Leave blank to skip IP lookups.
+ * @throws MWException
* @return Bool whether a relevant block was found
*/
protected function newLoad( $vagueTarget = null ) {
@@ -426,6 +427,7 @@ class Block {
/**
* Delete the row from the IP blocks table.
*
+ * @throws MWException
* @return Boolean
*/
public function delete() {
@@ -780,6 +782,7 @@ class Block {
/**
* Get the IP address at the start of the range in Hex form
+ * @throws MWException
* @return String IP in Hex form
*/
public function getRangeStart() {
@@ -797,6 +800,7 @@ class Block {
/**
* Get the IP address at the start of the range in Hex form
+ * @throws MWException
* @return String IP in Hex form
*/
public function getRangeEnd() {
diff --git a/includes/Category.php b/includes/Category.php
index b7b12e8a31..ffd7bb8bda 100644
--- a/includes/Category.php
+++ b/includes/Category.php
@@ -44,6 +44,7 @@ class Category {
/**
* Set up all member variables using a database query.
+ * @throws MWException
* @return bool True on success, false on failure.
*/
protected function initialize() {
diff --git a/includes/CategoryViewer.php b/includes/CategoryViewer.php
index 3bb2bc9b1c..3d66b74a26 100644
--- a/includes/CategoryViewer.php
+++ b/includes/CategoryViewer.php
@@ -613,6 +613,7 @@ class CategoryViewer extends ContextSource {
*
* @param Title $title: The title (usually $this->title)
* @param String $section: Which section
+ * @throws MWException
* @return Title
*/
private function addFragmentToTitle( $title, $section ) {
diff --git a/includes/Cdb_PHP.php b/includes/Cdb_PHP.php
index 02be65f3b3..f58e07e1d5 100644
--- a/includes/Cdb_PHP.php
+++ b/includes/Cdb_PHP.php
@@ -126,6 +126,7 @@ class CdbReader_PHP extends CdbReader {
/**
* @param $fileName string
+ * @throws MWException
*/
function __construct( $fileName ) {
$this->fileName = $fileName;
@@ -179,7 +180,7 @@ class CdbReader_PHP extends CdbReader {
protected function read( $length, $pos ) {
if ( fseek( $this->handle, $pos ) == -1 ) {
// This can easily happen if the internal pointers are incorrect
- throw new MWException(
+ throw new MWException(
'Seek failed, file "' . $this->fileName . '" may be corrupted.' );
}
@@ -198,12 +199,13 @@ class CdbReader_PHP extends CdbReader {
/**
* Unpack an unsigned integer and throw an exception if it needs more than 31 bits
* @param $s
- * @return
+ * @throws MWException
+ * @return mixed
*/
protected function unpack31( $s ) {
$data = unpack( 'V', $s );
if ( $data[1] > 0x7fffffff ) {
- throw new MWException(
+ throw new MWException(
'Error in CDB file "' . $this->fileName . '", integer too big.' );
}
return $data[1];
@@ -475,7 +477,7 @@ class CdbWriter_PHP extends CdbWriter {
/**
* Clean up the temp file and throw an exception
- *
+ *
* @param $msg string
* @throws MWException
*/
diff --git a/includes/ChangeTags.php b/includes/ChangeTags.php
index a97cb03482..18f425ae5c 100644
--- a/includes/ChangeTags.php
+++ b/includes/ChangeTags.php
@@ -81,6 +81,7 @@ class ChangeTags {
* @param $log_id int: log_id of the change to add the tags to
* @param $params String: params to put in the ct_params field of tabel 'change_tag'
*
+ * @throws MWException
* @return bool: false if no changes are made, otherwise true
*
* @exception MWException when $rc_id, $rev_id and $log_id are all null
@@ -164,10 +165,9 @@ class ChangeTags {
* @param $conds String|Array: conditions used in query, see DatabaseBase::select
* @param $join_conds Array: join conditions, see DatabaseBase::select
* @param $options Array: options, see Database::select
- * @param $filter_tag String: tag to select on
- *
- * @exception MWException when unable to determine appropriate JOIN condition for tagging
+ * @param bool|string $filter_tag Tag to select on
*
+ * @throws MWException When unable to determine appropriate JOIN condition for tagging
*/
static function modifyDisplayQuery( &$tables, &$fields, &$conds,
&$join_conds, &$options, $filter_tag = false ) {
diff --git a/includes/Collation.php b/includes/Collation.php
index ad2b94b177..3cc7902855 100644
--- a/includes/Collation.php
+++ b/includes/Collation.php
@@ -152,10 +152,10 @@ class IcuCollation extends Collation {
/**
* Unified CJK blocks.
*
- * The same definition of a CJK block must be used for both Collation and
- * generateCollationData.php. These blocks are omitted from the first
- * letter data, as an optimisation measure and because the default UCA table
- * is pretty useless for sorting Chinese text anyway. Japanese and Korean
+ * The same definition of a CJK block must be used for both Collation and
+ * generateCollationData.php. These blocks are omitted from the first
+ * letter data, as an optimisation measure and because the default UCA table
+ * is pretty useless for sorting Chinese text anyway. Japanese and Korean
* blocks are not included here, because they are smaller and more useful.
*/
static $cjkBlocks = array(
@@ -180,7 +180,7 @@ class IcuCollation extends Collation {
function __construct( $locale ) {
if ( !extension_loaded( 'intl' ) ) {
- throw new MWException( 'An ICU collation was requested, ' .
+ throw new MWException( 'An ICU collation was requested, ' .
'but the intl extension is not available.' );
}
$this->locale = $locale;
@@ -218,8 +218,8 @@ class IcuCollation extends Collation {
// Check for CJK
$firstChar = mb_substr( $string, 0, 1, 'UTF-8' );
- if ( ord( $firstChar ) > 0x7f
- && self::isCjk( utf8ToCodepoint( $firstChar ) ) )
+ if ( ord( $firstChar ) > 0x7f
+ && self::isCjk( utf8ToCodepoint( $firstChar ) ) )
{
return $firstChar;
}
@@ -265,9 +265,9 @@ class IcuCollation extends Collation {
// Sort the letters.
//
// It's impossible to have the precompiled data file properly sorted,
- // because the sort order changes depending on ICU version. If the
- // array is not properly sorted, the binary search will return random
- // results.
+ // because the sort order changes depending on ICU version. If the
+ // array is not properly sorted, the binary search will return random
+ // results.
//
// We also take this opportunity to remove primary collisions.
$letterMap = array();
@@ -320,7 +320,7 @@ class IcuCollation extends Collation {
}
/**
- * Do a binary search, and return the index of the largest item that sorts
+ * Do a binary search, and return the index of the largest item that sorts
* less than or equal to the target value.
*
* @param $valueCallback array A function to call to get the value with
@@ -335,8 +335,12 @@ class IcuCollation extends Collation {
* sorts before all items.
*/
function findLowerBound( $valueCallback, $valueCount, $comparisonCallback, $target ) {
+ if ( $valueCount === 0 ) {
+ return false;
+ }
+
$min = 0;
- $max = $valueCount - 1;
+ $max = $valueCount;
do {
$mid = $min + ( ( $max - $min ) >> 1 );
$item = call_user_func( $valueCallback, $mid );
@@ -351,12 +355,15 @@ class IcuCollation extends Collation {
}
} while ( $min < $max - 1 );
- if ( $min == 0 && $max == 0 && $comparison > 0 ) {
- // Before the first item
- return false;
- } else {
- return $min;
+ if ( $min == 0 ) {
+ $item = call_user_func( $valueCallback, $min );
+ $comparison = call_user_func( $comparisonCallback, $target, $item );
+ if ( $comparison < 0 ) {
+ // Before the first item
+ return false;
+ }
}
+ return $min;
}
static function isCjk( $codepoint ) {
diff --git a/includes/ConfEditor.php b/includes/ConfEditor.php
index b68fc76206..d304e65ee2 100644
--- a/includes/ConfEditor.php
+++ b/includes/ConfEditor.php
@@ -159,6 +159,7 @@ class ConfEditor {
* insert
* Insert a new element at the start of the array.
*
+ * @throws MWException
* @return string
*/
public function edit( $ops ) {
@@ -392,6 +393,8 @@ class ConfEditor {
* Finds the source byte region which you would want to delete, if $pathName
* was to be deleted. Includes the leading spaces and tabs, the trailing line
* break, and any comments in between.
+ * @param $pathName
+ * @throws MWException
* @return array
*/
function findDeletionRegion( $pathName ) {
@@ -450,6 +453,8 @@ class ConfEditor {
* or semicolon.
*
* The end position is the past-the-end (end + 1) value as per convention.
+ * @param $pathName
+ * @throws MWException
* @return array
*/
function findValueRegion( $pathName ) {
diff --git a/includes/Cookie.php b/includes/Cookie.php
index 7984d63e34..1b86f5da83 100644
--- a/includes/Cookie.php
+++ b/includes/Cookie.php
@@ -40,14 +40,15 @@ class Cookie {
/**
* Sets a cookie. Used before a request to set up any individual
- * cookies. Used internally after a request to parse the
+ * cookies. Used internally after a request to parse the
* Set-Cookie headers.
*
* @param $value String: the value of the cookie
* @param $attr Array: possible key/values:
- * expires A date string
- * path The path this cookie is used on
- * domain Domain this cookie is used on
+ * expires A date string
+ * path The path this cookie is used on
+ * domain Domain this cookie is used on
+ * @throws MWException
*/
public function set( $value, $attr ) {
$this->value = $value;
diff --git a/includes/CryptRand.php b/includes/CryptRand.php
index 858eebf205..fcf6a3966b 100644
--- a/includes/CryptRand.php
+++ b/includes/CryptRand.php
@@ -391,7 +391,7 @@ class MWCryptRand {
// We hash the random state with more salt to avoid the state from leaking
// out and being used to predict the /randomness/ that follows.
if ( strlen( $buffer ) < $bytes ) {
- wfDebug( __METHOD__ . ": Falling back to using a pseudo random state to generate randomness.\n" );
+ wfDebug( __METHOD__ . ": Falling back to using a pseudo random state to generate randomness.\n" );
}
while ( strlen( $buffer ) < $bytes ) {
wfProfileIn( __METHOD__ . '-fallback' );
diff --git a/includes/DataUpdate.php b/includes/DataUpdate.php
index 377b64c0cf..088bb7e774 100644
--- a/includes/DataUpdate.php
+++ b/includes/DataUpdate.php
@@ -76,6 +76,7 @@ abstract class DataUpdate implements DeferrableUpdate {
*
* @static
* @param $updates array a list of DataUpdate instances
+ * @throws Exception|null
*/
public static function runUpdates( $updates ) {
if ( empty( $updates ) ) return; # nothing to do
diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index 8de981c6c5..cea63e07a3 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -530,6 +530,13 @@ $wgAllowAsyncCopyUploads = false;
*/
$wgCopyUploadsDomains = array();
+/**
+ * Enable copy uploads from Special:Upload. $wgAllowCopyUploads must also be
+ * true. If $wgAllowCopyUploads is true, but this is false, you will only be
+ * able to perform copy uploads from the API or extensions (e.g. UploadWizard).
+ */
+$wgCopyUploadsFromSpecialUpload = false;
+
/**
* Proxy to use for copy upload requests.
* @since 1.20
@@ -738,6 +745,19 @@ $wgMediaHandlers = array(
'image/x-djvu' => 'DjVuHandler', // compat
);
+/**
+ * Plugins for page content model handling.
+ * Each entry in the array maps a model id to a class name.
+ *
+ * @since 1.21
+ */
+$wgContentHandlers = array(
+ CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler', // the usual case
+ CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler', // dumb version, no syntax highlighting
+ CONTENT_MODEL_CSS => 'CssContentHandler', // dumb version, no syntax highlighting
+ CONTENT_MODEL_TEXT => 'TextContentHandler', // plain text, for use by extensions etc
+);
+
/**
* Resizing can be done using PHP's internal image libraries or using
* ImageMagick or another third-party converter, e.g. GraphicMagick.
@@ -1076,6 +1096,16 @@ $wgThumbUpright = 0.75;
*/
$wgDirectoryMode = 0777;
+/**
+ * Generate and use thumbnails suitable for screens with 1.5 and 2.0 pixel densities.
+ *
+ * This means a 320x240 use of an image on the wiki will also generate 480x360 and 640x480
+ * thumbnails, output via data-src-1-5 and data-src-2-0. Runtime JavaScript switches the
+ * images in after loading the original low-resolution versions depending on the reported
+ * window.devicePixelRatio.
+ */
+$wgResponsiveImages = true;
+
/**
* @name DJVU settings
* @{
@@ -1377,10 +1407,14 @@ $wgAllDBsAreLocalhost = false;
* $wgSharedTables may be customized with a list of tables to share in the shared
* datbase. However it is advised to limit what tables you do share as many of
* MediaWiki's tables may have side effects if you try to share them.
- * EXPERIMENTAL
*
* $wgSharedPrefix is the table prefix for the shared database. It defaults to
* $wgDBprefix.
+ *
+ * @deprecated In new code, use the $wiki parameter to wfGetLB() to access
+ * remote databases. Using wfGetLB() allows the shared database to reside on
+ * separate servers to the wiki's own database, with suitable configuration
+ * of $wgLBFactoryConf.
*/
$wgSharedDB = null;
@@ -1758,7 +1792,7 @@ $wgDBAhandler = 'db3';
/**
* Deprecated alias for $wgSessionsInObjectCache.
*
- * @deprecated Use $wgSessionsInObjectCache
+ * @deprecated since 1.20; Use $wgSessionsInObjectCache
*/
$wgSessionsInMemcached = false;
@@ -2031,6 +2065,27 @@ $wgSquidServersNoPurge = array();
/** Maximum number of titles to purge in any one client operation */
$wgMaxSquidPurgeTitles = 400;
+/**
+ * Whether to use a Host header in purge requests sent to the proxy servers
+ * configured in $wgSquidServers. Set this to false to support Squid
+ * configured in forward-proxy mode.
+ *
+ * If this is set to true, a Host header will be sent, and only the path
+ * component of the URL will appear on the request line, as if the request
+ * were a non-proxy HTTP 1.1 request. Varnish only supports this style of
+ * request. Squid supports this style of request only if reverse-proxy mode
+ * (http_port ... accel) is enabled.
+ *
+ * If this is set to false, no Host header will be sent, and the absolute URL
+ * will be sent in the request line, as is the standard for an HTTP proxy
+ * request in both HTTP 1.0 and 1.1. This style of request is not supported
+ * by Varnish, but is supported by Squid in either configuration (forward or
+ * reverse).
+ *
+ * @since 1.21
+ */
+$wgSquidPurgeUseHostHeader = true;
+
/**
* Routing configuration for HTCP multicast purging. Add elements here to
* enable HTCP and determine which purges are sent where. If set to an empty
@@ -2073,13 +2128,13 @@ $wgHTCPMulticastRouting = array();
* setting is ignored. If $wgHTCPMulticastRouting is not set and this setting
* is, it is used to populate $wgHTCPMulticastRouting.
*
- * @deprecated in favor of $wgHTCPMulticastRouting
+ * @deprecated since 1.20 in favor of $wgHTCPMulticastRouting
*/
$wgHTCPMulticastAddress = false;
/**
* HTCP multicast port.
- * @deprecated in favor of $wgHTCPMulticastRouting
+ * @deprecated since 1.20 in favor of $wgHTCPMulticastRouting
* @see $wgHTCPMulticastAddress
*/
$wgHTCPPort = 4827;
@@ -3594,13 +3649,6 @@ $wgDefaultUserOptions = array(
'wllimit' => 250,
);
-/**
- * Whether or not to allow and use real name fields.
- * @deprecated since 1.16, use $wgHiddenPrefs[] = 'realname' below to disable real
- * names
- */
-$wgAllowRealName = true;
-
/** An array of preferences to not show for the user */
$wgHiddenPrefs = array();
@@ -4288,7 +4336,9 @@ $wgSecretKey = false;
*/
$wgProxyList = array();
-/** deprecated */
+/**
+ * @deprecated since 1.14
+ */
$wgProxyKey = false;
/** @} */ # end of proxy scanner settings
@@ -5381,6 +5431,14 @@ $wgJobClasses = array(
*/
$wgJobTypesExcludedFromDefaultQueue = array();
+/**
+ * Map of job types to configuration arrays.
+ * These settings should be global to all wikis.
+ */
+$wgJobTypeConf = array(
+ 'default' => array( 'class' => 'JobQueueDB' ),
+);
+
/**
* Additional functions to be performed with updateSpecialPages.
* Expensive Querypages are already updated.
@@ -5911,6 +5969,7 @@ $wgAPIModules = array();
$wgAPIMetaModules = array();
$wgAPIPropModules = array();
$wgAPIListModules = array();
+$wgAPIGeneratorModules = array();
/**
* Maximum amount of rows to scan in a DB query in the API
@@ -6230,6 +6289,57 @@ $wgSeleniumConfigFile = null;
$wgDBtestuser = ''; //db user that has permission to create and drop the test databases only
$wgDBtestpassword = '';
+/**
+ * Associative array mapping namespace IDs to the name of the content model pages in that namespace should have by
+ * default (use the CONTENT_MODEL_XXX constants). If no special content type is defined for a given namespace,
+ * pages in that namespace will use the CONTENT_MODEL_WIKITEXT (except for the special case of JS and CS pages).
+ *
+ * @since 1.21
+ */
+$wgNamespaceContentModels = array();
+
+/**
+ * How to react if a plain text version of a non-text Content object is requested using ContentHandler::getContentText():
+ *
+ * * 'ignore': return null
+ * * 'fail': throw an MWException
+ * * 'serialize': serialize to default format
+ *
+ * @since 1.21
+ */
+$wgContentHandlerTextFallback = 'ignore';
+
+/**
+ * Set to false to disable use of the database fields introduced by the ContentHandler facility.
+ * This way, the ContentHandler facility can be used without any additional information in the database.
+ * A page's content model is then derived solely from the page's title. This however means that changing
+ * a page's default model (e.g. using $wgNamespaceContentModels) will break the page and/or make the content
+ * inaccessible. This also means that pages can not be moved to a title that would default to a different
+ * content model.
+ *
+ * Overall, with $wgContentHandlerUseDB = false, no database updates are needed, but content handling
+ * is less robust and less flexible.
+ *
+ * @since 1.21
+ */
+$wgContentHandlerUseDB = false;
+
+/**
+ * Determines which types of text are parsed as wikitext. This does not imply that these kinds
+ * of texts are also rendered as wikitext, it only means that links, magic words, etc will have
+ * the effect on the database they would have on a wikitext page.
+ *
+ * @todo: On the long run, it would be nice to put categories etc into a separate structure,
+ * or at least parse only the contents of comments in the scripts.
+ *
+ * @since 1.21
+ */
+$wgTextModelsToParse = array(
+ CONTENT_MODEL_WIKITEXT, // Just for completeness, wikitext will always be parsed.
+ CONTENT_MODEL_JAVASCRIPT, // Make categories etc work, people put them into comments.
+ CONTENT_MODEL_CSS, // Make categories etc work, people put them into comments.
+);
+
/**
* Whether the user must enter their password to change their e-mail address
*
@@ -6237,6 +6347,14 @@ $wgDBtestpassword = '';
*/
$wgRequirePasswordforEmailChange = true;
+/**
+ * Register handlers for specific types of sites.
+ *
+ * @since 1.20
+ */
+$wgSiteTypes = array();
+$wgSiteTypes['mediawiki'] = 'MediaWikiSite';
+
/**
* For really cool vim folding this needs to be at the end:
* vim: foldmarker=@{,@} foldmethod=marker
diff --git a/includes/DeferredUpdates.php b/includes/DeferredUpdates.php
index b4989a6997..716e65c8c3 100644
--- a/includes/DeferredUpdates.php
+++ b/includes/DeferredUpdates.php
@@ -92,7 +92,7 @@ class DeferredUpdates {
$update->doUpdate();
if ( $doCommit && $dbw->trxLevel() ) {
- $dbw->commit( __METHOD__ );
+ $dbw->commit( __METHOD__, 'flush' );
}
} catch ( MWException $e ) {
// We don't want exceptions thrown during deferred updates to
diff --git a/includes/Defines.php b/includes/Defines.php
index be9f981602..882f318245 100644
--- a/includes/Defines.php
+++ b/includes/Defines.php
@@ -39,7 +39,7 @@ define( 'MW_SPECIALPAGE_VERSION', 2 );
define( 'DBO_DEBUG', 1 );
define( 'DBO_NOBUFFER', 2 );
define( 'DBO_IGNORE', 4 );
-define( 'DBO_TRX', 8 );
+define( 'DBO_TRX', 8 ); // automatically start transaction on first query
define( 'DBO_DEFAULT', 16 );
define( 'DBO_PERSISTENT', 32 );
define( 'DBO_SYSDBA', 64 ); //for oracle maintenance
@@ -171,11 +171,12 @@ define( 'MW_DATE_ISO', 'ISO 8601' );
/**@{
* RecentChange type identifiers
*/
-define( 'RC_EDIT', 0);
-define( 'RC_NEW', 1);
-define( 'RC_MOVE', 2); // obsolete
-define( 'RC_LOG', 3);
-define( 'RC_MOVE_OVER_REDIRECT', 4); // obsolete
+define( 'RC_EDIT', 0 );
+define( 'RC_NEW', 1 );
+define( 'RC_MOVE', 2 ); // obsolete
+define( 'RC_LOG', 3 );
+define( 'RC_MOVE_OVER_REDIRECT', 4 ); // obsolete
+define( 'RC_EXTERNAL', 5 );
/**@}*/
/**@{
@@ -213,6 +214,7 @@ require_once __DIR__.'/normal/UtfNormalDefines.php';
define( 'MW_SUPPORTS_EDITFILTERMERGED', 1 );
define( 'MW_SUPPORTS_PARSERFIRSTCALLINIT', 1 );
define( 'MW_SUPPORTS_LOCALISATIONCACHE', 1 );
+define( 'MW_SUPPORTS_CONTENTHANDLER', 1 );
/**@}*/
/** Support for $wgResourceModules */
@@ -261,7 +263,7 @@ define( 'APCOND_BLOCKED', 8 );
define( 'APCOND_ISBOT', 9 );
/**@}*/
-/**
+/** @{
* Protocol constants for wfExpandUrl()
*/
define( 'PROTO_HTTP', 'http://' );
@@ -270,3 +272,35 @@ define( 'PROTO_RELATIVE', '//' );
define( 'PROTO_CURRENT', null );
define( 'PROTO_CANONICAL', 1 );
define( 'PROTO_INTERNAL', 2 );
+/**@}*/
+
+/**@{
+ * Content model ids, used by Content and ContentHandler.
+ * These IDs will be exposed in the API and XML dumps.
+ *
+ * Extensions that define their own content model IDs should take
+ * care to avoid conflicts. Using the extension name as a prefix is recommended,
+ * for example 'myextension-somecontent'.
+ */
+define( 'CONTENT_MODEL_WIKITEXT', 'wikitext' );
+define( 'CONTENT_MODEL_JAVASCRIPT', 'javascript' );
+define( 'CONTENT_MODEL_CSS', 'css' );
+define( 'CONTENT_MODEL_TEXT', 'text' );
+/**@}*/
+
+/**@{
+ * Content formats, used by Content and ContentHandler.
+ * These should be MIME types, and will be exposed in the API and XML dumps.
+ *
+ * Extensions are free to use the below formats, or define their own.
+ * It is recommended to stick with the conventions for MIME types.
+ */
+define( 'CONTENT_FORMAT_WIKITEXT', 'text/x-wiki' ); // wikitext
+define( 'CONTENT_FORMAT_JAVASCRIPT', 'text/javascript' ); // for js pages
+define( 'CONTENT_FORMAT_CSS', 'text/css' ); // for css pages
+define( 'CONTENT_FORMAT_TEXT', 'text/plain' ); // for future use, e.g. with some plain-html messages.
+define( 'CONTENT_FORMAT_HTML', 'text/html' ); // for future use, e.g. with some plain-html messages.
+define( 'CONTENT_FORMAT_SERIALIZED', 'application/vnd.php.serialized' ); // for future use with the api and for extensions
+define( 'CONTENT_FORMAT_JSON', 'application/json' ); // for future use with the api, and for use by extensions
+define( 'CONTENT_FORMAT_XML', 'application/xml' ); // for future use with the api, and for use by extensions
+/**@}*/
diff --git a/includes/EditPage.php b/includes/EditPage.php
index 39227198c2..17335e49bf 100644
--- a/includes/EditPage.php
+++ b/includes/EditPage.php
@@ -155,6 +155,11 @@ class EditPage {
*/
const AS_IMAGE_REDIRECT_LOGGED = 234;
+ /**
+ * Status: can't parse content
+ */
+ const AS_PARSE_ERROR = 240;
+
/**
* HTML id and name for the beginning of the edit form.
*/
@@ -214,6 +219,7 @@ class EditPage {
var $textbox1 = '', $textbox2 = '', $summary = '', $nosummary = false;
var $edittime = '', $section = '', $sectiontitle = '', $starttime = '';
var $oldid = 0, $editintro = '', $scrolltop = null, $bot = true;
+ var $contentModel = null, $contentFormat = null;
# Placeholders for text injection by hooks (must be HTML)
# extensions should take care to _append_ to the present value
@@ -225,7 +231,7 @@ class EditPage {
public $editFormTextBottom = '';
public $editFormTextAfterContent = '';
public $previewTextAfterContent = '';
- public $mPreloadText = '';
+ public $mPreloadContent = null;
/* $didSave should be set to true whenever an article was succesfully altered. */
public $didSave = false;
@@ -233,12 +239,24 @@ class EditPage {
public $suppressIntro = false;
+ /**
+ * Set to true to allow editing of non-text content types.
+ *
+ * @var bool
+ */
+ public $allowNonTextContent = false;
+
/**
* @param $article Article
*/
public function __construct( Article $article ) {
$this->mArticle = $article;
$this->mTitle = $article->getTitle();
+
+ $this->contentModel = $this->mTitle->getContentModel();
+
+ $handler = ContentHandler::getForModelID( $this->contentModel );
+ $this->contentFormat = $handler->getDefaultFormat();
}
/**
@@ -267,7 +285,7 @@ class EditPage {
/**
* Get the context title object.
- * If not set, $wgTitle will be returned. This behavior might changed in
+ * If not set, $wgTitle will be returned. This behavior might change in
* the future to return $this->mTitle instead.
*
* @return Title object
@@ -363,7 +381,6 @@ class EditPage {
$this->isCssSubpage = $this->mTitle->isCssSubpage();
$this->isJsSubpage = $this->mTitle->isJsSubpage();
$this->isWrongCaseCssJsPage = $this->isWrongCaseCssJsPage();
- $this->isNew = !$this->mTitle->exists() || $this->section == 'new';
# Show applicable editing introductions
if ( $this->formtype == 'initial' || $this->firsttime ) {
@@ -392,14 +409,10 @@ class EditPage {
wfProfileOut( __METHOD__ );
return;
}
-
- if ( !$this->mTitle->getArticleID() ) {
+ if ( !$this->mTitle->getArticleID() )
wfRunHooks( 'EditFormPreloadText', array( &$this->textbox1, &$this->mTitle ) );
- }
- else {
+ else
wfRunHooks( 'EditFormInitialText', array( $this ) );
- }
-
}
$this->showEditForm();
@@ -442,6 +455,7 @@ class EditPage {
* @since 1.19
* @param $permErrors Array of permissions errors, as returned by
* Title::getUserPermissionsErrors().
+ * @throws PermissionsError
*/
protected function displayPermissionsError( array $permErrors ) {
global $wgRequest, $wgOut;
@@ -454,10 +468,10 @@ class EditPage {
return;
}
- $content = $this->getContent();
+ $content = $this->getContentObject();
# Use the normal message if there's nothing to display
- if ( $this->firsttime && $content === '' ) {
+ if ( $this->firsttime && ( !$content || $content->isEmpty() ) ) {
$action = $this->mTitle->exists() ? 'edit' :
( $this->mTitle->isTalkPage() ? 'createtalk' : 'createpage' );
throw new PermissionsError( $action, $permErrors );
@@ -471,13 +485,14 @@ class EditPage {
# If the user made changes, preserve them when showing the markup
# (This happens when a user is blocked during edit, for instance)
if ( !$this->firsttime ) {
- $content = $this->textbox1;
+ $text = $this->textbox1;
$wgOut->addWikiMsg( 'viewyourtext' );
} else {
+ $text = $this->toEditText( $content );
$wgOut->addWikiMsg( 'viewsourcetext' );
}
- $this->showTextbox( $content, 'wpTextbox1', array( 'readonly' ) );
+ $this->showTextbox( $text, 'wpTextbox1', array( 'readonly' ) );
$wgOut->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ),
Linker::formatTemplates( $this->getTemplates() ) ) );
@@ -572,12 +587,13 @@ class EditPage {
* @param $request WebRequest
*/
function importFormData( &$request ) {
- global $wgLang, $wgUser;
+ global $wgContLang, $wgUser;
wfProfileIn( __METHOD__ );
# Section edit can come from either the form or a link
$this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
+ $this->isNew = !$this->mTitle->exists() || $this->section == 'new';
if ( $request->wasPosted() ) {
# These fields need to be checked for encoding.
@@ -590,15 +606,13 @@ class EditPage {
// modified by subclasses
wfProfileIn( get_class( $this ) . "::importContentFormData" );
$textbox1 = $this->importContentFormData( $request );
- if ( isset( $textbox1 ) ) {
+ if ( isset( $textbox1 ) )
$this->textbox1 = $textbox1;
- }
-
wfProfileOut( get_class( $this ) . "::importContentFormData" );
}
# Truncate for whole multibyte characters
- $this->summary = $wgLang->truncate( $request->getText( 'wpSummary' ), 255 );
+ $this->summary = $wgContLang->truncate( $request->getText( 'wpSummary' ), 255 );
# If the summary consists of a heading, e.g. '==Foobar==', extract the title from the
# header syntax, e.g. 'Foobar'. This is mainly an issue when we are using wpSummary for
@@ -610,7 +624,7 @@ class EditPage {
# currently doing double duty as both edit summary and section title. Right now this
# is just to allow API edits to work around this limitation, but this should be
# incorporated into the actual edit form when EditPage is rewritten (Bugs 18654, 26312).
- $this->sectiontitle = $wgLang->truncate( $request->getText( 'wpSectionTitle' ), 255 );
+ $this->sectiontitle = $wgContLang->truncate( $request->getText( 'wpSectionTitle' ), 255 );
$this->sectiontitle = preg_replace( '/^\s*=+\s*(.*?)\s*=+\s*$/', '$1', $this->sectiontitle );
$this->edittime = $request->getVal( 'wpEdittime' );
@@ -717,10 +731,17 @@ class EditPage {
}
}
+ $this->oldid = $request->getInt( 'oldid' );
+
$this->bot = $request->getBool( 'bot', true );
$this->nosummary = $request->getBool( 'nosummary' );
- $this->oldid = $request->getInt( 'oldid' );
+ $content_handler = ContentHandler::getForTitle( $this->mTitle );
+ $this->contentModel = $request->getText( 'model', $content_handler->getModelID() ); #may be overridden by revision
+ $this->contentFormat = $request->getText( 'format', $content_handler->getDefaultFormat() ); #may be overridden by revision
+
+ #TODO: check if the desired model is allowed in this namespace, and if a transition from the page's current model to the new model is allowed
+ #TODO: check if the desired content model supports the given content format!
$this->live = $request->getCheck( 'live' );
$this->editintro = $request->getText( 'editintro',
@@ -753,7 +774,13 @@ class EditPage {
function initialiseForm() {
global $wgUser;
$this->edittime = $this->mArticle->getTimestamp();
- $this->textbox1 = $this->getContent( false );
+
+ $content = $this->getContentObject( false ); #TODO: track content object?!
+ if ( $content === false ) {
+ return false;
+ }
+ $this->textbox1 = $this->toEditText( $content );
+
// activate checkboxes if user wants them to be always active
# Sort out the "watch" checkbox
if ( $wgUser->getOption( 'watchdefault' ) ) {
@@ -779,36 +806,65 @@ class EditPage {
/**
* Fetch initial editing page content.
*
- * @param $def_text string
+ * @param $def_text string|bool
* @return mixed string on success, $def_text for invalid sections
* @private
+ * @deprecated since 1.21, get WikiPage::getContent() instead.
+ */
+ function getContent( $def_text = false ) {
+ ContentHandler::deprecated( __METHOD__, '1.21' );
+
+ if ( $def_text !== null && $def_text !== false && $def_text !== '' ) {
+ $def_content = $this->toEditContent( $def_text );
+ } else {
+ $def_content = false;
+ }
+
+ $content = $this->getContentObject( $def_content );
+
+ // Note: EditPage should only be used with text based content anyway.
+ return $this->toEditText( $content );
+ }
+
+ /**
+ * @param Content|null $def_content The default value to return
+ *
+ * @return mixed Content on success, $def_content for invalid sections
+ *
+ * @since 1.21
*/
- function getContent( $def_text = '' ) {
- global $wgOut, $wgRequest, $wgParser;
+ protected function getContentObject( $def_content = null ) {
+ global $wgOut, $wgRequest;
wfProfileIn( __METHOD__ );
- $text = false;
+ $content = false;
// For message page not locally set, use the i18n message.
// For other non-existent articles, use preload text if any.
if ( !$this->mTitle->exists() || $this->section == 'new' ) {
if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI && $this->section != 'new' ) {
# If this is a system message, get the default text.
- $text = $this->mTitle->getDefaultMessageText();
+ $msg = $this->mTitle->getDefaultMessageText();
+
+ $content = $this->toEditContent( $msg );
}
- if ( $text === false ) {
+ if ( $content === false ) {
# If requested, preload some text.
$preload = $wgRequest->getVal( 'preload',
// Custom preload text for new sections
$this->section === 'new' ? 'MediaWiki:addsection-preload' : '' );
- $text = $this->getPreloadedText( $preload );
+
+ $content = $this->getPreloadedContent( $preload );
}
// For existing pages, get text based on "undo" or section parameters.
} else {
if ( $this->section != '' ) {
// Get section edit text (returns $def_text for invalid sections)
- $text = $wgParser->getSection( $this->getOriginalContent(), $this->section, $def_text );
+ $orig = $this->getOriginalContent();
+ $content = $orig ? $orig->getSection( $this->section ) : null;
+
+ if ( !$content ) $content = $def_content;
} else {
$undoafter = $wgRequest->getInt( 'undoafter' );
$undo = $wgRequest->getInt( 'undo' );
@@ -824,15 +880,16 @@ class EditPage {
# Sanity check, make sure it's the right page,
# the revisions exist and they were not deleted.
- # Otherwise, $text will be left as-is.
+ # Otherwise, $content will be left as-is.
if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
$undorev->getPage() == $oldrev->getPage() &&
$undorev->getPage() == $this->mTitle->getArticleID() &&
!$undorev->isDeleted( Revision::DELETED_TEXT ) &&
!$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
- $text = $this->mArticle->getUndoText( $undorev, $oldrev );
- if ( $text === false ) {
+ $content = $this->mArticle->getUndoContent( $undorev, $oldrev );
+
+ if ( $content === false ) {
# Warn the user that something went wrong
$undoMsg = 'failure';
} else {
@@ -865,14 +922,14 @@ class EditPage {
wfMessage( 'undo-' . $undoMsg )->plain() . '', true, /* interface */true );
}
- if ( $text === false ) {
- $text = $this->getOriginalContent();
+ if ( $content === false ) {
+ $content = $this->getOriginalContent();
}
}
}
wfProfileOut( __METHOD__ );
- return $text;
+ return $content;
}
/**
@@ -883,47 +940,77 @@ class EditPage {
* to the original text of the edit.
*
* This difers from Article::getContent() that when a missing revision is
- * encountered the result will be an empty string and not the
+ * encountered the result will be null and not the
* 'missing-revision' message.
*
* @since 1.19
- * @return string
+ * @return Content|null
*/
private function getOriginalContent() {
if ( $this->section == 'new' ) {
- return $this->getCurrentText();
+ return $this->getCurrentContent();
}
$revision = $this->mArticle->getRevisionFetched();
if ( $revision === null ) {
- return '';
+ if ( !$this->contentModel ) $this->contentModel = $this->getTitle()->getContentModel();
+ $handler = ContentHandler::getForModelID( $this->contentModel );
+
+ return $handler->makeEmptyContent();
}
- return $this->mArticle->getContent();
+ $content = $revision->getContent();
+ return $content;
}
/**
- * Get the actual text of the page. This is basically similar to
- * WikiPage::getRawText() except that when the page doesn't exist an empty
- * string is returned instead of false.
+ * Get the current content of the page. This is basically similar to
+ * WikiPage::getContent( Revision::RAW ) except that when the page doesn't exist an empty
+ * content object is returned instead of null.
*
- * @since 1.19
- * @return string
+ * @since 1.21
+ * @return Content
*/
- private function getCurrentText() {
- $text = $this->mArticle->getRawText();
- if ( $text === false ) {
- return '';
+ protected function getCurrentContent() {
+ $rev = $this->mArticle->getRevision();
+ $content = $rev ? $rev->getContent( Revision::RAW ) : null;
+
+ if ( $content === false || $content === null ) {
+ if ( !$this->contentModel ) $this->contentModel = $this->getTitle()->getContentModel();
+ $handler = ContentHandler::getForModelID( $this->contentModel );
+
+ return $handler->makeEmptyContent();
} else {
- return $text;
+ # nasty side-effect, but needed for consistency
+ $this->contentModel = $rev->getContentModel();
+ $this->contentFormat = $rev->getContentFormat();
+
+ return $content;
}
}
+
/**
* Use this method before edit() to preload some text into the edit box
*
* @param $text string
+ * @deprecated since 1.21, use setPreloadedContent() instead.
*/
public function setPreloadedText( $text ) {
- $this->mPreloadText = $text;
+ ContentHandler::deprecated( __METHOD__, "1.21" );
+
+ $content = $this->toEditContent( $text );
+
+ $this->setPreloadedContent( $content );
+ }
+
+ /**
+ * Use this method before edit() to preload some content into the edit box
+ *
+ * @param $content Content
+ *
+ * @since 1.21
+ */
+ public function setPreloadedContent( Content $content ) {
+ $this->mPreloadContent = $content;
}
/**
@@ -931,23 +1018,47 @@ class EditPage {
* an earlier setPreloadText() or by loading the given page.
*
* @param $preload String: representing the title to preload from.
+ *
* @return String
+ *
+ * @deprecated since 1.21, use getPreloadedContent() instead
*/
protected function getPreloadedText( $preload ) {
- global $wgUser, $wgParser;
+ ContentHandler::deprecated( __METHOD__, "1.21" );
+
+ $content = $this->getPreloadedContent( $preload );
+ $text = $this->toEditText( $content );
+
+ return $text;
+ }
- if ( !empty( $this->mPreloadText ) ) {
- return $this->mPreloadText;
+ /**
+ * Get the contents to be preloaded into the box, either set by
+ * an earlier setPreloadText() or by loading the given page.
+ *
+ * @param $preload String: representing the title to preload from.
+ *
+ * @return Content
+ *
+ * @since 1.21
+ */
+ protected function getPreloadedContent( $preload ) {
+ global $wgUser;
+
+ if ( !empty( $this->mPreloadContent ) ) {
+ return $this->mPreloadContent;
}
+ $handler = ContentHandler::getForTitle( $this->getTitle() );
+
if ( $preload === '' ) {
- return '';
+ return $handler->makeEmptyContent();
}
$title = Title::newFromText( $preload );
# Check for existence to avoid getting MediaWiki:Noarticletext
if ( $title === null || !$title->exists() || !$title->userCan( 'read' ) ) {
- return '';
+ return $handler->makeEmptyContent();
}
$page = WikiPage::factory( $title );
@@ -955,13 +1066,19 @@ class EditPage {
$title = $page->getRedirectTarget();
# Same as before
if ( $title === null || !$title->exists() || !$title->userCan( 'read' ) ) {
- return '';
+ return $handler->makeEmptyContent();
}
$page = WikiPage::factory( $title );
}
$parserOptions = ParserOptions::newFromUser( $wgUser );
- return $wgParser->getPreloadText( $page->getRawText(), $title, $parserOptions );
+ $content = $page->getContent( Revision::RAW );
+
+ if ( !$content ) {
+ return $handler->makeEmptyContent();
+ }
+
+ return $content->preloadTransform( $title, $parserOptions );
}
/**
@@ -981,6 +1098,7 @@ class EditPage {
/**
* Attempt submission
+ * @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
* @return bool false if output is done, true if the rest of the form should be displayed
*/
function attemptSave() {
@@ -1009,6 +1127,10 @@ class EditPage {
case self::AS_HOOK_ERROR:
return false;
+ case self::AS_PARSE_ERROR:
+ $wgOut->addWikiText( '$1
', "yourdiff" );
- $de = new DifferenceEngine( $this->mArticle->getContext() );
- $de->setText( $this->textbox2, $this->textbox1 );
+ $content1 = $this->toEditContent( $this->textbox1 );
+ $content2 = $this->toEditContent( $this->textbox2 );
+
+ $handler = ContentHandler::getForModelID( $this->contentModel );
+ $de = $handler->createDifferenceEngine( $this->mArticle->getContext() );
+ $de->setContent( $content2, $content1 );
$de->showDiff(
wfMessage( 'yourtext' )->parse(),
wfMessage( 'storedversion' )->text()
@@ -2590,23 +2852,21 @@ HTML
);
// Quick paranoid permission checks...
if ( is_object( $data ) ) {
- if ( $data->log_deleted & LogPage::DELETED_USER ) {
+ if ( $data->log_deleted & LogPage::DELETED_USER )
$data->user_name = wfMessage( 'rev-deleted-user' )->escaped();
- }
-
- if ( $data->log_deleted & LogPage::DELETED_COMMENT ) {
+ if ( $data->log_deleted & LogPage::DELETED_COMMENT )
$data->log_comment = wfMessage( 'rev-deleted-comment' )->escaped();
- }
}
return $data;
}
/**
* Get the rendered text for previewing.
+ * @throws MWException
* @return string
*/
function getPreviewText() {
- global $wgOut, $wgUser, $wgParser, $wgRawHtml, $wgLang;
+ global $wgOut, $wgUser, $wgRawHtml, $wgLang;
wfProfileIn( __METHOD__ );
@@ -2625,82 +2885,94 @@ HTML
return $parsedNote;
}
- if ( $this->mTriedSave && !$this->mTokenOk ) {
- if ( $this->mTokenOkExceptSuffix ) {
- $note = wfMessage( 'token_suffix_mismatch' )->plain();
- } else {
- $note = wfMessage( 'session_fail_preview' )->plain();
- }
- } elseif ( $this->incompleteForm ) {
- $note = wfMessage( 'edit_form_incomplete' )->plain();
- } else {
- $note = wfMessage( 'previewnote' )->plain() .
- ' [[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' . wfMessage( 'continue-editing' )->text() . ']]';
- }
+ $note = '';
- $parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
+ try {
+ $content = $this->toEditContent( $this->textbox1 );
- $parserOptions->setEditSection( false );
- $parserOptions->setIsPreview( true );
- $parserOptions->setIsSectionPreview( !is_null( $this->section ) && $this->section !== '' );
+ if ( $this->mTriedSave && !$this->mTokenOk ) {
+ if ( $this->mTokenOkExceptSuffix ) {
+ $note = wfMessage( 'token_suffix_mismatch' )->plain() ;
- # don't parse non-wikitext pages, show message about preview
- if ( $this->mTitle->isCssJsSubpage() || !$this->mTitle->isWikitextPage() ) {
- if ( $this->mTitle->isCssJsSubpage() ) {
- $level = 'user';
- } elseif ( $this->mTitle->isCssOrJsPage() ) {
- $level = 'site';
- } else {
- $level = false;
- }
-
- # Used messages to make sure grep find them:
- # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
- $class = 'mw-code';
- if ( $level ) {
- if ( preg_match( "/\\.css$/", $this->mTitle->getText() ) ) {
- $previewtext = "\n" . htmlspecialchars( $this->textbox1 ) . "\n
\n";
- } else {
- $toparse = $this->textbox1;
+ $parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
+ $parserOptions->setEditSection( false );
+ $parserOptions->setIsPreview( true );
+ $parserOptions->setIsSectionPreview( !is_null($this->section) && $this->section !== '' );
- # If we're adding a comment, we need to show the
- # summary as the headline
- if ( $this->section == "new" && $this->summary != "" ) {
- $toparse = wfMessage( 'newsectionheaderdefaultlevel', $this->summary )->inContentLanguage()->text() . "\n\n" . $toparse;
- }
+ # don't parse non-wikitext pages, show message about preview
+ if ( $this->mTitle->isCssJsSubpage() || $this->mTitle->isCssOrJsPage() ) {
+ if( $this->mTitle->isCssJsSubpage() ) {
+ $level = 'user';
+ } elseif( $this->mTitle->isCssOrJsPage() ) {
+ $level = 'site';
+ } else {
+ $level = false;
+ }
- wfRunHooks( 'EditPageGetPreviewText', array( $this, &$toparse ) );
+ if ( $content->getModel() == CONTENT_MODEL_CSS ) {
+ $format = 'css';
+ } elseif ( $content->getModel() == CONTENT_MODEL_JAVASCRIPT ) {
+ $format = 'js';
+ } else {
+ $format = false;
+ }
- $toparse = $wgParser->preSaveTransform( $toparse, $this->mTitle, $wgUser, $parserOptions );
- $parserOutput = $wgParser->parse( $toparse, $this->mTitle, $parserOptions );
+ # Used messages to make sure grep find them:
+ # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
+ if( $level && $format ) {
+ $note = " tag.
- *
- * @return string
- */
- protected function getDescription() {
- return '';
- }
-
/**
* Returns the name that goes in the
page title.
*
@@ -576,4 +651,13 @@ class InfoAction extends FormlessAction {
$lang->listToText( $fulllist ) )->params( $count )->escaped()
: '';
}
+
+ /**
+ * Returns the description that goes below the
tag.
+ *
+ * @return string
+ */
+ protected function getDescription() {
+ return '';
+ }
}
diff --git a/includes/actions/RawAction.php b/includes/actions/RawAction.php
index 174ca3f86c..71cb397dd7 100644
--- a/includes/actions/RawAction.php
+++ b/includes/actions/RawAction.php
@@ -46,7 +46,7 @@ class RawAction extends FormlessAction {
}
function onView() {
- global $wgGroupPermissions, $wgSquidMaxage, $wgForcedRawSMaxage, $wgJsMimeType;
+ global $wgSquidMaxage, $wgForcedRawSMaxage, $wgJsMimeType;
$this->getOutput()->disable();
$request = $this->getRequest();
@@ -91,7 +91,7 @@ class RawAction extends FormlessAction {
$response->header( 'Content-type: ' . $contentType . '; charset=UTF-8' );
# Output may contain user-specific data;
# vary generated content for open sessions on private wikis
- $privateCache = !$wgGroupPermissions['*']['read'] && ( $smaxage == 0 || session_id() != '' );
+ $privateCache = !User::groupHasPermission( '*', 'read' ) && ( $smaxage == 0 || session_id() != '' );
# allow the client to cache this for 24 hours
$mode = $privateCache ? 'private' : 'public';
$response->header( 'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage );
@@ -148,10 +148,29 @@ class RawAction extends FormlessAction {
$request->response()->header( "Last-modified: $lastmod" );
// Public-only due to cache headers
- $text = $rev->getText();
- $section = $request->getIntOrNull( 'section' );
- if ( $section !== null ) {
- $text = $wgParser->getSection( $text, $section );
+ $content = $rev->getContent();
+
+ if ( $content === null ) {
+ // revision not found (or suppressed)
+ $text = false;
+ } elseif ( !$content instanceof TextContent ) {
+ // non-text content
+ wfHttpError( 415, "Unsupported Media Type", "The requested page uses the content model `"
+ . $content->getModel() . "` which is not supported via this interface." );
+ die();
+ } else {
+ // want a section?
+ $section = $request->getIntOrNull( 'section' );
+ if ( $section !== null ) {
+ $content = $content->getSection( $section );
+ }
+
+ if ( $content === null || $content === false ) {
+ // section not found (or section not supported, e.g. for JS and CSS)
+ $text = false;
+ } else {
+ $text = $content->getNativeData();
+ }
}
}
}
diff --git a/includes/actions/RevertAction.php b/includes/actions/RevertAction.php
index 774343842a..a5fc4e1734 100644
--- a/includes/actions/RevertAction.php
+++ b/includes/actions/RevertAction.php
@@ -115,7 +115,7 @@ class RevertFileAction extends FormAction {
$source = $this->page->getFile()->getArchiveVirtualUrl( $this->getRequest()->getText( 'oldimage' ) );
$comment = $data['comment'];
// TODO: Preserve file properties from database instead of reloading from file
- return $this->page->getFile()->upload( $source, $comment, $comment );
+ return $this->page->getFile()->upload( $source, $comment, $comment, 0, false, false, $this->getUser() );
}
public function onSuccess() {
@@ -124,7 +124,7 @@ class RevertFileAction extends FormAction {
$lang = $this->getLanguage();
$userDate = $lang->userDate( $timestamp, $user );
$userTime = $lang->userTime( $timestamp, $user );
-
+
$this->getOutput()->addWikiMsg( 'filerevert-success', $this->getTitle()->getText(),
$userDate, $userTime,
wfExpandUrl( $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
@@ -136,7 +136,7 @@ class RevertFileAction extends FormAction {
protected function getPageTitle() {
return $this->msg( 'filerevert', $this->getTitle()->getText() );
}
-
+
protected function getDescription() {
$this->getOutput()->addBacklinkSubtitle( $this->getTitle() );
return '';
diff --git a/includes/actions/RollbackAction.php b/includes/actions/RollbackAction.php
index 0d9a902727..81bad9da0b 100644
--- a/includes/actions/RollbackAction.php
+++ b/includes/actions/RollbackAction.php
@@ -71,45 +71,32 @@ class RollbackAction extends FormlessAction {
return;
}
- # Display permissions errors before read-only message -- there's no
- # point in misleading the user into thinking the inability to rollback
- # is only temporary.
- if ( !empty( $result ) && $result !== array( array( 'readonlytext' ) ) ) {
- # array_diff is completely broken for arrays of arrays, sigh.
- # Remove any 'readonlytext' error manually.
- $out = array();
- foreach ( $result as $error ) {
- if ( $error != array( 'readonlytext' ) ) {
- $out [] = $error;
- }
- }
- throw new PermissionsError( 'rollback', $out );
- }
+ #NOTE: Permission errors already handled by Action::checkExecute.
if ( $result == array( array( 'readonlytext' ) ) ) {
throw new ReadOnlyError;
}
+ #XXX: Would be nice if ErrorPageError could take multiple errors, and/or a status object.
+ # Right now, we only show the first error
+ foreach ( $result as $error ) {
+ throw new ErrorPageError( 'rollbackfailed', $error[0], array_slice( $error, 1 ) );
+ }
+
$current = $details['current'];
$target = $details['target'];
$newId = $details['newid'];
$this->getOutput()->setPageTitle( $this->msg( 'actioncomplete' ) );
$this->getOutput()->setRobotPolicy( 'noindex,nofollow' );
- if ( $current->getUserText() === '' ) {
- $old = $this->msg( 'rev-deleted-user' )->escaped();
- } else {
- $old = Linker::userLink( $current->getUser(), $current->getUserText() )
- . Linker::userToolLinks( $current->getUser(), $current->getUserText() );
- }
-
- $new = Linker::userLink( $target->getUser(), $target->getUserText() )
- . Linker::userToolLinks( $target->getUser(), $target->getUserText() );
+ $old = Linker::revUserTools( $current );
+ $new = Linker::revUserTools( $target );
$this->getOutput()->addHTML( $this->msg( 'rollback-success' )->rawParams( $old, $new )->parseAsBlock() );
$this->getOutput()->returnToMain( false, $this->getTitle() );
if ( !$request->getBool( 'hidediff', false ) && !$this->getUser()->getBoolOption( 'norollbackdiff', false ) ) {
- $de = new DifferenceEngine( $this->getContext(), $current->getId(), $newId, false, true );
+ $contentHandler = $current->getContentHandler();
+ $de = $contentHandler->createDifferenceEngine( $this->getContext(), $current->getId(), $newId, false, true );
$de->showDiff( '', '' );
}
}
diff --git a/includes/api/ApiComparePages.php b/includes/api/ApiComparePages.php
index ed72b29bd7..67412598a8 100644
--- a/includes/api/ApiComparePages.php
+++ b/includes/api/ApiComparePages.php
@@ -35,7 +35,15 @@ class ApiComparePages extends ApiBase {
$rev1 = $this->revisionOrTitleOrId( $params['fromrev'], $params['fromtitle'], $params['fromid'] );
$rev2 = $this->revisionOrTitleOrId( $params['torev'], $params['totitle'], $params['toid'] );
- $de = new DifferenceEngine( $this->getContext(),
+ $revision = Revision::newFromId( $rev1 );
+
+ if ( !$revision ) {
+ $this->dieUsage( 'The diff cannot be retrieved, ' .
+ 'one revision does not exist or you do not have permission to view it.', 'baddiff' );
+ }
+
+ $contentHandler = $revision->getContentHandler();
+ $de = $contentHandler->createDifferenceEngine( $this->getContext(),
$rev1,
$rev2,
null, // rcid
diff --git a/includes/api/ApiDelete.php b/includes/api/ApiDelete.php
index 2d36f19aa3..964e0ae40b 100644
--- a/includes/api/ApiDelete.php
+++ b/includes/api/ApiDelete.php
@@ -61,6 +61,9 @@ class ApiDelete extends ApiBase {
$status = self::delete( $pageObj, $user, $params['token'], $reason );
}
+ if ( is_array( $status ) ) {
+ $this->dieUsageMsg( $status[0] );
+ }
if ( !$status->isGood() ) {
$errors = $status->getErrorsArray();
$this->dieUsageMsg( $errors[0] ); // We don't care about multiple errors, just report one of them
@@ -98,11 +101,11 @@ class ApiDelete extends ApiBase {
/**
* We have our own delete() function, since Article.php's implementation is split in two phases
*
- * @param $page WikiPage object to work on
+ * @param $page Page|WikiPage object to work on
* @param $user User doing the action
- * @param $token String: delete token (same as edit token)
- * @param $reason String: reason for the deletion. Autogenerated if NULL
- * @return Status
+ * @param $token String delete token (same as edit token)
+ * @param $reason String|null reason for the deletion. Autogenerated if NULL
+ * @return Status|array
*/
public static function delete( Page $page, User $user, $token, &$reason = null ) {
$title = $page->getTitle();
@@ -128,13 +131,13 @@ class ApiDelete extends ApiBase {
}
/**
- * @param $page WikiPage object to work on
+ * @param $page WikiPage|Page object to work on
* @param $user User doing the action
* @param $token
* @param $oldimage
* @param $reason
* @param $suppress bool
- * @return Status
+ * @return Status|array
*/
public static function deleteFile( Page $page, User $user, $token, $oldimage, &$reason = null, $suppress = false ) {
$title = $page->getTitle();
@@ -161,7 +164,7 @@ class ApiDelete extends ApiBase {
if ( is_null( $reason ) ) { // Log and RC don't like null reasons
$reason = '';
}
- return FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress );
+ return FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress, $user );
}
public function mustBePosted() {
diff --git a/includes/api/ApiEditPage.php b/includes/api/ApiEditPage.php
index 0963fe7cf2..ca62bc6930 100644
--- a/includes/api/ApiEditPage.php
+++ b/includes/api/ApiEditPage.php
@@ -54,17 +54,37 @@ class ApiEditPage extends ApiBase {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
}
+ if ( !isset( $params['contentmodel'] ) || $params['contentmodel'] == '' ) {
+ $contentHandler = $pageObj->getContentHandler();
+ } else {
+ $contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
+ }
+
+ // @todo ask handler whether direct editing is supported at all! make allowFlatEdit() method or some such
+
+ if ( !isset( $params['contentformat'] ) || $params['contentformat'] == '' ) {
+ $params['contentformat'] = $contentHandler->getDefaultFormat();
+ }
+
+ $contentFormat = $params['contentformat'];
+
+ if ( !$contentHandler->isSupportedFormat( $contentFormat ) ) {
+ $name = $titleObj->getPrefixedDBkey();
+ $model = $contentHandler->getModelID();
+
+ $this->dieUsage( "The requested format $contentFormat is not supported for content model ".
+ " $model used by $name", 'badformat' );
+ }
+
$apiResult = $this->getResult();
if ( $params['redirect'] ) {
if ( $titleObj->isRedirect() ) {
$oldTitle = $titleObj;
- $titles = Title::newFromRedirectArray(
- Revision::newFromTitle(
- $oldTitle, false, Revision::READ_LATEST
- )->getText( Revision::FOR_THIS_USER )
- );
+ $titles = Revision::newFromTitle( $oldTitle, false, Revision::READ_LATEST )
+ ->getContent( Revision::FOR_THIS_USER, $user )
+ ->getRedirectChain();
// array_shift( $titles );
$redirValues = array();
@@ -103,31 +123,61 @@ class ApiEditPage extends ApiBase {
$this->dieUsageMsg( $errors[0] );
}
- $articleObj = Article::newFromTitle( $titleObj, $this->getContext() );
-
$toMD5 = $params['text'];
if ( !is_null( $params['appendtext'] ) || !is_null( $params['prependtext'] ) )
{
- // For non-existent pages, Article::getContent()
- // returns an interface message rather than ''
- // We do want getContent()'s behavior for non-existent
- // MediaWiki: pages, though
- if ( $articleObj->getID() == 0 && $titleObj->getNamespace() != NS_MEDIAWIKI ) {
- $content = '';
- } else {
- $content = $articleObj->getContent();
+ $content = $pageObj->getContent();
+
+ if ( !$content ) {
+ if ( $titleObj->getNamespace() == NS_MEDIAWIKI ) {
+ # If this is a MediaWiki:x message, then load the messages
+ # and return the message value for x.
+ $text = $titleObj->getDefaultMessageText();
+ if ( $text === false ) {
+ $text = '';
+ }
+
+ try {
+ $content = ContentHandler::makeContent( $text, $this->getTitle() );
+ } catch ( MWContentSerializationException $ex ) {
+ $this->dieUsage( $ex->getMessage(), 'parseerror' );
+ return;
+ }
+ } else {
+ # Otherwise, make a new empty content.
+ $content = $contentHandler->makeEmptyContent();
+ }
+ }
+
+ // @todo: Add support for appending/prepending to the Content interface
+
+ if ( !( $content instanceof TextContent ) ) {
+ $mode = $contentHandler->getModelID();
+ $this->dieUsage( "Can't append to pages using content model $mode", 'appendnotsupported' );
}
if ( !is_null( $params['section'] ) ) {
+ if ( !$contentHandler->supportsSections() ) {
+ $modelName = $contentHandler->getModelID();
+ $this->dieUsage( "Sections are not supported for this content model: $modelName.", 'sectionsnotsupported' );
+ }
+
// Process the content for section edits
- global $wgParser;
$section = intval( $params['section'] );
- $content = $wgParser->getSection( $content, $section, false );
- if ( $content === false ) {
+ $content = $content->getSection( $section );
+
+ if ( !$content ) {
$this->dieUsage( "There is no section {$section}.", 'nosuchsection' );
}
}
- $params['text'] = $params['prependtext'] . $content . $params['appendtext'];
+
+ if ( !$content ) {
+ $text = '';
+ } else {
+ $text = $content->serialize( $contentFormat );
+ }
+
+ $params['text'] = $params['prependtext'] . $text . $params['appendtext'];
$toMD5 = $params['prependtext'] . $params['appendtext'];
}
@@ -151,18 +201,21 @@ class ApiEditPage extends ApiBase {
$this->dieUsageMsg( array( 'nosuchrevid', $params['undoafter'] ) );
}
- if ( $undoRev->getPage() != $articleObj->getID() ) {
+ if ( $undoRev->getPage() != $pageObj->getID() ) {
$this->dieUsageMsg( array( 'revwrongpage', $undoRev->getID(), $titleObj->getPrefixedText() ) );
}
- if ( $undoafterRev->getPage() != $articleObj->getID() ) {
+ if ( $undoafterRev->getPage() != $pageObj->getID() ) {
$this->dieUsageMsg( array( 'revwrongpage', $undoafterRev->getID(), $titleObj->getPrefixedText() ) );
}
- $newtext = $articleObj->getUndoText( $undoRev, $undoafterRev );
- if ( $newtext === false ) {
+ $newContent = $contentHandler->getUndoContent( $pageObj->getRevision(), $undoRev, $undoafterRev );
+
+ if ( !$newContent ) {
$this->dieUsageMsg( 'undo-failure' );
}
- $params['text'] = $newtext;
+
+ $params['text'] = $newContent->serialize( $params['contentformat'] );
+
// If no summary was given and we only undid one rev,
// use an autosummary
if ( is_null( $params['summary'] ) && $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo'] ) {
@@ -179,6 +232,8 @@ class ApiEditPage extends ApiBase {
// That interface kind of sucks, but it's workable
$requestArray = array(
'wpTextbox1' => $params['text'],
+ 'format' => $contentFormat,
+ 'model' => $contentHandler->getModelID(),
'wpEditToken' => $params['token'],
'wpIgnoreBlankSummary' => ''
);
@@ -196,7 +251,7 @@ class ApiEditPage extends ApiBase {
if ( !is_null( $params['basetimestamp'] ) && $params['basetimestamp'] != '' ) {
$requestArray['wpEdittime'] = wfTimestamp( TS_MW, $params['basetimestamp'] );
} else {
- $requestArray['wpEdittime'] = $articleObj->getTimestamp();
+ $requestArray['wpEdittime'] = $pageObj->getTimestamp();
}
if ( !is_null( $params['starttimestamp'] ) && $params['starttimestamp'] != '' ) {
@@ -244,7 +299,12 @@ class ApiEditPage extends ApiBase {
// TODO: Make them not or check if they still do
$wgTitle = $titleObj;
- $ep = new EditPage( $articleObj );
+ $articleObject = new Article( $titleObj );
+ $ep = new EditPage( $articleObject );
+
+ // allow editing of non-textual content.
+ $ep->allowNonTextContent = true;
+
$ep->setContextTitle( $titleObj );
$ep->importFormData( $req );
@@ -262,7 +322,7 @@ class ApiEditPage extends ApiBase {
}
// Do the actual save
- $oldRevId = $articleObj->getRevIdFetched();
+ $oldRevId = $articleObject->getRevIdFetched();
$result = null;
// Fake $wgRequest for some hooks inside EditPage
// @todo FIXME: This interface SUCKS
@@ -278,6 +338,9 @@ class ApiEditPage extends ApiBase {
case EditPage::AS_HOOK_ERROR_EXPECTED:
$this->dieUsageMsg( 'hookaborted' );
+ case EditPage::AS_PARSE_ERROR:
+ $this->dieUsage( $status->getMessage(), 'parseerror' );
+
case EditPage::AS_IMAGE_REDIRECT_ANON:
$this->dieUsageMsg( 'noimageredirect-anon' );
@@ -329,14 +392,15 @@ class ApiEditPage extends ApiBase {
$r['result'] = 'Success';
$r['pageid'] = intval( $titleObj->getArticleID() );
$r['title'] = $titleObj->getPrefixedText();
- $newRevId = $articleObj->getLatest();
+ $r['contentmodel'] = $titleObj->getContentModel();
+ $newRevId = $articleObject->getLatest();
if ( $newRevId == $oldRevId ) {
$r['nochange'] = '';
} else {
$r['oldrevid'] = intval( $oldRevId );
$r['newrevid'] = intval( $newRevId );
$r['newtimestamp'] = wfTimestamp( TS_ISO_8601,
- $articleObj->getTimestamp() );
+ $pageObj->getTimestamp() );
}
break;
@@ -380,6 +444,7 @@ class ApiEditPage extends ApiBase {
array( 'undo-failure' ),
array( 'hashcheckfailed' ),
array( 'hookaborted' ),
+ array( 'code' => 'parseerror', 'info' => 'Failed to parse the given text.' ),
array( 'noimageredirect-anon' ),
array( 'noimageredirect-logged' ),
array( 'spamdetected', 'spam' ),
@@ -397,6 +462,13 @@ class ApiEditPage extends ApiBase {
array( 'unknownerror', 'retval' ),
array( 'code' => 'nosuchsection', 'info' => 'There is no section section.' ),
array( 'code' => 'invalidsection', 'info' => 'The section parameter must be set to an integer or \'new\'' ),
+ array( 'code' => 'sectionsnotsupported', 'info' => 'Sections are not supported for this type of page.' ),
+ array( 'code' => 'editnotsupported', 'info' => 'Editing of this type of page is not supported using '
+ . 'the text based edit API.' ),
+ array( 'code' => 'appendnotsupported', 'info' => 'This type of page can not be edited by appending '
+ . 'or prepending text.' ),
+ array( 'code' => 'badformat', 'info' => 'The requested serialization format can not be applied to '
+ . 'the page\'s content model' ),
array( 'customcssprotected' ),
array( 'customjsprotected' ),
)
@@ -460,6 +532,12 @@ class ApiEditPage extends ApiBase {
ApiBase::PARAM_TYPE => 'boolean',
ApiBase::PARAM_DFLT => false,
),
+ 'contentformat' => array(
+ ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+ ),
+ 'contentmodel' => array(
+ ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+ )
);
}
@@ -498,6 +576,8 @@ class ApiEditPage extends ApiBase {
'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
'redirect' => 'Automatically resolve redirects',
+ 'contentformat' => 'Content serialization format used for the input text',
+ 'contentmodel' => 'Content model of the new content',
);
}
diff --git a/includes/api/ApiFeedContributions.php b/includes/api/ApiFeedContributions.php
index 1cf760aea9..fb6a06ffcb 100644
--- a/includes/api/ApiFeedContributions.php
+++ b/includes/api/ApiFeedContributions.php
@@ -130,10 +130,22 @@ class ApiFeedContributions extends ApiBase {
protected function feedItemDesc( $revision ) {
if( $revision ) {
$msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+ $content = $revision->getContent();
+
+ if ( $content instanceof TextContent ) {
+ // only textual content has a "source view".
+ $html = nl2br( htmlspecialchars( $content->getNativeData() ) );
+ } else {
+ //XXX: we could get an HTML representation of the content via getParserOutput, but that may
+ // contain JS magic and generally may not be suitable for inclusion in a feed.
+ // Perhaps Content should have a getDescriptiveHtml method and/or a getSourceText method.
+ //Compare also FeedUtils::formatDiffRow.
+ $html = '';
+ }
+
return '
\n
\n"; + $html .= $this->getHighlightHtml( ); + $html .= "\n\n"; + + return $html; + } +} diff --git a/includes/content/CssContentHandler.php b/includes/content/CssContentHandler.php new file mode 100644 index 0000000000..e2199c41b2 --- /dev/null +++ b/includes/content/CssContentHandler.php @@ -0,0 +1,43 @@ +checkFormat( $format ); + + return new CssContent( $text ); + } + + public function makeEmptyContent() { + return new CssContent( '' ); + } + + /** + * Returns the english language, because CSS is english, and should be handled as such. + * + * @return Language wfGetLangObj( 'en' ) + * + * @see ContentHandler::getPageLanguage() + */ + public function getPageLanguage( Title $title, Content $content = null ) { + return wfGetLangObj( 'en' ); + } + + /** + * Returns the english language, because CSS is english, and should be handled as such. + * + * @return Language wfGetLangObj( 'en' ) + * + * @see ContentHandler::getPageViewLanguage() + */ + public function getPageViewLanguage( Title $title, Content $content = null ) { + return wfGetLangObj( 'en' ); + } +} \ No newline at end of file diff --git a/includes/content/JavaScriptContent.php b/includes/content/JavaScriptContent.php new file mode 100644 index 0000000000..770f233620 --- /dev/null +++ b/includes/content/JavaScriptContent.php @@ -0,0 +1,60 @@ +getNativeData(); + $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts ); + + return new JavaScriptContent( $pst ); + } + + + protected function getHtml( ) { + $html = ""; + $html .= "
\n"; + $html .= $this->getHighlightHtml( ); + $html .= "\n\n"; + + return $html; + } +} \ No newline at end of file diff --git a/includes/content/JavaScriptContentHandler.php b/includes/content/JavaScriptContentHandler.php new file mode 100644 index 0000000000..8b080bf5c8 --- /dev/null +++ b/includes/content/JavaScriptContentHandler.php @@ -0,0 +1,45 @@ +checkFormat( $format ); + + return new JavaScriptContent( $text ); + } + + public function makeEmptyContent() { + return new JavaScriptContent( '' ); + } + + /** + * Returns the english language, because JS is english, and should be handled as such. + * + * @return Language wfGetLangObj( 'en' ) + * + * @see ContentHandler::getPageLanguage() + */ + public function getPageLanguage( Title $title, Content $content = null ) { + return wfGetLangObj( 'en' ); + } + + /** + * Returns the english language, because CSS is english, and should be handled as such. + * + * @return Language wfGetLangObj( 'en' ) + * + * @see ContentHandler::getPageViewLanguage() + */ + public function getPageViewLanguage( Title $title, Content $content = null ) { + return wfGetLangObj( 'en' ); + } +} \ No newline at end of file diff --git a/includes/content/MessageContent.php b/includes/content/MessageContent.php new file mode 100644 index 0000000000..d38355d107 --- /dev/null +++ b/includes/content/MessageContent.php @@ -0,0 +1,152 @@ +mMessage = wfMessage( $msg ); + } else { + $this->mMessage = clone $msg; + } + + if ( $params ) { + $this->mMessage = $this->mMessage->params( $params ); + } + } + + /** + * Returns the message as rendered HTML + * + * @return string The message text, parsed into html + */ + public function getHtml() { + return $this->mMessage->parse(); + } + + /** + * Returns the message as rendered HTML + * + * @return string The message text, parsed into html + */ + public function getWikitext() { + return $this->mMessage->text(); + } + + /** + * Returns the message object, with any parameters already substituted. + * + * @return Message The message object. + */ + public function getNativeData() { + //NOTE: Message objects are mutable. Cloning here makes MessageContent immutable. + return clone $this->mMessage; + } + + /** + * @see Content::getTextForSearchIndex + */ + public function getTextForSearchIndex() { + return $this->mMessage->plain(); + } + + /** + * @see Content::getWikitextForTransclusion + */ + public function getWikitextForTransclusion() { + return $this->getWikitext(); + } + + /** + * @see Content::getTextForSummary + */ + public function getTextForSummary( $maxlength = 250 ) { + return substr( $this->mMessage->plain(), 0, $maxlength ); + } + + /** + * @see Content::getSize + * + * @return int + */ + public function getSize() { + return strlen( $this->mMessage->plain() ); + } + + /** + * @see Content::copy + * + * @return Content. A copy of this object + */ + public function copy() { + // MessageContent is immutable (because getNativeData() returns a clone of the Message object) + return $this; + } + + /** + * @see Content::isCountable + * + * @return bool false + */ + public function isCountable( $hasLinks = null ) { + return false; + } + + /** + * @see Content::getParserOutput + * + * @return ParserOutput + */ + public function getParserOutput( + Title $title, $revId = null, + ParserOptions $options = null, $generateHtml = true + ) { + + if ( $generateHtml ) { + $html = $this->getHtml(); + } else { + $html = ''; + } + + $po = new ParserOutput( $html ); + return $po; + } +} \ No newline at end of file diff --git a/includes/content/TextContent.php b/includes/content/TextContent.php new file mode 100644 index 0000000000..8e832ececa --- /dev/null +++ b/includes/content/TextContent.php @@ -0,0 +1,232 @@ +mText = $text; + } + + public function copy() { + return $this; # NOTE: this is ok since TextContent are immutable. + } + + public function getTextForSummary( $maxlength = 250 ) { + global $wgContLang; + + $text = $this->getNativeData(); + + $truncatedtext = $wgContLang->truncate( + preg_replace( "/[\n\r]/", ' ', $text ), + max( 0, $maxlength ) ); + + return $truncatedtext; + } + + /** + * returns the text's size in bytes. + * + * @return int The size + */ + public function getSize( ) { + $text = $this->getNativeData( ); + return strlen( $text ); + } + + /** + * Returns true if this content is not a redirect, and $wgArticleCountMethod + * is "any". + * + * @param $hasLinks Bool: if it is known whether this content contains links, + * provide this information here, to avoid redundant parsing to find out. + * + * @return bool True if the content is countable + */ + public function isCountable( $hasLinks = null ) { + global $wgArticleCountMethod; + + if ( $this->isRedirect( ) ) { + return false; + } + + if ( $wgArticleCountMethod === 'any' ) { + return true; + } + + return false; + } + + /** + * Returns the text represented by this Content object, as a string. + * + * @param the raw text + */ + public function getNativeData( ) { + $text = $this->mText; + return $text; + } + + /** + * Returns the text represented by this Content object, as a string. + * + * @param the raw text + */ + public function getTextForSearchIndex( ) { + return $this->getNativeData(); + } + + /** + * Returns the text represented by this Content object, as a string. + * + * @param the raw text + */ + public function getWikitextForTransclusion( ) { + return $this->getNativeData(); + } + + /** + * Returns a Content object with pre-save transformations applied. + * This implementation just trims trailing whitespace. + * + * @param $title Title + * @param $user User + * @param $popts ParserOptions + * @return Content + */ + public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) { + $text = $this->getNativeData(); + $pst = rtrim( $text ); + + return ( $text === $pst ) ? $this : new WikitextContent( $pst ); + } + + /** + * Diff this content object with another content object.. + * + * @since 1.21diff + * + * @param $that Content the other content object to compare this content object to + * @param $lang Language the language object to use for text segmentation. + * If not given, $wgContentLang is used. + * + * @return DiffResult a diff representing the changes that would have to be + * made to this content object to make it equal to $that. + */ + public function diff( Content $that, Language $lang = null ) { + global $wgContLang; + + $this->checkModelID( $that->getModel() ); + + # @todo: could implement this in DifferenceEngine and just delegate here? + + if ( !$lang ) $lang = $wgContLang; + + $otext = $this->getNativeData(); + $ntext = $this->getNativeData(); + + # Note: Use native PHP diff, external engines don't give us abstract output + $ota = explode( "\n", $wgContLang->segmentForDiff( $otext ) ); + $nta = explode( "\n", $wgContLang->segmentForDiff( $ntext ) ); + + $diff = new Diff( $ota, $nta ); + return $diff; + } + + + /** + * Returns a generic ParserOutput object, wrapping the HTML returned by + * getHtml(). + * + * @param $title Title Context title for parsing + * @param $revId int|null Revision ID (for {{REVISIONID}}) + * @param $options ParserOptions|null Parser options + * @param $generateHtml bool Whether or not to generate HTML + * + * @return ParserOutput representing the HTML form of the text + */ + public function getParserOutput( Title $title, + $revId = null, + ParserOptions $options = null, $generateHtml = true + ) { + global $wgParser, $wgTextModelsToParse; + + if ( !$options ) { + //NOTE: use canonical options per default to produce cacheable output + $options = $this->getContentHandler()->makeParserOptions( 'canonical' ); + } + + if ( in_array( $this->getModel(), $wgTextModelsToParse ) ) { + // parse just to get links etc into the database + $po = $wgParser->parse( $this->getNativeData(), $title, $options, true, true, $revId ); + } else { + $po = new ParserOutput(); + } + + if ( $generateHtml ) { + $html = $this->getHtml(); + } else { + $html = ''; + } + + $po->setText( $html ); + return $po; + } + + /** + * Generates an HTML version of the content, for display. Used by + * getParserOutput() to construct a ParserOutput object. + * + * This default implementation just calls getHighlightHtml(). Content + * models that have another mapping to HTML (as is the case for markup + * languages like wikitext) should override this method to generate the + * appropriate HTML. + * + * @return string An HTML representation of the content + */ + protected function getHtml() { + return $this->getHighlightHtml(); + } + + /** + * Generates a syntax-highlighted version of the content, as HTML. + * Used by the default implementation of getHtml(). + * + * @return string an HTML representation of the content's markup + */ + protected function getHighlightHtml( ) { + # TODO: make Highlighter interface, use highlighter here, if available + return htmlspecialchars( $this->getNativeData() ); + } +} diff --git a/includes/content/TextContentHandler.php b/includes/content/TextContentHandler.php new file mode 100644 index 0000000000..9dff67edd4 --- /dev/null +++ b/includes/content/TextContentHandler.php @@ -0,0 +1,90 @@ +checkFormat( $format ); + return $content->getNativeData(); + } + + /** + * Attempts to merge differences between three versions. Returns a new + * Content object for a clean merge and false for failure or a conflict. + * + * All three Content objects passed as parameters must have the same + * content model. + * + * This text-based implementation uses wfMerge(). + * + * @param $oldContent \Content|string String + * @param $myContent \Content|string String + * @param $yourContent \Content|string String + * + * @return Content|Bool + */ + public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) { + $this->checkModelID( $oldContent->getModel() ); + $this->checkModelID( $myContent->getModel() ); + $this->checkModelID( $yourContent->getModel() ); + + $format = $this->getDefaultFormat(); + + $old = $this->serializeContent( $oldContent, $format ); + $mine = $this->serializeContent( $myContent, $format ); + $yours = $this->serializeContent( $yourContent, $format ); + + $ok = wfMerge( $old, $mine, $yours, $result ); + + if ( !$ok ) { + return false; + } + + if ( !$result ) { + return $this->makeEmptyContent(); + } + + $mergedContent = $this->unserializeContent( $result, $format ); + return $mergedContent; + } + + /** + * Unserializes a Content object of the type supported by this ContentHandler. + * + * @since 1.21 + * + * @param $text string serialized form of the content + * @param $format null|String the format used for serialization + * + * @return Content the TextContent object wrapping $text + */ + public function unserializeContent( $text, $format = null ) { + $this->checkFormat( $format ); + + return new TextContent( $text ); + } + + /** + * Creates an empty TextContent object. + * + * @since 1.21 + * + * @return Content + */ + public function makeEmptyContent() { + return new TextContent( '' ); + } +} \ No newline at end of file diff --git a/includes/content/WikitextContent.php b/includes/content/WikitextContent.php new file mode 100644 index 0000000000..8f1381fdce --- /dev/null +++ b/includes/content/WikitextContent.php @@ -0,0 +1,314 @@ +getNativeData(); + $sect = $wgParser->getSection( $text, $section, false ); + + if ( $sect === false ) { + return false; + } else { + return new WikitextContent( $sect ); + } + } + + /** + * @see Content::replaceSection() + */ + public function replaceSection( $section, Content $with, $sectionTitle = '' ) { + wfProfileIn( __METHOD__ ); + + $myModelId = $this->getModel(); + $sectionModelId = $with->getModel(); + + if ( $sectionModelId != $myModelId ) { + throw new MWException( "Incompatible content model for section: " . + "document uses $myModelId but " . + "section uses $sectionModelId." ); + } + + $oldtext = $this->getNativeData(); + $text = $with->getNativeData(); + + if ( $section === '' ) { + return $with; # XXX: copy first? + } if ( $section == 'new' ) { + # Inserting a new section + $subject = $sectionTitle ? wfMessage( 'newsectionheaderdefaultlevel' ) + ->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : ''; + if ( wfRunHooks( 'PlaceNewSection', array( $this, $oldtext, $subject, &$text ) ) ) { + $text = strlen( trim( $oldtext ) ) > 0 + ? "{$oldtext}\n\n{$subject}{$text}" + : "{$subject}{$text}"; + } + } else { + # Replacing an existing section; roll out the big guns + global $wgParser; + + $text = $wgParser->replaceSection( $oldtext, $section, $text ); + } + + $newContent = new WikitextContent( $text ); + + wfProfileOut( __METHOD__ ); + return $newContent; + } + + /** + * Returns a new WikitextContent object with the given section heading + * prepended. + * + * @param $header string + * @return Content + */ + public function addSectionHeader( $header ) { + $text = wfMessage( 'newsectionheaderdefaultlevel' ) + ->rawParams( $header )->inContentLanguage()->text(); + $text .= "\n\n"; + $text .= $this->getNativeData(); + + return new WikitextContent( $text ); + } + + /** + * Returns a Content object with pre-save transformations applied using + * Parser::preSaveTransform(). + * + * @param $title Title + * @param $user User + * @param $popts ParserOptions + * @return Content + */ + public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) { + global $wgParser; + + $text = $this->getNativeData(); + $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts ); + rtrim( $pst ); + + return ( $text === $pst ) ? $this : new WikitextContent( $pst ); + } + + /** + * Returns a Content object with preload transformations applied (or this + * object if no transformations apply). + * + * @param $title Title + * @param $popts ParserOptions + * @return Content + */ + public function preloadTransform( Title $title, ParserOptions $popts ) { + global $wgParser; + + $text = $this->getNativeData(); + $plt = $wgParser->getPreloadText( $text, $title, $popts ); + + return new WikitextContent( $plt ); + } + + /** + * Implement redirect extraction for wikitext. + * + * @return null|Title + * + * @note: migrated here from Title::newFromRedirectInternal() + * + * @see Content::getRedirectTarget + * @see AbstractContent::getRedirectTarget + */ + public function getRedirectTarget() { + global $wgMaxRedirects; + if ( $wgMaxRedirects < 1 ) { + // redirects are disabled, so quit early + return null; + } + $redir = MagicWord::get( 'redirect' ); + $text = trim( $this->getNativeData() ); + if ( $redir->matchStartAndRemove( $text ) ) { + // Extract the first link and see if it's usable + // Ensure that it really does come directly after #REDIRECT + // Some older redirects included a colon, so don't freak about that! + $m = array(); + if ( preg_match( '!^\s*:?\s*\[{2}(.*?)(?:\|.*?)?\]{2}!', $text, $m ) ) { + // Strip preceding colon used to "escape" categories, etc. + // and URL-decode links + if ( strpos( $m[1], '%' ) !== false ) { + // Match behavior of inline link parsing here; + $m[1] = rawurldecode( ltrim( $m[1], ':' ) ); + } + $title = Title::newFromText( $m[1] ); + // If the title is a redirect to bad special pages or is invalid, return null + if ( !$title instanceof Title || !$title->isValidRedirectTarget() ) { + return null; + } + return $title; + } + } + return null; + } + + /** + * @see Content::updateRedirect() + * + * This implementation replaces the first link on the page with the given new target + * if this Content object is a redirect. Otherwise, this method returns $this. + * + * @since 1.21 + * + * @param Title $target + * + * @return Content a new Content object with the updated redirect (or $this if this Content object isn't a redirect) + */ + public function updateRedirect( Title $target ) { + if ( !$this->isRedirect() ) { + return $this; + } + + # Fix the text + # Remember that redirect pages can have categories, templates, etc., + # so the regex has to be fairly general + $newText = preg_replace( '/ \[ \[ [^\]]* \] \] /x', + '[[' . $target->getFullText() . ']]', + $this->getNativeData(), 1 ); + + return new WikitextContent( $newText ); + } + + /** + * Returns true if this content is not a redirect, and this content's text + * is countable according to the criteria defined by $wgArticleCountMethod. + * + * @param $hasLinks Bool if it is known whether this content contains + * links, provide this information here, to avoid redundant parsing to + * find out. + * @param $title null|\Title + * + * @internal param \IContextSource $context context for parsing if necessary + * + * @return bool True if the content is countable + */ + public function isCountable( $hasLinks = null, Title $title = null ) { + global $wgArticleCountMethod; + + if ( $this->isRedirect( ) ) { + return false; + } + + $text = $this->getNativeData(); + + switch ( $wgArticleCountMethod ) { + case 'any': + return true; + case 'comma': + return strpos( $text, ',' ) !== false; + case 'link': + if ( $hasLinks === null ) { # not known, find out + if ( !$title ) { + $context = RequestContext::getMain(); + $title = $context->getTitle(); + } + + $po = $this->getParserOutput( $title, null, null, false ); + $links = $po->getLinks(); + $hasLinks = !empty( $links ); + } + + return $hasLinks; + } + + return false; + } + + public function getTextForSummary( $maxlength = 250 ) { + $truncatedtext = parent::getTextForSummary( $maxlength ); + + # clean up unfinished links + # XXX: make this optional? wasn't there in autosummary, but required for + # deletion summary. + $truncatedtext = preg_replace( '/\[\[([^\]]*)\]?$/', '$1', $truncatedtext ); + + return $truncatedtext; + } + + /** + * Returns a ParserOutput object resulting from parsing the content's text + * using $wgParser. + * + * @since 1.21 + * + * @param $content Content the content to render + * @param $title \Title + * @param $revId null + * @param $options null|ParserOptions + * @param $generateHtml bool + * + * @internal param \IContextSource|null $context + * @return ParserOutput representing the HTML form of the text + */ + public function getParserOutput( Title $title, + $revId = null, + ParserOptions $options = null, $generateHtml = true + ) { + global $wgParser; + + if ( !$options ) { + //NOTE: use canonical options per default to produce cacheable output + $options = $this->getContentHandler()->makeParserOptions( 'canonical' ); + } + + $po = $wgParser->parse( $this->getNativeData(), $title, $options, true, true, $revId ); + return $po; + } + + protected function getHtml() { + throw new MWException( + "getHtml() not implemented for wikitext. " + . "Use getParserOutput()->getText()." + ); + } + + /** + * @see Content::matchMagicWord() + * + * This implementation calls $word->match() on the this TextContent object's text. + * + * @param MagicWord $word + * + * @return bool whether this Content object matches the given magic word. + */ + public function matchMagicWord( MagicWord $word ) { + return $word->match( $this->getNativeData() ); + } +} diff --git a/includes/content/WikitextContentHandler.php b/includes/content/WikitextContentHandler.php new file mode 100644 index 0000000000..c6ac2ba879 --- /dev/null +++ b/includes/content/WikitextContentHandler.php @@ -0,0 +1,63 @@ +checkFormat( $format ); + + return new WikitextContent( $text ); + } + + /** + * @see ContentHandler::makeEmptyContent + * + * @return Content + */ + public function makeEmptyContent() { + return new WikitextContent( '' ); + } + + + /** + * Returns a WikitextContent object representing a redirect to the given destination page. + * + * @see ContentHandler::makeRedirectContent + * + * @param Title $destination the page to redirect to. + * + * @return Content + */ + public function makeRedirectContent( Title $destination ) { + $mwRedir = MagicWord::get( 'redirect' ); + $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $destination->getPrefixedText() . "]]\n"; + + return new WikitextContent( $redirectText ); + } + + /** + * Returns true because wikitext supports sections. + * + * @return boolean whether sections are supported. + */ + public function supportsSections() { + return true; + } + + /** + * Returns true, because wikitext supports caching using the + * ParserCache mechanism. + * + * @since 1.21 + * @return bool + */ + public function isParserCacheSupported() { + return true; + } +} \ No newline at end of file diff --git a/includes/context/ContextSource.php b/includes/context/ContextSource.php index 45bd6fffb4..d5a6d15ad9 100644 --- a/includes/context/ContextSource.php +++ b/includes/context/ContextSource.php @@ -165,6 +165,4 @@ abstract class ContextSource implements IContextSource { $args = func_get_args(); return call_user_func_array( array( $this->getContext(), 'msg' ), $args ); } - } - diff --git a/includes/context/DerivativeContext.php b/includes/context/DerivativeContext.php index 5adf3621b3..a4e327267f 100644 --- a/includes/context/DerivativeContext.php +++ b/includes/context/DerivativeContext.php @@ -222,6 +222,7 @@ class DerivativeContext extends ContextSource { * Set the Language object * * @param $l Mixed Language instance or language code + * @throws MWException * @since 1.19 */ public function setLanguage( $l ) { diff --git a/includes/context/RequestContext.php b/includes/context/RequestContext.php index 1ffbc08ce2..cd2bf556f8 100644 --- a/includes/context/RequestContext.php +++ b/includes/context/RequestContext.php @@ -148,6 +148,7 @@ class RequestContext implements IContextSource { * canUseWikiPage() to check whether this method can be called safely. * * @since 1.19 + * @throws MWException * @return WikiPage */ public function getWikiPage() { @@ -237,6 +238,7 @@ class RequestContext implements IContextSource { * Set the Language object * * @param $l Mixed Language instance or language code + * @throws MWException * @since 1.19 */ public function setLanguage( $l ) { @@ -305,7 +307,7 @@ class RequestContext implements IContextSource { public function getSkin() { if ( $this->skin === null ) { wfProfileIn( __METHOD__ . '-createskin' ); - + $skin = null; wfRunHooks( 'RequestContextCreateSkin', array( $this, &$skin ) ); @@ -395,4 +397,3 @@ class RequestContext implements IContextSource { } } - diff --git a/includes/db/CloneDatabase.php b/includes/db/CloneDatabase.php index 4e43642fae..4ff7913bd2 100644 --- a/includes/db/CloneDatabase.php +++ b/includes/db/CloneDatabase.php @@ -87,18 +87,17 @@ class CloneDatabase { * Clone the table structure */ public function cloneTableStructure() { - foreach( $this->tablesToClone as $tbl ) { # Clean up from previous aborted run. So that table escaping # works correctly across DB engines, we need to change the pre- # fix back and forth so tableName() works right. - + self::changePrefix( $this->oldTablePrefix ); $oldTableName = $this->db->tableName( $tbl, 'raw' ); - + self::changePrefix( $this->newTablePrefix ); $newTableName = $this->db->tableName( $tbl, 'raw' ); - + if( $this->dropCurrentTables && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) ) ) { $this->db->dropTable( $tbl, __METHOD__ ); wfDebug( __METHOD__." dropping {$newTableName}\n", true); @@ -108,9 +107,7 @@ class CloneDatabase { # Create new table wfDebug( __METHOD__." duplicating $oldTableName to $newTableName\n", true ); $this->db->duplicateTableStructure( $oldTableName, $newTableName, $this->useTemporaryTables ); - } - } /** diff --git a/includes/db/Database.php b/includes/db/Database.php index c082cc9811..48aac9dbd8 100644 --- a/includes/db/Database.php +++ b/includes/db/Database.php @@ -266,6 +266,14 @@ abstract class DatabaseBase implements DatabaseType { */ private $mTrxDoneWrites = false; + /** + * Record if the current transaction was started implicitly due to DBO_TRX being set. + * + * @var Bool + * @see DatabaseBase::mTrxLevel + */ + private $mTrxAutomatic = false; + # ------------------------------------------------------------------------------ # Accessors # ------------------------------------------------------------------------------ @@ -745,8 +753,14 @@ abstract class DatabaseBase implements DatabaseType { $this->mOpened = false; if ( $this->mConn ) { if ( $this->trxLevel() ) { - $this->commit( __METHOD__ ); + if ( !$this->mTrxAutomatic ) { + wfWarn( "Transaction still in progress (from {$this->mTrxFname}), " . + " performing implicit commit before closing connection!" ); + } + + $this->commit( __METHOD__, 'flush' ); } + $ret = $this->closeConnection(); $this->mConn = false; return $ret; @@ -764,6 +778,7 @@ abstract class DatabaseBase implements DatabaseType { /** * @param $error String: fallback error message, used if none is given by DB + * @throws DBConnectionError */ function reportConnectionError( $error = 'Unknown error' ) { $myError = $this->lastError(); @@ -813,9 +828,9 @@ abstract class DatabaseBase implements DatabaseType { * comment (you can use __METHOD__ or add some extra info) * @param $tempIgnore Boolean: Whether to avoid throwing an exception on errors... * maybe best to catch the exception instead? + * @throws MWException * @return boolean|ResultWrapper. true for a successful write query, ResultWrapper object * for a successful read query, or false on failure if $tempIgnore set - * @throws DBQueryError Thrown when the database returns an error of any kind */ public function query( $sql, $fname = '', $tempIgnore = false ) { $isMaster = !is_null( $this->getLBInfo( 'master' ) ); @@ -869,6 +884,7 @@ abstract class DatabaseBase implements DatabaseType { wfDebug("Implicit transaction start.\n"); } $this->begin( __METHOD__ . " ($fname)" ); + $this->mTrxAutomatic = true; } } @@ -903,6 +919,7 @@ abstract class DatabaseBase implements DatabaseType { if ( false === $ret && $this->wasErrorReissuable() ) { # Transaction is gone, like it or not $this->mTrxLevel = 0; + $this->trxIdleCallbacks = array(); // cancel wfDebug( "Connection lost, reconnecting...\n" ); if ( $this->ping() ) { @@ -942,6 +959,7 @@ abstract class DatabaseBase implements DatabaseType { * @param $sql String * @param $fname String * @param $tempIgnore Boolean + * @throws DBQueryError */ public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) { # Ignore errors during error handling to avoid infinite recursion @@ -1028,6 +1046,7 @@ abstract class DatabaseBase implements DatabaseType { * while we're doing this. * * @param $matches Array + * @throws DBUnexpectedError * @return String */ protected function fillPreparedArg( $matches ) { @@ -1743,7 +1762,7 @@ abstract class DatabaseBase implements DatabaseType { /** * Makes an encoded list of strings from an array * @param $a Array containing the data - * @param $mode int Constant + * @param int $mode Constant * - LIST_COMMA: comma separated, no field names * - LIST_AND: ANDed WHERE clause (without the WHERE). See * the documentation for $conds in DatabaseBase::select(). @@ -1751,6 +1770,7 @@ abstract class DatabaseBase implements DatabaseType { * - LIST_SET: comma separated with field names, like a SET clause * - LIST_NAMES: comma separated field names * + * @throws MWException|DBUnexpectedError * @return string */ public function makeList( $a, $mode = LIST_COMMA ) { @@ -2452,6 +2472,7 @@ abstract class DatabaseBase implements DatabaseType { * ANDed together in the WHERE clause * @param $fname String: Calling function name (use __METHOD__) for * logs/profiling + * @throws DBUnexpectedError */ public function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = 'DatabaseBase::deleteJoin' ) @@ -2517,6 +2538,7 @@ abstract class DatabaseBase implements DatabaseType { * the format. Use $conds == "*" to delete all rows * @param $fname String name of the calling function * + * @throws DBUnexpectedError * @return bool */ public function delete( $table, $conds, $fname = 'DatabaseBase::delete' ) { @@ -2615,6 +2637,7 @@ abstract class DatabaseBase implements DatabaseType { * @param $limit Integer the SQL limit * @param $offset Integer|bool the SQL offset (default false) * + * @throws DBUnexpectedError * @return string */ public function limitResult( $sql, $limit, $offset = false ) { @@ -2904,8 +2927,8 @@ abstract class DatabaseBase implements DatabaseType { * Note that when the DBO_TRX flag is set (which is usually the case for web requests, but not for maintenance scripts), * any previous database query will have started a transaction automatically. * - * Nesting of transactions is not supported. Attempts to nest transactions will cause warnings if DBO_TRX is not set - * or the extsting transaction contained write operations. + * Nesting of transactions is not supported. Attempts to nest transactions will cause a warning, unless the current + * transaction was started automatically because of the DBO_TRX flag. * * @param $fname string */ @@ -2913,21 +2936,18 @@ abstract class DatabaseBase implements DatabaseType { global $wgDebugDBTransactions; if ( $this->mTrxLevel ) { // implicit commit - if ( $this->mTrxDoneWrites || ( $this->mFlags & DBO_TRX ) === 0 ) { - // In theory, we should always warn about nesting BEGIN statements. - // However, it is sometimes hard to avoid so we only warn if: - // - // a) the transaction has done writes. This gives warnings about bad transactions - // that could cause partial writes but not about read queries seeing more - // than one DB snapshot (when in REPEATABLE-READ) due to nested BEGINs. - // - // b) the DBO_TRX flag is not set. Explicit transactions should always be properly - // started and comitted. + if ( !$this->mTrxAutomatic ) { + // We want to warn about inadvertently nested begin/commit pairs, but not about auto-committing + // implicit transactions that were started by query() because DBO_TRX was set. + wfWarn( "$fname: Transaction already in progress (from {$this->mTrxFname}), " . " performing implicit commit!" ); } else { - if ( $wgDebugDBTransactions ) { - wfDebug( "$fname: Transaction already in progress (from {$this->mTrxFname}), " . + // if the transaction was automatic and has done write operations, + // log it if $wgDebugDBTransactions is enabled. + + if ( $this->mTrxDoneWrites && $wgDebugDBTransactions ) { + wfDebug( "$fname: Automatic transaction with writes in progress (from {$this->mTrxFname}), " . " performing implicit commit!\n" ); } } @@ -2939,6 +2959,7 @@ abstract class DatabaseBase implements DatabaseType { $this->doBegin( $fname ); $this->mTrxFname = $fname; $this->mTrxDoneWrites = false; + $this->mTrxAutomatic = false; } /** @@ -2959,11 +2980,26 @@ abstract class DatabaseBase implements DatabaseType { * Nesting of transactions is not supported. * * @param $fname string - */ - final public function commit( $fname = 'DatabaseBase::commit' ) { - if ( !$this->mTrxLevel ) { - wfWarn( "$fname: No transaction to commit, something got out of sync!" ); + * @param $flush String Flush flag, set to 'flush' to disable warnings about explicitly committing implicit + * transactions, or calling commit when no transaction is in progress. + * This will silently break any ongoing explicit transaction. Only set the flush flag if you are sure + * that it is safe to ignore these warnings in your context. + */ + final public function commit( $fname = 'DatabaseBase::commit', $flush = '' ) { + if ( $flush != 'flush' ) { + if ( !$this->mTrxLevel ) { + wfWarn( "$fname: No transaction to commit, something got out of sync!" ); + } elseif( $this->mTrxAutomatic ) { + wfWarn( "$fname: Explicit commit of implicit transaction. Something may be out of sync!" ); + } + } else { + if ( !$this->mTrxLevel ) { + return; // nothing to do + } elseif( !$this->mTrxAutomatic ) { + wfWarn( "$fname: Flushing an explicit transaction, getting out of sync!" ); + } } + $this->doCommit( $fname ); $this->runOnTransactionIdleCallbacks(); } @@ -3022,6 +3058,7 @@ abstract class DatabaseBase implements DatabaseType { * @param $newName String: name of table to be created * @param $temporary Boolean: whether the new table should be temporary * @param $fname String: calling function name + * @throws MWException * @return Boolean: true if operation was successful */ public function duplicateTableStructure( $oldName, $newName, $temporary = false, @@ -3036,6 +3073,7 @@ abstract class DatabaseBase implements DatabaseType { * * @param $prefix string Only show tables with this prefix, e.g. mw_ * @param $fname String: calling function name + * @throws MWException */ function listTables( $prefix = null, $fname = 'DatabaseBase::listTables' ) { throw new MWException( 'DatabaseBase::listTables is not implemented in descendant class' ); @@ -3179,10 +3217,11 @@ abstract class DatabaseBase implements DatabaseType { * on object's error ignore settings). * * @param $filename String: File name to open - * @param $lineCallback Callback: Optional function called before reading each line - * @param $resultCallback Callback: Optional function called for each MySQL result - * @param $fname String: Calling function name or false if name should be + * @param bool|callable $lineCallback Optional function called before reading each line + * @param bool|callable $resultCallback Optional function called for each MySQL result + * @param bool|string $fname Calling function name or false if name should be * generated dynamically using $filename + * @throws MWException * @return bool|string */ public function sourceFile( diff --git a/includes/db/DatabaseIbm_db2.php b/includes/db/DatabaseIbm_db2.php index f1f6dfca58..62c90d174e 100644 --- a/includes/db/DatabaseIbm_db2.php +++ b/includes/db/DatabaseIbm_db2.php @@ -496,6 +496,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * @param $user String * @param $password String * @param $dbName String: database name + * @throws DBConnectionError * @return DatabaseBase a fresh connection */ public function open( $server, $user, $password, $dbName ) { @@ -622,6 +623,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * The DBMS-dependent part of query() * @param $sql String: SQL query. + * @throws DBUnexpectedError * @return object Result object for fetch functions or false on failure */ protected function doQuery( $sql ) { @@ -854,6 +856,9 @@ class DatabaseIbm_db2 extends DatabaseBase { * LIST_SET - comma separated with field names, like a SET clause * LIST_NAMES - comma separated field names * LIST_SET_PREPARED - like LIST_SET, except with ? tokens as values + * @param array $a + * @param int $mode + * @throws DBUnexpectedError * @return string */ function makeList( $a, $mode = LIST_COMMA ) { @@ -891,7 +896,8 @@ class DatabaseIbm_db2 extends DatabaseBase { * * @param $sql string SQL query we will append the limit too * @param $limit integer the SQL limit - * @param $offset integer the SQL offset (default false) + * @param bool|int $offset SQL offset (default false) + * @throws DBUnexpectedError * @return string */ public function limitResult( $sql, $limit, $offset=false ) { @@ -1173,6 +1179,10 @@ class DatabaseIbm_db2 extends DatabaseBase { * DELETE query wrapper * * Use $conds == "*" to delete all rows + * @param array $table + * @param array|string $conds + * @param string $fname + * @throws DBUnexpectedError * @return bool|\ResultWrapper */ public function delete( $table, $conds, $fname = 'DatabaseIbm_db2::delete' ) { @@ -1247,6 +1257,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Frees memory associated with a statement resource * @param $res Object: statement resource to free + * @throws DBUnexpectedError * @return Boolean success or failure */ public function freeResult( $res ) { diff --git a/includes/db/DatabaseMssql.php b/includes/db/DatabaseMssql.php index 914ab4089a..ff67f47273 100644 --- a/includes/db/DatabaseMssql.php +++ b/includes/db/DatabaseMssql.php @@ -61,6 +61,11 @@ class DatabaseMssql extends DatabaseBase { /** * Usually aborts on failure + * @param String $server + * @param String $user + * @param String $password + * @param String $dbName + * @throws DBConnectionError * @return bool|DatabaseBase|null */ function open( $server, $user, $password, $dbName ) { @@ -380,6 +385,11 @@ class DatabaseMssql extends DatabaseBase { * * Usually aborts on failure * If errors are explicitly ignored, returns success + * @param String $table + * @param Array $arrToInsert + * @param string $fname + * @param array $options + * @throws DBQueryError * @return bool */ function insert( $table, $arrToInsert, $fname = 'DatabaseMssql::insert', $options = array() ) { @@ -510,6 +520,14 @@ class DatabaseMssql extends DatabaseBase { * Source items may be literals rather than field names, but strings should be quoted with Database::addQuotes() * $conds may be "*" to copy the whole table * srcTable may be an array of tables. + * @param string $destTable + * @param array|string $srcTable + * @param array $varMap + * @param array $conds + * @param string $fname + * @param array $insertOptions + * @param array $selectOptions + * @throws DBQueryError * @return null|\ResultWrapper */ function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = 'DatabaseMssql::insertSelect', @@ -720,6 +738,8 @@ class DatabaseMssql extends DatabaseBase { * Escapes a identifier for use inm SQL. * Throws an exception if it is invalid. * Reference: http://msdn.microsoft.com/en-us/library/aa224033%28v=SQL.80%29.aspx + * @param $identifier + * @throws MWException * @return string */ private function escapeIdentifier( $identifier ) { diff --git a/includes/db/DatabaseMysql.php b/includes/db/DatabaseMysql.php index 7f389da904..b509302fc5 100644 --- a/includes/db/DatabaseMysql.php +++ b/includes/db/DatabaseMysql.php @@ -805,7 +805,8 @@ class DatabaseMysql extends DatabaseBase { * @param $delVar string * @param $joinVar string * @param $conds array|string - * @param $fname bool + * @param bool|string $fname bool + * @throws DBUnexpectedError * @return bool|ResultWrapper */ function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = 'DatabaseBase::deleteJoin' ) { @@ -951,13 +952,6 @@ class DatabaseMysql extends DatabaseBase { } -/** - * Legacy support: Database == DatabaseMysql - * - * @deprecated in 1.16 - */ -class Database extends DatabaseMysql {} - /** * Utility class. * @ingroup Database diff --git a/includes/db/DatabaseOracle.php b/includes/db/DatabaseOracle.php index 7d8884fb6b..aa4da0fedf 100644 --- a/includes/db/DatabaseOracle.php +++ b/includes/db/DatabaseOracle.php @@ -241,6 +241,11 @@ class DatabaseOracle extends DatabaseBase { /** * Usually aborts on failure + * @param string $server + * @param string $user + * @param string $password + * @param string $dbName + * @throws DBConnectionError * @return DatabaseBase|null */ function open( $server, $user, $password, $dbName ) { diff --git a/includes/db/DatabasePostgres.php b/includes/db/DatabasePostgres.php index 457bf384a8..419488e595 100644 --- a/includes/db/DatabasePostgres.php +++ b/includes/db/DatabasePostgres.php @@ -325,6 +325,11 @@ class DatabasePostgres extends DatabaseBase { /** * Usually aborts on failure + * @param string $server + * @param string $user + * @param string $password + * @param string $dbName + * @throws DBConnectionError * @return DatabaseBase|null */ function open( $server, $user, $password, $dbName ) { diff --git a/includes/db/DatabaseSqlite.php b/includes/db/DatabaseSqlite.php index f1e553d736..1125d4f37a 100644 --- a/includes/db/DatabaseSqlite.php +++ b/includes/db/DatabaseSqlite.php @@ -79,11 +79,12 @@ class DatabaseSqlite extends DatabaseBase { /** Open an SQLite database and return a resource handle to it * NOTE: only $dbName is used, the other parameters are irrelevant for SQLite databases * - * @param $server - * @param $user - * @param $pass - * @param $dbName + * @param string $server + * @param string $user + * @param string $pass + * @param string $dbName * + * @throws DBConnectionError * @return PDO */ function open( $server, $user, $pass, $dbName ) { @@ -103,6 +104,7 @@ class DatabaseSqlite extends DatabaseBase { * * @param $fileName string * + * @throws DBConnectionError * @return PDO|bool SQL connection or false if failed */ function openFile( $fileName ) { diff --git a/includes/db/IORMTable.php b/includes/db/IORMTable.php index 99413f99b9..9693789f02 100644 --- a/includes/db/IORMTable.php +++ b/includes/db/IORMTable.php @@ -298,6 +298,72 @@ interface IORMTable { */ public function setReadDb( $db ); + + /** + * Get the ID of the any foreign wiki to use as a target for database operations + * + * @since 1.20 + * + * @return String|bool The target wiki, in a form that LBFactory understands (or false if the local wiki is used) + */ + public function getTargetWiki(); + + /** + * Set the ID of the any foreign wiki to use as a target for database operations + * + * @param String|bool $wiki The target wiki, in a form that LBFactory understands (or false if the local wiki shall be used) + * + * @since 1.20 + */ + public function setTargetWiki( $wiki ); + + /** + * Get the database type used for read operations. + * This is to be used instead of wfGetDB. + * + * @see LoadBalancer::getConnection + * + * @since 1.20 + * + * @return DatabaseBase The database object + */ + public function getReadDbConnection(); + + /** + * Get the database type used for read operations. + * This is to be used instead of wfGetDB. + * + * @see LoadBalancer::getConnection + * + * @since 1.20 + * + * @return DatabaseBase The database object + */ + public function getWriteDbConnection(); + + /** + * Get the database type used for read operations. + * + * @see wfGetLB + * + * @since 1.20 + * + * @return LoadBalancer The database load balancer object + */ + public function getLoadBalancer(); + + /** + * Releases the lease on the given database connection. This is useful mainly + * for connections to a foreign wiki. It does nothing for connections to the local wiki. + * + * @see LoadBalancer::reuseConnection + * + * @param DatabaseBase $db the database + * + * @since 1.20 + */ + public function releaseConnection( DatabaseBase $db ); + /** * Update the records matching the provided conditions by * setting the fields that are keys in the $values param to diff --git a/includes/db/LBFactory_Multi.php b/includes/db/LBFactory_Multi.php index 6008813ba1..9b468a7f7f 100644 --- a/includes/db/LBFactory_Multi.php +++ b/includes/db/LBFactory_Multi.php @@ -70,6 +70,7 @@ class LBFactory_Multi extends LBFactory { /** * @param $conf array + * @throws MWException */ function __construct( $conf ) { $this->chronProt = new ChronologyProtector; @@ -153,8 +154,9 @@ class LBFactory_Multi extends LBFactory { } /** - * @param $cluster - * @param $wiki + * @param String $cluster + * @param bool $wiki + * @throws MWException * @return LoadBalancer */ function newExternalLB( $cluster, $wiki = false ) { diff --git a/includes/db/LoadBalancer.php b/includes/db/LoadBalancer.php index 195d4ec417..46d24fc0d4 100644 --- a/includes/db/LoadBalancer.php +++ b/includes/db/LoadBalancer.php @@ -41,6 +41,7 @@ class LoadBalancer { * servers Required. Array of server info structures. * masterWaitTimeout Replication lag wait timeout * loadMonitor Name of a class used to fetch server lag and load. + * @throws MWException */ function __construct( $params ) { if ( !isset( $params['servers'] ) ) { @@ -197,6 +198,7 @@ class LoadBalancer { * Side effect: opens connections to databases * @param $group bool * @param $wiki bool + * @throws MWException * @return bool|int|string */ function getReaderIndex( $group = false, $wiki = false ) { @@ -452,8 +454,9 @@ class LoadBalancer { * * @param $i Integer: server index * @param $groups Array: query groups - * @param $wiki String: wiki ID + * @param bool|string $wiki Wiki ID * + * @throws MWException * @return DatabaseBase */ public function &getConnection( $i, $groups = array(), $wiki = false ) { @@ -520,6 +523,7 @@ class LoadBalancer { * the same number of times as getConnection() to work. * * @param DatabaseBase $conn + * @throws MWException */ public function reuseConnection( $conn ) { $serverIndex = $conn->getLBInfo('serverIndex'); @@ -692,6 +696,7 @@ class LoadBalancer { * * @param $server * @param $dbNameOverride bool + * @throws MWException * @return DatabaseBase */ function reallyOpenConnection( $server, $dbNameOverride = false ) { @@ -902,7 +907,9 @@ class LoadBalancer { foreach ( $this->mConns as $conns2 ) { foreach ( $conns2 as $conns3 ) { foreach ( $conns3 as $conn ) { - $conn->commit( __METHOD__ ); + if ( $conn->trxLevel() ) { + $conn->commit( __METHOD__, 'flush' ); + } } } } @@ -920,7 +927,7 @@ class LoadBalancer { } foreach ( $conns2[$masterIndex] as $conn ) { if ( $conn->trxLevel() && $conn->doneWrites() ) { - $conn->commit( __METHOD__ ); + $conn->commit( __METHOD__, 'flush' ); } } } diff --git a/includes/db/ORMTable.php b/includes/db/ORMTable.php index a77074ffca..e3a3434005 100644 --- a/includes/db/ORMTable.php +++ b/includes/db/ORMTable.php @@ -47,7 +47,7 @@ abstract class ORMTable implements IORMTable { protected static $instanceCache = array(); /** - * The database connection to use for read operations. + * ID of the database connection to use for read operations. * Can be changed via @see setReadDb. * * @since 1.20 @@ -55,6 +55,15 @@ abstract class ORMTable implements IORMTable { */ protected $readDb = DB_SLAVE; + /** + * The ID of any foreign wiki to use as a target for database operations, + * or false to use the local wiki. + * + * @since 1.20 + * @var String|bool + */ + protected $wiki = false; + /** * Returns a list of default field values. * field name => field value @@ -145,13 +154,17 @@ abstract class ORMTable implements IORMTable { $fields = (array)$fields; } - return wfGetDB( $this->getReadDb() )->select( + $dbr = $this->getReadDbConnection(); + $result = $dbr->select( $this->getName(), $this->getPrefixedFields( $fields ), $this->getPrefixedValues( $conditions ), is_null( $functionName ) ? __METHOD__ : $functionName, $options ); + + $this->releaseConnection( $dbr ); + return $result; } /** @@ -241,15 +254,18 @@ abstract class ORMTable implements IORMTable { */ public function rawSelectRow( array $fields, array $conditions = array(), array $options = array(), $functionName = null ) { - $dbr = wfGetDB( $this->getReadDb() ); + $dbr = $this->getReadDbConnection(); - return $dbr->selectRow( + $result = $dbr->selectRow( $this->getName(), $fields, $conditions, is_null( $functionName ) ? __METHOD__ : $functionName, $options ); + + $this->releaseConnection( $dbr ); + return $result; } /** @@ -327,13 +343,18 @@ abstract class ORMTable implements IORMTable { * @return boolean Success indicator */ public function delete( array $conditions, $functionName = null ) { - return wfGetDB( DB_MASTER )->delete( + $dbw = $this->getWriteDbConnection(); + + $result = $dbw->delete( $this->getName(), $conditions === array() ? '*' : $this->getPrefixedValues( $conditions ), $functionName ) !== false; // DatabaseBase::delete does not always return true for success as documented... + + $this->releaseConnection( $dbw ); + return $result; } - + /** * Get API parameters for the fields supported by this object. * @@ -397,7 +418,7 @@ abstract class ORMTable implements IORMTable { } /** - * Get the database type used for read operations. + * Get the database ID used for read operations. * * @since 1.20 * @@ -408,7 +429,7 @@ abstract class ORMTable implements IORMTable { } /** - * Set the database type to use for read operations. + * Set the database ID to use for read operations, use DB_XXX constants or an index to the load balancer setup. * * @param integer $db * @@ -418,6 +439,86 @@ abstract class ORMTable implements IORMTable { $this->readDb = $db; } + /** + * Get the ID of the any foreign wiki to use as a target for database operations + * + * @since 1.20 + * + * @return String|bool The target wiki, in a form that LBFactory understands (or false if the local wiki is used) + */ + public function getTargetWiki() { + return $this->wiki; + } + + /** + * Set the ID of the any foreign wiki to use as a target for database operations + * + * @param String|bool $wiki The target wiki, in a form that LBFactory understands (or false if the local wiki shall be used) + * + * @since 1.20 + */ + public function setTargetWiki( $wiki ) { + $this->wiki = $wiki; + } + + /** + * Get the database type used for read operations. + * This is to be used instead of wfGetDB. + * + * @see LoadBalancer::getConnection + * + * @since 1.20 + * + * @return DatabaseBase The database object + */ + public function getReadDbConnection() { + return $this->getLoadBalancer()->getConnection( $this->getReadDb(), array(), $this->getTargetWiki() ); + } + + /** + * Get the database type used for read operations. + * This is to be used instead of wfGetDB. + * + * @see LoadBalancer::getConnection + * + * @since 1.20 + * + * @return DatabaseBase The database object + */ + public function getWriteDbConnection() { + return $this->getLoadBalancer()->getConnection( DB_MASTER, array(), $this->getTargetWiki() ); + } + + /** + * Get the database type used for read operations. + * + * @see wfGetLB + * + * @since 1.20 + * + * @return LoadBalancer The database load balancer object + */ + public function getLoadBalancer() { + return wfGetLB( $this->getTargetWiki() ); + } + + /** + * Releases the lease on the given database connection. This is useful mainly + * for connections to a foreign wiki. It does nothing for connections to the local wiki. + * + * @see LoadBalancer::reuseConnection + * + * @param DatabaseBase $db the database + * + * @since 1.20 + */ + public function releaseConnection( DatabaseBase $db ) { + if ( $this->wiki !== false ) { + // recycle connection to foreign wiki + $this->getLoadBalancer()->reuseConnection( $db ); + } + } + /** * Update the records matching the provided conditions by * setting the fields that are keys in the $values param to @@ -431,14 +532,17 @@ abstract class ORMTable implements IORMTable { * @return boolean Success indicator */ public function update( array $values, array $conditions = array() ) { - $dbw = wfGetDB( DB_MASTER ); + $dbw = $this->getWriteDbConnection(); - return $dbw->update( + $result = $dbw->update( $this->getName(), $this->getPrefixedValues( $values ), $this->getPrefixedValues( $conditions ), __METHOD__ ) !== false; // DatabaseBase::update does not always return true for success as documented... + + $this->releaseConnection( $dbw ); + return $result; } /** @@ -450,6 +554,7 @@ abstract class ORMTable implements IORMTable { * @param array $conditions */ public function updateSummaryFields( $summaryFields = null, array $conditions = array() ) { + $slave = $this->getReadDb(); $this->setReadDb( DB_MASTER ); /** @@ -461,7 +566,7 @@ abstract class ORMTable implements IORMTable { $item->save(); } - $this->setReadDb( DB_SLAVE ); + $this->setReadDb( $slave ); } /** diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index c7156fb2f1..f3dc5a3a00 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -38,7 +38,7 @@ class DifferenceEngine extends ContextSource { * @private */ var $mOldid, $mNewid; - var $mOldtext, $mNewtext; + var $mOldContent, $mNewContent; protected $mDiffLang; /** @@ -224,6 +224,10 @@ class DifferenceEngine extends ContextSource { # we'll use the application/x-external-editor interface to call # an external diff tool like kompare, kdiff3, etc. if ( ExternalEdit::useExternalEngine( $this->getContext(), 'diff' ) ) { + //TODO: come up with a good solution for non-text content here. + // at least, the content format needs to be passed to the client somehow. + // Currently, action=raw will just fail for non-text content. + $urls = array( 'File' => array( 'Extension' => 'wiki', 'URL' => # This should be mOldPage, but it may not be set, see below. @@ -510,19 +514,21 @@ class DifferenceEngine extends ContextSource { $out->setRevisionTimestamp( $this->mNewRev->getTimestamp() ); $out->setArticleFlag( true ); + // NOTE: only needed for B/C: custom rendering of JS/CSS via hook if ( $this->mNewPage->isCssJsSubpage() || $this->mNewPage->isCssOrJsPage() ) { // Stolen from Article::view --AG 2007-10-11 // Give hooks a chance to customise the output // @TODO: standardize this crap into one function - if ( wfRunHooks( 'ShowRawCssJs', array( $this->mNewtext, $this->mNewPage, $out ) ) ) { - // Wrap the whole lot in a
and don't parse - $m = array(); - preg_match( '!\.(css|js)$!u', $this->mNewPage->getText(), $m ); - $out->addHTML( "', 'config-show-table-status' => 'SHOW TABLE STATUSã¯ã¨ãªã¼ã失æãã¾ããï¼', 'config-unknown-collation' => "'''è¦å:''' ãã¼ã¿ãã¼ã¹ã¯èªèãããªãç §åã使ç¨ãã¦ãã¾ãã", 'config-db-web-account' => 'ã¦ã§ãã¢ã¯ã»ã¹ã®ããã®ãã¼ã¿ãã¼ã¹ã¢ã«ã¦ã³ã', - 'config-db-web-help' => 'ã¦ã£ãã®å æ¥ã®æä½ä¸ãã¦ã§ããµã¼ãã¼ããã¼ã¿ã¼ãã¼ã¹ãµã¼ãã¼ã«æ¥ç¶ã§ããããã«ãã¦ã¼ã¶åã¨ãã¹ã¯ã¼ããé¸æãã¦ãã ããã', - 'config-db-web-account-same' => 'ã¤ã³ã¹ãã¼ã«ã®ããã«åãã¢ã«ã¦ã³ãã使ç¨ãã¦ãã ãã', - 'config-db-web-create' => 'æ¢ã«åå¨ãã¦ããªãã®ã§ããã°ãã¢ã«ã¦ã³ããä½æãã¦ãã ãã', + 'config-db-web-help' => 'ã¦ã£ãã®é常ã®æä½ã®éã«ãã¦ã§ã ãµã¼ãã¼ããã¼ã¿ãã¼ã¹ ãµã¼ãã¼ã«æ¥ç¶ã§ããããã«ãã¦ã¼ã¶ã¼åã¨ãã¹ã¯ã¼ããæå®ãã¦ãã ããã', + 'config-db-web-account-same' => 'ã¤ã³ã¹ãã¼ã«ä½æ¥ã¨åãã¢ã«ã¦ã³ãã使ç¨ãã', + 'config-db-web-create' => 'ã¢ã«ã¦ã³ããåå¨ããªãå ´åã¯ä½æãã', 'config-db-web-no-create-privs' => 'ããªããã¤ã³ã¹ãã¼ã«ã®ããã«å®ç¾©ããã¢ã«ã¦ã³ãã¯ãã¢ã«ã¦ã³ãä½æã®ããã®ç¹æ¨©ã¨ãã¦ã¯ä¸å åã§ãã ããªããããã§æå®ããã¢ã«ã¦ã³ãã¯æ¢ã«åå¨ãã¦ããå¿ è¦ãããã¾ãã', - 'config-mysql-engine' => 'ã¹ãã¬ã¼ã¸ã¨ã³ã¸ã³:', + 'config-mysql-engine' => 'ã¹ãã¬ã¼ã¸ ã¨ã³ã¸ã³:', 'config-mysql-innodb' => 'InnoDB', 'config-mysql-myisam' => 'MyISAM', 'config-mysql-engine-help' => "'''InnoDB'''ã¯ã並è¡å¦çã®ãµãã¼ãã«åªãã¦ããã®ã§ãã»ã¨ãã©ã®å ´åã«ããã¦æè¯ã®é¸æè¢ã§ãã @@ -9807,29 +9908,29 @@ chmod a+w $3', 'config-mysql-charset' => 'ãã¼ã¿ãã¼ã¹ã®æåã»ããï¼', 'config-mysql-binary' => 'ãã¤ããª', 'config-mysql-utf8' => 'UTF-8', - 'config-mysql-charset-help' => "'''ãã¤ããªã¼å½¢å¼'''ã§ã¯ãMediaWikiã¯ãUTF-8ããã¹ããããã¼ã¿ãã¼ã¹ã®ãã¤ããªã¼ãã£ã¼ã«ãã«æ ¼ç´ãã¾ãã -ããã¯ãMySQLã®UTF-8å½¢å¼ããå¹ççã§ãUnicodeæåã®å ¨ç¯å²ãå©ç¨ã§ããããã«ãªãã¾ãã + 'config-mysql-charset-help' => "'''ãã¤ã㪠ã¢ã¼ã'''ã§ã¯ãMediaWiki ã¯ãUTF-8 ããã¹ãããã¼ã¿ãã¼ã¹ã®ãã¤ã㪠ãã£ã¼ã«ãã«æ ¼ç´ãã¾ãã +ããã¯ãMySQL ã® UTF-8 ã¢ã¼ãããå¹ççã§ãUnicode æåã®å ¨ç¯å²ãå©ç¨ã§ããããã«ãªãã¾ãã -'''UTF-8å½¢å¼'''ã§ã¯ãMySQLã¯ããã¼ã¿å ã§ã©ã®æåéåã使ç¨ãã¦ããããç¥ã£ã¦ãã¦ãããã«å¯¾ãã¦é©åãªæ示ã¨å¤æãããã§ããããã -[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 åºæ¬å¤è¨èªé¢]ã®å¤ã«ããæåãæ ¼ç´ã§ããããã«ã¯ãªãã¾ããã", - 'config-site-name' => 'ã¦ã£ãã®ååï¼', +'''UTF-8 ã¢ã¼ã'''ã§ã¯ãMySQL ã¯ããã¼ã¿å ã§ä½¿ç¨ãã¦ããæåéåãç¥ã£ã¦ãããããé©åã«è¡¨ç¾ãå¤æãã§ãã¾ããã +[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 åºæ¬å¤è¨èªé¢]ã®å¤ã«ããæåãæ ¼ç´ã§ãã¾ããã", + 'config-site-name' => 'ã¦ã£ãå:', 'config-site-name-help' => 'ãã®äºè±¡ã¯ãã©ã¦ã¶ã¼ã®ã¿ã¤ãã«ãã¼ã¨ä»ã®ãã¾ãã¾ãªå ´æã«ç¾ããã', 'config-site-name-blank' => 'ãµã¤ãåãå ¥åãã¦ãã ããã', - 'config-project-namespace' => 'ããã¸ã§ã¯ãåå空éï¼', + 'config-project-namespace' => 'ããã¸ã§ã¯ãåå空é:', 'config-ns-generic' => 'ããã¸ã§ã¯ã', - 'config-ns-site-name' => 'ã¦ã£ãåã¨åãï¼$1', - 'config-ns-other' => 'ãã®ä»(æå®ãã¦ãã ãã)', + 'config-ns-site-name' => 'ã¦ã£ãåã¨åã: $1', + 'config-ns-other' => 'ãã®ä» (æå®ãã¦ãã ãã)', 'config-ns-other-default' => 'ãã¤ã¦ã£ã', 'config-project-namespace-help' => "ã¦ã£ãããã£ã¢ã®ä¾ã«å¾ããå¤ãã®ã¦ã£ãã¯ãã³ã³ãã³ãã®ãã¼ã¸ã¨ã¯åé¢ããããªã·ã¼ãã¼ã¸ãã'''ããã¸ã§ã¯ãã®åå空é'''ãã«æã£ã¦ãã¾ãã ãã®åå空éã®ãã¼ã¸ã®ã¿ã¤ãã«ã¯ãã¹ã¦ãããæ¥é è¾ã§å§ã¾ãã¾ãããããããã§æå®ãããã¨ãã§ãã¾ãã -ãã®æ¥é è¾ã¯ã¦ã£ãã®ååã«ç±æ¥ããã®ãä¼çµ±çã§ãããã#ããã:ãã®ãããªåºåãè¨å·ãå«ãããã¨ã¯ã§ãã¾ããã", +ãã®æ¥é è¾ã¯ã¦ã£ãã®ååã«ç±æ¥ããã®ãä¼çµ±çã§ãããã#ããã:ãã®ãããªåºåãæåãå«ãããã¨ã¯ã§ãã¾ããã", 'config-ns-invalid' => '"\n" ); - $out->addHTML( htmlspecialchars( $this->mNewtext ) ); - $out->addHTML( "\n\n" ); + if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', array( $this->mNewContent, $this->mNewPage, $out ) ) ) { + // NOTE: deprecated hook, B/C only + // use the content object's own rendering + $po = $this->mNewRev->getContent()->getParserOutput( $this->mNewRev->getTitle(), $this->mNewRev->getId() ); + $out->addHTML( $po->getText() ); } - } elseif ( !wfRunHooks( 'ArticleViewCustom', array( $this->mNewtext, $this->mNewPage, $out ) ) ) { + } elseif( !wfRunHooks( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) { + // Handled by extension + } elseif( !ContentHandler::runLegacyHooks( 'ArticleViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) { + // NOTE: deprecated hook, B/C only // Handled by extension } else { // Normal page @@ -536,16 +542,21 @@ class DifferenceEngine extends ContextSource { $wikiPage = WikiPage::factory( $this->mNewPage ); } - $parserOptions = $wikiPage->makeParserOptions( $this->getContext() ); + $parserOutput = $this->getParserOutput( $wikiPage, $this->mNewRev ); - if ( !$this->mNewRev->isCurrent() ) { - $parserOptions->setEditSection( false ); - } + # Also try to load it as a redirect + $rt = $this->mNewContent->getRedirectTarget(); - $parserOutput = $wikiPage->getParserOutput( $parserOptions, $this->mNewid ); + if ( $rt ) { + $article = Article::newFromTitle( $this->mNewPage, $this->getContext() ); + $out->addHTML( $article->viewRedirect( $rt ) ); - # WikiPage::getParserOutput() should not return false, but just in case - if( $parserOutput ) { + # WikiPage::getParserOutput() should not return false, but just in case + if ( $parserOutput ) { + # Show categories etc. + $out->addParserOutputNoText( $parserOutput ); + } + } else if ( $parserOutput ) { $out->addParserOutput( $parserOutput ); } } @@ -556,6 +567,17 @@ class DifferenceEngine extends ContextSource { wfProfileOut( __METHOD__ ); } + protected function getParserOutput( WikiPage $page, Revision $rev ) { + $parserOptions = $page->makeParserOptions( $this->getContext() ); + + if ( !$rev->isCurrent() || !$rev->getTitle()->quickUserCan( "edit" ) ) { + $parserOptions->setEditSection( false ); + } + + $parserOutput = $page->getParserOutput( $parserOptions, $rev->getId() ); + return $parserOutput; + } + /** * Get the diff text, send it to the OutputPage object * Returns false if the diff could not be generated, otherwise returns true @@ -652,7 +674,7 @@ class DifferenceEngine extends ContextSource { return false; } - $difftext = $this->generateDiffBody( $this->mOldtext, $this->mNewtext ); + $difftext = $this->generateContentDiffBody( $this->mOldContent, $this->mNewContent ); // Save to cache for 7 days if ( !wfRunHooks( 'AbortDiffCache', array( &$this ) ) ) { @@ -689,14 +711,63 @@ class DifferenceEngine extends ContextSource { } } + /** + * Generate a diff, no caching. + * + * This implementation uses generateTextDiffBody() to generate a diff based on the default + * serialization of the given Content objects. This will fail if $old or $new are not + * instances of TextContent. + * + * Subclasses may override this to provide a different rendering for the diff, + * perhaps taking advantage of the content's native form. This is required for all content + * models that are not text based. + * + * @param $old Content: old content + * @param $new Content: new content + * + * @since 1.21 + * @throws MWException if $old or $new are not instances of TextContent. + */ + function generateContentDiffBody( Content $old, Content $new ) { + if ( !( $old instanceof TextContent ) ) { + throw new MWException( "Diff not implemented for " . get_class( $old ) . "; " + . "override generateContentDiffBody to fix this." ); + } + + if ( !( $new instanceof TextContent ) ) { + throw new MWException( "Diff not implemented for " . get_class( $new ) . "; " + . "override generateContentDiffBody to fix this." ); + } + + $otext = $old->serialize(); + $ntext = $new->serialize(); + + return $this->generateTextDiffBody( $otext, $ntext ); + } + /** * Generate a diff, no caching * * @param $otext String: old text, must be already segmented * @param $ntext String: new text, must be already segmented - * @return bool|string + * @deprecated since 1.21, use generateContentDiffBody() instead! */ function generateDiffBody( $otext, $ntext ) { + ContentHandler::deprecated( __METHOD__, "1.21" ); + + return $this->generateTextDiffBody( $otext, $ntext ); + } + + /** + * Generate a diff, no caching + * + * @todo move this to TextDifferenceEngine, make DifferenceEngine abstract. At some point. + * + * @param $otext String: old text, must be already segmented + * @param $ntext String: new text, must be already segmented + * @return bool|string + */ + function generateTextDiffBody( $otext, $ntext ) { global $wgExternalDiffEngine, $wgContLang; wfProfileIn( __METHOD__ ); @@ -859,7 +930,7 @@ class DifferenceEngine extends ContextSource { * the visibility of the revision and a link to edit the page. * @return String HTML fragment */ - private function getRevisionHeader( Revision $rev, $complete = '' ) { + protected function getRevisionHeader( Revision $rev, $complete = '' ) { $lang = $this->getLanguage(); $user = $this->getUser(); $revtimestamp = $rev->getTimestamp(); @@ -951,10 +1022,25 @@ class DifferenceEngine extends ContextSource { /** * Use specified text instead of loading from the database + * @deprecated since 1.21, use setContent() instead. */ function setText( $oldText, $newText ) { - $this->mOldtext = $oldText; - $this->mNewtext = $newText; + ContentHandler::deprecated( __METHOD__, "1.21" ); + + $oldContent = ContentHandler::makeContent( $oldText, $this->getTitle() ); + $newContent = ContentHandler::makeContent( $newText, $this->getTitle() ); + + $this->setContent( $oldContent, $newContent ); + } + + /** + * Use specified text instead of loading from the database + * @since 1.21 + */ + function setContent( Content $oldContent, Content $newContent ) { + $this->mOldContent = $oldContent; + $this->mNewContent = $newContent; + $this->mTextLoaded = 2; $this->mRevisionsLoaded = true; } @@ -1082,14 +1168,14 @@ class DifferenceEngine extends ContextSource { return false; } if ( $this->mOldRev ) { - $this->mOldtext = $this->mOldRev->getText( Revision::FOR_THIS_USER ); - if ( $this->mOldtext === false ) { + $this->mOldContent = $this->mOldRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ); + if ( $this->mOldContent === false ) { return false; } } if ( $this->mNewRev ) { - $this->mNewtext = $this->mNewRev->getText( Revision::FOR_THIS_USER ); - if ( $this->mNewtext === false ) { + $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ); + if ( $this->mNewContent === false ) { return false; } } @@ -1110,7 +1196,7 @@ class DifferenceEngine extends ContextSource { if ( !$this->loadRevisionData() ) { return false; } - $this->mNewtext = $this->mNewRev->getText( Revision::FOR_THIS_USER ); + $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ); return true; } } diff --git a/includes/extauth/MediaWiki.php b/includes/extauth/MediaWiki.php index 0a5efae6ee..c7f6a20417 100644 --- a/includes/extauth/MediaWiki.php +++ b/includes/extauth/MediaWiki.php @@ -36,15 +36,15 @@ * 'DBprefix' => '', * ); * - * All fields must be present. These mean the same things as $wgDBtype, - * $wgDBserver, etc. This implementation is quite crude; it could easily - * support multiple database servers, for instance, and memcached, and it - * probably has bugs. Kind of hard to reuse code when things might rely on who + * All fields must be present. These mean the same things as $wgDBtype, + * $wgDBserver, etc. This implementation is quite crude; it could easily + * support multiple database servers, for instance, and memcached, and it + * probably has bugs. Kind of hard to reuse code when things might rely on who * knows what configuration globals. * - * If either wiki uses the UserComparePasswords hook, password authentication - * might fail unexpectedly unless they both do the exact same validation. - * There may be other corner cases like this where this will fail, but it + * If either wiki uses the UserComparePasswords hook, password authentication + * might fail unexpectedly unless they both do the exact same validation. + * There may be other corner cases like this where this will fail, but it * should be unlikely. * * @ingroup ExternalUser @@ -62,8 +62,8 @@ class ExternalUser_MediaWiki extends ExternalUser { * @return bool */ protected function initFromName( $name ) { - # We might not need the 'usable' bit, but let's be safe. Theoretically - # this might return wrong results for old versions, but it's probably + # We might not need the 'usable' bit, but let's be safe. Theoretically + # this might return wrong results for old versions, but it's probably # good enough. $name = User::getCanonicalName( $name, 'usable' ); @@ -130,14 +130,14 @@ class ExternalUser_MediaWiki extends ExternalUser { } public function authenticate( $password ) { - # This might be wrong if anyone actually uses the UserComparePasswords hook + # This might be wrong if anyone actually uses the UserComparePasswords hook # (on either end), so don't use this if you those are incompatible. return User::comparePasswords( $this->mRow->user_password, $password, - $this->mRow->user_id ); + $this->mRow->user_id ); } public function getPref( $pref ) { - # @todo FIXME: Return other prefs too. Lots of global-riddled code that does + # @todo FIXME: Return other prefs too. Lots of global-riddled code that does # this normally. if ( $pref === 'emailaddress' && $this->row->user_email_authenticated !== null ) { diff --git a/includes/filebackend/FSFile.php b/includes/filebackend/FSFile.php index e07c99d42d..fda356e0a7 100644 --- a/includes/filebackend/FSFile.php +++ b/includes/filebackend/FSFile.php @@ -86,8 +86,8 @@ class FSFile { /** * Guess the MIME type from the file contents alone - * - * @return string + * + * @return string */ public function getMimeType() { return MimeMagic::singleton()->guessMimeType( $this->path, false ); @@ -211,7 +211,7 @@ class FSFile { /** * Get the final file extension from a file system path - * + * * @param $path string * @return string */ diff --git a/includes/filebackend/FSFileBackend.php b/includes/filebackend/FSFileBackend.php index 092291921f..dd43f82921 100644 --- a/includes/filebackend/FSFileBackend.php +++ b/includes/filebackend/FSFileBackend.php @@ -670,8 +670,8 @@ class FSFileBackend extends FileBackendStore { foreach ( $params['srcs'] as $src ) { $source = $this->resolveToFSPath( $src ); - if ( $source === null ) { - $fsFiles[$src] = null; // invalid path + if ( $source === null || !is_file( $source ) ) { + $fsFiles[$src] = null; // invalid path or file does not exist } else { $fsFiles[$src] = new FSFile( $source ); } @@ -700,7 +700,9 @@ class FSFileBackend extends FileBackendStore { } else { $tmpPath = $tmpFile->getPath(); // Copy the source file over the temp file + wfSuppressWarnings(); $ok = copy( $source, $tmpPath ); + wfRestoreWarnings(); if ( !$ok ) { $tmpFiles[$src] = null; } else { diff --git a/includes/filebackend/FileBackend.php b/includes/filebackend/FileBackend.php index c10d1057a5..0ef4cd0131 100644 --- a/includes/filebackend/FileBackend.php +++ b/includes/filebackend/FileBackend.php @@ -1073,6 +1073,17 @@ abstract class FileBackend { return "mwstore://{$this->name}"; } + /** + * Get the storage path for the given container for this backend + * + * @param $container string Container name + * @return string Storage path + * @since 1.21 + */ + final public function getContainerStoragePath( $container ) { + return $this->getRootStoragePath() . "/{$container}"; + } + /** * Get the file journal object for this backend * @@ -1177,6 +1188,7 @@ abstract class FileBackend { * * @param $type string One of (attachment, inline) * @param $filename string Suggested file name (should not contain slashes) + * @throws MWException * @return string * @since 1.20 */ diff --git a/includes/filebackend/FileBackendMultiWrite.php b/includes/filebackend/FileBackendMultiWrite.php index 7df09d180a..90292ee027 100644 --- a/includes/filebackend/FileBackendMultiWrite.php +++ b/includes/filebackend/FileBackendMultiWrite.php @@ -179,10 +179,11 @@ class FileBackendMultiWrite extends FileBackend { // Actually attempt the operation batch on the master backend... $masterStatus = $mbe->doOperations( $realOps, $opts ); $status->merge( $masterStatus ); - // Propagate the operations to the clone backends if there were no fatal errors. - // If $ops only had one operation, this might avoid backend inconsistencies. - // This also avoids inconsistency for expected errors (like "file already exists"). - if ( !count( $masterStatus->getErrorsArray() ) ) { + // Propagate the operations to the clone backends if there were no unexpected errors + // and if there were either no expected errors or if the 'force' option was used. + // However, if nothing succeeded at all, then don't replicate any of the operations. + // If $ops only had one operation, this might avoid backend sync inconsistencies. + if ( $masterStatus->isOK() && $masterStatus->successCount > 0 ) { foreach ( $this->backends as $index => $backend ) { if ( $index !== $this->masterIndex ) { // not done already $realOps = $this->substOpBatchPaths( $ops, $backend ); @@ -535,6 +536,7 @@ class FileBackendMultiWrite extends FileBackend { /** * @see FileBackend::fileExists() * @param $params array + * @return bool|null */ public function fileExists( array $params ) { $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] ); diff --git a/includes/filebackend/FileBackendStore.php b/includes/filebackend/FileBackendStore.php index a29816f068..5f562d2d8c 100644 --- a/includes/filebackend/FileBackendStore.php +++ b/includes/filebackend/FileBackendStore.php @@ -834,6 +834,14 @@ abstract class FileBackendStore extends FileBackend { $status = $this->doStreamFile( $params ); wfProfileOut( __METHOD__ . '-send-' . $this->name ); wfProfileOut( __METHOD__ . '-send' ); + if ( !$status->isOK() ) { + // Per bug 41113, nasty things can happen if bad cache entries get + // stuck in cache. It's also possible that this error can come up + // with simple race conditions. Clear out the stat cache to be safe. + $this->clearCache( array( $params['src'] ) ); + $this->deleteFileCache( $params['src'] ); + trigger_error( "Bad stat cache or race condition for file {$params['src']}." ); + } } else { $status->fatal( 'backend-fail-stream', $params['src'] ); } @@ -1007,6 +1015,7 @@ abstract class FileBackendStore extends FileBackend { * Get a list of storage paths to lock for a list of operations * Returns an array with 'sh' (shared) and 'ex' (exclusive) keys, * each corresponding to a list of storage paths to be locked. + * All returned paths are normalized. * * @param $performOps Array List of FileOp objects * @return Array ('sh' => list of paths, 'ex' => list of paths) @@ -1176,6 +1185,8 @@ abstract class FileBackendStore extends FileBackend { /** * @see FileBackendStore::executeOpHandlesInternal() + * @param array $fileOpHandles + * @throws MWException * @return Array List of corresponding Status objects */ protected function doExecuteOpHandlesInternal( array $fileOpHandles ) { @@ -1473,6 +1484,7 @@ abstract class FileBackendStore extends FileBackend { /** * Do a batch lookup from cache for container stats for all containers * used in a list of container names, storage paths, or FileOp objects. + * This loads the persistent cache values into the process cache. * * @param $items Array * @return void @@ -1529,7 +1541,7 @@ abstract class FileBackendStore extends FileBackend { /** * Get the cache key for a file path * - * @param $path string Storage path + * @param $path string Normalized storage path * @return string */ private function fileCacheKey( $path ) { @@ -1545,6 +1557,10 @@ abstract class FileBackendStore extends FileBackend { * @param $val mixed Information to cache */ final protected function setFileCache( $path, $val ) { + $path = FileBackend::normalizeStoragePath( $path ); + if ( $path === null ) { + return; // invalid storage path + } $this->memCache->add( $this->fileCacheKey( $path ), $val, 7*86400 ); } @@ -1555,6 +1571,10 @@ abstract class FileBackendStore extends FileBackend { * @param $path string Storage path */ final protected function deleteFileCache( $path ) { + $path = FileBackend::normalizeStoragePath( $path ); + if ( $path === null ) { + return; // invalid storage path + } if ( !$this->memCache->set( $this->fileCacheKey( $path ), 'PURGED', 300 ) ) { trigger_error( "Unable to delete stat cache for file $path." ); } @@ -1563,6 +1583,7 @@ abstract class FileBackendStore extends FileBackend { /** * Do a batch lookup from cache for file stats for all paths * used in a list of storage paths or FileOp objects. + * This loads the persistent cache values into the process cache. * * @param $items Array List of storage paths or FileOps * @return void @@ -1579,9 +1600,11 @@ abstract class FileBackendStore extends FileBackend { $paths = array_merge( $paths, $item->storagePathsRead() ); $paths = array_merge( $paths, $item->storagePathsChanged() ); } elseif ( self::isStoragePath( $item ) ) { - $paths[] = $item; + $paths[] = FileBackend::normalizeStoragePath( $item ); } } + // Get rid of any paths that failed normalization... + $paths = array_filter( $paths, 'strlen' ); // remove nulls // Get all the corresponding cache keys for paths... foreach ( $paths as $path ) { list( $cont, $rel, $s ) = $this->resolveStoragePath( $path ); diff --git a/includes/filebackend/SwiftFileBackend.php b/includes/filebackend/SwiftFileBackend.php index 1807734f2c..25c14f5560 100644 --- a/includes/filebackend/SwiftFileBackend.php +++ b/includes/filebackend/SwiftFileBackend.php @@ -1344,13 +1344,6 @@ class SwiftFileBackend extends FileBackendStore { return wfMemcKey( 'backend', $this->getName(), 'usercreds', $username ); } - /** - * @see FileBackendStore::doClearCache() - */ - protected function doClearCache( array $paths = null ) { - $this->connContainerCache->clear(); // clear container object cache - } - /** * Get a Swift container object, possibly from process cache. * Use $reCache if the file count or byte count is needed. diff --git a/includes/filebackend/TempFSFile.php b/includes/filebackend/TempFSFile.php index 5032bf682a..11e125c11f 100644 --- a/includes/filebackend/TempFSFile.php +++ b/includes/filebackend/TempFSFile.php @@ -82,30 +82,37 @@ class TempFSFile extends FSFile { * Clean up the temporary file only after an object goes out of scope * * @param $object Object - * @return void + * @return TempFSFile This object */ public function bind( $object ) { if ( is_object( $object ) ) { + if ( !isset( $object->tempFSFileReferences ) ) { + // Init first since $object might use __get() and return only a copy variable + $object->tempFSFileReferences = array(); + } $object->tempFSFileReferences[] = $this; } + return $this; } /** * Set flag to not clean up after the temporary file * - * @return void + * @return TempFSFile This object */ public function preserve() { $this->canDelete = false; + return $this; } /** * Set flag clean up after the temporary file * - * @return void + * @return TempFSFile This object */ public function autocollect() { $this->canDelete = true; + return $this; } /** diff --git a/includes/filebackend/filejournal/DBFileJournal.php b/includes/filebackend/filejournal/DBFileJournal.php index f6268c258f..34f3e53d50 100644 --- a/includes/filebackend/filejournal/DBFileJournal.php +++ b/includes/filebackend/filejournal/DBFileJournal.php @@ -83,6 +83,19 @@ class DBFileJournal extends FileJournal { return $status; } + /** + * @see FileJournal::doGetCurrentPosition() + * @return integer|false + */ + protected function doGetCurrentPosition() { + $dbw = $this->getMasterDB(); + + return $dbw->selectField( 'filejournal', 'MAX(fj_id)', + array( 'fj_backend' => $this->backend ), + __METHOD__ + ); + } + /** * @see FileJournal::doGetChangeEntries() * @return Array diff --git a/includes/filebackend/filejournal/FileJournal.php b/includes/filebackend/filejournal/FileJournal.php index ce029bbeaf..3bc0df74f5 100644 --- a/includes/filebackend/filejournal/FileJournal.php +++ b/includes/filebackend/filejournal/FileJournal.php @@ -110,6 +110,21 @@ abstract class FileJournal { */ abstract protected function doLogChangeBatch( array $entries, $batchId ); + /** + * Get the position ID of the latest journal entry + * + * @return integer|false + */ + final public function getCurrentPosition() { + return $this->doGetCurrentPosition(); + } + + /** + * @see FileJournal::getCurrentPosition() + * @return integer|false + */ + abstract protected function doGetCurrentPosition(); + /** * Get an array of file change log entries. * A starting change ID and/or limit can be specified. @@ -169,7 +184,7 @@ abstract class FileJournal { */ class NullFileJournal extends FileJournal { /** - * @see FileJournal::logChangeBatch() + * @see FileJournal::doLogChangeBatch() * @param $entries array * @param $batchId string * @return Status @@ -178,6 +193,14 @@ class NullFileJournal extends FileJournal { return Status::newGood(); } + /** + * @see FileJournal::doGetCurrentPosition() + * @return integer|false + */ + protected function doGetCurrentPosition() { + return false; + } + /** * @see FileJournal::doGetChangeEntries() * @return Array @@ -187,7 +210,7 @@ class NullFileJournal extends FileJournal { } /** - * @see FileJournal::purgeOldLogs() + * @see FileJournal::doPurgeOldLogs() * @return Status */ protected function doPurgeOldLogs() { diff --git a/includes/filebackend/lockmanager/MemcLockManager.php b/includes/filebackend/lockmanager/MemcLockManager.php index 57c0463d4c..26a5e2da8e 100644 --- a/includes/filebackend/lockmanager/MemcLockManager.php +++ b/includes/filebackend/lockmanager/MemcLockManager.php @@ -64,6 +64,7 @@ class MemcLockManager extends QuorumLockManager { * - wikiId : Wiki ID string that all resources are relative to. [optional] * * @param Array $config + * @throws MWException */ public function __construct( array $config ) { parent::__construct( $config ); diff --git a/includes/filerepo/FSRepo.php b/includes/filerepo/FSRepo.php index 9c8d85dc2a..635cb95efe 100644 --- a/includes/filerepo/FSRepo.php +++ b/includes/filerepo/FSRepo.php @@ -24,9 +24,9 @@ /** * A repository for files accessible via the local filesystem. * Does not support database access or registration. - * + * * This is a mostly a legacy class. New uses should not be added. - * + * * @ingroup FileRepo * @deprecated since 1.19 */ diff --git a/includes/filerepo/FileRepo.php b/includes/filerepo/FileRepo.php index 5f24fedc13..e8aa5a6335 100644 --- a/includes/filerepo/FileRepo.php +++ b/includes/filerepo/FileRepo.php @@ -1318,6 +1318,7 @@ class FileRepo { * e.g. s/z/a/ for sza251lrxrc1jad41h5mgilp8nysje52.jpg * * @param $key string + * @throws MWException * @return string */ public function getDeletedHashPath( $key ) { diff --git a/includes/filerepo/ForeignDBRepo.php b/includes/filerepo/ForeignDBRepo.php index 4b206c3d0e..18659852d2 100644 --- a/includes/filerepo/ForeignDBRepo.php +++ b/includes/filerepo/ForeignDBRepo.php @@ -86,7 +86,7 @@ class ForeignDBRepo extends LocalRepo { /** * Get a key on the primary cache for this repository. - * Returns false if the repository's cache is not accessible at this site. + * Returns false if the repository's cache is not accessible at this site. * The parameters are the parts of the key, as for wfMemcKey(). * @return bool|mixed */ diff --git a/includes/filerepo/ForeignDBViaLBRepo.php b/includes/filerepo/ForeignDBViaLBRepo.php index bd76fce7fe..7951fb1383 100644 --- a/includes/filerepo/ForeignDBViaLBRepo.php +++ b/includes/filerepo/ForeignDBViaLBRepo.php @@ -61,7 +61,7 @@ class ForeignDBViaLBRepo extends LocalRepo { /** * Get a key on the primary cache for this repository. - * Returns false if the repository's cache is not accessible at this site. + * Returns false if the repository's cache is not accessible at this site. * The parameters are the parts of the key, as for wfMemcKey(). * @return bool|string */ diff --git a/includes/filerepo/LocalRepo.php b/includes/filerepo/LocalRepo.php index 0954422d4f..118e9810c3 100644 --- a/includes/filerepo/LocalRepo.php +++ b/includes/filerepo/LocalRepo.php @@ -238,7 +238,7 @@ class LocalRepo extends FileRepo { __METHOD__, array( 'ORDER BY' => 'img_name' ) ); - + $result = array(); foreach ( $res as $row ) { $result[] = $this->newFileFromRow( $row ); @@ -299,7 +299,7 @@ class LocalRepo extends FileRepo { /** * Get a key on the primary cache for this repository. - * Returns false if the repository's cache is not accessible at this site. + * Returns false if the repository's cache is not accessible at this site. * The parameters are the parts of the key, as for wfMemcKey(). * * @return string diff --git a/includes/filerepo/README b/includes/filerepo/README index 885a1deddd..d3aea9f0c7 100644 --- a/includes/filerepo/README +++ b/includes/filerepo/README @@ -39,22 +39,3 @@ LocalRepo.php. LocalRepo provides only file access, and LocalFile provides database access and higher-level functions such as cache management. Tim Starling, June 2007 - -Structure: - -File defines an abstract class File. - ForeignAPIFile extends File. - LocalFile extends File. - ForeignDBFile extends LocalFile - Image extends LocalFile - UnregisteredLocalFile extends File. - UploadStashFile extends UnregisteredLocalFile. -FileRepo defines an abstract class FileRepo. - ForeignAPIRepo extends FileRepo - FSRepo extends FileRepo - LocalRepo extends FSRepo - ForeignDBRepo extends LocalRepo - ForeignDBViaLBRepo extends LocalRepo - NullRepo extends FileRepo - -Russ Nelson, March 2011 diff --git a/includes/filerepo/file/ArchivedFile.php b/includes/filerepo/file/ArchivedFile.php index c5a0bd1b48..694623b627 100644 --- a/includes/filerepo/file/ArchivedFile.php +++ b/includes/filerepo/file/ArchivedFile.php @@ -47,6 +47,7 @@ class ArchivedFile { $timestamp, # time of upload $dataLoaded, # Whether or not all this has been loaded from the database (loadFromXxx) $deleted, # Bitfield akin to rev_deleted + $sha1, # sha1 hash of file content $pageCount, $archive_name; @@ -87,6 +88,7 @@ class ArchivedFile { $this->deleted = 0; $this->dataLoaded = false; $this->exists = false; + $this->sha1 = ''; if( $title instanceof Title ) { $this->title = File::normalizeTitle( $title, 'exception' ); @@ -108,6 +110,7 @@ class ArchivedFile { /** * Loads a file object from the filearchive table + * @throws MWException * @return bool|null True on success or null */ public function load() { @@ -152,7 +155,8 @@ class ArchivedFile { 'fa_user', 'fa_user_text', 'fa_timestamp', - 'fa_deleted' ), + 'fa_deleted', + 'fa_sha1' ), $conds, __METHOD__, array( 'ORDER BY' => 'fa_timestamp DESC' ) ); @@ -164,23 +168,7 @@ class ArchivedFile { $row = $ret->fetchObject(); // initialize fields for filestore image object - $this->id = intval($row->fa_id); - $this->name = $row->fa_name; - $this->archive_name = $row->fa_archive_name; - $this->group = $row->fa_storage_group; - $this->key = $row->fa_storage_key; - $this->size = $row->fa_size; - $this->bits = $row->fa_bits; - $this->width = $row->fa_width; - $this->height = $row->fa_height; - $this->metadata = $row->fa_metadata; - $this->mime = "$row->fa_major_mime/$row->fa_minor_mime"; - $this->media_type = $row->fa_media_type; - $this->description = $row->fa_description; - $this->user = $row->fa_user; - $this->user_text = $row->fa_user_text; - $this->timestamp = $row->fa_timestamp; - $this->deleted = $row->fa_deleted; + $this->loadFromRow( $row ); } else { throw new MWException( 'This title does not correspond to an image page.' ); } @@ -199,28 +187,42 @@ class ArchivedFile { */ public static function newFromRow( $row ) { $file = new ArchivedFile( Title::makeTitle( NS_FILE, $row->fa_name ) ); - - $file->id = intval($row->fa_id); - $file->name = $row->fa_name; - $file->archive_name = $row->fa_archive_name; - $file->group = $row->fa_storage_group; - $file->key = $row->fa_storage_key; - $file->size = $row->fa_size; - $file->bits = $row->fa_bits; - $file->width = $row->fa_width; - $file->height = $row->fa_height; - $file->metadata = $row->fa_metadata; - $file->mime = "$row->fa_major_mime/$row->fa_minor_mime"; - $file->media_type = $row->fa_media_type; - $file->description = $row->fa_description; - $file->user = $row->fa_user; - $file->user_text = $row->fa_user_text; - $file->timestamp = $row->fa_timestamp; - $file->deleted = $row->fa_deleted; - + $file->loadFromRow( $row ); return $file; } + /** + * Load ArchivedFile object fields from a DB row. + * + * @param $row Object database row + * @since 1.21 + */ + public function loadFromRow( $row ) { + $this->id = intval($row->fa_id); + $this->name = $row->fa_name; + $this->archive_name = $row->fa_archive_name; + $this->group = $row->fa_storage_group; + $this->key = $row->fa_storage_key; + $this->size = $row->fa_size; + $this->bits = $row->fa_bits; + $this->width = $row->fa_width; + $this->height = $row->fa_height; + $this->metadata = $row->fa_metadata; + $this->mime = "$row->fa_major_mime/$row->fa_minor_mime"; + $this->media_type = $row->fa_media_type; + $this->description = $row->fa_description; + $this->user = $row->fa_user; + $this->user_text = $row->fa_user_text; + $this->timestamp = $row->fa_timestamp; + $this->deleted = $row->fa_deleted; + if( isset( $row->fa_sha1 ) ) { + $this->sha1 = $row->fa_sha1; + } else { + // old row, populate from key + $this->sha1 = LocalRepo::getHashFromKey( $this->key ); + } + } + /** * Return the associated title object * @@ -380,6 +382,17 @@ class ArchivedFile { return wfTimestamp( TS_MW, $this->timestamp ); } + /** + * Get the SHA-1 base 36 hash of the file + * + * @return string + * @since 1.21 + */ + function getSha1() { + $this->load(); + return $this->sha1; + } + /** * Return the user ID of the uploader. * diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index bbabe8415d..caa93a42c6 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -1186,8 +1186,9 @@ class LocalFile extends File { } else { # New file; create the description page. # There's already a log entry, so don't make a second RC entry - # Squid and file cache for the description page are purged by doEdit. - $status = $wikiPage->doEdit( $pageText, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user ); + # Squid and file cache for the description page are purged by doEditContent. + $content = ContentHandler::makeContent( $pageText, $descTitle ); + $status = $wikiPage->doEditContent( $content, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user ); if ( isset( $status->value['revision'] ) ) { // XXX; doEdit() uses a transaction $dbw->begin(); @@ -1475,9 +1476,9 @@ class LocalFile extends File { global $wgParser; $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL ); if ( !$revision ) return false; - $text = $revision->getText(); - if ( !$text ) return false; - $pout = $wgParser->parse( $text, $this->title, new ParserOptions() ); + $content = $revision->getContent(); + if ( !$content ) return false; + $pout = $content->getParserOutput( $this->title, null, new ParserOptions() ); return $pout->getText(); } @@ -1773,7 +1774,8 @@ class LocalFileDeleteBatch { 'fa_description' => 'img_description', 'fa_user' => 'img_user', 'fa_user_text' => 'img_user_text', - 'fa_timestamp' => 'img_timestamp' + 'fa_timestamp' => 'img_timestamp', + 'fa_sha1' => 'img_sha1', ), $where, __METHOD__ ); } @@ -1805,6 +1807,7 @@ class LocalFileDeleteBatch { 'fa_user' => 'oi_user', 'fa_user_text' => 'oi_user_text', 'fa_timestamp' => 'oi_timestamp', + 'fa_sha1' => 'oi_sha1', ), $where, __METHOD__ ); } } @@ -2037,7 +2040,12 @@ class LocalFileRestoreBatch { $deletedRel = $this->file->repo->getDeletedHashPath( $row->fa_storage_key ) . $row->fa_storage_key; $deletedUrl = $this->file->repo->getVirtualUrl() . '/deleted/' . $deletedRel; - $sha1 = substr( $row->fa_storage_key, 0, strcspn( $row->fa_storage_key, '.' ) ); + if( isset( $row->fa_sha1 ) ) { + $sha1 = $row->fa_sha1; + } else { + // old row, populate from key + $sha1 = LocalRepo::getHashFromKey( $row->fa_storage_key ); + } # Fix leading zero if ( strlen( $sha1 ) == 32 && $sha1[0] == '0' ) { diff --git a/includes/installer/DatabaseUpdater.php b/includes/installer/DatabaseUpdater.php index ff0a99e9ff..7223003180 100644 --- a/includes/installer/DatabaseUpdater.php +++ b/includes/installer/DatabaseUpdater.php @@ -54,12 +54,17 @@ abstract class DatabaseUpdater { protected $shared = false; + /** + * Scripts to run after database update + * Should be a subclass of LoggedUpdateMaintenance + */ protected $postDatabaseUpdateMaintenance = array( 'DeleteDefaultMessages', 'PopulateRevisionLength', 'PopulateRevisionSha1', 'PopulateImageSha1', 'FixExtLinksProtocolRelative', + 'PopulateFilearchiveSha1', ); /** @@ -177,7 +182,7 @@ abstract class DatabaseUpdater { * Note that callback functions will receive this object as * first parameter. */ - public function addExtensionUpdate( Array $update ) { + public function addExtensionUpdate( array $update ) { $this->extensionUpdates[] = $update; } @@ -254,6 +259,8 @@ abstract class DatabaseUpdater { /** * Add a maintenance script to be run after the database updates are complete. * + * Script should subclass LoggedUpdateMaintenance + * * @since 1.19 * * @param $class string Name of a Maintenance subclass diff --git a/includes/installer/Ibm_db2Updater.php b/includes/installer/Ibm_db2Updater.php index f7d5a1eed2..805ff0ff66 100644 --- a/includes/installer/Ibm_db2Updater.php +++ b/includes/installer/Ibm_db2Updater.php @@ -77,7 +77,7 @@ class Ibm_db2Updater extends DatabaseUpdater { array( 'modifyField', 'user_properties', 'up_property', 'patch-up_property.sql' ), array( 'addTable', 'uploadstash', 'patch-uploadstash.sql' ), array( 'addTable', 'user_former_groups', 'patch-user_former_groups.sql'), - array( 'doRebuildLocalisationCache' ), + array( 'doRebuildLocalisationCache' ), // 1.19 array( 'addIndex', 'logging', 'type_action', 'patch-logging-type-action-index.sql'), @@ -89,6 +89,11 @@ class Ibm_db2Updater extends DatabaseUpdater { array( 'addTable', 'config', 'patch-config.sql' ), // 1.21 + array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ), + array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ), + array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ), + array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ), + array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ), ); } } diff --git a/includes/installer/Installer.i18n.php b/includes/installer/Installer.i18n.php index 8849ac02e6..c60fbb014f 100644 --- a/includes/installer/Installer.i18n.php +++ b/includes/installer/Installer.i18n.php @@ -567,11 +567,13 @@ When that has been done, you can '''[$2 enter your wiki]'''.", * @author Kghbln * @author McDutchie * @author Mormegil + * @author Nemo bis * @author Nike * @author Platonides * @author Purodha * @author Raymond * @author SPQRobin + * @author Shirayuki * @author Siebrand * @author Umherirrender */ @@ -596,6 +598,8 @@ $messages['qqq'] = array( 'config-sidebar' => 'Maximum width for words is 24 characters. Only visible part of the translation counts to this limit.', 'config-env-php' => 'Parameters: * $1 is the version of PHP that has been installed.', + 'config-unicode-pure-php-warning' => 'PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.', + 'config-unicode-update-warning' => "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.", 'config-no-db' => 'Do not translate:./configure --with-mysql
.
Do not translate:php5-mysql
. @@ -603,6 +607,8 @@ Do not translate:php5-mysql
. Parameters: * $1 is comma separated list of database types supported by MediaWiki.', 'config-no-fts3' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.', + 'config-pcre' => 'PCRE is an initialism for "Perl-compatible regular expression". Perl is programming language whose [[:w:regular expression|regular expression]] syntax is popular and used in other languages using a library called PCRE.', + 'config-pcre-no-utf8' => "PCRE is a name of a programmers' library for supporting regular expressions. It can probably be translated without change.", 'config-memory-raised' => 'Parameters: * $1 is the configuredmemory_limit
. * $2 is the value to whichmemory_limit
was raised.', @@ -640,10 +646,13 @@ Add dir="ltr" to thefor right-to-left languages.', 'config-connection-error' => '$1 is the external error from the database, such as "DB connection error: Access denied for user \'dba\'@\'localhost\' (using password: YES) (localhost)." If you\'re translating this message to a right-to-left language, consider writing . (When the bidi features for HTML5 will be implemented in the browsers, it will probably be a good idea to write it as $1..)', + 'config-invalid-schema' => '*$1 - schema name', 'config-sqlite-dir-unwritable' => 'webserver refers to a software like Apache or Lighttpd.', 'config-can-upgrade' => 'Parameters: * $1 - Version or Revision indicator.', 'config-show-table-status' => '{{doc-important|"SHOW TABLE STATUS" is a MySQL command. Do not translate this.}}', + 'config-db-web-account-same' => 'checkbox label', + 'config-db-web-create' => 'checkbox label', 'config-ns-generic' => '{{Identical|Project}}', 'config-admin-name' => '{{Identical|Your name}}', 'config-admin-password' => '{{Identical|Password}}', @@ -660,20 +669,109 @@ If you\'re translating this message to a right-to-left language, consider writin This message refers to a block of HTML being embedded into the installer page. It comes from the Creative Commons Web site. The block is in the English language. It is a scripted license chooser. When an individual license has been selected, it asks you to klick "proceed" so as to return to the MediaWiki installer page.', 'config-extensions' => '{{Identical|Extension}}', 'config-install-step-done' => '{{Identical|Done}}', + 'config-install-database' => '*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', + 'config-install-schema' => '*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', 'config-install-pg-schema-failed' => 'Parameters: * $1 = database user name (usernames in the database are unrelated to wiki user names) * $2 =', - 'config-install-user' => 'Message indicates that the user is being created', + 'config-install-user' => 'Message indicates that the user is being created + +See also: +*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', 'config-install-user-grant-failed' => 'Parameters: * $1 is the database username for which granting rights failed * $2 is the error message', - 'config-install-tables' => 'Message indicates that the tables are being created', - 'config-install-interwiki' => 'Message indicates that the interwikitables are being populated', + 'config-install-tables' => 'Message indicates that the tables are being created + +See also: +*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', + 'config-install-interwiki' => 'Message indicates that the interwikitables are being populated + +See also: +*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', + 'config-install-stats' => '*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', + 'config-install-keys' => '*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', 'config-insecure-keys' => 'Parameters: * $1 - A list of names of the secret keys that were generated. * $2 - the number of items in the list $1, to be used with PLURAL.', - 'config-install-sysop' => 'Message indicates that the administrator user account is being created', + 'config-install-sysop' => 'Message indicates that the administrator user account is being created + +See also: +*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', 'config-install-subscribe-fail' => '{{doc-important|"mediawiki-announce" is the name of a mailing list and should not be translated.}}', + 'config-install-mainpage' => '*{{msg-mw|Config-install-database}} +*{{msg-mw|Config-install-tables}} +*{{msg-mw|Config-install-schema}} +*{{msg-mw|Config-install-user}} +*{{msg-mw|Config-install-interwiki}} +*{{msg-mw|Config-install-stats}} +*{{msg-mw|Config-install-keys}} +*{{msg-mw|Config-install-sysop}} +*{{msg-mw|Config-install-mainpage}}', 'config-install-done' => 'Parameters: * $1 is the URL to LocalSettings download * $2 is a link to the wiki. @@ -9508,43 +9606,45 @@ I seguenti collegamenti sono in lingua inglese: * @author éåå®æ */ $messages['ja'] = array( - 'config-desc' => 'MediaWikiã®ã¤ã³ã¹ãã¼ã©ã¼', - 'config-title' => 'MediaWiki $1ã®ã¤ã³ã¹ãã¼ã«', + 'config-desc' => 'MediaWiki ã®ã¤ã³ã¹ãã¼ã©ã¼', + 'config-title' => 'MediaWiki $1 ã®ã¤ã³ã¹ãã¼ã«', 'config-information' => 'æ å ±', - 'config-localsettings-upgrade' => ' $1.LocalSettings.php
ãã¡ã¤ã«ãæ¤åºããã¾ããã -ã¢ããã°ã¬ã¼ããããããããã¯ã¹ä¸ã®$wgUpgradeKey
ã®å¤ãå ¥åãã¦ãã ããã -LocalSettings.phpã®ä¸ã«ããã¯ããã§ãããã', - 'config-localsettings-key' => 'ã¢ããã°ã¬ã¼ããã¼ï¼', + 'config-localsettings-upgrade' => 'ãã¡ã¤ã«LocalSettings.php
ãæ¤åºãã¾ããã +ã¤ã³ã¹ãã¼ã«ããã¦ãããã®ãã¢ããã°ã¬ã¼ãããã«ã¯ã$wgUpgradeKey
ã®å¤ã以ä¸ã®æ¬ã«å ¥åãã¦ãã ããã +ãã®å¤ã¯ LocalSettings.php å ã«ããã¾ãã', + 'config-localsettings-cli-upgrade' => 'ãã¡ã¤ã« LocalSettings.php ãæ¤åºãã¾ããã +ã¤ã³ã¹ãã¼ã«ããã¦ãããã®ãã¢ããã°ã¬ã¼ãããã«ã¯ãupdate.php ãå®è¡ãã¦ãã ãã', + 'config-localsettings-key' => 'ã¢ããã°ã¬ã¼ã ãã¼:', 'config-localsettings-badkey' => 'ä¸ãããããã¼ãééã£ã¦ãã¾ã', 'config-upgrade-key-missing' => 'MediaWikiã®æ¢åã¤ã³ã¹ãã¼ã«ãæ¤åºãã¾ããã ã¤ã³ã¹ãã¼ã«ãã¢ããã°ã¬ã¼ãããããã«ã次ã®è¡ãLocalSettings.phpã®æ«å°¾ã«æ¿å ¥ãã¦ãã ãã: $1', - 'config-localsettings-incomplete' => 'ç¾å¨ã®LocalSettings.phpã¯ä¸å®å ¨ã§ããããã§ãã -å¤æ°$1ãè¨å®ããã¦ãã¾ããã -LocalSettings.phpãå¤æ´ãã¦ãã®å¤æ°ãè¨å®ãã¦ãã{{int:Config-continue}}ããæ¼ãã¦ãã ããã', - 'config-session-error' => 'ã»ãã·ã§ã³ã®éå§ã¨ã©ã¼ï¼$1', + 'config-localsettings-incomplete' => 'æ¢åã® LocalSettings.php ã®å 容ã¯ä¸å®å ¨ã®ããã§ãã +å¤æ° $1 ãè¨å®ããã¦ãã¾ããã +LocalSettings.php å ã§ãã®å¤æ°ãè¨å®ãã¦ãã{{int:Config-continue}}ããã¯ãªãã¯ãã¦ãã ããã', + 'config-session-error' => 'ã»ãã·ã§ã³ã®éå§ã¨ã©ã¼: $1', 'config-session-expired' => 'ã»ãã·ã§ã³ã®æå¹æéãåããããã§ãã ã»ãã·ã§ã³ã®æå¹æéã¯$1ã«è¨å®ããã¦ãã¾ãã php.iniã®session.gc_maxlifetime
ãè¨å®ãããã¨ã§ããã®åé¡ãæ¹åã§ãã¾ãã ã¤ã³ã¹ãã¼ã«ä½æ¥ãåèµ·åããã¦ãã ããã', 'config-no-session' => 'ã»ãã·ã§ã³ã®ãã¼ã¿ãæ¶å¤±ãã¾ããï¼ php.iniã確èªããsession.save_path
ãé©åãªãã£ã¬ã¯ããªã«è¨å®ããã¦ãããã¨ã確èªãã¦ãã ããã', - 'config-your-language' => 'ããªãã®è¨èªï¼', + 'config-your-language' => 'ããªãã®è¨èª:', 'config-your-language-help' => 'ã¤ã³ã¹ãã¼ã«ä½æ¥ã«ä½¿ç¨ããè¨èªãé¸æãã¦ãã ããã', - 'config-wiki-language' => 'ã¦ã£ãã®è¨èªï¼', + 'config-wiki-language' => 'ã¦ã£ãã®è¨èª:', 'config-wiki-language-help' => 'ã¦ã£ãã§ä¸»ã«æ¸ãè¾¼ã¾ããè¨èªãé¸æãã¦ãã ããã', - 'config-back' => 'âæ»ã', + 'config-back' => 'â æ»ã', 'config-continue' => 'ç¶è¡ â', 'config-page-language' => 'è¨èª', - 'config-page-welcome' => 'MediaWikiã¸ããããï¼', + 'config-page-welcome' => 'MediaWiki ã¸ãããã!', 'config-page-dbconnect' => 'ãã¼ã¿ãã¼ã¹ã«æ¥ç¶', 'config-page-upgrade' => 'æ¢åã®ã¤ã³ã¹ãã¼ã«ãæ´æ°', 'config-page-dbsettings' => 'ãã¼ã¿ãã¼ã¹ã®è¨å®', 'config-page-name' => 'åå', 'config-page-options' => 'ãªãã·ã§ã³', 'config-page-install' => 'ã¤ã³ã¹ãã¼ã«', - 'config-page-complete' => 'å®äºï¼', + 'config-page-complete' => 'å®äº!', 'config-page-restart' => 'ã¤ã³ã¹ãã¼ã«ãåèµ·å', 'config-page-readme' => 'ãèªã¿ãã ãã', 'config-page-releasenotes' => 'ãªãªã¼ã¹ãã¼ã', @@ -9587,12 +9687,12 @@ MediaWikiã®ã¤ã³ã¹ãã¼ã«ã¯ã§ãã¾ããã', é«ãã©ãã£ãã¯ã®ãµã¤ããéå¶ããå ´åã¯ã[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicodeæ£è¦åã«é¢ãããã¼ã¸]ããèªã¿ãã ããã", 'config-unicode-update-warning' => "'''è¦å'''ï¼ã¤ã³ã¹ãã¼ã«ããã¦ãããã¼ã¸ã§ã³ã®Unicodeæ£è¦åã©ããã¼ã¯ã[http://site.icu-project.org/ ICUããã¸ã§ã¯ã]ã®ã©ã¤ãã©ãªã®å¤ããã¼ã¸ã§ã³ã使ç¨ãã¦ãã¾ãã Unicodeãå°ãã§ãå©ç¨ããå¯è½æ§ããããªãã[//www.mediawiki.org/wiki/Unicode_normalization_considerations ã¢ããã°ã¬ã¼ã]ããå¿ è¦ãããã¾ãã", - 'config-no-db' => 'é©åãªãã¼ã¿ãã¼ã¹ãã©ã¤ããè¦ã¤ããã¾ããã§ããï¼PHPã«ãã¼ã¿ãã¼ã¹ãã©ã¤ããã¤ã³ã¹ãã¼ã«ããå¿ è¦ãããã¾ãã -次ã®ç¨®é¡ã®ãã¼ã¿ãã¼ã¹ã使ç¨ã§ãã¾ã: $1 + 'config-no-db' => 'é©åãªãã¼ã¿ãã¼ã¹ ãã©ã¤ãã¼ãè¦ã¤ããã¾ããã§ãã! PHP ã«ãã¼ã¿ãã¼ã¹ ãã©ã¤ãã¼ãã¤ã³ã¹ãã¼ã«ããå¿ è¦ãããã¾ãã +以ä¸ã®ç¨®é¡ã®ãã¼ã¿ãã¼ã¹ã«å¯¾å¿ãã¦ãã¾ã: $1 -å ±æãµã¼ãã使ç¨ãã¦ããå ´åã¯ããµã¼ãã®ç®¡çè ã«é©åãªãã¼ã¿ãã¼ã¹ãã©ã¤ãã®ã¤ã³ã¹ãã¼ã«ãä¾é ¼ãã¦ãã ããã -PHPãèªåã§ã³ã³ãã¤ã«ããå ´åã¯ããã¨ãã°./configure --with-mysql
ãå®è¡ãã¦ããã¼ã¿ãã¼ã¹ã¯ã©ã¤ã¢ã³ãã使ç¨å¯è½ã«åè¨å®ãã¦ãã ããã -Debianã¾ãã¯Ubuntuã®ããã±ã¼ã¸ããPHPãã¤ã³ã¹ãã¼ã«ããå ´åã¯ãphp5-mysqlã¢ã¸ã¥ã¼ã«ãã¤ã³ã¹ãã¼ã«ããå¿ è¦ãããã¾ãã', +å ±æãµã¼ãã¼ã使ç¨ãã¦ããå ´åã¯ãé©åãªãã¼ã¿ãã¼ã¹ ãã©ã¤ãã¼ã®ã¤ã³ã¹ãã¼ã«ãããµã¼ãã¼ã®ç®¡çè ã«ä¾é ¼ãã¦ãã ããã +PHP ãèªåã§ã³ã³ãã¤ã«ããå ´åã¯ãä¾ãã°./configure --with-mysql
ãå®è¡ãã¦ããã¼ã¿ãã¼ã¹ ã¯ã©ã¤ã¢ã³ãã使ç¨ã§ããããã«åè¨å®ãã¦ãã ããã +Debian ã¾ã㯠Ubuntu ã®ããã±ã¼ã¸ãã PHP ãã¤ã³ã¹ãã¼ã«ããå ´åã¯ãphp5-mysql ã¢ã¸ã¥ã¼ã«ãã¤ã³ã¹ãã¼ã«ããå¿ è¦ãããã¾ãã', 'config-no-fts3' => "'''è¦å'''ï¼SQLiteã¯[//sqlite.org/fts3.html FTS3]ã¢ã¸ã¥ã¼ã«ãªãã§ã³ã³ãã¤ã«ããã¦ãããæ¤ç´¢æ©è½ã¯ãã®ããã¯ã¨ã³ãã§å©ç¨ä¸å¯è½ã«ãªãã¾ãã", 'config-register-globals' => "'''è¦åï¼PHPã®[http://php.net/register_globals register_globals]
ãªãã·ã§ã³ãæå¹ã«ãªã£ã¦ãã¾ãã''' '''å¯è½ãªãç¡å¹åãã¦ãã ããã''' @@ -9616,18 +9716,18 @@ MediaWikiã¯ããã®ã¢ã¸ã¥ã¼ã«ã®é¢æ°ãå¿ è¦ã¨ãã¦ããããã Mandrakeãå®è¡ãã¦ããå ´åãphp-xmlããã±ã¼ã¸ãã¤ã³ã¹ãã¼ã«ãã¦ãã ããã', 'config-pcre' => 'PCREããµãã¼ããã¦ããã¢ã¸ã¥ã¼ã«ãä¸è¶³ãã¦ããããã§ãã MediaWikiã¯ãPerläºæã®æ£è¦è¡¨ç¾é¢æ°ã®åä½ãå¿ è¦ã§ãã', - 'config-pcre-no-utf8' => "'''è´å½çã¨ã©ã¼''': PHPã®PCREãPCRE_UTF8ãµãã¼ãç¡ãã§ã³ã³ãã¤ã«ããã¦ãã¾ãã -MediaWikiã«ã¯UTF-8ãµãã¼ãã®é¢æ°ãå¿ è¦ã§ãã", + 'config-pcre-no-utf8' => "'''è´å½çã¨ã©ã¼''': PHP ã® PCRE ã PCRE_UTF8 対å¿ãªãã§ã³ã³ãã¤ã«ããã¦ããããã§ãã +MediaWiki ãæ£ããåä½ãããã«ã¯ãUTF-8 対å¿ãå¿ è¦ã§ãã", 'config-memory-raised' => 'PHPã®memory_limit
ã¯$1ã§ã$2ã«å¼ãä¸ãããã¾ããã', 'config-memory-bad' => "'''è¦åï¼'''PHPã®memory_limit
ã¯$1ã§ãã ããã¯ãé常ã«é ãå¯è½æ§ãããã¾ãã ã¤ã³ã¹ãã¼ã«ã失æããããããã¾ããï¼", - 'config-xcache' => '[http://xcache.lighttpd.net/ XCache]ãã¤ã³ã¹ãã¼ã«æ¸ã¿', - 'config-apc' => '[http://www.php.net/apc APC]ãã¤ã³ã¹ãã¼ã«æ¸ã¿', - 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache]ãã¤ã³ã¹ãã¼ã«æ¸ã¿', - 'config-no-cache' => "'''è¦åï¼'''[http://www.php.net/apc APC]ã[http://xcache.lighttpd.net/ XCache]ãããã¯[http://www.iis.net/download/WinCacheForPhp WinCache]ã®ããããè¦ã¤ããã¾ããã§ããã + 'config-xcache' => '[http://xcache.lighttpd.net/ XCache] ãã¤ã³ã¹ãã¼ã«æ¸ã¿', + 'config-apc' => '[http://www.php.net/apc APC] ãã¤ã³ã¹ãã¼ã«æ¸ã¿', + 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] ãã¤ã³ã¹ãã¼ã«æ¸ã¿', + 'config-no-cache' => "'''è¦åï¼'''[http://www.php.net/apc APC]ã[http://xcache.lighttpd.net/ XCache]ã[http://www.iis.net/download/WinCacheForPhp WinCache] ã®ããããè¦ã¤ããã¾ããã§ããã ãªãã¸ã§ã¯ãã®ãã£ãã·ã¥ã¯æå¹åããã¾ããã", - 'config-diff3-bad' => 'GNU diff3ãè¦ã¤ããã¾ããã', + 'config-diff3-bad' => 'GNU diff3 ãè¦ã¤ããã¾ããã', 'config-imagemagick' => 'ImageMagickãè¦ã¤ããã¾ããï¼$1
ã ã¢ãããã¼ããæå¹ãªããç»åã®ãµã ãã¤ã«ãå©ç¨ã§ãã¾ãã', 'config-gd' => 'GDç»åã©ã¤ãã©ãªãå èµããã¦ãããã¨ã確èªããã¾ããã @@ -9637,9 +9737,9 @@ MediaWikiã«ã¯UTF-8ãµãã¼ãã®é¢æ°ãå¿ è¦ã§ãã", 'config-no-uri' => "'''ã¨ã©ã¼ï¼'''ç¾å¨ã®URIã決å®ã§ãã¾ããã§ããã ã¤ã³ã¹ãã¼ã«ã¯ä¸æ¢ããã¾ããã", 'config-using-server' => 'ãµã¼ãã¼åã$1 ãã使ç¨ãã¦ãã¾ãã', - 'config-using-uri' => 'ãµã¼ãã¼URLã$1$2 ãã使ç¨ãã¦ãã¾ãã', - 'config-uploads-not-safe' => "'''è¦åï¼'''ã¢ãããã¼ãã®æ¢å®ãã£ã¬ã¯ããª$1
ããä»»æã®ã¹ã¯ãªããå®è¡ã«é¢ãã¦èå¼±æ§ãããã¾ãã -MediaWikiã¯ã¢ãããã¼ãããããã¡ã¤ã«ã®ã»ãã¥ãªãã£ä¸ã®è å¨ã確èªãã¾ãããã¢ãããã¼ããæå¹åããã¾ãã«ã[//www.mediawiki.org/wiki/Manual:Security#Upload_security ãã®ã»ãã¥ãªãã£ä¸ã®èå¼±æ§ãéãã]ãã¨ãå¼·ãæ¨å¥¨ããã¾ãã", + 'config-using-uri' => 'ãµã¼ãã¼ URLã$1$2 ãã使ç¨ãã¦ãã¾ãã', + 'config-uploads-not-safe' => "'''è¦åï¼'''ã¢ãããã¼ãã®æ¢å®ãã£ã¬ã¯ããª$1
ã«ãä»»æã®ã¹ã¯ãªããå®è¡ã«é¢ããèå¼±æ§ãããã¾ãã +MediaWiki ã¯ã¢ãããã¼ãããããã¡ã¤ã«ã®ã»ãã¥ãªãã£ä¸ã®è å¨ã確èªãã¾ãããã¢ãããã¼ããæå¹åããåã«ã[//www.mediawiki.org/wiki/Manual:Security#Upload_security ãã®ã»ãã¥ãªãã£ä¸ã®èå¼±æ§ã解決ãã]ãã¨ãå¼·ãæ¨å¥¨ãã¾ãã", 'config-brokenlibxml' => 'ãã®ã·ã¹ãã ã§ä½¿ããã¦ããPHPã¨libxml2ã®ãã¼ã¸ã§ã³ã®ãã®çµã¿åããã«ã¯ãã°ãããã¾ããå ·ä½çã«ã¯ãMediaWikiããã®ä»ã®ã¦ã§ãã¢ããªã±ã¼ã·ã§ã³ã§hiddenãã¼ã¿ãç ´æããå¯è½æ§ãããã¾ãã PHPã5.2.9ããã以éã®ãã¼ã¸ã§ã³ã«ãlibxml2ã2.7.3ããã以éã®ãã¼ã¸ã§ã³ã«ã¢ããã°ã¬ã¼ããã¦ãã ãã([//bugs.php.net/bug.php?id=45996 PHPã§ã®ãã°æ å ±])ã ã¤ã³ã¹ãã¼ã«ãçµäºãã¾ãã', @@ -9647,8 +9747,8 @@ PHPã5.2.9ããã以éã®ãã¼ã¸ã§ã³ã«ãlibxml2ã2.7.3ããã以é PHP5.3.2以éã«æ´æ°ãããããã®([//bugs.php.net/bug.php?id=50394 PHPã«æåºããããã°])ãä¿®æ£ããããã«PHP5.3.0ã¸æ»ãã¦ãã ããã ã¤ã³ã¹ãã¼ã«ã¯ä¸æ¢ããã¾ããã', 'config-suhosin-max-value-length' => 'Suhosin ãã¤ã³ã¹ãã¼ã«ããã¦ãããGETãã©ã¡ã¼ã¿ã®é·ãã $1 ãã¤ãã«å¶éãã¦ãã¾ããMediaWiki ã® ResourceLoader ã³ã³ãã¼ãã³ãã¯ãã®å¶éãåé¿ãã¾ãããããã©ã¼ãã³ã¹ã¯ä½ä¸ãã¾ããå¯è½ãªéããphp.ini 㧠suhosin.get.max_value_length ã 1024 以ä¸ã«è¨å®ããåãå¤ã LocalSettings.php ä¸ã§ $wgResourceLoaderMaxQueryLength ã«è¨å®ãã¦ãã ããã', - 'config-db-type' => 'ãã¼ã¿ãã¼ã¹ã®ç¨®é¡ï¼', - 'config-db-host' => 'ãã¼ã¿ãã¼ã¹ã®ãã¹ãï¼', + 'config-db-type' => 'ãã¼ã¿ãã¼ã¹ã®ç¨®é¡:', + 'config-db-host' => 'ãã¼ã¿ãã¼ã¹ã®ãã¹ã:', 'config-db-host-help' => 'ç°ãªããµã¼ãã¼ä¸ã«ãã¼ã¿ãã¼ã¹ãµã¼ãã¼ãããå ´åããã¹ãåã¾ãã¯IPã¢ãã¬ã¹ãããã«å ¥åãã¦ãã ããã ãããå ±æãããã¦ã§ããã¹ãã£ã³ã°ã使ç¨ãã¦ããå ´åããã¹ãã£ã³ã°ãããã¤ãã¼ã¯æ£ç¢ºãªãã¹ãåã解説ãã¦ããã¯ãã§ãã @@ -9656,18 +9756,18 @@ PHP5.3.2以éã«æ´æ°ãããããã®([//bugs.php.net/bug.php?id=50394 PHP Windowsã§MySQLã使ç¨ãã¦ããå ´åã«ããlocalhostãã¯ããµã¼ãã¼åã¨ãã¦ã¯ãã¾ãåããªãã§ãããããããã®ãããªå ´åã¯ããã¼ã«ã«IPã¢ãã¬ã¹ã¨ãã¦ã127.0.0.1ãã試ãã¦ã¿ã¦ãã ããã PostgreSQLã使ç¨ãã¦ããå ´åãUNIXã½ã±ããã§æ¥ç¶ããã«ã¯ãã®æ¬ã空æ¬ã®ã¾ã¾ã«ãã¦ãã ããã', - 'config-db-host-oracle' => 'ãã¼ã¿ãã¼ã¹TNSï¼', + 'config-db-host-oracle' => 'ãã¼ã¿ãã¼ã¹ TNS:', 'config-db-host-oracle-help' => 'æå¹ãª[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm ãã¼ã«ã«æ¥ç¶å]ãå ¥åãã¦ãã ãããtnsnames.oraãã¡ã¤ã«ã¯ããã®ã¤ã³ã¹ãã¼ã«ã«å¯¾ãã¦è¡¨ç¤ºããã¦ãªããã°ãªãã¾ããã
ããã¯ã©ã¤ã¢ã³ãã©ã¤ãã©ãª10gãããã¯ãã以ä¸ã使ç¨ãã¦ããå ´åãã¡ã½ããã®ååã[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm ç°¡ææ¥ç¶]ã§å©ç¨ã§ãã¾ãã', - 'config-db-wiki-settings' => 'ãã®ã¦ã£ããèå¥', - 'config-db-name' => 'ãã¼ã¿ãã¼ã¹åï¼', + 'config-db-wiki-settings' => 'ãã®ã¦ã£ãã®èå¥æ å ±', + 'config-db-name' => 'ãã¼ã¿ãã¼ã¹å:', 'config-db-name-help' => 'ãã®ã¦ã£ããèå¥ããååãå ¥åãã¦ãã ããã 空ç½ãå«ãããã¨ã¯ã§ãã¾ããã å ±æã¦ã§ããã¹ããå©ç¨ãã¦ããå ´åããã¹ãã£ã³ã°ãããã¤ãã¼ãç¹å®ã®ä½¿ç¨å¯è½ãªãã¼ã¿ãã¼ã¹åãæä¾ãããããããã¯ç®¡çããã«ãããã¼ã¿ãã¼ã¹ãä½æã§ããããã«ãã¦ããã§ãããã', - 'config-db-name-oracle' => 'ãã¼ã¿ãã¼ã¹ã®ã¹ãã¼ãï¼', - 'config-db-install-account' => 'ã¤ã³ã¹ãã¼ã«ã®ããã®å©ç¨è ã¢ã«ã¦ã³ã', - 'config-db-username' => 'ãã¼ã¿ãã¼ã¹ã®å©ç¨è åï¼', - 'config-db-password' => 'ãã¼ã¿ãã¼ã¹ã®ãã¹ã¯ã¼ãï¼', + 'config-db-name-oracle' => 'ãã¼ã¿ãã¼ã¹ã®ã¹ãã¼ã:', + 'config-db-install-account' => 'ã¤ã³ã¹ãã¼ã«ã§ä½¿ç¨ããå©ç¨è ã¢ã«ã¦ã³ã', + 'config-db-username' => 'ãã¼ã¿ãã¼ã¹ã®ã¦ã¼ã¶ã¼å:', + 'config-db-password' => 'ãã¼ã¿ãã¼ã¹ã®ãã¹ã¯ã¼ã:', 'config-db-password-empty' => 'æ°ãããã¼ã¿ãã¼ã¹ã®å©ç¨è å $1 ã®ãã¹ã¯ã¼ããå ¥åãã¦ãã ããã ãã¹ã¯ã¼ããè¨å®ããªãã§ã¦ã¼ã¶ãä½ããã¨ãã§ããããããã¾ããããå®å ¨ã§ã¯ããã¾ããã', 'config-db-install-username' => 'ã¤ã³ã¹ãã¼ã«ä¸ã«ãã¼ã¿ãã¼ã¹ã«æ¥ç¶ããããã«ä½¿ãã¦ã¼ã¶åãå ¥åãã¦ãã ããããã㯠MediaWiki ã¢ã«ã¦ã³ãã®ã¦ã¼ã¶å (å©ç¨è å) ã®ãã¨ã§ã¯ããã¾ãããããªãã®ãã¼ã¿ãã¼ã¹ã§ã®ã¦ã¼ã¶åã§ãã', @@ -9677,62 +9777,63 @@ PostgreSQLã使ç¨ãã¦ããå ´åãUNIXã½ã±ããã§æ¥ç¶ããã«ã¯ã 'config-db-wiki-account' => 'ã¤ã³ã¹ãã¼ã«ä½æ¥çµäºå¾ã®å©ç¨è ã¢ã«ã¦ã³ã', 'config-db-wiki-help' => 'é常ã®ã¦ã£ãæä½ä¸ã«ãã¼ã¿ãã¼ã¹ã¸ã®æ¥ç¶ããæã«å©ç¨ããå©ç¨è åã¨ãã¹ã¯ã¼ããå ¥åãã¦ãã ããã ã¢ã«ã¦ã³ããåå¨ãããã¤ã³ã¹ãã¼ã«ã®ã¢ã«ã¦ã³ãã«ååãªæ¨©éãããå ´åã¯ããã®å©ç¨è ã¢ã«ã¦ã³ãã¯ãã¦ã£ããæä½ããä¸ã§æå°éã®æ¨©éãæã£ãç¶æ ã§ä½æããã¾ãã', - 'config-db-prefix' => 'ãã¼ã¿ãã¼ã¹ãã¼ãã«ã®æ¥é è¾ï¼', + 'config-db-prefix' => 'ãã¼ã¿ãã¼ã¹ ãã¼ãã«ã®æ¥é è¾:', 'config-db-prefix-help' => 'ãã¼ã¿ãã¼ã¹ãè¤æ°ã®ã¦ã£ãéããããã¯MediaWikiã¨ä»ã®ã¦ã§ãã¢ããªã±ã¼ã·ã§ã³ã§å ±æããå¿ è¦ãããå ´åãè¡çªãé¿ããããã«ããã¹ã¦ã®ãã¼ãã«åã«æ¥é è¾ãä»ããå¿ è¦ãããã¾ãã 空ç½ã¯ä½¿ç¨ã§ãã¾ããã ãã®ãã£ã¼ã«ãã¯ãé常ã¯ç©ºã®ã¾ã¾ã§ãã', 'config-db-charset' => 'ãã¼ã¿ãã¼ã¹ã®æåã»ãã', - 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0ãã¤ããª', + 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 ãã¤ããª', 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8', - 'config-charset-mysql4' => 'MySQL 4.0 ä¸ä½äºæUTF-8', - 'config-charset-help' => "'''è¦åï¼'''MySQL 4.1+ã§'''ä¸ä½äºæUTF-8'''ã使ç¨ãããã®å¾mysqldump
ã§ãã¼ã¿ãã¼ã¹ãããã¯ã¢ããããã¨ããã¹ã¦ã®éASCIIæåãç ´å£ãããä¸å¯éçã«ãããã¢ãããå£ããããããã¾ããã - -'''ãã¤ããªã¼å½¢å¼'''ã§ã¯ãMediaWikiã¯ãUTF-8ããã¹ããããã¼ã¿ãã¼ã¹ã®ãã¤ããªã¼ãã£ã¼ã«ãã«æ ¼ç´ãã¾ãã -ããã¯ãMySQLã®UTF-8å½¢å¼ããå¹ççã§ãUnicodeæåã®å ¨ç¯å²ãå©ç¨ã§ããããã«ãªãã¾ãã -'''UTF-8å½¢å¼'''ã§ã¯ãMySQLã¯ããã¼ã¿å ã§ã©ã®æåéåã使ç¨ãã¦ããããç¥ã£ã¦ãã¦ãããã«å¯¾ãã¦é©åãªæ示ã¨å¤æãããã§ããããã -[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 åºæ¬å¤è¨èªé¢]ã®å¤ã«ããæåãæ ¼ç´ã§ããããã«ã¯ãªãã¾ããã", - 'config-mysql-old' => 'MySQLã®$1以éãè¦æ±ããã¦ãã¾ããããªãã®ææã®ãã®ã¯$2ã§ãã', - 'config-db-port' => 'ãã¼ã¿ãã¼ã¹ãã¼ã:', - 'config-db-schema' => 'ã¡ãã£ã¢ã¦ã£ãã®å³å¼', - 'config-db-schema-help' => 'ä¸ã®å³å¼ã¯å¸¸ã«æ£ç¢ºã§ãã -å¿ è¦ã§ããå ´åã®ã¿ãå¤æ´ãã¦ãã ããã', - 'config-sqlite-dir' => 'SQLiteã®ãã¼ã¿ãã£ã¬ã¯ããª:', - 'config-sqlite-dir-help' => "SQLiteã¯åä¸ã®ãã¡ã¤ã«å ã«ãã¹ã¦ã®ãã¼ã¿ãä¿æãã¦ãã¾ãã - -æå®ãããã£ã¬ã¯ããªã¯ãã¤ã³ã¹ãã¼ã«æã«ã¦ã§ããµã¼ãã¼ãæ¸ãè¾¼ããå¿ è¦ãããã¾ãã - -ãã®ãã£ã¬ã¯ããªã¯ã¦ã§ãããã¢ã¯ã»ã¹'''ä¸å¯è½'''ã§ããå¿ è¦ãããã¾ãããããPHPãã¡ã¤ã«ãããå ´æã«é ç½®ã§ããªãçç±ã§ãã - -ã¤ã³ã¹ãã¼ã©ã¼ã¯åæã«.htaccess
ãã¡ã¤ã«ã«æ¸ãè¾¼ã¿ã¾ããããããããã失æãã¦ã誰ããããªãã®çã®ãã¼ã¿ãã¼ã¹ã«ã¢ã¯ã»ã¹ãããã¨ãå¯è½ã¨ãªãã§ãããããã¼ã¿ãã¼ã¹ã¯çã®ãã¼ã¿ï¼ã¡ã¼ã«ã¢ãã¬ã¹ããã¹ã¯ã¼ãã®ããã·ã¥å¤ï¼ã®ä»ãåé¤ãããçããã®ä»ãã¦ã£ãä¸ã®å¶éããã¦ãããã¼ã¿ãå«ãã§ãã¾ãã - -ä¾ãã°/var/lib/mediawiki/yourwiki
ã®ããã«ãå¥ã®å ´æã«ãã¼ã¿ãã¼ã¹ãé ç½®ãããã¨ãæ¤è¨ãã¦ãã ããã", - 'config-oracle-def-ts' => 'æ¢å®ã®ãã¼ãã«é åï¼', - 'config-oracle-temp-ts' => 'ä¸æçãªãã¼ãã«é åï¼', + 'config-charset-mysql4' => 'MySQL 4.0 å¾æ¹äºæ UTF-8', + 'config-charset-help' => "'''è¦å:''' MySQL 4.1+ ã§'''å¾æ¹äºæ UTF-8''' ã使ç¨ãã¦ããç¶æ ã§ãmysqldump
ã§ãã¼ã¿ãã¼ã¹ãããã¯ã¢ããããã¨ããã¹ã¦ã®é ASCII æåãç ´å£ããã¦ãã¾ããããã¯ã¢ãããä¸å¯éçã«ç ´æãã¦ãã¾ãã¾ã! + +'''ãã¤ã㪠ã¢ã¼ã'''ã§ã¯ãMediaWiki ã¯ãUTF-8 ããã¹ãããã¼ã¿ãã¼ã¹ã®ãã¤ã㪠ãã£ã¼ã«ãã«æ ¼ç´ãã¾ãã +ããã¯ãMySQL ã® UTF-8 ã¢ã¼ãããå¹ççã§ãUnicode æåã®å ¨ç¯å²ãå©ç¨ã§ããããã«ãªãã¾ãã +'''UTF-8 ã¢ã¼ã'''ã§ã¯ãMySQL ã¯ããã¼ã¿å ã§ä½¿ç¨ãã¦ããæåéåãç¥ã£ã¦ãããããé©åã«è¡¨ç¾ãå¤æãã§ãã¾ããã +[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 åºæ¬å¤è¨èªé¢]ã®å¤ã«ããæåãæ ¼ç´ã§ãã¾ããã", + 'config-mysql-old' => 'MySQL $1 以éãå¿ è¦ã§ããã使ç¨ä¸ã® MySQL 㯠$2 ã§ãã', + 'config-db-port' => 'ãã¼ã¿ãã¼ã¹ã®ãã¼ã:', + 'config-db-schema' => 'MediaWiki ã®ã¹ãã¼ã:', + 'config-db-schema-help' => 'é常ã¯ãã®ã¹ãã¼ãã§åé¡ããã¾ããã +å¿ è¦ãªå ´åã®ã¿å¤æ´ãã¦ãã ããã', + 'config-sqlite-dir' => 'SQLite ãã¼ã¿ ãã£ã¬ã¯ããª:', + 'config-sqlite-dir-help' => "SQLite ã¯åä¸ã®ãã¡ã¤ã«å ã«ãã¹ã¦ã®ãã¼ã¿ãæ ¼ç´ãã¦ãã¾ãã + +æå®ãããã£ã¬ã¯ããªã¯ãã¤ã³ã¹ãã¼ã«æã«ã¦ã§ã ãµã¼ãã¼ãæ¸ãè¾¼ããããã«ãã¦ããå¿ è¦ãããã¾ãã + +ãã®ãã£ã¬ã¯ããªã¯ã¦ã§ãããã¢ã¯ã»ã¹'''ä¸å¯è½'''ã§ããå¿ è¦ãããã¾ããPHP ãã¡ã¤ã«ãããå ´æã«ã¯é ç½®ã§ããªãã®ã¯ãã®ããã§ãã + +ã¤ã³ã¹ãã¼ã©ã¼ã¯.htaccess
ãã¡ã¤ã«ã«ãæ¸ãè¾¼ã¿ã¾ããããããããã失æããå ´åã¯ã誰ããçã®ãã¼ã¿ãã¼ã¹ã«ã¢ã¯ã»ã¹ã§ãã¦ãã¾ãã¾ãã +ãã¼ã¿ãã¼ã¹ã¯ãçã®ãã¼ã¿ (ã¡ã¼ã«ã¢ãã¬ã¹ããã¹ã¯ã¼ãã®ããã·ã¥å¤) ã®ä»ãåé¤ãããçããã®ä»ã¦ã£ãä¸ã®å¶éããã¦ãããã¼ã¿ãå«ãã§ãã¾ãã + +ä¾ãã°/var/lib/mediawiki/yourwiki
ã®ããã«ãå¥ã®å ´æã«ãã¼ã¿ãã¼ã¹ãé ç½®ãããã¨ãæ¤è¨ãã¦ãã ããã", + 'config-oracle-def-ts' => 'æ¢å®ã®ãã¼ãã«é å:', + 'config-oracle-temp-ts' => 'ä¸æçãªãã¼ãã«é å:', 'config-type-mysql' => 'MySQL', 'config-type-postgres' => 'PostgreSQL', 'config-type-sqlite' => 'SQLite', 'config-type-oracle' => 'Oracle', 'config-type-ibm_db2' => 'IBM DB2', - 'config-support-info' => 'ã¡ãã£ã¢ã¦ã£ãã¯æ¬¡ã®ãããªãã¼ã¿ãã¼ã¹ã·ã¹ãã ããµãã¼ããã: + 'config-support-info' => 'MediaWiki ã¯ä»¥ä¸ã®ãã¼ã¿ãã¼ã¹ ã·ã¹ãã ã«å¯¾å¿ãã¦ãã¾ã: $1 -ããããã¼ã¿ãã¼ã¹ã·ã¹ãã ãä¸å¯è¦ã§ãããªãã°ã以ä¸ã®ããã«ãªã¹ãåããããã®ã使ç¨ãã¦ã¿ã¦ãã ãããå¯è½ãªãµãã¼ãã®æ示ã«å¾ã£ã¦ãã ããã', +使ç¨ãããã¨ãã¦ãããã¼ã¿ãã¼ã¹ ã·ã¹ãã ãä¸è¨ã®ä¸è¦§ã«ãªãå ´åã¯ãä¸è¨ãªã³ã¯å ã®æé ã«å¾ã£ã¦ã¤ã³ã¹ãã¼ã«ãã¦ãã ããã', 'config-support-mysql' => '* $1ã¯MediaWikiã®ä¸»è¦ãªå¯¾è±¡ã§ããã£ã¨ããµãã¼ãããã¦ãã¾ãï¼[http://www.php.net/manual/en/mysql.installation.php MySQLã®ãµãã¼ãä¸ã§PHPãã³ã³ãã¤ã«ããæ¹æ³]ï¼', 'config-support-postgres' => '* $1ã¯ãMySQLã®ä»£æ¿ã¨ãã¦ã人æ°ã®ãããªã¼ãã³ã½ã¼ã¹ãã¼ã¿ãã¼ã¹ã·ã¹ãã ã§ãï¼[http://www.php.net/manual/en/pgsql.installation.php PostgreSQLã®ãµãã¼ãä¸ã§PHPãã³ã³ãã¤ã«ããæ¹æ³]ï¼', 'config-support-sqlite' => '* $1ã¯ãè¯ããµãã¼ãããã¦ããã軽éãã¼ã¿ãã¼ã¹ã·ã¹ãã ã§ããï¼[http://www.php.net/manual/en/pdo.installation.php SQLiteã®ãµãã¼ãä¸ã§PHPãã³ã³ãã¤ã«ããæ¹æ³]ãPDOã使ç¨ï¼', 'config-support-oracle' => '* $1ã¯åæ¥ä¼æ¥ã®ãã¼ã¿ãã¼ã¹ã§ããï¼[http://www.php.net/manual/en/oci8.installation.php OCI8ãµãã¼ããªPHPãã³ã³ãã¤ã«ããæ¹æ³]ï¼', 'config-support-ibm_db2' => '* $1 ã¯åæ¥ä¼æ¥ã®ãã¼ã¿ãã¼ã¹ã§ãã', - 'config-header-mysql' => 'MySQLã®è¨å®', - 'config-header-postgres' => 'PostgreSQLã®è¨å®', - 'config-header-sqlite' => 'SQLiteã®è¨å®', - 'config-header-oracle' => 'Oracleã®è¨å®', - 'config-header-ibm_db2' => 'IBM DB2ã®è¨å®', + 'config-header-mysql' => 'MySQL ã®è¨å®', + 'config-header-postgres' => 'PostgreSQL ã®è¨å®', + 'config-header-sqlite' => 'SQLite ã®è¨å®', + 'config-header-oracle' => 'Oracle ã®è¨å®', + 'config-header-ibm_db2' => 'IBM DB2 ã®è¨å®', 'config-invalid-db-type' => 'ç¡å¹ãªãã¼ã¿ãã¼ã¹ã®ç¨®é¡', - 'config-missing-db-name' => 'ããã¼ã¿ãã¼ã¹åããå ¥åããå¿ è¦ãããã¾ã', - 'config-missing-db-host' => 'ããã¼ã¿ãã¼ã¹ã®ãã¹ãããå ¥åããå¿ è¦ãããã¾ã', - 'config-missing-db-server-oracle' => 'ããã¼ã¿ãã¼ã¹TNSãã«å¤ãå ¥åããå¿ è¦ãããã¾ã', + 'config-missing-db-name' => 'ããã¼ã¿ãã¼ã¹åããå ¥åãã¦ãã ãã', + 'config-missing-db-host' => 'ããã¼ã¿ãã¼ã¹ã®ãã¹ãããå ¥åãã¦ãã ãã', + 'config-missing-db-server-oracle' => 'ããã¼ã¿ãã¼ã¹ TNSãã®å¤ãå ¥åãã¦ãã ãã', 'config-invalid-db-server-oracle' => 'ã$1ãã¯ç¡å¹ãªãã¼ã¿ãã¼ã¹ TNS ã§ãã ã¢ã¹ãã¼è±å(a-zãA-Z)ãæ°å(0-9)ãã¢ã³ãã¼ãã¼(_)ãããã(.)ã®ã¿ã使ç¨ãã¦ãã ããã', 'config-invalid-db-name' => 'ã$1ãã¯ç¡å¹ãªãã¼ã¿ãã¼ã¹åã§ãã @@ -9742,43 +9843,43 @@ $1 'config-connection-error' => '$1ã 以ä¸ã®ãã¹ãåãã¦ã¼ã¶åããã¹ã¯ã¼ãããã§ãã¯ãã¦ãå度試ãã¦ã¿ã¦ãã ããã', - 'config-invalid-schema' => 'ã¡ãã£ã¢ã¦ã£ãã$1ãã«ãããç¡å¹ãªå³å¼ã§ãã -ã¢ã¹ãã¼è±å(a-zãA-Z)ãæ°å(0-9)ãä¸ç·(_)ã®ã¿ã使ç¨ãã¦ãã ããã', - 'config-postgres-old' => 'PostgreSQLã®$1ãããã¯ãã以éãå¿ è¦ã§ããã¾ã®ãã¼ã¸ã§ã³ã¯$2ã§ãã', + 'config-invalid-schema' => 'ã$1ã㯠MediaWiki ã®ã¹ãã¼ãã¨ãã¦ç¡å¹ã§ãã +ASCII ã®è±æ°å (a-zãA-Zã0-9)ãä¸ç· (_) ã®ã¿ã使ç¨ãã¦ãã ããã', + 'config-postgres-old' => 'PostgreSQL $1 以éãå¿ è¦ã§ããã使ç¨ä¸ã® PostgreSQL 㯠$2 ã§ãã', 'config-sqlite-name-help' => 'ããªãã®ã¦ã§ãã¨åä¸æ§ã®ããååãé¸ãã§ãã ããã 空ç½ããã³ãã¤ãã³ã¯ä½¿ç¨ããªãã§ãã ããã SQLiteã®ãã¼ã¿ãã¡ã¤ã«åã¨ãã¦ä½¿ç¨ããã¾ãã', - 'config-sqlite-parent-unwritable-group' => 'ãã¼ã¿ãã£ã¬ã¯ããªãä½æã§ãã¾ããã親ãã£ã¬ã¯ããª
$1 ã¯ãã¦ã§ããµã¼ãã¼ããæ¸ãè¾¼ã¿ã§ãã¾ããã§ããã + 'config-sqlite-parent-unwritable-group' => 'ãã¼ã¿ ãã£ã¬ã¯ããª
$2 ãä½æã§ãã¾ãããã¦ã§ã ãµã¼ãã¼ã¯è¦ªãã£ã¬ã¯ããª
$1 ã«æ¸ãè¾¼ãã¾ããã§ããã -ã¤ã³ã¹ãã¼ã«æ©è½ã¯ãå®è¡ãã¦ããã¦ã§ããµã¼ãã¼ã®ã¦ã¼ã¶ã¼ãç¹å®ãã¾ããã -ç¶è¡ããã«ã¯ã
$2 ãã£ã¬ã¯ããªãæ¸ãè¾¼ã¿å¯è½ã«ãã¦ãã ããã -Unixãããã¯Linuxä¸ã§ã¯ã以ä¸ãå®è¡ãã¦ãã ãã: +ã¤ã³ã¹ãã¼ã©ã¼ã¯ãã¦ã§ã ãµã¼ãã¼ã®å®è¡ã¦ã¼ã¶ã¼ãç¹å®ãã¾ããã +ç¶è¡ããã«ã¯ããã£ã¬ã¯ããª
$3 ã«æ¸ãè¾¼ããããã«ãã¦ãã ããã +Unix ã¾ã㯠Linux ã§ããã°ã以ä¸ãå®è¡ãã¦ãã ãã:
$3 cd $2 mkdir $3 chgrp $4 $3 chmod g+w $3', - 'config-sqlite-parent-unwritable-nogroup' => 'ãã¼ã¿ãã£ã¬ã¯ããªãä½æã§ãã¾ããã親ãã£ã¬ã¯ããª
$1 ã¯ãã¦ã§ããµã¼ãããæ¸ãè¾¼ã¿ã§ãã¾ããã§ããã + 'config-sqlite-parent-unwritable-nogroup' => 'ãã¼ã¿ ãã£ã¬ã¯ããª
$2 ãä½æã§ãã¾ãããã¦ã§ã ãµã¼ãã¼ã¯ã親ãã£ã¬ã¯ããª
$1 ã«æ¸ãè¾¼ãã¾ããã§ããã -ã¤ã³ã¹ãã¼ã«æ©è½ã¯ãå®è¡ãã¦ããã¦ã§ããµã¼ãã®ã¦ã¼ã¶ã¼ãç¹å®ã§ãã¾ããã§ããã -ç¶è¡ããã«ã¯ã
$2 ãã£ã¬ã¯ããªããã¦ã§ããµã¼ãï¼ã¨ä»ã®ã¦ã¼ã¶ï¼ï¼ããã°ãã¼ãã«ã«æ¸ãè¾¼ããããã«ãã¦ãã ããã -Unixãããã¯Linuxä¸ã§ã¯ã以ä¸ãå®è¡ãã¦ãã ããï¼ +ã¤ã³ã¹ãã¼ã©ã¼ã¯ãã¦ã§ã ãµã¼ãã¼ã®å®è¡ã¦ã¼ã¶ã¼ãç¹å®ã§ãã¾ããã§ããã +ç¶è¡ããã«ã¯ããã£ã¬ã¯ããª
$3 ã«ãã¦ã§ã ãµã¼ãã¼ (ã¨ããããã人ã !) ãã°ãã¼ãã«ã«æ¸ãè¾¼ããããã«ãã¦ãã ããã +Unix ã¾ã㯠Linux ã§ã¯ã以ä¸ãå®è¡ãã¦ãã ãã:
$3 cd $2 mkdir $3 chmod a+w $3', - 'config-sqlite-mkdir-error' => 'ãã¼ã¿ãã£ã¬ã¯ããªã$1ãã®ä½æä¸ã«ã¨ã©ã¼ãçºçãã¾ããã + 'config-sqlite-mkdir-error' => 'ãã¼ã¿ ãã£ã¬ã¯ããªã$1ããä½æããéã«ã¨ã©ã¼ãçºçãã¾ããã å ´æã確èªãã¦ãããå度試ãã¦ãã ããã', 'config-sqlite-dir-unwritable' => 'ãã£ã¬ã¯ããªã$1ãã«æ¸ãè¾¼ãã¾ããã -ã¦ã§ããµã¼ãã¼ãæ¸ãè¾¼ããããã«ãã¼ããã·ã§ã³ãå¤æ´ãã¦ããã度試ãã¦ãã ããã', +ã¦ã§ã ãµã¼ãã¼ãæ¸ãè¾¼ããããã«ãã¼ããã·ã§ã³ãå¤æ´ãã¦ãããå度試ãã¦ãã ããã', 'config-sqlite-connection-error' => '$1ã -ä¸è¨ã®ãã¼ã¿ãã£ã¬ã¯ããªã¨ãã¼ã¿ãã¼ã¹åã確èªãã¦ãããå度試ãã¦ã¿ã¦ãã ããã', - 'config-sqlite-readonly' => 'ãã¡ã¤ã«$1
ã¯æ¸ãè¾¼ã¿ä¸è½ã§ãã', - 'config-sqlite-cant-create-db' => 'ãã¼ã¿ãã¼ã¹ãã¡ã¤ã«$1
ãä½æã§ãã¾ããã§ããã', - 'config-sqlite-fts3-downgrade' => 'PHPã¯FTS3ã®ãµãã¼ãããã¼ãã«ã®ãã¦ã³ã°ã¬ã¼ããç¡å¹ã§ãã', - 'config-can-upgrade' => 'ãã®ãã¼ã¿ãã¼ã¹ã«ã¯ã¡ãã£ã¢ã¦ã£ããã¼ãã«ãåå¨ãã¾ãã -ããããã¡ãã£ã¢ã¦ã£ã$1ã«ã¢ããã°ã¬ã¼ãããããã«ãç¶è¡ããã¯ãªãã¯ãã¦ãã ããã', +ãã¼ã¿ ãã£ã¬ã¯ããªããã³ãã¼ã¿ãã¼ã¹åã確èªãã¦ãããå度試ãã¦ãã ããã', + 'config-sqlite-readonly' => 'ãã¡ã¤ã«$1
ã«æ¸ãè¾¼ãã¾ããã', + 'config-sqlite-cant-create-db' => 'ãã¼ã¿ãã¼ã¹ ãã¡ã¤ã«$1
ãä½æã§ãã¾ããã§ããã', + 'config-sqlite-fts3-downgrade' => 'PHP ã FTS3 ã«å¯¾å¿ãã¦ããªãããããã¼ãã«ããã¦ã³ã°ã¬ã¼ããã¦ãã¾ã', + 'config-can-upgrade' => 'ãã®ãã¼ã¿ãã¼ã¹ã«ã¯ãMediaWiki ãã¼ãã«ãããã¾ãã +ãããã®ãã¼ãã«ã MediaWiki $1 ã«ã¢ããã°ã¬ã¼ãããã«ã¯ããç¶è¡ããã¯ãªãã¯ãã¦ãã ããã', 'config-upgrade-done' => "æ´æ°ã¯å®äºãã¾ããã [$1 ã¦ã£ãã使ãå§ãã]ãã¨ãã§ãã¾ãã @@ -9792,12 +9893,12 @@ chmod a+w $3
$2', @@ -9848,7 +9949,7 @@ chmod a+w $3', æ®ãã®è¨å®ãé£ã°ãã¦ãä»ããã«ã¦ã£ããã¤ã³ã¹ãã¼ã«ã§ãã¾ãã', 'config-optional-continue' => 'ç§ã«ãã£ã¨è³ªåãã¦ãã ããã', 'config-optional-skip' => 'ãã飽ãã¦ãã¾ã£ãã®ã§ãã¨ã«ããã¦ã£ããã¤ã³ã¹ãã¼ã«ãã¦ãã ããã', - 'config-profile' => 'æ£ãããããã£ã¼ã«ã®ã¦ã¼ã¶:', + 'config-profile' => 'å©ç¨è 権éã®ãããã¡ã¤ã«:', 'config-profile-wiki' => 'ä¼çµ±çãªã¦ã£ã', 'config-profile-no-anon' => 'ã¢ã«ã¦ã³ãã®ä½æãå¿ è¦', 'config-profile-fishbowl' => 'æ¿èªãããç·¨éè ã®ã¿', @@ -9871,7 +9972,7 @@ MediaWikiã§ã¯ãæè¿ã®æ´æ°ã確èªããç¥çµè³ªãªããããã¯æª 'config-license-cc-by-sa' => 'ã¯ãªã¨ã¤ãã£ãã»ã³ã¢ã³ãº 表示-ç¶æ¿', 'config-license-cc-by' => 'ã¯ãªã¨ã¤ãã£ãã»ã³ã¢ã³ãº 表示', 'config-license-cc-by-nc-sa' => 'ã¯ãªã¨ã¤ãã£ãã»ã³ã¢ã³ãº 表示-éå¶å©-ç¶æ¿', - 'config-license-gfdl' => 'GNUããªã¼ææ¸å©ç¨è¨±è«¾å¥ç´æ¸1.3以é', + 'config-license-gfdl' => 'GNU ããªã¼ææ¸å©ç¨è¨±è«¾å¥ç´æ¸ 1.3 以é', 'config-license-pd' => 'ãããªãã¯ã»ãã¡ã¤ã³', 'config-license-cc-choose' => 'ãã®ä»ã®ã¯ãªã¨ã¤ãã£ãã»ã³ã¢ã³ãºã»ã©ã¤ã»ã³ã¹ãé¸æãã', 'config-license-help' => "å¤ãã®å ¬éã¦ã£ãã§ã¯ããã¹ã¦ã®å¯ç¨¿ç©ã[http://freedomdefined.org/Definition ããªã¼ã©ã¤ã»ã³ã¹]ã®å ã«ç½®ããã¦ãã¾ãã @@ -9897,40 +9998,40 @@ GFDL ã¯æå¹ãªã©ã¤ã»ã³ã¹ã§ãããå 容ãç解ããã®ã¯å°é£ã§ 'config-email-auth-help' => "ãã®é¸æè¢ãæå¹ã«ããã¨ãå©ç¨è ãã¡ã¼ã«ã¢ãã¬ã¹ãè¨å®ãããã¯å¤æ´ããã¨ãã«éä¿¡ããããªã³ã¯ã«ããããã®ã¢ãã¬ã¹ã確èªããªããã°ãªããªããªãã¾ãã èªè¨¼æ¸ã¿ã®ã¢ãã¬ã¹ã ãããä»ã®å©ç¨è ããã®ã¡ã¼ã«ããå¤æ´éç¥ã®ã¡ã¼ã«ãåãåããã¨ãã§ãã¾ãã å ¬éã¦ã£ãã§ã¯ãã¡ã¼ã«æ©è½ã«ããæ½å¨çãªä¸æ£å©ç¨ã®é²æ¢ã®ããããã®é¸æè¢ãè¨å®ãããã¨ã'''æ¨å¥¨'''ããã¾ãã", - 'config-email-sender' => 'è¿ä¿¡ã¡ã¼ã«ã¢ãã¬ã¹ï¼', + 'config-email-sender' => 'è¿ä¿¡å ã¡ã¼ã«ã¢ãã¬ã¹:', 'config-email-sender-help' => 'éä¿¡ã¡ã¼ã«ã§è¿ä¿¡å ã¨ãã¦ä½¿ç¨ããã¡ã¼ã«ã¢ãã¬ã¹ãå ¥åãã¦ãã ããã ãã®ã¢ãã¬ã¹ã¯ãå®å ä¸æã®å ´åã®éç¥ã®å®å ã«ãªãã¾ãã å¤ãã®ã¡ã¼ã«ãµã¼ãã¼ã§ã¯ãå°ãªãã¨ããã¡ã¤ã³åé¨åã¯æå¹ã§ããå¿ è¦ãããã¾ãã', 'config-upload-settings' => 'ç»åããã³ãã¡ã¤ã«ã®ã¢ãããã¼ã', 'config-upload-enable' => 'ãã¡ã¤ã«ã®ã¢ãããã¼ããæå¹ã«ãã', - 'config-upload-help' => 'ãã¡ã¤ã«ã®ã¢ãããã¼ãã¯æ½å¨çã«ããªãã®ãµã¼ãã«ã»ãã¥ãªãã£ä¸ã®å±éºããããã¾ãã -æ´ãªãæ å ±ã®ããã«ãããã¥ã¢ã«ã®[//www.mediawiki.org/wiki/Manual:Security security section] ãèªããã¨ããããã¾ãã + 'config-upload-help' => 'ãã¡ã¤ã«ã®ã¢ãããã¼ãã¯ãããªãã®ãµã¼ãã¼ãã»ãã¥ãªãã£ä¸ã®æ½å¨çãªå±éºã«æãã¾ãã +ãã®è©³ç´°ã¯ãããã¥ã¢ã«ã® [//www.mediawiki.org/wiki/Manual:Security security section] ããèªã¿ãã ããã -ãã¡ã¤ã«ãã¢ãããã¼ãã§ããããã«ããããã«ãã¡ãã£ã¢ã¦ã£ãã®ã«ã¼ããã£ã¬ã¯ããªä¸ã®
images
ãµããã£ã¬ã¯ããªã®ã¢ã¼ããå¤æ´ãã¾ãããããããã¨ã§ãã¦ã§ããµã¼ãã¼ã¯ããã«æ¸ãè¾¼ããããã«ãªãã¾ãã
+ãã¡ã¤ã«ã®ã¢ãããã¼ããæå¹ã«ããã«ã¯ãMediaWiki ã®ã«ã¼ã ãã£ã¬ã¯ããªå
ã® images
ãµã ãã£ã¬ã¯ããªã®ã¢ã¼ããå¤æ´ãã¾ããããã«ãããã¦ã§ã ãµã¼ãã¼ãããã«æ¸ãè¾¼ããããã«ãªãã¾ãã
ããã¦ããã®ãªãã·ã§ã³ãæå¹ã«ãã¦ãã ããã',
'config-upload-deleted' => 'åé¤ããããã¡ã¤ã«ã®ããã®ãã£ã¬ã¯ããª:',
'config-upload-deleted-help' => 'åé¤ããããã¡ã¤ã«ãä¿åããããã®ãã£ã¬ã¯ããªãé¸æãã¦ãã ããã
ãããã¦ã§ãããã¢ã¯ã»ã¹ã§ããªããã¨ãçæ³ã§ãã',
- 'config-logo' => 'ãã´ã®URL:',
+ 'config-logo' => 'ãã´ ã®URL:',
'config-logo-help' => 'MediaWikiã®æ¢å®ã®å¤è£
ã§ã¯ããµã¤ããã¼ä¸é¨ã«135x160ãã¯ã»ã«ã®ãã´ç¨ã®ä½ç½ãããã¾ãã
é©åãªãµã¤ãºã®ç»åãã¢ãããã¼ããã¦ããã®URLãããã«å
¥åãã¦ãã ããã
ãã´ãä¸è¦ã®å ´åã¯ããã®ããã¯ã¹ã空ç½ã®ã¾ã¾ã«ãã¦ãã ããã',
- 'config-instantcommons' => 'InstantCommonsæ©è½ãæå¹ã«ãã',
+ 'config-instantcommons' => 'Instant Commons æ©è½ãæå¹ã«ãã',
'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons InstantCommons]ã¯ã[//commons.wikimedia.org/ ã¦ã£ãã¡ãã£ã¢ã»ã³ã¢ã³ãº]ã®ãµã¤ãã§è¦ã¤ãã£ãç»åãé³å£°ããã®ä»ã®ã¡ãã£ã¢ãã¦ã£ãä¸ã§å©ç¨ãããã¨ãã§ããããã«ãªãæ©è½ã§ãã
ãããæå¹åããã«ã¯ãMediaWikiã¯ã¤ã³ã¿ã¼ãããã«æ¥ç¶ã§ããªããã°ãªãã¾ããã
-ã¦ã£ãã¡ãã£ã¢ã³ã¢ã³ãºä»¥å¤ã®ã¦ã£ããåãããã«è¨å®ããæ¹æ³ãªã©ããã®æ©è½ã«é¢ãã詳細ãªæ
å ±ã¯ã[//mediawiki.org/wiki/Manual:$wgForeignFileRepos ããã¥ã¢ã«]ãã覧ãã ããã',
+ã¦ã£ãã¡ãã£ã¢ã»ã³ã¢ã³ãºä»¥å¤ã®ã¦ã£ããåãããã«è¨å®ããæ¹æ³ãªã©ããã®æ©è½ã«é¢ãã詳細ãªæ
å ±ã¯ã[//mediawiki.org/wiki/Manual:$wgForeignFileRepos ããã¥ã¢ã«]ãã覧ãã ããã',
'config-cc-error' => 'ã¯ãªã¨ã¤ãã£ãã»ã³ã¢ã³ãºã»ã©ã¤ã»ã³ã¹ã®é¸æå¨ããçµæãå¾ããã¾ããã§ããã
ã©ã¤ã»ã³ã¹ã®ååãæåã§å
¥åãã¦ãã ããã',
'config-cc-again' => 'ããä¸åº¦é¸æãã¦ãã ãã...',
- 'config-cc-not-chosen' => 'ããªãã®æ±ããã¯ãªã¨ã¤ãã£ãã³ã¢ã³ãºã®ã©ã¤ã»ã³ã¹ãé¸ãã§ã"ç¶è¡"ãã¯ãªãã¯ãã¦ãã ããã',
+ 'config-cc-not-chosen' => 'å¸æããã¯ãªã¨ã¤ãã£ãã»ã³ã¢ã³ãºã®ã©ã¤ã»ã³ã¹ãé¸æãã¦ããç¶è¡ããã¯ãªãã¯ãã¦ãã ããã',
'config-advanced-settings' => 'é«åº¦ãªè¨å®',
'config-cache-options' => 'ãªãã¸ã§ã¯ãã®ãã£ãã·ã¥ã®è¨å®:',
- 'config-cache-help' => 'ãªãã¸ã§ã¯ãã®ãã£ãã·ã¥ã¯ã使ç¨ãããã¼ã¿ãé »ç¹ã«ãã£ãã·ã³ã°ãããã¨ã«ãã£ã¦ãã¡ãã£ã¢ã¦ã£ãã®ã¹ãã¼ãæ¹åã«ä½¿ç¨ããã¾ãã
-ä¸ã大ãµã¤ãã«ããã¦ã¯ããããæå¹ã«ããããã«å¤§å¤æã¾ãããã¨ã§ããã¾ãå°ããªãµã¤ãã«ããã¦ãåæ§ãªå©ç¹ãããããã¨èãããã¾ãã',
+ 'config-cache-help' => 'ãªãã¸ã§ã¯ãã®ãã£ãã·ã¥ã使ç¨ããã¨ãé »ç¹ã«ä½¿ç¨ãããã¼ã¿ããã£ãã·ã¥ãããã MediaWiki ã®åä½é度ãæ¹åã§ãã¾ãã
+ä¸ã大è¦æ¨¡ãµã¤ãã§ã¯ãããæå¹ã«ãããã¨ãå¼·ããå§ããã¾ããå°è¦æ¨¡ãµã¤ãã§ãåæ§ã«å¹æãããã¾ãã',
'config-cache-none' => 'ãã£ãã·ã³ã°ããªã(æ©è½ã¯åãæããã¾ããããããã大ããªã¦ã£ããµã¤ãä¸ã§ã¹ãã¼ãã®åé¡ãçºçãã¾ã)',
- 'config-cache-accel' => 'PHPãªãã¸ã§ã¯ããã£ãã·ã³ã°ï¼APCãXCacheãããã¯WinCacheï¼',
+ 'config-cache-accel' => 'PHP ãªãã¸ã§ã¯ã ãã£ãã·ã¥ (APCãXCacheãWinCache ã®ãããã)',
'config-cache-memcached' => 'Memcachedã使ç¨ï¼è¿½å ã®è¨å®ãå¿
è¦ã§ãï¼',
'config-memcached-servers' => 'ã¡ã¢ãªããã£ãã·ã¥ããããµã¼ã:',
'config-memcached-help' => 'Memcachedã使ç¨ããIPã¢ãã¬ã¹ã®ä¸è¦§ã
@@ -9943,31 +10044,37 @@ GFDL ã¯æå¹ãªã©ã¤ã»ã³ã¹ã§ãããå
容ãç解ããã®ã¯å°é£ã§
ãããã¯æ´ã«å¤ãã®è¨å®ãè¦æ±ããããããã¾ããããä»ããããæå¹ã«ãããã¨ãã§ãã¾ãã',
'config-install-alreadydone' => "'''è¦å:''' æ¢ã«MediaWikiãã¤ã³ã¹ãã¼ã«æ¸ã¿ã§ãåã³ã¤ã³ã¹ãã¼ã«ãç´ããã¨ãã¦ãã¾ãã
次ã®ãã¼ã¸ã¸é²ãã§ãã ããã",
- 'config-install-begin' => 'ã{{int:config-continue}}ããæ¼ãã¨ãMediaWikiã®ã¤ã³ã¹ãã¼ã«ãéå§ãããã¨ãã§ãã¾ãã
-å¤æ´ãããè¨å®ãããã°ãã{{int:Config-back}}ããæ¼ãã¦ãã ããã',
+ 'config-install-begin' => 'ã{{int:config-continue}}ããæ¼ãã¨ãMediaWiki ã®ã¤ã³ã¹ãã¼ã«ãéå§ã§ãã¾ãã
+å¤æ´ãããè¨å®ãããå ´åã¯ãã{{int:Config-back}}ããæ¼ãã¦ãã ããã',
'config-install-step-done' => 'å®è¡',
'config-install-step-failed' => '失æãã',
'config-install-extensions' => 'æ¡å¼µæ©è½ãå«ã',
'config-install-database' => 'ãã¼ã¿ãã¼ã¹ã®æ§ç¯',
'config-install-schema' => 'ã¹ãã¼ãã®ä½æ',
'config-install-pg-schema-not-exist' => 'PostgreSQL ã¹ãã¼ããããã¾ããã',
- 'config-install-pg-schema-failed' => 'ãã¼ãã«ã®ä½æã«å¤±æããã
-ã¦ã¼ã¶"$1"ãå³å¼"$2"ã«æ¸ãè¾¼ã¿ãã§ããããã«ãã¦ãã ããã',
+ 'config-install-pg-schema-failed' => 'ãã¼ãã«ã®ä½æã«å¤±æãã¾ããã
+å©ç¨è
ã$1ããã¹ãã¼ãã$2ãã«æ¸ãè¾¼ããããã«ãã¦ãã ããã',
'config-install-pg-commit' => 'å¤æ´ãéä¿¡',
- 'config-install-user' => 'ãã¼ã¿ãã¼ã¹ã¦ã¼ã¶ãä½æãã',
- 'config-install-user-grant-failed' => 'ã¦ã¼ã¶ã¼ã$1ãã«è¨±å¯ãä¸ãããã¨ã«å¤±æãã¾ãããï¼$2',
+ 'config-install-user' => 'ãã¼ã¿ãã¼ã¹ã¦ã¼ã¶ã¼ã®ä½æ',
+ 'config-install-user-alreadyexists' => 'ã¦ã¼ã¶ã¼ã$1ãã¯æ¢ã«åå¨ãã¾ã',
+ 'config-install-user-create-failed' => 'ã¦ã¼ã¶ã¼ã$1ãã®ä½æã«å¤±æãã¾ãã: $2',
+ 'config-install-user-grant-failed' => 'ã¦ã¼ã¶ã¼ã$1ãã«è¨±å¯ãä¸ãããã¨ã«å¤±æãã¾ãã: $2',
+ 'config-install-user-missing' => 'æå®ããã¦ã¼ã¶ã¼ã$1ãã¯åå¨ãã¾ããã',
+ 'config-install-user-missing-create' => 'æå®ããã¦ã¼ã¶ã¼ã$1ãã¯åå¨ãã¾ããã
+ã¢ã«ã¦ã³ããä½æããå ´åã¯ãä¸ã®ãã¢ã«ã¦ã³ãä½æããã¯ãªãã¯ãã¦ãã ããã',
'config-install-tables' => 'ãã¼ãã«ã®ä½æ',
'config-install-tables-exist' => "'''è¦å'''ï¼MediaWikiãã¼ãã«ã¯æ¢ã«åå¨ããããã§ãã
ä½æãé£ã°ãã¾ãã",
- 'config-install-tables-failed' => "'''ã¨ã©ã¼'''ï¼ãã¼ãã«ã®ä½æãã次ã®ã¨ã©ã¼ã«ãã失æãã¾ããï¼$1",
- 'config-install-interwiki' => 'æ¢å®ã®ã¦ã£ãéãã¼ãã«ãå°å
¥ãã¦ãã¾ã',
- 'config-install-interwiki-list' => 'ãã¡ã¤ã«interwiki.list
ãè¦ã¤ãããã¨ãã§ãã¾ããã§ããã',
+ 'config-install-tables-failed' => "'''ã¨ã©ã¼''': ãã¼ãã«ã®ä½æãã以ä¸ã®ã¨ã©ã¼ã«ãã失æãã¾ãã: $1",
+ 'config-install-interwiki' => 'æ¢å®ã®ã¦ã£ãéãã¼ãã«ã®å°å
¥',
+ 'config-install-interwiki-list' => 'ãã¡ã¤ã« interwiki.list
ããèªã¿åãã¾ããã§ããã',
'config-install-interwiki-exists' => "'''è¦å'''ï¼ã¦ã£ãéãã¼ãã«ã¯æ¢ã«ç»é²ããã¦ããããã§ãã
æ¢å®ã®ãã¼ãã«ãç¡è¦ãã¾ãã",
- 'config-install-keys' => 'ç§å¯éµãçæãã',
- 'config-install-sysop' => '管çè
ã®ã¦ã¼ã¶ã¼ã¢ã«ã¦ã³ããä½æãã',
- 'config-install-mainpage' => 'æ¢å®ã®æ¥ç¶ã§ã¡ã¤ã³ãã¼ã¸ãä½æ',
- 'config-install-mainpage-failed' => 'ã¡ã¤ã³ãã¼ã¸ãæ¿å
¥ã§ãã¾ããã§ãã:$1',
+ 'config-install-stats' => 'çµ±è¨æ
å ±ã®åæå',
+ 'config-install-keys' => 'ç§å¯éµã®çæ',
+ 'config-install-sysop' => '管çè
ã®ã¢ã«ã¦ã³ãã®ä½æ',
+ 'config-install-mainpage' => 'ã¡ã¤ã³ãã¼ã¸ãæ¢å®ã®å
容ã§ä½æ',
+ 'config-install-mainpage-failed' => 'ã¡ã¤ã³ãã¼ã¸ãæ¿å
¥ã§ãã¾ããã§ãã: $1',
'config-install-done' => "'''ããã§ã¨ããããã¾ãï¼'''
MediaWikiã®ã¤ã³ã¹ãã¼ã«ã«æåãã¾ããã
@@ -9983,7 +10090,7 @@ $3
'''注æ''': ããããããä»ããªããã°ãã¤ã¾ãããã®ãã¡ã¤ã«ããã¦ã³ãã¼ãããã¤ã³ã¹ãã¼ã«ãçµäºããå ´åããã®çæãããè¨å®ãã¡ã¤ã«ã¯å©ç¨ããã¾ããã
ãããå®äºããã°ã'''[$2 ã¦ã£ãã«å
¥ã]'''ãã¨ãã§ãã¾ãã",
- 'config-download-localsettings' => 'LocalSettings.phpããã¦ã³ãã¼ã',
+ 'config-download-localsettings' => 'LocalSettings.php ããã¦ã³ãã¼ã',
'config-help' => 'ãã«ã',
'mainpagetext' => "'''MediaWiki ã®ã¤ã³ã¹ãã¼ã«ã«æåãã¾ããã'''",
'mainpagedocfooter' => 'ã¦ã£ãã½ããã¦ã§ã¢ã®ä½¿ãæ¹ã«é¢ããæ
å ±ã¯[//meta.wikimedia.org/wiki/Help:Contents å©ç¨è
æ¡å
]ãåç
§ãã¦ãã ããã
@@ -16281,6 +16388,7 @@ $messages['sk'] = array(
/** Slovenian (slovenÅ¡Äina)
* @author Dbc334
+ * @author Eleassar
*/
$messages['sl'] = array(
'config-desc' => 'Namestitveni program za MediaWiki',
@@ -16452,7 +16560,7 @@ Sedaj lahko preskoÄite preostalo konfiguriranje in zdaj namestite wiki.',
'config-profile-no-anon' => 'Zahtevano je ustvarjanje raÄuna',
'config-profile-fishbowl' => 'Samo pooblaÅ¡Äeni urejevalci',
'config-profile-private' => 'Zasebni wiki',
- 'config-license' => 'Avtorske pravice in dovoljenje:',
+ 'config-license' => 'Avtorske pravice in licenca:',
'config-license-none' => 'Brez noge dovoljenja',
'config-license-cc-by-sa' => 'Creative Commons Priznanje avtorstva-Deljenje pod enakimi pogoji',
'config-license-cc-by' => 'Creative Commons Priznanje avtorstva',
@@ -16474,7 +16582,7 @@ Najbolje je, da mapa ni dostopna preko spleta.',
'config-cc-error' => 'Izbirnik dovoljenja Creative Commons ni vrnil nobenih rezultatov.
Vnesite ime dovoljenja roÄno.',
'config-cc-again' => 'Izberi ponovno ...',
- 'config-cc-not-chosen' => 'Izberite dovoljenje Creative Commons, ki ga želite dodati, in kliknite »proceed«.',
+ 'config-cc-not-chosen' => 'Izberite licenco Creative Commons, ki jo želite uporabiti, in kliknite »proceed«.',
'config-advanced-settings' => 'Napredna konfiguracija',
'config-cache-accel' => 'Predpomnjenje predmetov PHP (APC, XCache ali WinCache)',
'config-cache-memcached' => 'Uporabi Memcached (zahteva dodatno namestitev in konfiguracijo)',
diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php
index ac5dbd747c..c673f6fe9f 100644
--- a/includes/installer/Installer.php
+++ b/includes/installer/Installer.php
@@ -1594,13 +1594,16 @@ abstract class Installer {
$status = Status::newGood();
try {
$page = WikiPage::factory( Title::newMainPage() );
- $page->doEdit( wfMessage( 'mainpagetext' )->inContentLanguage()->text() . "\n\n" .
- wfMessage( 'mainpagedocfooter' )->inContentLanguage()->text(),
+ $content = new WikitextContent (
+ wfMessage( 'mainpagetext' )->inContentLanguage()->text() . "\n\n" .
+ wfMessage( 'mainpagedocfooter' )->inContentLanguage()->text()
+ );
+
+ $page->doEditContent( $content,
'',
EDIT_NEW,
false,
- User::newFromName( 'MediaWiki default' )
- );
+ User::newFromName( 'MediaWiki default' ) );
} catch (MWException $e) {
//using raw, because $wgShowExceptionDetails can not be set yet
$status->fatal( 'config-install-mainpage-failed', $e->getMessage() );
diff --git a/includes/installer/MysqlUpdater.php b/includes/installer/MysqlUpdater.php
index 98e13866eb..82de913618 100644
--- a/includes/installer/MysqlUpdater.php
+++ b/includes/installer/MysqlUpdater.php
@@ -216,8 +216,16 @@ class MysqlUpdater extends DatabaseUpdater {
array( 'dropField', 'category', 'cat_hidden', 'patch-cat_hidden.sql' ),
// 1.21
+ array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ),
+ array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ),
+ array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ),
+ array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ),
+ array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ),
array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ),
array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ),
+ array( 'addTable', 'sites', 'patch-sites.sql' ),
+ array( 'addField', 'filearchive', 'fa_sha1', 'patch-fa_sha1.sql' ),
+ array( 'addField', 'job', 'job_token', 'patch-job_token.sql' ),
);
}
diff --git a/includes/installer/OracleInstaller.php b/includes/installer/OracleInstaller.php
index 72ec800d55..845816e566 100644
--- a/includes/installer/OracleInstaller.php
+++ b/includes/installer/OracleInstaller.php
@@ -40,7 +40,7 @@ class OracleInstaller extends DatabaseInstaller {
protected $internalDefaults = array(
'_OracleDefTS' => 'USERS',
'_OracleTempTS' => 'TEMP',
- '_InstallUser' => 'SYSDBA',
+ '_InstallUser' => 'SYSTEM',
);
public $minimumVersion = '9.0.1'; // 9iR1
diff --git a/includes/installer/OracleUpdater.php b/includes/installer/OracleUpdater.php
index d81cf06b74..f946d59a96 100644
--- a/includes/installer/OracleUpdater.php
+++ b/includes/installer/OracleUpdater.php
@@ -70,8 +70,16 @@ class OracleUpdater extends DatabaseUpdater {
array( 'addTable', 'config', 'patch-config.sql' ),
array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
array( 'addIndex', 'revision', 'i05', 'patch-revision_i05_index.sql' ),
-
- // 1.21
+ array( 'dropField', 'category', 'cat_hidden', 'patch-cat_hidden.sql' ),
+
+ //1.21
+ array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ),
+ array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ),
+ array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ),
+ array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ),
+ array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ),
+ array( 'dropField', 'site_stats', 'ss_admins', 'patch-ss_admins.sql' ),
+ array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ),
// KEEP THIS AT THE BOTTOM!!
array( 'doRebuildDuplicateFunction' ),
diff --git a/includes/installer/PostgresInstaller.php b/includes/installer/PostgresInstaller.php
index 3ac2b3a8d2..882ec5323a 100644
--- a/includes/installer/PostgresInstaller.php
+++ b/includes/installer/PostgresInstaller.php
@@ -190,6 +190,7 @@ class PostgresInstaller extends DatabaseInstaller {
* other similar objects in the new DB.
* - create-tables: A connection with a role suitable for creating tables.
*
+ * @throws MWException
* @return Status object. On success, a connection object will be in the
* value member.
*/
diff --git a/includes/installer/PostgresUpdater.php b/includes/installer/PostgresUpdater.php
index 499a2d6671..2942c0b7f7 100644
--- a/includes/installer/PostgresUpdater.php
+++ b/includes/installer/PostgresUpdater.php
@@ -101,6 +101,8 @@ class PostgresUpdater extends DatabaseUpdater {
array( 'addPgField', 'archive', 'ar_len', 'INTEGER' ),
array( 'addPgField', 'archive', 'ar_page_id', 'INTEGER' ),
array( 'addPgField', 'archive', 'ar_parent_id', 'INTEGER' ),
+ array( 'addPgField', 'archive', 'ar_content_model', 'TEXT' ),
+ array( 'addPgField', 'archive', 'ar_content_format', 'TEXT' ),
array( 'addPgField', 'categorylinks', 'cl_sortkey_prefix', "TEXT NOT NULL DEFAULT ''"),
array( 'addPgField', 'categorylinks', 'cl_collation', "TEXT NOT NULL DEFAULT 0"),
array( 'addPgField', 'categorylinks', 'cl_type', "TEXT NOT NULL DEFAULT 'page'"),
@@ -114,6 +116,7 @@ class PostgresUpdater extends DatabaseUpdater {
array( 'addPgField', 'ipblocks', 'ipb_enable_autoblock', 'SMALLINT NOT NULL DEFAULT 1' ),
array( 'addPgField', 'ipblocks', 'ipb_parent_block_id', 'INTEGER DEFAULT NULL REFERENCES ipblocks(ipb_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED' ),
array( 'addPgField', 'filearchive', 'fa_deleted', 'SMALLINT NOT NULL DEFAULT 0' ),
+ array( 'addPgField', 'filearchive', 'fa_sha1', "TEXT NOT NULL DEFAULT ''" ),
array( 'addPgField', 'logging', 'log_deleted', 'SMALLINT NOT NULL DEFAULT 0' ),
array( 'addPgField', 'logging', 'log_id', "INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('logging_log_id_seq')" ),
array( 'addPgField', 'logging', 'log_params', 'TEXT' ),
@@ -125,6 +128,7 @@ class PostgresUpdater extends DatabaseUpdater {
array( 'addPgField', 'oldimage', 'oi_metadata', "BYTEA NOT NULL DEFAULT ''" ),
array( 'addPgField', 'oldimage', 'oi_minor_mime', "TEXT NOT NULL DEFAULT 'unknown'" ),
array( 'addPgField', 'oldimage', 'oi_sha1', "TEXT NOT NULL DEFAULT ''" ),
+ array( 'addPgField', 'page', 'page_content_model', 'TEXT' ),
array( 'addPgField', 'page_restrictions', 'pr_id', "INTEGER NOT NULL UNIQUE DEFAULT nextval('page_restrictions_pr_id_seq')" ),
array( 'addPgField', 'profiling', 'pf_memory', 'NUMERIC(18,10) NOT NULL DEFAULT 0' ),
array( 'addPgField', 'recentchanges', 'rc_deleted', 'SMALLINT NOT NULL DEFAULT 0' ),
@@ -139,6 +143,8 @@ class PostgresUpdater extends DatabaseUpdater {
array( 'addPgField', 'revision', 'rev_deleted', 'SMALLINT NOT NULL DEFAULT 0' ),
array( 'addPgField', 'revision', 'rev_len', 'INTEGER' ),
array( 'addPgField', 'revision', 'rev_parent_id', 'INTEGER DEFAULT NULL' ),
+ array( 'addPgField', 'revision', 'rev_content_model', 'TEXT' ),
+ array( 'addPgField', 'revision', 'rev_content_format', 'TEXT' ),
array( 'addPgField', 'site_stats', 'ss_active_users', "INTEGER DEFAULT '-1'" ),
array( 'addPgField', 'user_newtalk', 'user_last_timestamp', 'TIMESTAMPTZ' ),
array( 'addPgField', 'logging', 'log_user_text', "TEXT NOT NULL DEFAULT ''" ),
@@ -222,6 +228,7 @@ class PostgresUpdater extends DatabaseUpdater {
array( 'addPgIndex', 'logging', 'logging_page_id_time', '(log_page,log_timestamp)' ),
array( 'addPgIndex', 'iwlinks', 'iwl_prefix_title_from', '(iwl_prefix, iwl_title, iwl_from)' ),
array( 'addPgIndex', 'job', 'job_timestamp_idx', '(job_timestamp)' ),
+ array( 'addPgIndex', 'filearchive', 'fa_sha1', '(fa_sha1)' ),
array( 'checkIndex', 'pagelink_unique', array(
array('pl_from', 'int4_ops', 'btree', 0),
diff --git a/includes/installer/SqliteUpdater.php b/includes/installer/SqliteUpdater.php
index 95a61c19b2..c3f7a81674 100644
--- a/includes/installer/SqliteUpdater.php
+++ b/includes/installer/SqliteUpdater.php
@@ -95,8 +95,17 @@ class SqliteUpdater extends DatabaseUpdater {
array( 'dropField', 'category', 'cat_hidden', 'patch-cat_hidden.sql' ),
// 1.21
- array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ),
+ array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ),
+ array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ),
+ array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ),
+ array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ),
+ array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ),
+
+ array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ),
array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ),
+ array( 'addTable', 'sites', 'patch-sites.sql' ),
+ array( 'addField', 'filearchive', 'fa_sha1', 'patch-fa_sha1.sql' ),
+ array( 'addField', 'job', 'job_token', 'patch-job_token.sql' ),
);
}
diff --git a/includes/job/DoubleRedirectJob.php b/includes/job/DoubleRedirectJob.php
index f9c4b0fff2..b1b96b62ab 100644
--- a/includes/job/DoubleRedirectJob.php
+++ b/includes/job/DoubleRedirectJob.php
@@ -93,8 +93,8 @@ class DoubleRedirectJob extends Job {
wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" );
return true;
}
- $text = $targetRev->getText();
- $currentDest = Title::newFromRedirect( $text );
+ $content = $targetRev->getContent();
+ $currentDest = $content->getRedirectTarget();
if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" );
return true;
@@ -102,7 +102,7 @@ class DoubleRedirectJob extends Job {
# Check for a suppression tag (used e.g. in periodically archived discussions)
$mw = MagicWord::get( 'staticredirect' );
- if ( $mw->match( $text ) ) {
+ if ( $content->matchMagicWord( $mw ) ) {
wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" );
return true;
}
@@ -124,14 +124,10 @@ class DoubleRedirectJob extends Job {
$currentDest->getFragment(), $newTitle->getInterwiki() );
# Fix the text
- # Remember that redirect pages can have categories, templates, etc.,
- # so the regex has to be fairly general
- $newText = preg_replace( '/ \[ \[ [^\]]* \] \] /x',
- '[[' . $newTitle->getFullText() . ']]',
- $text, 1 );
-
- if ( $newText === $text ) {
- $this->setLastError( 'Text unchanged???' );
+ $newContent = $content->updateRedirect( $newTitle );
+
+ if ( $newContent->equals( $content ) ) {
+ $this->setLastError( 'Content unchanged???' );
return false;
}
@@ -143,7 +139,7 @@ class DoubleRedirectJob extends Job {
$reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
$this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
)->inContentLanguage()->text();
- $article->doEdit( $newText, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
+ $article->doEditContent( $newContent, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
$wgUser = $oldUser;
return true;
diff --git a/includes/job/Job.php b/includes/job/Job.php
index 270671e768..0d2803e1bf 100644
--- a/includes/job/Job.php
+++ b/includes/job/Job.php
@@ -23,11 +23,11 @@
/**
* Class to both describe a background job and handle jobs.
+ * The queue aspects of this class are now deprecated.
*
* @ingroup JobQueue
*/
abstract class Job {
-
/**
* @var Title
*/
@@ -47,172 +47,12 @@ abstract class Job {
* Run the job
* @return boolean success
*/
- abstract function run();
+ abstract public function run();
/*-------------------------------------------------------------------------
* Static functions
*------------------------------------------------------------------------*/
- /**
- * Pop a job of a certain type. This tries less hard than pop() to
- * actually find a job; it may be adversely affected by concurrent job
- * runners.
- *
- * @param $type string
- *
- * @return Job
- */
- static function pop_type( $type ) {
- wfProfilein( __METHOD__ );
-
- $dbw = wfGetDB( DB_MASTER );
-
- $dbw->begin( __METHOD__ );
-
- $row = $dbw->selectRow(
- 'job',
- '*',
- array( 'job_cmd' => $type ),
- __METHOD__,
- array( 'LIMIT' => 1, 'FOR UPDATE' )
- );
-
- if ( $row === false ) {
- $dbw->commit( __METHOD__ );
- wfProfileOut( __METHOD__ );
- return false;
- }
-
- /* Ensure we "own" this row */
- $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
- $affected = $dbw->affectedRows();
- $dbw->commit( __METHOD__ );
-
- if ( $affected == 0 ) {
- wfProfileOut( __METHOD__ );
- return false;
- }
-
- wfIncrStats( 'job-pop' );
- $namespace = $row->job_namespace;
- $dbkey = $row->job_title;
- $title = Title::makeTitleSafe( $namespace, $dbkey );
- $job = Job::factory( $row->job_cmd, $title, Job::extractBlob( $row->job_params ),
- $row->job_id );
-
- $job->removeDuplicates();
-
- wfProfileOut( __METHOD__ );
- return $job;
- }
-
- /**
- * Pop a job off the front of the queue
- *
- * @param $offset Integer: Number of jobs to skip
- * @return Job or false if there's no jobs
- */
- static function pop( $offset = 0 ) {
- wfProfileIn( __METHOD__ );
-
- $dbr = wfGetDB( DB_SLAVE );
-
- /* Get a job from the slave, start with an offset,
- scan full set afterwards, avoid hitting purged rows
-
- NB: If random fetch previously was used, offset
- will always be ahead of few entries
- */
-
- $conditions = self::defaultQueueConditions();
-
- $offset = intval( $offset );
- $options = array( 'ORDER BY' => 'job_id', 'USE INDEX' => 'PRIMARY' );
-
- $row = $dbr->selectRow( 'job', '*',
- array_merge( $conditions, array( "job_id >= $offset" ) ),
- __METHOD__,
- $options
- );
-
- // Refetching without offset is needed as some of job IDs could have had delayed commits
- // and have lower IDs than jobs already executed, blame concurrency :)
- //
- if ( $row === false ) {
- if ( $offset != 0 ) {
- $row = $dbr->selectRow( 'job', '*', $conditions, __METHOD__, $options );
- }
-
- if ( $row === false ) {
- wfProfileOut( __METHOD__ );
- return false;
- }
- }
-
- // Try to delete it from the master
- $dbw = wfGetDB( DB_MASTER );
- $dbw->begin( __METHOD__ );
- $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
- $affected = $dbw->affectedRows();
- $dbw->commit( __METHOD__ );
-
- if ( !$affected ) {
- $dbw->begin( __METHOD__ );
-
- // Failed, someone else beat us to it
- // Try getting a random row
- $row = $dbw->selectRow( 'job', array( 'minjob' => 'MIN(job_id)',
- 'maxjob' => 'MAX(job_id)' ), '1=1', __METHOD__ );
- if ( $row === false || is_null( $row->minjob ) || is_null( $row->maxjob ) ) {
- // No jobs to get
- $dbw->rollback( __METHOD__ );
- wfProfileOut( __METHOD__ );
- return false;
- }
- // Get the random row
- $row = $dbw->selectRow( 'job', '*',
- 'job_id >= ' . mt_rand( $row->minjob, $row->maxjob ), __METHOD__ );
- if ( $row === false ) {
- // Random job gone before we got the chance to select it
- // Give up
- $dbw->rollback( __METHOD__ );
- wfProfileOut( __METHOD__ );
- return false;
- }
- // Delete the random row
- $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
- $affected = $dbw->affectedRows();
- $dbw->commit( __METHOD__ );
-
- if ( !$affected ) {
- // Random job gone before we exclusively deleted it
- // Give up
- wfProfileOut( __METHOD__ );
- return false;
- }
- }
-
- // If execution got to here, there's a row in $row that has been deleted from the database
- // by this thread. Hence the concurrent pop was successful.
- wfIncrStats( 'job-pop' );
- $namespace = $row->job_namespace;
- $dbkey = $row->job_title;
- $title = Title::makeTitleSafe( $namespace, $dbkey );
-
- if ( is_null( $title ) ) {
- wfProfileOut( __METHOD__ );
- return false;
- }
-
- $job = Job::factory( $row->job_cmd, $title, Job::extractBlob( $row->job_params ), $row->job_id );
-
- // Remove any duplicates it may have later in the queue
- $job->removeDuplicates();
-
- wfProfileOut( __METHOD__ );
- return $job;
- }
-
/**
* Create the appropriate object to handle a specific job
*
@@ -223,7 +63,7 @@ abstract class Job {
* @throws MWException
* @return Job
*/
- static function factory( $command, Title $title, $params = false, $id = 0 ) {
+ public static function factory( $command, Title $title, $params = false, $id = 0 ) {
global $wgJobClasses;
if( isset( $wgJobClasses[$command] ) ) {
$class = $wgJobClasses[$command];
@@ -232,30 +72,6 @@ abstract class Job {
throw new MWException( "Invalid job command `{$command}`" );
}
- /**
- * @param $params
- * @return string
- */
- static function makeBlob( $params ) {
- if ( $params !== false ) {
- return serialize( $params );
- } else {
- return '';
- }
- }
-
- /**
- * @param $blob
- * @return bool|mixed
- */
- static function extractBlob( $blob ) {
- if ( (string)$blob !== '' ) {
- return unserialize( $blob );
- } else {
- return false;
- }
- }
-
/**
* Batch-insert a group of jobs into the queue.
* This will be wrapped in a transaction with a forced commit.
@@ -264,33 +80,10 @@ abstract class Job {
* removed later on, when the first one is popped.
*
* @param $jobs array of Job objects
+ * @deprecated 1.21
*/
- static function batchInsert( $jobs ) {
- if ( !count( $jobs ) ) {
- return;
- }
- $dbw = wfGetDB( DB_MASTER );
- $rows = array();
-
- /**
- * @var $job Job
- */
- foreach ( $jobs as $job ) {
- $rows[] = $job->insertFields();
- if ( count( $rows ) >= 50 ) {
- # Do a small transaction to avoid slave lag
- $dbw->begin( __METHOD__ );
- $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' );
- $dbw->commit( __METHOD__ );
- $rows = array();
- }
- }
- if ( $rows ) { // last chunk
- $dbw->begin( __METHOD__ );
- $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' );
- $dbw->commit( __METHOD__ );
- }
- wfIncrStats( 'job-insert', count( $jobs ) );
+ public static function batchInsert( $jobs ) {
+ return JobQueueGroup::singleton()->push( $jobs );
}
/**
@@ -301,45 +94,34 @@ abstract class Job {
* large batches of jobs can cause slave lag.
*
* @param $jobs array of Job objects
+ * @deprecated 1.21
*/
- static function safeBatchInsert( $jobs ) {
- if ( !count( $jobs ) ) {
- return;
- }
- $dbw = wfGetDB( DB_MASTER );
- $rows = array();
- foreach ( $jobs as $job ) {
- $rows[] = $job->insertFields();
- if ( count( $rows ) >= 500 ) {
- $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' );
- $rows = array();
- }
- }
- if ( $rows ) { // last chunk
- $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' );
- }
- wfIncrStats( 'job-insert', count( $jobs ) );
+ public static function safeBatchInsert( $jobs ) {
+ return JobQueueGroup::singleton()->push( $jobs, JobQueue::QoS_Atomic );
}
-
/**
- * SQL conditions to apply on most JobQueue queries
+ * Pop a job of a certain type. This tries less hard than pop() to
+ * actually find a job; it may be adversely affected by concurrent job
+ * runners.
*
- * Whenever we exclude jobs types from the default queue, we want to make
- * sure that queries to the job queue actually ignore them.
+ * @param $type string
+ * @return Job
+ * @deprecated 1.21
+ */
+ public static function pop_type( $type ) {
+ return JobQueueGroup::singleton()->get( $type )->pop();
+ }
+
+ /**
+ * Pop a job off the front of the queue.
+ * This is subject to $wgJobTypesExcludedFromDefaultQueue.
*
- * @return array SQL conditions suitable for Database:: methods
+ * @return Job or false if there's no jobs
+ * @deprecated 1.21
*/
- static function defaultQueueConditions( ) {
- global $wgJobTypesExcludedFromDefaultQueue;
- $conditions = array();
- if ( count( $wgJobTypesExcludedFromDefaultQueue ) > 0 ) {
- $dbr = wfGetDB( DB_SLAVE );
- foreach ( $wgJobTypesExcludedFromDefaultQueue as $cmdType ) {
- $conditions[] = "job_cmd != " . $dbr->addQuotes( $cmdType );
- }
- }
- return $conditions;
+ public static function pop() {
+ return JobQueueGroup::singleton()->pop();
}
/*-------------------------------------------------------------------------
@@ -352,77 +134,63 @@ abstract class Job {
* @param $params array|bool
* @param $id int
*/
- function __construct( $command, $title, $params = false, $id = 0 ) {
+ public function __construct( $command, $title, $params = false, $id = 0 ) {
$this->command = $command;
$this->title = $title;
$this->params = $params;
$this->id = $id;
- // A bit of premature generalisation
- // Oh well, the whole class is premature generalisation really
- $this->removeDuplicates = true;
+ $this->removeDuplicates = false; // expensive jobs may set this to true
}
/**
- * Insert a single job into the queue.
- * @return bool true on success
+ * @return integer May be 0 for jobs stored outside the DB
*/
- function insert() {
- $fields = $this->insertFields();
+ public function getId() {
+ return $this->id;
+ }
- $dbw = wfGetDB( DB_MASTER );
+ /**
+ * @return string
+ */
+ public function getType() {
+ return $this->command;
+ }
- if ( $this->removeDuplicates ) {
- $res = $dbw->select( 'job', array( '1' ), $fields, __METHOD__ );
- if ( $dbw->numRows( $res ) ) {
- return true;
- }
- }
- wfIncrStats( 'job-insert' );
- return $dbw->insert( 'job', $fields, __METHOD__ );
+ /**
+ * @return Title
+ */
+ public function getTitle() {
+ return $this->title;
}
/**
* @return array
*/
- protected function insertFields() {
- $dbw = wfGetDB( DB_MASTER );
- return array(
- 'job_id' => $dbw->nextSequenceValue( 'job_job_id_seq' ),
- 'job_cmd' => $this->command,
- 'job_namespace' => $this->title->getNamespace(),
- 'job_title' => $this->title->getDBkey(),
- 'job_timestamp' => $dbw->timestamp(),
- 'job_params' => Job::makeBlob( $this->params )
- );
+ public function getParams() {
+ return $this->params;
}
/**
- * Remove jobs in the job queue which are duplicates of this job.
- * This is deadlock-prone and so starts its own transaction.
+ * @return bool
*/
- function removeDuplicates() {
- if ( !$this->removeDuplicates ) {
- return;
- }
+ public function ignoreDuplicates() {
+ return $this->removeDuplicates;
+ }
- $fields = $this->insertFields();
- unset( $fields['job_id'] );
- unset( $fields['job_timestamp'] );
- $dbw = wfGetDB( DB_MASTER );
- $dbw->begin( __METHOD__ );
- $dbw->delete( 'job', $fields, __METHOD__ );
- $affected = $dbw->affectedRows();
- $dbw->commit( __METHOD__ );
- if ( $affected ) {
- wfIncrStats( 'job-dup-delete', $affected );
- }
+ /**
+ * Insert a single job into the queue.
+ * @return bool true on success
+ * @deprecated 1.21
+ */
+ public function insert() {
+ return JobQueueGroup::singleton()->push( $this );
}
/**
* @return string
*/
- function toString() {
+ public function toString() {
$paramString = '';
if ( $this->params ) {
foreach ( $this->params as $key => $value ) {
@@ -448,7 +216,7 @@ abstract class Job {
$this->error = $error;
}
- function getLastError() {
+ public function getLastError() {
return $this->error;
}
}
diff --git a/includes/job/JobQueue.php b/includes/job/JobQueue.php
new file mode 100644
index 0000000000..6409cffc41
--- /dev/null
+++ b/includes/job/JobQueue.php
@@ -0,0 +1,185 @@
+wiki = $params['wiki'];
+ $this->type = $params['type'];
+ }
+
+ /**
+ * Get a job queue object of the specified type.
+ * $params includes:
+ * class : what job class to use (determines job type)
+ * wiki : wiki ID of the wiki the jobs are for (defaults to current wiki)
+ * type : The name of the job types this queue handles
+ *
+ * @param $params array
+ * @return JobQueue
+ * @throws MWException
+ */
+ final public static function factory( array $params ) {
+ $class = $params['class'];
+ if ( !MWInit::classExists( $class ) ) {
+ throw new MWException( "Invalid job queue class '$class'." );
+ }
+ $obj = new $class( $params );
+ if ( !( $obj instanceof self ) ) {
+ throw new MWException( "Class '$class' is not a " . __CLASS__ . " class." );
+ }
+ return $obj;
+ }
+
+ /**
+ * @return string Wiki ID
+ */
+ final public function getWiki() {
+ return $this->wiki;
+ }
+
+ /**
+ * @return string Job type that this queue handles
+ */
+ final public function getType() {
+ return $this->type;
+ }
+
+ /**
+ * @return bool Quickly check if the queue is empty
+ */
+ final public function isEmpty() {
+ wfProfileIn( __METHOD__ );
+ $res = $this->doIsEmpty();
+ wfProfileOut( __METHOD__ );
+ return $res;
+ }
+
+ /**
+ * @see JobQueue::isEmpty()
+ * @return bool
+ */
+ abstract protected function doIsEmpty();
+
+ /**
+ * Push a batch of jobs into the queue
+ *
+ * @param $jobs array List of Jobs
+ * @param $flags integer Bitfield (supports JobQueue::QoS_Atomic)
+ * @return bool
+ */
+ final public function batchPush( array $jobs, $flags = 0 ) {
+ foreach ( $jobs as $job ) {
+ if ( $job->getType() !== $this->type ) {
+ throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
+ }
+ }
+ wfProfileIn( __METHOD__ );
+ $ok = $this->doBatchPush( $jobs, $flags );
+ if ( $ok ) {
+ wfIncrStats( 'job-insert', count( $jobs ) );
+ }
+ wfProfileOut( __METHOD__ );
+ return $ok;
+ }
+
+ /**
+ * @see JobQueue::batchPush()
+ * @return bool
+ */
+ abstract protected function doBatchPush( array $jobs, $flags );
+
+ /**
+ * Pop a job off of the queue
+ *
+ * @return Job|bool Returns false on failure
+ */
+ final public function pop() {
+ wfProfileIn( __METHOD__ );
+ $job = $this->doPop();
+ if ( $job ) {
+ wfIncrStats( 'job-pop' );
+ }
+ wfProfileOut( __METHOD__ );
+ return $job;
+ }
+
+ /**
+ * @see JobQueue::pop()
+ * @return Job
+ */
+ abstract protected function doPop();
+
+ /**
+ * Acknowledge that a job was completed
+ *
+ * @param $job Job
+ * @return bool
+ */
+ final public function ack( Job $job ) {
+ if ( $job->getType() !== $this->type ) {
+ throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
+ }
+ wfProfileIn( __METHOD__ );
+ $ok = $this->doAck( $job );
+ wfProfileOut( __METHOD__ );
+ return $ok;
+ }
+
+ /**
+ * @see JobQueue::ack()
+ * @return bool
+ */
+ abstract protected function doAck( Job $job );
+
+ /**
+ * Wait for any slaves or backup servers to catch up
+ *
+ * @return void
+ */
+ final public function waitForBackups() {
+ wfProfileIn( __METHOD__ );
+ $this->doWaitForBackups();
+ wfProfileOut( __METHOD__ );
+ }
+
+ /**
+ * @see JobQueue::waitForBackups()
+ * @return void
+ */
+ protected function doWaitForBackups() {}
+}
diff --git a/includes/job/JobQueueDB.php b/includes/job/JobQueueDB.php
new file mode 100644
index 0000000000..bea4a6f69a
--- /dev/null
+++ b/includes/job/JobQueueDB.php
@@ -0,0 +1,318 @@
+getEmptinessCacheKey();
+
+ $isEmpty = $wgMemc->get( $key );
+ if ( $isEmpty === 'true' ) {
+ return true;
+ } elseif ( $isEmpty === 'false' ) {
+ return false;
+ }
+
+ $found = $this->getSlaveDB()->selectField(
+ 'job', '1', array( 'job_cmd' => $this->type ), __METHOD__
+ );
+
+ $wgMemc->add( $key, $found ? 'false' : 'true', self::CACHE_TTL );
+ }
+
+ /**
+ * @see JobQueue::doBatchPush()
+ * @return bool
+ */
+ protected function doBatchPush( array $jobs, $flags ) {
+ if ( count( $jobs ) ) {
+ $dbw = $this->getMasterDB();
+
+ $rows = array();
+ foreach ( $jobs as $job ) {
+ $rows[] = $this->insertFields( $job );
+ }
+ $atomic = ( $flags & self::QoS_Atomic );
+ $key = $this->getEmptinessCacheKey();
+ $ttl = self::CACHE_TTL;
+
+ $dbw->onTransactionIdle( function() use ( $dbw, $rows, $atomic, $key, $ttl ) {
+ global $wgMemc;
+
+ $autoTrx = $dbw->getFlag( DBO_TRX ); // automatic begin() enabled?
+ if ( $atomic ) {
+ $dbw->begin(); // wrap all the job additions in one transaction
+ } else {
+ $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
+ }
+ try {
+ foreach ( array_chunk( $rows, 50 ) as $rowBatch ) { // avoid slave lag
+ $dbw->insert( 'job', $rowBatch, __METHOD__ );
+ }
+ } catch ( DBError $e ) {
+ if ( $atomic ) {
+ $dbw->rollback();
+ } else {
+ $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+ }
+ throw $e;
+ }
+ if ( $atomic ) {
+ $dbw->commit();
+ } else {
+ $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+ }
+
+ $wgMemc->set( $key, 'false', $ttl );
+ } );
+ }
+
+ return true;
+ }
+
+ /**
+ * @see JobQueue::doPop()
+ * @return Job|bool
+ */
+ protected function doPop() {
+ global $wgMemc;
+
+ $uuid = wfRandomString( 32 ); // pop attempt
+
+ $dbw = $this->getMasterDB();
+ $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
+
+ $job = false; // job popped off
+ $autoTrx = $dbw->getFlag( DBO_TRX ); // automatic begin() enabled?
+ $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
+ try {
+ do { // retry when our row is invalid or deleted as a duplicate
+ $row = false; // row claimed
+ $rand = mt_rand( 0, self::MAX_JOB_RANDOM ); // encourage concurrent UPDATEs
+ $gte = (bool)mt_rand( 0, 1 ); // find rows with rand before/after $rand
+ // Try to reserve a DB row...
+ if ( $this->claim( $uuid, $rand, $gte ) || $this->claim( $uuid, $rand, !$gte ) ) {
+ // Fetch any row that we just reserved...
+ $row = $dbw->selectRow( 'job', '*',
+ array( 'job_cmd' => $this->type, 'job_token' => $uuid ), __METHOD__ );
+ // Check if another process deleted it as a duplicate
+ if ( !$row ) {
+ wfDebugLog( 'JobQueueDB', "Row deleted as duplicate by another process." );
+ continue; // try again
+ }
+ // Get the job object from the row...
+ $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
+ if ( !$title ) {
+ $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
+ wfDebugLog( 'JobQueueDB', "Row has invalid title '{$row->job_title}'." );
+ continue; // try again
+ }
+ $job = Job::factory( $row->job_cmd, $title,
+ self::extractBlob( $row->job_params ), $row->job_id );
+ // Delete any *other* duplicate jobs in the queue...
+ if ( $job->ignoreDuplicates() && strlen( $row->job_sha1 ) ) {
+ $dbw->delete( 'job',
+ array( 'job_sha1' => $row->job_sha1,
+ "job_id != {$dbw->addQuotes( $row->job_id )}" ),
+ __METHOD__
+ );
+ }
+ } else {
+ $wgMemc->set( $this->getEmptinessCacheKey(), 'true', self::CACHE_TTL );
+ }
+ break; // done
+ } while( true );
+ } catch ( DBError $e ) {
+ $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+ throw $e;
+ }
+ $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+
+ return $job;
+ }
+
+ /**
+ * Reserve a row with a single UPDATE without holding row locks over RTTs...
+ * @param $uuid string 32 char hex string
+ * @param $rand integer Random unsigned integer (31 bits)
+ * @param $gte bool Search for job_random >= $random (otherwise job_random <= $random)
+ * @return integer Number of affected rows
+ */
+ protected function claim( $uuid, $rand, $gte ) {
+ $dbw = $this->getMasterDB();
+ $dir = $gte ? 'ASC' : 'DESC';
+ $ineq = $gte ? '>=' : '<=';
+ if ( $dbw->getType() === 'mysql' ) {
+ // Per http://bugs.mysql.com/bug.php?id=6980, we can't use subqueries on the
+ // same table being changed in an UPDATE query in MySQL (gives Error: 1093).
+ // Oracle and Postgre have no such limitation. However, MySQL offers an
+ // alternative here by supporting ORDER BY + LIMIT for UPDATE queries.
+ // The DB wrapper functions do not support this, so it's done manually.
+ $dbw->query( "UPDATE {$dbw->tableName( 'job' )}
+ SET
+ job_token = {$dbw->addQuotes( $uuid ) },
+ job_token_timestamp = {$dbw->addQuotes( $dbw->timestamp() )}
+ WHERE (
+ job_cmd = {$dbw->addQuotes( $this->type )}
+ AND job_token = {$dbw->addQuotes( '' )}
+ AND job_random {$ineq} {$dbw->addQuotes( $rand )}
+ ) ORDER BY job_random {$dir} LIMIT 1",
+ __METHOD__
+ );
+ } else {
+ // Use a subquery to find the job, within an UPDATE to claim it.
+ // This uses as much of the DB wrapper functions as possible.
+ $dbw->update( 'job',
+ array( 'job_token' => $uuid, 'job_token_timestamp' => $dbw->timestamp() ),
+ array( 'job_id = (' .
+ $dbw->selectSQLText( 'job', 'job_id',
+ array(
+ 'job_cmd' => $this->type,
+ 'job_token' => '',
+ "job_random {$ineq} {$dbw->addQuotes( $rand )}" ),
+ __METHOD__,
+ array( 'ORDER BY' => "job_random {$dir}", 'LIMIT' => 1 ) ) .
+ ')'
+ ),
+ __METHOD__
+ );
+ }
+ return $dbw->affectedRows();
+ }
+
+ /**
+ * @see JobQueue::doAck()
+ * @return Job|bool
+ */
+ protected function doAck( Job $job ) {
+ $dbw = $this->getMasterDB();
+ if ( $dbw->trxLevel() ) {
+ wfWarn( "Attempted to ack a job in a transaction; committing first." );
+ $dbw->commit(); // push existing transaction
+ }
+
+ $autoTrx = $dbw->getFlag( DBO_TRX ); // automatic begin() enabled?
+ $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
+ try {
+ // Delete a row with a single DELETE without holding row locks over RTTs...
+ $dbw->delete( 'job', array( 'job_cmd' => $this->type, 'job_id' => $job->getId() ) );
+ } catch ( Exception $e ) {
+ $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+ throw $e;
+ }
+ $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
+
+ return true;
+ }
+
+ /**
+ * @see JobQueue::doWaitForBackups()
+ * @return void
+ */
+ protected function doWaitForBackups() {
+ wfWaitForSlaves();
+ }
+
+ /**
+ * @return DatabaseBase
+ */
+ protected function getSlaveDB() {
+ return wfGetDB( DB_SLAVE, array(), $this->wiki );
+ }
+
+ /**
+ * @return DatabaseBase
+ */
+ protected function getMasterDB() {
+ return wfGetDB( DB_MASTER, array(), $this->wiki );
+ }
+
+ /**
+ * @param $job Job
+ * @return array
+ */
+ protected function insertFields( Job $job ) {
+ // Rows that describe the nature of the job
+ $descFields = array(
+ 'job_cmd' => $job->getType(),
+ 'job_namespace' => $job->getTitle()->getNamespace(),
+ 'job_title' => $job->getTitle()->getDBkey(),
+ 'job_params' => self::makeBlob( $job->getParams() ),
+ );
+ // Additional job metadata
+ $dbw = $this->getMasterDB();
+ $metaFields = array(
+ 'job_id' => $dbw->nextSequenceValue( 'job_job_id_seq' ),
+ 'job_timestamp' => $dbw->timestamp(),
+ 'job_sha1' => wfBaseConvert( sha1( serialize( $descFields ) ), 16, 36, 32 ),
+ 'job_random' => mt_rand( 0, self::MAX_JOB_RANDOM )
+ );
+ return ( $descFields + $metaFields );
+ }
+
+ /**
+ * @return string
+ */
+ private function getEmptinessCacheKey() {
+ list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+ return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'isempty' );
+ }
+
+ /**
+ * @param $params
+ * @return string
+ */
+ protected static function makeBlob( $params ) {
+ if ( $params !== false ) {
+ return serialize( $params );
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * @param $blob
+ * @return bool|mixed
+ */
+ protected static function extractBlob( $blob ) {
+ if ( (string)$blob !== '' ) {
+ return unserialize( $blob );
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/includes/job/JobQueueGroup.php b/includes/job/JobQueueGroup.php
new file mode 100644
index 0000000000..69bcf011be
--- /dev/null
+++ b/includes/job/JobQueueGroup.php
@@ -0,0 +1,160 @@
+wiki = $wiki;
+ }
+
+ /**
+ * @param $wiki string Wiki ID
+ * @return JobQueueGroup
+ */
+ public static function singleton( $wiki = false ) {
+ $wiki = ( $wiki === false ) ? wfWikiID() : $wiki;
+ if ( !isset( self::$instances[$wiki] ) ) {
+ self::$instances[$wiki] = new self( $wiki );
+ }
+ return self::$instances[$wiki];
+ }
+
+ /**
+ * @param $type string
+ * @return JobQueue Job queue object for a given queue type
+ */
+ public function get( $type ) {
+ global $wgJobTypeConf;
+
+ $conf = false;
+ if ( isset( $wgJobTypeConf[$type] ) ) {
+ $conf = $wgJobTypeConf[$type];
+ } else {
+ $conf = $wgJobTypeConf['default'];
+ }
+
+ return JobQueue::factory( array(
+ 'class' => $conf['class'],
+ 'wiki' => $this->wiki,
+ 'type' => $type,
+ ) );
+ }
+
+ /**
+ * Insert jobs into the respective queues of with the belong
+ *
+ * @param $jobs Job|array A single Job or a list of Jobs
+ * @return bool
+ */
+ public function push( $jobs ) {
+ $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+
+ $jobsByType = array(); // (job type => list of jobs)
+ foreach ( $jobs as $job ) {
+ if ( $job instanceof Job ) {
+ $jobsByType[$job->getType()][] = $job;
+ } else {
+ throw new MWException( "Attempted to push a non-Job object into a queue." );
+ }
+ }
+
+ $ok = true;
+ foreach ( $jobsByType as $type => $jobs ) {
+ if ( !$this->get( $type )->batchPush( $jobs ) ) {
+ $ok = false;
+ }
+ }
+
+ return $ok;
+ }
+
+ /**
+ * Pop a job off one of the job queues
+ *
+ * @param $type integer JobQueueGroup::TYPE_* constant
+ * @return Job|bool Returns false on failure
+ */
+ public function pop( $type = self::TYPE_DEFAULT ) {
+ $types = ( $type == self::TYPE_DEFAULT )
+ ? $this->getDefaultQueueTypes()
+ : $this->getQueueTypes();
+ shuffle( $types ); // avoid starvation
+
+ foreach ( $types as $type ) { // for each queue...
+ $job = $this->get( $type )->pop();
+ if ( $job ) {
+ return $job; // found
+ }
+ }
+
+ return false; // no jobs found
+ }
+
+ /**
+ * Acknowledge that a job was completed
+ *
+ * @param $job Job
+ * @return bool
+ */
+ public function ack( Job $job ) {
+ return $this->get( $job->getType() )->ack( $job );
+ }
+
+ /**
+ * Get the list of queue types
+ *
+ * @return array List of strings
+ */
+ public function getQueueTypes() {
+ global $wgJobClasses;
+
+ return array_keys( $wgJobClasses );
+ }
+
+ /**
+ * Get the list of default queue types
+ *
+ * @return array List of strings
+ */
+ public function getDefaultQueueTypes() {
+ global $wgJobTypesExcludedFromDefaultQueue;
+
+ return array_diff( $this->getQueueTypes(), $wgJobTypesExcludedFromDefaultQueue );
+ }
+}
diff --git a/includes/job/RefreshLinksJob.php b/includes/job/RefreshLinksJob.php
index b23951c6f5..a29f29fe64 100644
--- a/includes/job/RefreshLinksJob.php
+++ b/includes/job/RefreshLinksJob.php
@@ -27,9 +27,9 @@
* @ingroup JobQueue
*/
class RefreshLinksJob extends Job {
-
function __construct( $title, $params = '', $id = 0 ) {
parent::__construct( 'refreshLinks', $title, $params, $id );
+ $this->removeDuplicates = true; // job is expensive
}
/**
@@ -70,16 +70,16 @@ class RefreshLinksJob extends Job {
}
public static function runForTitleInternal( Title $title, Revision $revision, $fname ) {
- global $wgParser, $wgContLang;
+ global $wgContLang;
wfProfileIn( $fname . '-parse' );
$options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
- $parserOutput = $wgParser->parse(
- $revision->getText(), $title, $options, true, true, $revision->getId() );
+ $content = $revision->getContent();
+ $parserOutput = $content->getParserOutput( $title, $revision->getId(), $options, false );
wfProfileOut( $fname . '-parse' );
wfProfileIn( $fname . '-update' );
- $updates = $parserOutput->getSecondaryDataUpdates( $title, false );
+ $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput );
DataUpdate::runUpdates( $updates );
wfProfileOut( $fname . '-update' );
}
diff --git a/includes/libs/JavaScriptMinifier.php b/includes/libs/JavaScriptMinifier.php
index 0b4be9ae74..db5326c7cf 100644
--- a/includes/libs/JavaScriptMinifier.php
+++ b/includes/libs/JavaScriptMinifier.php
@@ -59,7 +59,7 @@ class JavaScriptMinifier {
const TYPE_DO = 15; // keywords: case, var, finally, else, do, try
const TYPE_FUNC = 16; // keywords: function
const TYPE_LITERAL = 17; // all literals, identifiers and unrecognised tokens
-
+
// Sanity limit to avoid excessive memory usage
const STACK_LIMIT = 1000;
@@ -385,7 +385,7 @@ class JavaScriptMinifier {
self::TYPE_LITERAL => true
)
);
-
+
// Rules for when newlines should be inserted if
// $statementsOnOwnLine is enabled.
// $newlineBefore is checked before switching state,
@@ -514,7 +514,7 @@ class JavaScriptMinifier {
return self::parseError($s, $end, 'Number with several E' );
}
$end++;
-
+
// + sign is optional; - sign is required.
$end += strspn( $s, '-+', $end );
$len = strspn( $s, '0123456789', $end );
@@ -564,13 +564,13 @@ class JavaScriptMinifier {
$out .= ' ';
$lineLength++;
}
-
+
$out .= $token;
$lineLength += $end - $pos; // += strlen( $token )
$last = $s[$end - 1];
$pos = $end;
$newlineFound = false;
-
+
// Output a newline after the token if required
// This is checked before AND after switching state
$newlineAdded = false;
@@ -589,7 +589,7 @@ class JavaScriptMinifier {
} elseif( isset( $goto[$state][$type] ) ) {
$state = $goto[$state][$type];
}
-
+
// Check for newline insertion again
if ( $statementsOnOwnLine && !$newlineAdded && isset( $newlineAfter[$state][$type] ) ) {
$out .= "\n";
@@ -598,7 +598,7 @@ class JavaScriptMinifier {
}
return $out;
}
-
+
static function parseError($fullJavascript, $position, $errorMsg) {
// TODO: Handle the error: trigger_error, throw exception, return false...
return false;
diff --git a/includes/logging/LogEntry.php b/includes/logging/LogEntry.php
index 37560d8055..2ca525e159 100644
--- a/includes/logging/LogEntry.php
+++ b/includes/logging/LogEntry.php
@@ -335,9 +335,9 @@ class ManualLogEntry extends LogEntryBase {
/**
* Constructor.
- *
+ *
* @since 1.19
- *
+ *
* @param string $type
* @param string $subtype
*/
@@ -357,9 +357,9 @@ class ManualLogEntry extends LogEntryBase {
* '4:color' => 'blue',
* 'animal' => 'dog'
* );
- *
+ *
* @since 1.19
- *
+ *
* @param $parameters array Associative array
*/
public function setParameters( $parameters ) {
@@ -368,9 +368,9 @@ class ManualLogEntry extends LogEntryBase {
/**
* Set the user that performed the action being logged.
- *
+ *
* @since 1.19
- *
+ *
* @param User $performer
*/
public function setPerformer( User $performer ) {
@@ -379,9 +379,9 @@ class ManualLogEntry extends LogEntryBase {
/**
* Set the title of the object changed.
- *
+ *
* @since 1.19
- *
+ *
* @param Title $target
*/
public function setTarget( Title $target ) {
@@ -390,9 +390,9 @@ class ManualLogEntry extends LogEntryBase {
/**
* Set the timestamp of when the logged action took place.
- *
+ *
* @since 1.19
- *
+ *
* @param string $timestamp
*/
public function setTimestamp( $timestamp ) {
@@ -401,9 +401,9 @@ class ManualLogEntry extends LogEntryBase {
/**
* Set a comment associated with the action being logged.
- *
+ *
* @since 1.19
- *
+ *
* @param string $comment
*/
public function setComment( $comment ) {
@@ -412,9 +412,9 @@ class ManualLogEntry extends LogEntryBase {
/**
* TODO: document
- *
+ *
* @since 1.19
- *
+ *
* @param integer $deleted
*/
public function setDeleted( $deleted ) {
diff --git a/includes/logging/LogFormatter.php b/includes/logging/LogFormatter.php
index 7586bb6548..7d94a30bd4 100644
--- a/includes/logging/LogFormatter.php
+++ b/includes/logging/LogFormatter.php
@@ -429,6 +429,7 @@ class LogFormatter {
* value in consideration.
* @param $title Title the page
* @param $parameters array query parameters
+ * @throws MWException
* @return String
*/
protected function makePageLink( Title $title = null, $parameters = array() ) {
diff --git a/includes/logging/LogPage.php b/includes/logging/LogPage.php
index d96a5ea51a..90393ea8d6 100644
--- a/includes/logging/LogPage.php
+++ b/includes/logging/LogPage.php
@@ -220,7 +220,7 @@ class LogPage {
}
/**
- * Generate text for a log entry.
+ * Generate text for a log entry.
* Only LogFormatter should call this function.
*
* @param $type String: log type
diff --git a/includes/media/Bitmap.php b/includes/media/Bitmap.php
index 99ac854ba1..ca9b6363cb 100644
--- a/includes/media/Bitmap.php
+++ b/includes/media/Bitmap.php
@@ -623,7 +623,8 @@ class BitmapHandler extends ImageHandler {
* to filter down to users.
*
* @param $path string The file path
- * @param $scene string The scene specification, or false if there is none
+ * @param bool|string $scene The scene specification, or false if there is none
+ * @throws MWException
* @return string
*/
function escapeMagickInput( $path, $scene = false ) {
@@ -654,7 +655,8 @@ class BitmapHandler extends ImageHandler {
* helper function for escapeMagickInput() and escapeMagickOutput().
*
* @param $path string The file path
- * @param $scene string The scene specification, or false if there is none
+ * @param bool|string $scene The scene specification, or false if there is none
+ * @throws MWException
* @return string
*/
protected function escapeMagickPath( $path, $scene = false ) {
diff --git a/includes/media/BitmapMetadataHandler.php b/includes/media/BitmapMetadataHandler.php
index 0a195547eb..2b04f78b53 100644
--- a/includes/media/BitmapMetadataHandler.php
+++ b/includes/media/BitmapMetadataHandler.php
@@ -240,7 +240,7 @@ class BitmapMetadataHandler {
unset( $baseArray['comment'] );
unset( $baseArray['xmp'] );
-
+
$baseArray['metadata'] = $meta->getMetadataArray();
$baseArray['metadata']['_MW_GIF_VERSION'] = GIFMetadataExtractor::VERSION;
return $baseArray;
@@ -257,6 +257,7 @@ class BitmapMetadataHandler {
*
* The various exceptions this throws are caught later.
* @param $filename String
+ * @throws MWException
* @return Array The metadata.
*/
static public function Tiff ( $filename ) {
diff --git a/includes/media/DjVuImage.php b/includes/media/DjVuImage.php
index 6aef562b12..e2fcaa932c 100644
--- a/includes/media/DjVuImage.php
+++ b/includes/media/DjVuImage.php
@@ -228,7 +228,7 @@ class DjVuImage {
function retrieveMetaData() {
global $wgDjvuToXML, $wgDjvuDump, $wgDjvuTxt;
wfProfileIn( __METHOD__ );
-
+
if ( isset( $wgDjvuDump ) ) {
# djvudump is faster as of version 3.5
# http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583
@@ -247,7 +247,7 @@ class DjVuImage {
$xml = null;
}
# Text layer
- if ( isset( $wgDjvuTxt ) ) {
+ if ( isset( $wgDjvuTxt ) ) {
wfProfileIn( 'djvutxt' );
$cmd = wfEscapeShellArg( $wgDjvuTxt ) . ' --detail=page ' . wfEscapeShellArg( $this->mFilename ) ;
wfDebug( __METHOD__.": $cmd\n" );
@@ -260,7 +260,7 @@ class DjVuImage {
$reg = <<' . htmlspecialchars( $revision->getUserText() ) . $this->msg( 'colon-separator' )->inContentLanguage()->escaped() . htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) . "
\nJo ynstellings binne oanmakke.
Ferjit net se oan jo foarkar oan te passen.',
diff --git a/languages/messages/MessagesGa.php b/languages/messages/MessagesGa.php
index 043555ca1f..cee9a1e280 100644
--- a/languages/messages/MessagesGa.php
+++ b/languages/messages/MessagesGa.php
@@ -476,7 +476,7 @@ An fáth ná ''$2''.",
# Login and logout pages
'logouttext' => "'''Tá tú logáilte amach anois.'''
-Is féidir leat an {{SITENAME}} a úsáid fós gan ainm, nó is féidir leat [[Special:UserLogin|logáil isteach arÃs]] mar an úsáideoir céanna, nó mar úsáideoir eile.
+Is féidir leat an {{SITENAME}} a úsáid fós gan ainm, nó is féidir leat [$1 logáil isteach arÃs] mar an úsáideoir céanna, nó mar úsáideoir eile.
Tabhair faoi deara go taispeáinfear roinnt leathanaigh mar atá tú logáilte isteach fós, go dtà go ghlanfá amach do taisce lÃonleitheora.",
'welcomecreation' => '== Tá fáilte romhat, $1! ==
diff --git a/languages/messages/MessagesGag.php b/languages/messages/MessagesGag.php
index bab74e7a18..55020872f0 100644
--- a/languages/messages/MessagesGag.php
+++ b/languages/messages/MessagesGag.php
@@ -375,8 +375,8 @@ Yalvarêrız benneyiniz URL - i hem raport ediniz bunu bir [[Special:ListUsers/s
'viewsourcetext' => 'Var nicä görmää hem kopiya etmää bu yapraa gelinirini:',
# Login and logout pages
-'logouttext' => 'Sessiyayı kapattınız.
-Åindi var nicä devam etmää kullanmaa {{SITENAME}} saytını kimlik göstermedän yaki [[Special:UserLogin|enidän sessiya açmaa]] (ister hep o kullanıcı adıylan, ister baÅka bir kullanıcı adıylan). O zamana kadar ani web brauzerinizin keÅi temizlenecek bir takım sayfalar var nicä görünsün sansın sessiya hep açık.',
+'logouttext' => "Sessiyayı kapattınız.
+Åindi var nicä devam etmää kullanmaa {{SITENAME}} saytını kimlik göstermedän yaki [$1 enidän sessiya açmaa] (ister hep o kullanıcı adıylan, ister baÅka bir kullanıcı adıylan). O zamana kadar ani web brauzerinizin keÅi temizlenecek bir takım sayfalar var nicä görünsün sansın sessiya hep açık.",
'welcomecreation' => '== HoÅ geldiniz $1! ==
Esapınız açıldı. Unutmayın [[Special:Preferences|{{SITENAME}} preferences]] seçimnerin diiÅtirmää.',
diff --git a/languages/messages/MessagesGan_hans.php b/languages/messages/MessagesGan_hans.php
index 5d90f998d6..a373aeb0f1 100644
--- a/languages/messages/MessagesGan_hans.php
+++ b/languages/messages/MessagesGan_hans.php
@@ -176,7 +176,6 @@ $messages = array(
'qbbrowse' => 'æ¥ç',
'qbedit' => 'ç¼å',
'qbpageoptions' => '个页',
-'qbpageinfo' => '个页信æ¯',
'qbmyoptions' => 'å¶ð ®¶é项',
'qbspecialpages' => 'ç¹æ®é¡µ',
'faq' => 'FAQ',
@@ -401,7 +400,7 @@ $2',
# Login and logout pages
'logouttext' => "'''æ±éåºæ£å©ã'''
-æ¥å°æ±å¾å¿å使ç¨{{SITENAME}}ï¼æ[[Special:UserLogin|ç»å
¥è¿]]ãé¤éæ±å å¥æµè§å¨ç¼åï¼åªæå页é¢å¯è½ä¼æ¥å°è¯æ±ç³»ç»å
¥ç¶æã",
+æ¥å°æ±å¾å¿å使ç¨{{SITENAME}}ï¼æ[$1 ç»å
¥è¿]ãé¤éæ±å å¥æµè§å¨ç¼åï¼åªæå页é¢å¯è½ä¼æ¥å°è¯æ±ç³»ç»å
¥ç¶æã",
'welcomecreation' => '== 欢è¿, $1! ==
建æ£å©æ±ð ®¶å¸æ·ï¼è«ð«§è®°è®¾ç½® [[Special:Preferences|{{SITENAME}}𠮶个人åæ°]]ã',
diff --git a/languages/messages/MessagesGan_hant.php b/languages/messages/MessagesGan_hant.php
index 35812d471a..060e337273 100644
--- a/languages/messages/MessagesGan_hant.php
+++ b/languages/messages/MessagesGan_hant.php
@@ -198,7 +198,6 @@ $messages = array(
'qbbrowse' => 'æ¥ç',
'qbedit' => '編寫',
'qbpageoptions' => 'ç®é ',
-'qbpageinfo' => 'ç®é ä¿¡æ¯',
'qbmyoptions' => 'æå°é é¢',
'qbspecialpages' => 'ç¹æ®é ',
'faq' => 'FAQ',
@@ -423,7 +422,7 @@ $2',
# Login and logout pages
'logouttext' => "'''æ±éåºæ£å©ã'''
-æ¥å°æ±å¾å¿å使ç¨{{SITENAME}}ï¼æ[[Special:UserLogin|ç»å
¥é]]ãé¤éæ±åªå¥ç覽å¨ç·©åï¼é»æåé é¢å¯è½ææ¥å°è©±æ±ä¿ç»å
¥çæ
ã",
+æ¥å°æ±å¾å¿å使ç¨{{SITENAME}}ï¼æ[$1 ç»å
¥é]ãé¤éæ±åªå¥ç覽å¨ç·©åï¼é»æåé é¢å¯è½ææ¥å°è©±æ±ä¿ç»å
¥çæ
ã",
'welcomecreation' => '== æ¡è¿, $1! ==
建æ£å©æ±å°å¸³æ¶ï¼è«èªºè¨è¨ç½® [[Special:Preferences|{{SITENAME}}å°å人åæ¸]]ã',
diff --git a/languages/messages/MessagesGd.php b/languages/messages/MessagesGd.php
index 0fe10b5e21..4be696f658 100644
--- a/languages/messages/MessagesGd.php
+++ b/languages/messages/MessagesGd.php
@@ -431,7 +431,7 @@ Seo am mìneachadh: "\'\'$2\'\'".',
# Login and logout pages
'logouttext' => "'''Chaidh do logadh a-mach.'''
-'S urrainn dhut leantainn air adhart a' cleachdadh {{SITENAME}} a chleachdadh gun urra no 's urrainn dhut [[Special:UserLogin|logadh a-steach a-rithist]] mar an dearbh-chleachdaiche no mar chleachdaiche eile.
+'S urrainn dhut leantainn air adhart a' cleachdadh {{SITENAME}} a chleachdadh gun urra no 's urrainn dhut [$1 logadh a-steach a-rithist] mar an dearbh-chleachdaiche no mar chleachdaiche eile.
Thoir an aire gum bi coltas air cuide dhe na duilleagan mar gum biodh tu air logadh a-steach gus am falamhaich thu tasgadan a' bhrabhsair agad.",
'welcomecreation' => '== FÃ ilte ort, $1! ==
Chaidh an cunntas agad a chruthachadh.
diff --git a/languages/messages/MessagesGl.php b/languages/messages/MessagesGl.php
index 49b3e86f4c..7552e54bbd 100644
--- a/languages/messages/MessagesGl.php
+++ b/languages/messages/MessagesGl.php
@@ -8,6 +8,7 @@
* @file
*
* @author Alma
+ * @author Dferg
* @author Elisardojm
* @author Gallaecio
* @author Gustronico
@@ -15,6 +16,7 @@
* @author Lameiro
* @author Prevert
* @author Toliño
+ * @author Vivaelcelta
* @author Xosé
* @author ××¢×¨× ×¨××× ××ר×
*/
@@ -367,14 +369,13 @@ $messages = array(
'qbbrowse' => 'Navegar',
'qbedit' => 'Editar',
'qbpageoptions' => 'Esta páxina',
-'qbpageinfo' => 'Contexto',
'qbmyoptions' => 'As miñas páxinas',
'qbspecialpages' => 'Páxinas especiais',
'faq' => 'Preguntas máis frecuentes',
'faqpage' => 'Project:FAQ',
# Vector skin
-'vector-action-addsection' => 'Engadir un comentario',
+'vector-action-addsection' => 'Nova sección',
'vector-action-delete' => 'Borrar',
'vector-action-move' => 'Mover',
'vector-action-protect' => 'Protexer',
@@ -488,7 +489,7 @@ $1',
'newmessagesdifflink' => 'diferenzas coa revisión anterior',
'youhavenewmessagesfromusers' => 'Ten $1 {{PLURAL:$3|doutro usuario|de $3 usuarios}} ($2).',
'youhavenewmessagesmanyusers' => 'Ten $1 de moitos usuarios ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|unha mensaxe nova|$1 mensaxes novas}}',
+'newmessageslinkplural' => '{{PLURAL:$1|unha mensaxe nova|mensaxes novas}}',
'newmessagesdifflinkplural' => '{{PLURAL:$1|última modificación|últimas modificacións}}',
'youhavenewmessagesmulti' => 'Ten mensaxes novas en $1',
'editsection' => 'editar',
@@ -586,8 +587,8 @@ Se cadra, xa a borrou alguén.',
'delete-hook-aborted' => 'O borrado foi abortado polo asociador.
Este non deu ningunha explicación.',
'badtitle' => 'TÃtulo incorrecto',
-'badtitletext' => 'O tÃtulo da páxina pedida non era válido, estaba baleiro ou proviña dunha ligazón interlingua ou interwiki incorrecta.
-Pode conter un ou máis caracteres dos que non se poden empregar nos tÃtulos.',
+'badtitletext' => 'O tÃtulo da páxina pedida non era válido, estaba baleiro ou proviña dunha ligazón interlingüÃstica ou interwiki incorrecta.
+Poida que conteña un ou máis caracteres dos que non se poden empregar nos tÃtulos.',
'perfcached' => 'Esta información é da memoria caché e pode ser que non estea completamente actualizada. Hai un máximo de {{PLURAL:$1|$1 resultado dispoñible|$1 resultados dispoñibles}} na caché.',
'perfcachedts' => 'Esta información é da memoria caché. Ãltima actualización: $2 ás $3. Hai un máximo de {{PLURAL:$4|$4 resultado dispoñible|$4 resultados dispoñibles}} na caché.',
'querypage-no-updates' => 'Neste momento están desactivadas as actualizacións nesta páxina. O seu contido non se modificará.',
@@ -632,7 +633,7 @@ O administrador que bloqueou o repositorio achegou este motivo: "$3".',
# Login and logout pages
'logouttext' => "'''Agora está fóra do sistema.'''
-Pode continuar usando {{SITENAME}} de xeito anónimo, ou pode [[Special:UserLogin|acceder de novo]] co mesmo nome de usuario ou con outro.
+Pode continuar usando {{SITENAME}} de xeito anónimo, ou pode [$1 acceder de novo] co mesmo nome de usuario ou con outro.
Teña en conta que mentres non se limpa a memoria caché do seu navegador algunhas páxinas poden continuar aparecendo como se aÃnda estivese dentro do sistema.",
'welcomecreation' => '== Reciba a nosa benvida, $1! ==
A súa conta foi creada correctamente.
@@ -873,7 +874,7 @@ A razón que deu foi a seguinte:
Pode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.
-Teña en conta que non pode empregar "enviarlle un correo electrónico a este usuario" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e e que o seu uso non fose bloqueado.
+Teña en conta que non pode empregar a caracterÃstica "Enviar un correo electrónico a este usuario" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e e que o seu uso non fose bloqueado.
O seu enderezo IP actual é $3 e o ID do bloqueo é #$5.
Por favor, inclúa eses datos nas consultas que faga.',
@@ -1012,6 +1013,15 @@ Semella que foi borrada.',
'edit-already-exists' => 'Non se pode crear a nova páxina.
Esta xa existe.',
'defaultmessagetext' => 'Texto predeterminado',
+'content-failed-to-parse' => 'Erro ao analizar o contido de "$2" para o modelo de $1: $3',
+'invalid-content-data' => 'Datos de contido inválidos',
+'content-not-allowed-here' => 'O contido "$1" non está permitido na páxina "[[$2]]"',
+
+# Content models
+'content-model-wikitext' => 'texto wiki',
+'content-model-text' => 'texto simple',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Aviso:''' Esta páxina contén demasiados analizadores de funcións de chamadas.
@@ -1932,7 +1942,7 @@ Poida que queira editar a descrición da [$2 páxina de descrición do ficheiro]
'shared-repo-from' => 'de $1',
'shared-repo' => 'repositorio compartido',
'filepage.css' => '/** O CSS que se coloque aquà será incluÃdo na páxina de descrición do ficheiro, asà como nos wikis de clientes estranxeiros */',
-'upload-disallowed-here' => 'Por desgraza, non pode sobrescribir esta imaxe.',
+'upload-disallowed-here' => 'Non pode sobrescribir este ficheiro.',
# File reversion
'filerevert' => 'Reverter $1',
@@ -2140,7 +2150,8 @@ Pode precisar máis a vista seleccionando o tipo de rexistro, o nome do usuario
'allpagesnext' => 'Seguinte',
'allpagessubmit' => 'Mostrar',
'allpagesprefix' => 'Mostrar as páxinas que comezan co prefixo:',
-'allpagesbadtitle' => 'O tÃtulo dado á páxina non era válido ou contiña un prefixo inter-linguas ou inter-wikis. Pode que conteña un ou máis caracteres que non se poden empregar nos tÃtulos.',
+'allpagesbadtitle' => 'O tÃtulo dado á páxina non era válido ou tiña un prefixo interlingüÃstico ou interwiki.
+Poida que conteña un ou máis caracteres dos que non se poden empregar nos tÃtulos.',
'allpages-bad-ns' => '{{SITENAME}} carece do espazo de nomes "$1".',
'allpages-hide-redirects' => 'Agochar as redireccións',
@@ -2480,7 +2491,8 @@ O texto destas revisións eliminadas só está á disposición dos administrador
'undeletedrevisions' => '$1 {{PLURAL:$1|revisión restaurada|revisións restauradas}}',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|revisión|revisións}} e $2 {{PLURAL:$2|ficheiro restaurado|ficheiros restaurados}}',
'undeletedfiles' => '$1 {{PLURAL:$1|ficheiro restaurado|ficheiros restaurados}}',
-'cannotundelete' => 'Non se restaurou a páxina porque alguén xa o fixo antes.',
+'cannotundelete' => 'Houbo un erro durante a restauración:
+$1',
'undeletedpage' => "'''A páxina \"\$1\" foi restaurada'''
Comprobe o [[Special:Log/delete|rexistro de borrados]] para ver as entradas recentes no rexistro de páxinas eliminadas e restauradas.",
@@ -2645,7 +2657,7 @@ O motivo do bloqueo de $1 é: "$2"',
'blocklogpage' => 'Rexistro de bloqueos',
'blocklog-showlog' => 'Este usuario xa foi bloqueado con anterioridade. Velaquà está o rexistro de bloqueos por se quere consultalo:',
'blocklog-showsuppresslog' => 'Este usuario xa foi bloqueado e agochado con anterioridade. Velaquà está o rexistro de supresións por se quere consultalo:',
-'blocklogentry' => 'bloqueou a "[[$1]]" cun tempo de duración de $2 $3',
+'blocklogentry' => 'bloqueou a [[$1]] cun tempo de duración de $2 $3',
'reblock-logentry' => 'cambiou as configuracións do bloqueo de "[[$1]]" cunha caducidade de $2 $3',
'blocklogtext' => 'Este é o rexistro das accións de bloqueo e desbloqueo de usuarios.
Non se listan os enderezos IP bloqueados automaticamente.
@@ -2783,6 +2795,7 @@ Quérea borrar para deixar sitio para facer o traslado?',
'immobile-target-namespace-iw' => 'A ligazón interwiki non é válida para o movemento da páxina.',
'immobile-source-page' => 'Esta páxina non se pode mover.',
'immobile-target-page' => 'Non se pode mover a ese tÃtulo.',
+'bad-target-model' => 'O destino desexado utiliza un modelo de contido diferente. Non se pode facer a conversión entre $1 e $2.',
'imagenocrossnamespace' => 'Non se pode mover o ficheiro a un espazo de nomes que non o admite',
'nonfile-cannot-move-to-file' => 'Non se pode mover algo que non é un ficheiro ao espazo de nomes reservado aos ficheiros',
'imagetypemismatch' => 'A nova extensión do fiheiro non coincide co seu tipo',
@@ -3048,6 +3061,7 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
# Info page
'pageinfo-title' => 'Información sobre "$1"',
+'pageinfo-not-current' => 'Unicamente se pode mostrar a información sobre a revisión actual.',
'pageinfo-header-basic' => 'Información básica',
'pageinfo-header-edits' => 'Historial de edicións',
'pageinfo-header-restrictions' => 'Protección da páxina',
@@ -3072,10 +3086,17 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
'pageinfo-authors' => 'Número total de autores distintos',
'pageinfo-recent-edits' => 'Número de edicións recentes (durante os últimos $1)',
'pageinfo-recent-authors' => 'Número de autores distintos recentes',
-'pageinfo-restriction' => 'Protección da páxina ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|Palabra máxica|Palabras máxicas}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|CategorÃa agochada|CategorÃas agochadas}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Modelo incluÃdo|Modelos incluÃdos}} ($1)',
+'pageinfo-toolboxlink' => 'Información da páxina',
+'pageinfo-redirectsto' => 'Redirixe cara a',
+'pageinfo-redirectsto-info' => 'información',
+'pageinfo-contentpage' => 'Cóntase como páxina de contido',
+'pageinfo-contentpage-yes' => 'Si',
+'pageinfo-protect-cascading' => 'Protección en serie activada',
+'pageinfo-protect-cascading-yes' => 'Si',
+'pageinfo-protect-cascading-from' => 'Protección en serie activada',
# Skin names
'skinname-standard' => 'Clásica',
@@ -3661,6 +3682,7 @@ O código de confirmación caduca o $6 ás $7.',
# Scary transclusion
'scarytranscludedisabled' => '[A transclusión interwiki está desactivada]',
'scarytranscludefailed' => '[Fallou a busca do modelo "$1"]',
+'scarytranscludefailed-httpstatus' => '[Fallou a busca do modelo "$1": HTTP $2]',
'scarytranscludetoolong' => '[O enderezo URL é demasiado longo]',
# Delete conflict
diff --git a/languages/messages/MessagesGrc.php b/languages/messages/MessagesGrc.php
index 9aec4926fa..d287798932 100644
--- a/languages/messages/MessagesGrc.php
+++ b/languages/messages/MessagesGrc.php
@@ -180,7 +180,6 @@ $messages = array(
'qbbrowse' => 'á¼Î»Î¬Î¿Ï
',
'qbedit' => 'ÎεÏαγÏάÏειν',
'qbpageoptions' => 'á¼Î´Îµ ἡ δÎλÏοÏ',
-'qbpageinfo' => 'ΣÏ
γκείμενον',
'qbmyoptions' => 'Îá¼± δÎλÏοι μοÏ
',
'qbspecialpages' => 'Îἰδικαὶ δÎλÏοι',
'faq' => 'Τὰ ÏÎ¿Î»Î»Î¬ÎºÎ¹Ï Î±á¼°ÏηθÎνÏα',
@@ -413,7 +412,7 @@ $2',
# Login and logout pages
'logouttext' => "'''Îῦν Î³á½°Ï á¼ÏοÏÏ
νδεδεμÎÎ½Î¿Ï Îµá¼°.'''
-á¼Î¾ÎµÏÏί Ïοι ÏÏá¿Ïθαι Ïá¿· {{SITENAME}} á¼Î½ÏνÏμÏÏ, á¼¢ á¼Î¾ÎµÏÏί Ïοι [[Special:UserLogin|ÏÏ
νδεá¿Ïθαι Ïάλιν]] á½¡Ï á½ Î±á½Ïá½¸Ï á¼¢ á½¡Ï á¼Î»Î»Î¿Ï ÏÏÏμενοÏ.
+á¼Î¾ÎµÏÏί Ïοι ÏÏá¿Ïθαι Ïá¿· {{SITENAME}} á¼Î½ÏνÏμÏÏ, á¼¢ á¼Î¾ÎµÏÏί Ïοι [$1 ÏÏ
νδεá¿Ïθαι Ïάλιν] á½¡Ï á½ Î±á½Ïá½¸Ï á¼¢ á½¡Ï á¼Î»Î»Î¿Ï ÏÏÏμενοÏ.
ÎÎλÏοι ÏÎ¹Î½á½²Ï Î´Î, á¼Î½Î´ÎµÏομÎνÏÏ, δειÏθήÏονÏαι á½¡Ï á¼Î½ á¼ÎºÎ¼á½´Î½ ÏÏ
νδεδεμÎÎ½Î¿Ï á¾Ï, μÎÏÏι á½
Ïε καθαίÏá¿Ï Ïὴν λανθάνοÏ
Ïαν μνήμην Ïοῦ ÏÏογÏάμμαÏÎ¿Ï ÏλοηγήÏεÏÏ ÏοÏ
.",
'welcomecreation' => '== á½©Ï Îµá½ ÏαÏÎÏÏηÏ, $1! ==
diff --git a/languages/messages/MessagesGsw.php b/languages/messages/MessagesGsw.php
index f405e2ac5c..7048d38643 100644
--- a/languages/messages/MessagesGsw.php
+++ b/languages/messages/MessagesGsw.php
@@ -278,7 +278,6 @@ $messages = array(
'qbbrowse' => 'Blättre',
'qbedit' => 'Ãndere',
'qbpageoptions' => 'Sytenoptione',
-'qbpageinfo' => 'Sytedate',
'qbmyoptions' => 'Ystellige',
'qbspecialpages' => 'Spezialsytene',
'faq' => 'Froge, wo vilmol gstellt wäre',
@@ -291,7 +290,7 @@ $messages = array(
'vector-action-protect' => 'Schitze',
'vector-action-undelete' => 'Widerhärstelle',
'vector-action-unprotect' => 'Syteschutz ändere',
-'vector-simplesearch-preference' => 'Erwytereti Suechvorschleg aktiviere (nume Vector)',
+'vector-simplesearch-preference' => 'Vereifachti Suechvorschleg aktiviere (nume Vector)',
'vector-view-create' => 'Aalege',
'vector-view-edit' => 'Bearbeite',
'vector-view-history' => 'Versionsgschicht',
@@ -536,7 +535,7 @@ Dr Administrator, wu dr Schrybzuegriff gsperrt het, het dää Grund aagee: â$3
# Login and logout pages
'logouttext' => "'''Du bisch jetz abgmäldet.'''
-Du chasch {{SITENAME}} wyter anonym bruche, oder Du chasch di [[Special:UserLogin|wider aamälde]] mit em glyche oder eme andere Benutzername.
+Du chasch {{SITENAME}} wyter anonym bruche, oder Du chasch di [$1 wider aamälde] mit em glyche oder eme andere Benutzername.
Ochat: s cha syy, ass bstimmti Syte eso aazeigt wäre, wie wänn Du allno aagmäldet wärsch, bis Du dr Zwischespycher vu Dyym Browser glescht hesch.",
'welcomecreation' => '==Willcho, $1!==
@@ -896,6 +895,15 @@ Si isch schyns glescht wore.',
'edit-no-change' => 'Dyyni Bearbeitig isch ignoriert wore, wel kei Ãnderig am Täxt gmacht woren isch.',
'edit-already-exists' => 'Di nej Syte het nid chenne aaglait wäre, wel s si scho git.',
'defaultmessagetext' => 'Standardtext',
+'content-failed-to-parse' => 'Parse vum Inhalt $2 fir Modell $1 fählgschlaa: $3',
+'invalid-content-data' => 'Uugiltigi Inhaltsdate',
+'content-not-allowed-here' => 'Dr Inhalt â$1â isch uf dr Syte [[$2]] nit erlaubt',
+
+# Content models
+'content-model-wikitext' => 'Wikitext',
+'content-model-text' => 'Klartext',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Achtig: In däre Syte het s z vyyl Ufruef vu ufwändige Parserfunktione.
@@ -2314,7 +2322,9 @@ In däm Fall darf di neijscht Version nit markiert wäre oder ihre Status muess
'undeletedrevisions' => '{{PLURAL:$1|ei Revision|$1 Revisione}} wider zruckgholt.',
'undeletedrevisions-files' => '{{PLURAL:$1|1 Version|$1 Versione}} un {{PLURAL:$2|1 Datei|$2 Dateie}} sin widerhärgstellt wore',
'undeletedfiles' => '{{PLURAL:$1|1 Datei isch|$1 Dateie sin}} widerhärgstellt wore',
-'cannotundelete' => 'Widerhärstellig isch nit gange; eber ander het villicht d Syte scho widerhärgstellt.',
+'cannotundelete' => 'D Widerhärstellig isch nit gange:
+
+$1',
'undeletedpage' => "'''â$1â''' isch widerhärgstellt wore.
Im [[Special:Log/delete|Lesch-Logbuech]] findsch e Ibersicht vu dr gleschte un widerhärgstellte Syte.",
@@ -2597,6 +2607,7 @@ D Syte â[[:$1]]â gits scho. Wottsch du si lösche, zume Platz zum verschiebe
'immobile-target-namespace-iw' => 'E Interwiki-Link isch kei gültigs Ziil für e Syteverschiebig.',
'immobile-source-page' => 'Die Syte cha nüt verschobe werde.',
'immobile-target-page' => 'Uf die Ziilsyte cha nüt verschobe werde.',
+'bad-target-model' => 'Di gwinsche Ziilsyte brucht e ander Inhaltsmodell. S Inhaltsmodell $1 cha nit in s Inhaltsmodell $2 umgwandlet wäre.',
'imagenocrossnamespace' => 'Dateie chönne nüt ussem {{ns:file}}-Namensruum use verschobe werde',
'nonfile-cannot-move-to-file' => 'Nit-Dateie chenne nit in dr Datei-Namensruum verschobe wäre',
'imagetypemismatch' => 'D nöii Dateierwiiterig passt nüt zu sym Typ',
@@ -2846,10 +2857,10 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
'pageinfo-authors' => 'Aazahl vu unterschidlige Autore',
'pageinfo-recent-edits' => 'Aazahl vu dr letschte Bearbeitige (innerhalb vu $1)',
'pageinfo-recent-authors' => 'Aazahl vu unterschidlige Autore',
-'pageinfo-restriction' => 'Syteschutz ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|Magischs Wort|Magischi Werter}} ($1)',
'pageinfo-hidden-categories' => 'Versteckti {{PLURAL:$1|Kategori|Kategorie}} ($1)',
'pageinfo-templates' => 'Yybundeni {{PLURAL:$1|Vorlag|Vorlage}} ($1)',
+'pageinfo-toolboxlink' => 'Informatione zue dr Syte',
# Patrolling
'markaspatrolleddiff' => 'Als patrulyrt markyre',
@@ -3419,6 +3430,7 @@ Dää Bstetigungscode isch giltig bis am $4.',
# Scary transclusion
'scarytranscludedisabled' => '[Interwiki-Yybindig isch deaktiviert]',
'scarytranscludefailed' => '[Vorlage-Yybindig fir $1 isch gescheitert]',
+'scarytranscludefailed-httpstatus' => '[Vorlagenabruef fählgschlaa fir $1: HTTP $2]',
'scarytranscludetoolong' => '[URL isch z lang]',
# Delete conflict
diff --git a/languages/messages/MessagesGu.php b/languages/messages/MessagesGu.php
index 6f4e07719f..80fe8aabcc 100644
--- a/languages/messages/MessagesGu.php
+++ b/languages/messages/MessagesGu.php
@@ -229,7 +229,7 @@ $messages = array(
'july' => 'àªà«àª²àª¾àª',
'august' => 'àªàªàª¸à«àª',
'september' => 'સપà«àªà«àª®à«àª¬àª°',
-'october' => 'àªàªàªà«àª¬àª°',
+'october' => 'àªàªà«àªà«àª¬àª°',
'november' => 'નવà«àª®à«àª¬àª°',
'december' => 'ડિસà«àª®à«àª¬àª°',
'january-gen' => 'àªàª¾àª¨à«àª¯à«àªàª°à«',
@@ -241,7 +241,7 @@ $messages = array(
'july-gen' => 'àªà«àª²àª¾àª',
'august-gen' => 'àªàªàª¸à«àª',
'september-gen' => 'સપà«àªà«àª®à«àª¬àª°',
-'october-gen' => 'àªàªàªà«àª¬àª°',
+'october-gen' => 'àªàªà«àªà«àª¬àª°',
'november-gen' => 'નવà«àª®à«àª¬àª°',
'december-gen' => 'ડિસà«àª®à«àª¬àª°',
'jan' => 'àªàª¾àª¨à«àª¯à«',
@@ -294,7 +294,6 @@ $messages = array(
'qbbrowse' => 'બà«àª°àª¾àªàª',
'qbedit' => 'ફà«àª°àª«àª¾àª° àªàª°à«',
'qbpageoptions' => 'ઠપાનà«àª',
-'qbpageinfo' => 'સàªàª¦àª°à«àª',
'qbmyoptions' => 'મારાઠપાનાàª',
'qbspecialpages' => 'àªàª¾àª¸ પાનાàª',
'faq' => 'FAQ
@@ -418,6 +417,8 @@ $1',
'youhavenewmessages' => 'તમારા માàªà« $1 ($2).',
'newmessageslink' => 'નવà«àª¨ સàªàª¦à«àª¶',
'newmessagesdifflink' => 'àªà«àª²à«àª²à« ફà«àª°àª«àª¾àª°',
+'youhavenewmessagesfromusers' => 'àªàªªàª¨à« માàªà« {{PLURAL:$3|àª
નà«àª¯ સàªà«àª¯àª¨àª¾|$3 àª
નà«àª¯ સàªà«àª¯à«àª¨àª¾}} $1 àªà«. ($2).',
+'youhavenewmessagesmanyusers' => 'àªàªªàª¨à« માàªà« $1 àªà«. ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|નવૠસàªàª¦à«àª¶|નવાઠસàªàª¦à«àª¶àª¾àª}}',
'newmessagesdifflinkplural' => 'àªà«àª²à«àª²àª¾ {{PLURAL:$1|ફà«àª°àª«àª¾àª°|ફà«àª°àª«àª¾àª°à«}}',
'youhavenewmessagesmulti' => '$1 àªàªªàª° તમારા માàªà« નવૠસàªàª¦à«àª¶ àªà«.',
@@ -531,10 +532,11 @@ Query: $2',
'protectedpagetext' => 'ફà«àª°àª«àª¾àª°à« થતાઠરà«àªàªµàª¾ માàªà« ઠપાનà«àª સà«àª°àªà«àª·àª¿àª¤ àªàª°àªµàª¾àª®àª¾àª àªàªµà«àª¯à«àª àªà«.',
'viewsourcetext' => 'àªàªª ઠપાનાનૠમà«àª³ સà«àª°à«àª¤ નિહાળૠશàªà« àªà« àª
નૠતà«àª¨à« નàªàª² (copy) પણ àªàª°à« શàªà« àªà«:',
'viewyourtext' => "àªàªª ઠપાનાનાઠ'''àªàªªàª¨àª¾àª સàªàªªàª¾àª¦àª¨à«'''નૠમà«àª³ સà«àª°à«àª¤ નિહાળૠશàªà« àªà« àª
નૠતà«àª¨à« નàªàª² (copy) પણ àªàª°à« શàªà« àªà«:",
-'protectedinterface' => 'ઠપાનà«àª સà«àª«à«àªàªµà«àª° માàªà« àªàª¨à«àªàª°àª«à«àªàª¸ àªà«àªà«àª¸àª àªàªªà« àªà«, àª
નૠતà«àª¨à« દà«àª°à«àªªàª¯à«àª રà«àªàªµàª¾ માàªà« સà«àª¥àªàª¿àª¤ àªàª°à«àª¯à«àª àªà«.',
+'protectedinterface' => 'ઠપાનà«àª સà«àª«à«àªàªµà«àª° માàªà« àªàª¨à«àªàª°àª«à«àªàª¸ àªà«àªà«àª¸àª àªàªªà« àªà«, àª
નૠતà«àª¨à« દà«àª°à«àªªàª¯à«àª રà«àªàªµàª¾ માàªà« સà«àª¥àªàª¿àª¤ àªàª°à«àª¯à«àª àªà«.
+બધાàªàª વિàªàª¿ માàªà« àªàª¾àª·àª¾àªàª¤àª° àªàª®à«àª°àªµàª¾ àªà« બદલવા માàªà«, àªà«àªªàª¾ àªàª°à« [//translatewiki.net/ translatewiki.net], મિડિયાવિàªàª¿ સà«àª¥àª¾àª¨àª¿àª¯àªàª°àª£ પà«àª°àªàª²à«àªª, વાપરà«.',
'editinginterface' => "'''àªà«àª¤àªµàª£à«:''' તમૠàªà« પાનામાઠફà«àª°àª«àª¾àª° àªàª°à« રહà«àª¯àª¾ àªà« તૠપાનà«àª સà«àª«à«àªàªµà«àª° માàªà« àªàª¨à«àªàª°àª«à«àª¸ àªà«àªà«àª¸àª પà«àª°à« પાડૠàªà«.
-àª
હà«àªàª¨à« બદલાવ બà«àªàª¾ સàªà«àª¯à«àª¨àª¾ àªàª¨à«àªàª°àª«à«àª¸àª¨àª¾àª દà«àªàª¾àªµ àªàªªàª° àª
સરàªàª°à«àª¤àª¾ બનશà«.
-àªàª¾àª·àª¾àªàª¤àª° àªàª°àªµàª¾ માàªà« àªà«àªªàª¾ àªàª°à« [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] -- મિડિયાવિàªà« લà«àªàª²àª¾àªàªà«àª¶àª¨ પà«àª°àªàª²à«àªª વાપરà«.",
+àª
હà«àªàª¨à« બદલાવ ઠવિàªàª¿ પર àªàªªàª¸à«àª¥àª¿àª¤ àª
નà«àª¯ સàªà«àª¯à«àª¨àª¾ àªàª¨à«àªàª°àª«à«àª¸àª¨àª¾àª દà«àªàª¾àªµ àªàªªàª° àª
સરàªàª°à«àª¤àª¾ બનશà«.
+બધાàªàª વિàªàª¿ માàªà« àªàª¾àª·àª¾àªàª¤àª° àªàª®à«àª°àªµàª¾ àªà« બદલવા માàªà« àªà«àªªàª¾ àªàª°à« [//translatewiki.net/ translatewiki.net], મિડિયાવિàªà« સà«àª¥àª¾àª¨àª¿àª¯àªàª°àª£ પà«àª°àªàª²à«àªª, વાપરà«.",
'sqlhidden' => '(àªà«àªªà« SQL àªà«àªµà«àª°à«)',
'cascadeprotected' => 'ઠપાના પર ફà«àª°àª«àª¾àª° પà«àª°àª¤àª¿àª¬àªàª§àª¿àª¤ àªà« àªà«àª® àªà« ઠપાનà«àª {{PLURAL:$1|àªàªµà«àª પાનà«àª|àªàªµàª¾ પાના}} માઠશામિલ àªà« àªà«àª®àª¾àª àª
નà«àªµàª°à«àª¤à« (પàªàª¥àª¿àª¯àª¾àª®àª¯)સàªàª°àªà«àª·àª£ સàªà«àª°à«àª¯ àªà« :
$2',
@@ -557,7 +559,7 @@ $2',
# Login and logout pages
'logouttext' => "'''તમૠ(લà«àª àªàªàª àªàª°à«àª¨à«) બહાર નિàªàª³à« àªà«àªà«àª¯àª¾ àªà«.'''
-તમૠàª
નામૠતરà«àªà« {{SITENAME}} વાપરવાનà«àª àªàª¾àª²à« રાàªà« શàªà« àªà«, àªà« પàªà« તà«àª¨àª¾ તૠઠàªà« àª
લઠસàªà«àª¯ તરà«àªà« [[Special:UserLogin|ફરૠપà«àª°àªµà«àª¶]] àªàª°à« શàªà« àªà«.
+તમૠàª
નામૠતરà«àªà« {{SITENAME}} વાપરવાનà«àª àªàª¾àª²à« રાàªà« શàªà« àªà«, àªà« પàªà« તà«àª¨àª¾ તૠઠàªà« àª
લઠસàªà«àª¯ તરà«àªà« [$1 ફરૠપà«àª°àªµà«àª¶] àªàª°à« શàªà« àªà«.
ધà«àª¯àª¾àª¨ રાàªà« àªà« àªà«àª¯àª¾àª સà«àª§à« તમૠતમારા બà«àª°àª¾àªàªàª°àª¨à« àªà«
શ સાફ નહà«àª àªàª°à« તà«àª¯àª¾àª સà«àª§à« àªà«àªàª²àª¾àª પાનાઠતમૠપà«àª°àªµà«àª¶à« àªà«àªà«àª¯àª¾ àªà« તà«àª® બતાવશà«.",
'welcomecreation' => '== તમારà«àª સà«àªµàª¾àªàª¤ àªà« $1! ==
તમારà«àª àªàª¾àª¤à«àª બનૠàªàª¯à«àª àªà«.
@@ -820,8 +822,7 @@ $2
તમૠ[[Special:Search/{{PAGENAME}}|ઠશબà«àª¦]] ધરાવતાઠàª
નà«àª¯ લà«àªà« શà«àª§à« શàªà« àªà«, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} સàªàª²àªà«àª¨ માહિતિ પતà«àª°àªà«àª®àª¾àª શà«àª§à« શàªà« àªà«],
àª
થવા [{{fullurl:{{FULLPAGENAME}}|action=edit}} ઠપાનામાઠફà«àª°àª«àª¾àª° àªàª°à«] માહિતિ àªàª®à«àª°àªµàª¾àª¨à«àª શરૠàªàª°à« શàªà« àªà«.',
'noarticletext-nopermission' => 'ઠપાનામાઠહાલમાઠàªà«àª માહિતિ નથà«.
-તમૠ[[Special:Search/{{PAGENAME}}|ઠશબà«àª¦]] ધરાવતાઠàª
નà«àª¯ લà«àªà« શà«àª§à« શàªà« àªà«, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} સàªàª²àªà«àª¨ માહિતિ પતà«àª°àªà«àª®àª¾àª શà«àª§à« શàªà« àªà«],
-àª
થવા [{{fullurl:{{FULLPAGENAME}}|action=edit}} ઠપાનામાઠફà«àª°àª«àª¾àª° àªàª°à«] માહિતિ àªàª®à«àª°àªµàª¾àª¨à«àª શરૠàªàª°à« શàªà« àªà«.',
+તમૠ[[Special:Search/{{PAGENAME}}|ઠશબà«àª¦]] ધરાવતાઠàª
નà«àª¯ લà«àªà« શà«àª§à« શàªà« àªà«, àª
થવા [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} સàªàª²àªà«àª¨ માહિતિ પતà«àª°àªà«àª®àª¾àª શà«àª§à« શàªà« àªà«], પરàªàª¤à« તમનૠઠપાનà«àª બનાવવાનૠમàªàªà«àª°à« નથà«.',
'userpage-userdoesnotexist' => 'સàªà«àª¯ àªàª¾àª¤à«àª "struck out àªàª¾àª¢à« નાàªàªµàª¾àª®àª¾àª àªàªµàª¶à«.વધારામાàª, àª
સà«àª¤àª¿àª¤à«àªµàª®àª¾àª નહà«àª¯ તà«àªµà« ફાàªàª²àª§àª°àª¾àªµàª¤àª¾àª પાનાનૠયાદૠ[[:$1]].',
'wantedfiletext-nocat' => 'નà«àªà«àª¨à« ફાàªàª² વપરાઠàªà« પણ તૠàª
સà«àª¤àª¿àª¤à«àªµàª®àª¾àª નથà«. ફાàªàª² àª
હà«àª હà«àªµàª¾ તà«àªµà« ફાàªàª²à«àª¨à« પણ પરદà«àª¶à« રà«àªªà«àª¸à«àªàª°à«àª®àª¾àªàª¥à« ફાàªàª²à« યાદà«àª®àª¾àª àªà«àª શàªàª¾àª¯ àªà«. àªàªµàª¾ પà«àª¨àª°àª¾àªµàª°à«àª¤àª¨à«àª¨à« struck out àªàª¾àª¢à« નાàªàªµàª¾àª®àª¾àª àªàªµàª¶à«.',
-'wantedtemplates' => 'àªà«àªàª¤àª¾ ઢાàªàªàª¾',
+'wantedtemplates' => 'àªàªà«àªàª¿àª¤ ઢાàªàªàª¾',
'mostlinked' => 'સà«àª¥à« વધૠàªàª¡à«àª દà«àªµàª¾àª°àª¾ àªà«àª¡àª¾àª¯à«àª² પાનà«àª',
'mostlinkedcategories' => 'સà«àª¥à« વધૠશà«àª°à«àª£à«àª દà«àªµàª¾àª°àª¾ àªà«àª¡àª¾àª¯à«àª² પાનà«àª',
'mostlinkedtemplates' => 'સà«àª¥à« વધૠઢાàªàªàª¾àª દà«àªµàª¾àª°àª¾ àªà«àª¡àª¾àª¯à«àª² પાનà«àª',
'mostcategories' => 'સà«àª¥à« વધૠશà«àª°à«àª£à«àª ધરાવતાઠપાનાàª',
'mostimages' => 'સà«àª¥à« વધૠàªàª¡à«àª દà«àªµàª¾àª°àª¾ àªà«àª¡àª¾àª¯à«àª²à« ફાàªàª²',
+'mostinterwikis' => 'સà«àª¥à« વધૠàªàªàª¤àª°àªµàª¿àªà« àªàª¡à«àª ધરાવતાઠપાના',
'mostrevisions' => 'સà«àª¥à« વધૠફà«àª°àª«àª¾àª° થયà«àª²àª¾ પાનાàª',
'prefixindex' => 'પà«àª°à«àªµàª¾àªà«àª·àª° સà«àªàª¿',
'prefixindex-namespace' => 'શરà«àªàª¤àª®àª¾àª ($1 namespace) ધરાવતા પાનાàª',
'shortpages' => 'નાનાઠપાનાàª',
'longpages' => 'લાàªàª¬àª¾ પાનાàª',
-'deadendpages' => 'લà«àª સમાપà«àª¤àª¿ પાના',
+'deadendpages' => 'મà«àª¤àª¾àªàª¤ પાના',
'deadendpagestext' => 'નà«àªà«àª¨àª¾ પાના {{SITENAME}}ના àª
નà«àª¯ પાનાનૠàªàª¡à«àª દà«àªµàª¾àª°àª¾ નથૠàªà«àª¡àª¤àª¾àª.',
'protectedpages' => 'સàªàª°àªà«àª·àª¿àª¤ પાનાàª',
'protectedpages-indef' => 'ફàªà«àª¤ àª
નિશà«àªàª¿àª¤ સà«àª°àªà«àª·àª¾ ધરાવતા પાના',
@@ -2052,8 +2059,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. àªà«àª',
'sp-deletedcontributions-contribs' => 'યà«àªàª¦àª¾àª¨',
# Special:LinkSearch
-'linksearch' => 'બાહà«àª¯ àªàª¡à«àª શà«àª§',
-'linksearch-pat' => 'શà«àª§àª¾ àªàª²à«àª',
+'linksearch' => 'બાહà«àª¯ àªàª¡à«àª શà«àª§à«',
+'linksearch-pat' => 'શà«àª§ àªàª²à«àª',
'linksearch-ns' => 'નામાવàªàª¾àª¶:',
'linksearch-ok' => 'શà«àª§',
'linksearch-text' => '"*.wikipedia.org" àªà«àªµàª¾ વાàªàª²à«àª¡àª¾àªàª¾àª°à«àª¡ àª
હà«àª વાપરà«àª¯àª¾ હà«àª શàªà« àªà«.
@@ -2373,8 +2380,8 @@ To perform a selective restoration, check the boxes corresponding to the revisio
'undeletedrevisions' => '{{PLURAL:$1|૧ સàªàªªàª¾àª¦àª¨|$1 સàªàªªàª¾àª¦àª¨à«}} પà«àª¨ સà«àª¥àª¾àªªàª¿àª¤ àªàª°àª¾àª¯àª¾',
'undeletedrevisions-files' => '{{PLURAL:$1|1 ફà«àª°àª«àª¾àª°|$1 ફà«àª°àª«àª¾àª°à«}} àª
નૠ{{PLURAL:$2|1 ફાàªàª²àª¾|$2 ફાàªàª²à«}} પà«àª¨àªàª¸à«àª¥àª¾àªªàª¿àª¤',
'undeletedfiles' => '{{PLURAL:$1|1 ફાàªàª²|$1 ફાàªàª²à«}} પà«àª¨àªàª¸à«àª¥àª¾àªªàª¿àª¤',
-'cannotundelete' => 'પà«àª¨àª°à«àªà«àªµàª¿àª¤ àªàª°àªµàª¾àª¨à«àª àªàª¾àª°à«àª¯ àª
સફળ;
-àªà«àªàªà« ઠપાનાનૠપહà«àª²à«àª¥à« પà«àª¨àª°à«àªà«àªµàª¿àª¤ àªàª°à«àª¯à«àª હà«àª શàªà«.',
+'cannotundelete' => 'પà«àª¨àª°à«àªà«àªµàª¿àª¤ àªàª°àªµàª¾àª¨à«àª àªàª¾àª°à«àª¯ àª
સફળ:
+$1',
'undeletedpage' => "'''$1 પà«àª¨àªàª¸à«àª¥àª¾àªªàª¿àª¤ àªàª°àª¾àª¯àª¾'''
તાàªà«àª¤àª°àª®àª¾àª હàªàª¾àªµà«àª²àª¾ àªà« પà«àª¨àªàª¸à«àª¥àª¾àªªàª¿àª¤ થયà«àª²àª¾ ફà«àª°àª«àª¾àª°àª¨à« નà«àªàª§ નૠસàªàª¦àª°à«àª àª
હà«àª àªàªªà«àª²àª¬à«àª§ [[Special:Log/delete|deletion log]].",
diff --git a/languages/messages/MessagesHak.php b/languages/messages/MessagesHak.php
index 1984c01556..459e976d92 100644
--- a/languages/messages/MessagesHak.php
+++ b/languages/messages/MessagesHak.php
@@ -133,7 +133,6 @@ $messages = array(
'qbbrowse' => 'Chhà -khon',
'qbedit' => 'Phiên-siá',
'qbpageoptions' => 'Vùn-chông sién-hong',
-'qbpageinfo' => 'Vùn-chông chá¹³Ì-liau',
'qbmyoptions' => 'Ngô-ke sién-hong',
'qbspecialpages' => 'ThiÌt-sû hong-mien',
'faq' => 'Sòng-kien mun-thì kié-tap',
diff --git a/languages/messages/MessagesHe.php b/languages/messages/MessagesHe.php
index 499ad5a0f1..7fc84c8dba 100644
--- a/languages/messages/MessagesHe.php
+++ b/languages/messages/MessagesHe.php
@@ -498,7 +498,6 @@ $messages = array(
'qbbrowse' => '×פ×××£',
'qbedit' => 'ער×××',
'qbpageoptions' => '×פשר×××ת ××£',
-'qbpageinfo' => '××××¢ ×¢× ×××£',
'qbmyoptions' => '××פשר×××ת ש××',
'qbspecialpages' => '×פ×× ×××××××',
'faq' => 'ש×××ת ×תש×××ת',
@@ -764,7 +763,7 @@ $2',
# Login and logout pages
'logouttext' => "'''×צ××ª× ×× ×¢×ª× ×××ש×××.'''
-××פשר×ת×× ×××ש×× ××עש×ת ש×××ש ×{{grammar:ת××××ת|{{SITENAME}}}} ××××¤× ×× ×× ×××, ×× [[Special:UserLogin|×ש×× ×××××× ×¡ ××תר]] ×¢× ×©× ×שת×ש ××× ×× ××ר.
+××פשר×ת×× ×××ש×× ××עש×ת ש×××ש ×{{grammar:ת××××ת|{{SITENAME}}}} ××××¤× ×× ×× ×××, ×× [$1 ×ש×× ×××××× ×¡ ××תר] ×¢× ×©× ×שת×ש ××× ×× ××ר.
ש××× ×× ×× ××ת×× ×©×פ×× ××××× ××ש××× ××××ת ××צ××× ××××× ××ª× ×¢×××× ××××ר×× ××ש××× ×¢× ×©×ª× ×§× ×ת ×××××× ×©× ××פ××¤× ×©×××.",
'welcomecreation' => '== ×ר×× ××××, $1! ==
×ש××× × × ×צר.
@@ -845,7 +844,8 @@ $2',
'acct_creation_throttle_hit' => '××קר×× ××תר ×× ××¨× ×ת××ת ×Ö¾IP ש××× ××ר ××¦×¨× {{PLURAL:$1|×ש××× ×××|$1 ×ש××× ×ת}} ×××× ×××ר××. ××× ××קס×××× ×××תר ×תק××¤× ××.
×פ×××, ××קר×× ××¨× ×ת××ת ×Ö¾IP ××× ×× ×××××× ××צ×ר ×ש××× ×ת × ×ספ×× ×ר××¢ ××.',
'emailauthenticated' => '×ת××ת ××××"× ×©×× ××××ª× ×Ö¾$3, $2.',
-'emailnotauthenticated' => '×ת××ת ××××"× ×©××× ×¢×××× ×× ×××©×¨× - ש×ר××ª× ××××"× ××××× ××× × ×¤×¢××××.',
+'emailnotauthenticated' => '×ת××ת ××××"× ×©××× ×¢×××× ×× ××שר×.
+×× ××ש×× ××××× ×××"× ×¢××ר ××£ ××ת ×××פשר×××ת ××××ת.',
'noemailprefs' => '×× × ×¦××× × ×ת××ת ×××"× ×××¢×פ×ת ש××× ××× ×©×ª××× ×ת ××× ××¢×××.',
'emailconfirmlink' => '××ש×ר ×ת××ת ××××"× ×©××',
'invalidemailaddress' => '×ת××ת ××××"× ××× × ×תק××ת ××××× ×©× ×¨×× ×©××× ×פ×ר×× ×× × ×××.
@@ -1135,6 +1135,15 @@ $2
'edit-already-exists' => '×× × ××ª× ××צ×ר ××£ ××ש.
××× ××ר ק×××.',
'defaultmessagetext' => '××§×¡× ×××××¢× ××ק×ר×',
+'content-failed-to-parse' => '×¤×¢× ×× $2 ×ת××× ×ס×× $1 × ×ש×: $3',
+'invalid-content-data' => '××××¢ ש××× ×¢× ×ת×××',
+'content-not-allowed-here' => 'ת××× ×ס×× "$1" ××× × ××תר ×××£ [[$2]]',
+
+# Content models
+'content-model-wikitext' => '××§×¡× ××ק×',
+'content-model-text' => '××§×¡× ×¤×©××',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''×××ר×:''' ××£ ×× ×××× ××תר ××× ×§×¨×××ת ×פ×× ×§×¦××ת ××¤×¢× × ×©×××××ת ×ש××××.
@@ -2052,7 +2061,7 @@ $1',
'shared-repo' => '×ק×× ×××ס×× ×ש×תף',
'shared-repo-name-wikimediacommons' => '××ק×ש×ת××£',
'filepage.css' => '/* ×ס×× ×× ×ת ×× ×ת××× ××× ×××××× ×××£ ת×××ר ×ק×××¥, ×××× ×××ª×¨× ×××§× ×ר×× */',
-'upload-disallowed-here' => '××ר×× ×צער, ××× ×× ×רש×× ×××¢××ת ××¨×¡× ××רת ×©× ×ת××× × ×××ת.',
+'upload-disallowed-here' => '××× ××פשר×ת×× ××ר×ס ×ת ×ק×××¥ ×××.',
# File reversion
'filerevert' => 'ש×××ר $1',
@@ -2341,7 +2350,7 @@ $1',
'emailuser-title-notarget' => 'ש×××ת ×××"× ××שת×ש',
'emailpage' => 'ש×××ת ×××ר ××שת×ש',
'emailpagetext' => '× ××ª× ××שת×ש ×××פס ××× ×ש××× ×××עת ×××ר ××ק×ר×× × ××שת×ש ××.
-×ת××ת ××××ר ×××ק×ר×× × ×©×ת××ª× ×[[Special:Preferences|××¢×פ×ת ××שת×ש ש×××]] ת×פ××¢ ××ת××ת ××× × × ×©××× ×××××¢×, ××× ××פשר ת×××× ×ש××¨× ×××ת×.',
+×ת××ת ××××ר ×××ק×ר×× × ×©×ת××ª× ×[[Special:Preferences|××¢×פ×ת ××שת×ש ש×××]] ת×פ××¢ ××ת××ת ש×××××¢× × ×©××× ××× ×, ××× ××פשר ת×××× ×ש×ר×.',
'usermailererror' => '××××××§× ××××ר ××××ר ש××××:',
'defemailsubject' => '×××"× ×{{grammar:ת××××ת|{{SITENAME}}}} ×××שת×ש "$1"',
'usermaildisabled' => 'ש×××ת ×××"× ××שת×ש×× ×××××ת',
@@ -2594,7 +2603,8 @@ $UNWATCHURL
'undeletedrevisions' => '{{PLURAL:$1|ש××××¨× ××¨×¡× ××ת|ש××××¨× $1 ×רס××ת}}',
'undeletedrevisions-files' => '{{PLURAL:$1|××¨×¡× ××ת|$1 ×רס××ת}} ×{{PLURAL:$2|ק×××¥ ×××|Ö¾$2 ק×צ××}} ש×××ר×',
'undeletedfiles' => '{{PLURAL:$1|ש×××ר ק×××¥ ×××|ש××××¨× $1 ק×צ××}}',
-'cannotundelete' => '×ש×××ר × ×ש×; ××ת×× ×©××ש×× ××ר ××ר ש××ר ×ת ×××£.',
+'cannotundelete' => '×ש×××ר × ×ש×:
+$1',
'undeletedpage' => "'''×××£ $1 ש×××ר ××צ×××.'''
ר×× ×ת [[Special:Log/delete|×××× ××××ק×ת]] ×רש××× ×©× ×××ק×ת ×ש×××ר×× ××ר×× ××.",
@@ -2897,6 +2907,7 @@ $1',
'immobile-target-namespace-iw' => 'ק×ש×ר ××× ××××§× ××× × ××¢× ×ª×§×× ×××¢×רת ××£.',
'immobile-source-page' => '××£ ×× ××× × × ××ª× ×××¢×ר×.',
'immobile-target-page' => '×× × ××ª× ×××¢××ר ×× ××תרת ××¢× ××.',
+'bad-target-model' => '×××¢× ××××קש ×שת×ש ×ס×× ×ª××× ×©×× ×. ×× × ××ª× ××××ר $1 ×{{grammar:ת××××ת|$2}}.',
'imagenocrossnamespace' => '×× × ××ª× ×××¢××ר ק×××¥ ××ר×× ×©× ××ר',
'nonfile-cannot-move-to-file' => '×× × ××ª× ×××¢××ר ××£ ש××× × ×§×××¥ ××ר×× ×§×××¥',
'imagetypemismatch' => 'ס×××ת ×ק×××¥ ××××©× ××× × ×ת×××× ×ס×× ×ק×××¥',
@@ -3165,6 +3176,7 @@ $1',
# Info page
'pageinfo-title' => '××××¢ ×¢× "$1"',
+'pageinfo-not-current' => '×××××¢ ×××× ××××ת ×××¦× ×¨×§ ×¢××ר ×××¨×¡× ×× ××××ת.',
'pageinfo-header-basic' => '××××¢ ×ס×ס×',
'pageinfo-header-edits' => '××ס××ר××ת ער×××ת',
'pageinfo-header-restrictions' => '××× × ×¢× ×××£',
@@ -3189,10 +3201,17 @@ $1',
'pageinfo-authors' => '××ספר ××××× ×©× ××ת××× ×©×× ××',
'pageinfo-recent-edits' => '×ספר ×ער×××ת ×××ר×× × ($1)',
'pageinfo-recent-authors' => '×ספר ×××ת××× ××××××××× ×××ר×× ×',
-'pageinfo-restriction' => '××× × ×¢× ×××£ ($1)',
'pageinfo-magic-words' => '{{PLURAL:$1|×××ת קס×|××××ת קס×}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|ק×××ר×× ××סתרת|ק×××ר××ת ××סתר×ת}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|ת×× ×ת ×××××ת|ת×× ××ת ××××××ת}} ($1)',
+'pageinfo-toolboxlink' => '××××¢ ×¢× ×××£',
+'pageinfo-redirectsto' => '××¤× × ××',
+'pageinfo-redirectsto-info' => '××××¢',
+'pageinfo-contentpage' => '× ×¡×¤×¨ ×××£ ת×××',
+'pageinfo-contentpage-yes' => '××',
+'pageinfo-protect-cascading' => '××פע×ת ××× × ×××ר×ת ××××',
+'pageinfo-protect-cascading-yes' => '××',
+'pageinfo-protect-cascading-from' => '××£ ×× ×××× ×××× ××× × ×××ר×ת ×¢×',
# Skin names
'skinname-standard' => 'ק××ס×',
@@ -3768,7 +3787,8 @@ $5
# Scary transclusion
'scarytranscludedisabled' => '[××××ת ×פ×× ××× ×תר×× ×××××ת]',
-'scarytranscludefailed' => '[××××ת ×ת×× ×ת × ×ש×× ×××× $1]',
+'scarytranscludefailed' => '[××××ר ×ת×× ×ת × ××©× ×¢××ר $1]',
+'scarytranscludefailed-httpstatus' => '[××××ר ×ת×× ×ת × ××©× ×¢××ר $1: HTTP $2]',
'scarytranscludetoolong' => '[×ת××ת ×Ö¾URL ×ר××× ×××]',
# Delete conflict
diff --git a/languages/messages/MessagesHi.php b/languages/messages/MessagesHi.php
index 6a86595ab9..e78fc8df94 100644
--- a/languages/messages/MessagesHi.php
+++ b/languages/messages/MessagesHi.php
@@ -322,7 +322,6 @@ $messages = array(
'qbbrowse' => 'बà¥à¤°à¤¾à¤à¤à¤¼',
'qbedit' => 'बदलà¥à¤',
'qbpageoptions' => 'यह पà¥à¤·à¥à¤ ',
-'qbpageinfo' => 'पà¥à¤·à¥à¤ à¤à¤¾à¤¨à¤à¤¾à¤°à¥',
'qbmyoptions' => 'मà¥à¤°à¥ पà¥à¤·à¥à¤ ',
'qbspecialpages' => 'विशà¥à¤· पà¥à¤·à¥à¤ ',
'faq' => 'बहà¥à¤§à¤¾ पà¥à¤à¤¿à¤¤ पà¥à¤°à¤¶à¥à¤¨',
@@ -581,7 +580,7 @@ $2',
# Login and logout pages
'logouttext' => "'''à¤
ब à¤à¤ªà¤à¤¾ सतà¥à¤°à¤¾à¤à¤¤ हॠà¤à¥à¤à¤¾ हà¥à¥¤'''
-à¤à¤ª बà¥à¤¨à¤¾à¤®à¥ हॠà¤à¥ {{SITENAME}} à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤¾à¤°à¥ रठसà¤à¤¤à¥ हà¥à¤, या à¤à¤¸à¥ या à¤à¤¿à¤¸à¥ à¤à¤° सदसà¥à¤¯ à¤à¥ तà¥à¤° पर [[Special:UserLogin|फिर सॠसतà¥à¤°à¤¾à¤°à¤à¤]] à¤à¤° सà¤à¤¤à¥ हà¥à¤à¥¤
+à¤à¤ª बà¥à¤¨à¤¾à¤®à¥ हॠà¤à¥ {{SITENAME}} à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤¾à¤°à¥ रठसà¤à¤¤à¥ हà¥à¤, या à¤à¤¸à¥ या à¤à¤¿à¤¸à¥ à¤à¤° सदसà¥à¤¯ à¤à¥ तà¥à¤° पर [$1 फिर सॠसतà¥à¤°à¤¾à¤°à¤à¤] à¤à¤° सà¤à¤¤à¥ हà¥à¤à¥¤
धà¥à¤¯à¤¾à¤¨ दà¥à¤ à¤à¤¿ à¤à¤¬ तठà¤à¤ª à¤
पनॠबà¥à¤°à¤¾à¤à¤à¤¼à¤° à¤à¥à¤¶à¥ à¤à¤¾à¤²à¥ नहà¥à¤ à¤à¤°à¤¤à¥ हà¥à¤, à¤à¥à¤ पà¥à¤·à¥à¤ à¤
ब à¤à¥ à¤à¤¸à¥ दिठसà¤à¤¤à¥ हà¥à¤ à¤à¥à¤¸à¥ à¤à¤¿ à¤à¤ªà¤à¤¾ सतà¥à¤° à¤
à¤à¥ à¤à¥ à¤à¤² रहा हà¥à¥¤",
'welcomecreation' => '== à¤à¤ªà¤à¤¾ सà¥à¤µà¤¾à¤à¤¤ हà¥, $1 ! ==
à¤à¤ªà¤à¤¾ à¤à¤¾à¤¤à¤¾ बनाया à¤à¤¾ à¤à¥à¤à¤¾ हà¥à¥¤ à¤
पनॠ[[Special:Preferences|{{SITENAME}} वरà¥à¤¯à¤¤à¤¾à¤à¤]] परिवरà¥à¤¤à¤¿à¤¤ à¤à¤°à¤¨à¤¾ न à¤à¥à¤²à¤¿à¤à¤à¤¾à¥¤',
diff --git a/languages/messages/MessagesHif_latn.php b/languages/messages/MessagesHif_latn.php
index 8b8e1fbbe5..e71cc73eb7 100644
--- a/languages/messages/MessagesHif_latn.php
+++ b/languages/messages/MessagesHif_latn.php
@@ -179,7 +179,6 @@ $messages = array(
'qbbrowse' => 'Browse karo',
'qbedit' => 'Badlo',
'qbpageoptions' => 'Ii panna',
-'qbpageinfo' => 'Vishay',
'qbmyoptions' => 'Hamar panna',
'qbspecialpages' => 'Khaas panna',
'faq' => 'Sab time puchhe waala sawal',
@@ -192,7 +191,7 @@ $messages = array(
'vector-action-protect' => 'Bachao',
'vector-action-undelete' => 'Pahile jaise karo',
'vector-action-unprotect' => 'Surakchha ke badlo',
-'vector-simplesearch-preference' => 'Aur achchhaa se khoje salah do (Khaali vector skin)',
+'vector-simplesearch-preference' => 'Aur achchhaa se khoje ke salah do (Khaali vector skin)',
'vector-view-create' => 'Banao',
'vector-view-edit' => 'Badlo',
'vector-view-history' => 'Itihaas dekho',
@@ -298,6 +297,10 @@ $1',
'youhavenewmessages' => 'Aapke pass hai $1 ($2).',
'newmessageslink' => 'nawaa khabar',
'newmessagesdifflink' => 'pahile waala badlao',
+'youhavenewmessagesfromusers' => 'Aap ke lage {{PLURAL:$3|duusra sadasya|$3 sadasya}} ke lage se $1 hae ($2).',
+'youhavenewmessagesmanyusers' => 'Aap ke lage dher sadasya se $1 hae ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ek nawaa sandes|nawaa sandes}}',
+'newmessagesdifflinkplural' => 'pichhla {{PLURAL:$1|badlao}}',
'youhavenewmessagesmulti' => 'Aap ke khatir $1 pe sandes hai',
'editsection' => 'badlo',
'editold' => 'badlao',
@@ -350,11 +353,11 @@ Sahi khaas panna ke suchi [[Special:SpecialPages|{{int:specialpages}}]]pe mili.'
'error' => 'Galti',
'databaseerror' => 'Database me galti hai',
'dberrortext' => 'Database ke khoj me syntax error hoe gais hae.
-Saait software me bug hoi.
+Iske matlab ii hoe sake hae ki saait software me bug hoi.
Pahile waala database ke khoj ke kosis rahaa:
-$1
-"$2" function ke bhitar se.
-Database ke galti sandes rahaa "$3: $4".',
+
+"$1
$2
" function ke bhitar se.
+Database ke galti sandes rahaa "$3: $4".',
'dberrortextcl' => 'Database ke khoj me syntax error hoe gais hae.
Pahile waala database ke khoj ke kosis rahaa:
"$1"
@@ -408,10 +411,11 @@ Kuch deri be baad fir se kosis karna.',
'protectedpagetext' => 'Ii panna ke badlao ke roke ke khatir band kar dewa gais hai.',
'viewsourcetext' => 'Aap ii panna ke source ke dekhe aur nakal utare kare sakta hai:',
'viewyourtext' => "Aap '''aapan badlao''' ke source ke dekhe aur copy kare saktaa hae",
-'protectedinterface' => 'Ii panna software ke interface text dewe hai, aur iske barbaadi se roke ke khatir band kar dewa gais hai.',
+'protectedinterface' => 'Ii panna, ii wiki ke khatir, software ke interface text dewe hai, aur iske barbaadi se roke ke khatir band kar dewa gais hai.
+Sab wiki me anuwaad ke jorre nai to badle ke khatir, meharbaani kar ke [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project ke kaam me laao.',
'editinginterface' => "'''Chetawani:''' Aap ek panna ke badaltaa hai jon ki software ke interface text dewe hae.
-Ii panna me badlao ke asar duusra sadasya ke interface ke bhi hoi.
-Translation khatir [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project, ke kaam me lao.",
+Ii panna me badlao ke asar duusra sadasya ke interface pe bhi hoi.
+Translation khatir [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project, ke kaam me lao.",
'sqlhidden' => '(SQL query lukawal hai)',
'cascadeprotected' => 'Ii panna ke badlao se bachawa gais hai, kahe ki iske {{PLURAL:$1|panna, jon ki|panna, jon ki}} surakchhit hae "cascading" option turned on ke saathe me rakkhaa gais hai:
$2',
@@ -436,7 +440,7 @@ Jon administrator iske lock karis hae, koi kaaran nai diis hae: "$3"',
# Login and logout pages
'logouttext' => "'''Aap abhi logged out hai.'''
-Aap bina naam ke {{SITENAME}} ke kaam me lae sakta hai, nai to aap wahi sadasya ke naam se nai to duusra sadasya ke naam se [[Special:UserLogin|log in kare sakta hai]].
+Aap bina naam ke {{SITENAME}} ke kaam me lae sakta hai, nai to aap wahi sadasya ke naam se nai to duusra sadasya ke naam se [$1 log in kare sakta hai].
Yaad rakhna ki kuch panna wahi rakam se dekhai jaise ki aap log in bhaya hai, jab tak ki browser ke cache safaa nai hoe jaae.",
'welcomecreation' => '== Swagat, $1! ==
Aap ke account banae dewa gais hai.
@@ -447,6 +451,7 @@ Aapan [[Special:Preferences|{{SITENAME}} pasand]] ke badle nai bhulna.',
'remembermypassword' => 'Ii computer pe hamaar login yaad rakho (jaada se jaada $1 {{PLURAL:$1|din|din}} talak)',
'securelogin-stick-https' => 'Login kare ke baad HTTPS se connected raho',
'yourdomainname' => 'Aap ke domain:',
+'password-change-forbidden' => 'Aap ii wiki me password nai badle saktaa hae.',
'externaldberror' => 'Koi bahaari database authentication error hai, nai to aap ke bahaari account badle ke adhikar nai hai.',
'login' => 'Log in karo',
'nav-login-createaccount' => 'Log in karo/ nawaa account banao',
@@ -692,20 +697,21 @@ Agar aap ek anonymous user hai aur ii sochta hai ki bekar baat aap ke baare me k
Aap saktaa hai [[Special:Search/{{PAGENAME}}|ii panna ke title khoje]] duusra panna me,
[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
nai to [{{fullurl:{{FULLPAGENAME}}|action=edit}} ii panna ke badlo].',
-'noarticletext-nopermission' => 'Abhi ii panna pe koi chij likha nai hae.
+'noarticletext-nopermission' => 'Abhi ii panna me koi chij likha nai hae.
Aap sakta hae [[Special:Search/{{PAGENAME}}|ii panna ke title ke khoje]] duusra panna me,
-nai to [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs].',
+nai to [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs], lekin aap ke ii panna ke banae ke ijaaja tnai hae.',
+'missing-revision' => 'Panna "{{PAGENAME}}" me #$1 badlao nai hae.
+Iske kaaran ii hoe sake hae ki ek mitawa gais panna se link karaa jaawe hae.
+Iske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me paawa jaae sake hae.',
'userpage-userdoesnotexist' => 'User account "
-A page is treated as disambiguation page if it uses a template which is linked from [[MediaWiki:Disambiguationspage]]",
+Saait isse aur achchha panna se link hoi.
+Ek panna ke disambiguation panna maana jaae hae jab ki ii ek template ke kaam me laae hae jon ki [[MediaWiki:Disambiguationspage]] se link hoe hae.",
'doubleredirects' => 'Dugna redirects',
'doubleredirectstext' => 'Ii panna uu panna ke suchi de hai jon ki duusra redirect panna pe redirect kare hai.
diff --git a/languages/messages/MessagesHil.php b/languages/messages/MessagesHil.php
index c4310dfab0..983d30b72c 100644
--- a/languages/messages/MessagesHil.php
+++ b/languages/messages/MessagesHil.php
@@ -427,7 +427,7 @@ Ang administrador nga nag-kandado sini naghatag sang paathag nga: "$3".',
# Login and logout pages
'logouttext' => "'''Naka-guha ka na.'''
-Makapadayon ka sa gihapon sa paggamit sang {{SITENAME}} nga indi makilal-an, ukon mahimo ka man [[Special:UserLogin|magsulod liwat]] bilang amo sa gihapon ukon lain nga nga manug-gamit.
+Makapadayon ka sa gihapon sa paggamit sang {{SITENAME}} nga indi makilal-an, ukon mahimo ka man [$1 magsulod liwat] bilang amo sa gihapon ukon lain nga nga manug-gamit.
Tandaan nga may mga panid nga mahimo ma-display sa gihapon nga daw nakasulod ka sa gihapon, hasta mapanas mo na ang tinago sang imo brawser.",
'welcomecreation' => '== Pagtamyaw, $1! ==
Ang imo account nahimo na.
diff --git a/languages/messages/MessagesHr.php b/languages/messages/MessagesHr.php
index 68649e2399..91fe9f87dd 100644
--- a/languages/messages/MessagesHr.php
+++ b/languages/messages/MessagesHr.php
@@ -458,7 +458,6 @@ $messages = array(
'qbbrowse' => 'Pregledaj',
'qbedit' => 'Uredi',
'qbpageoptions' => 'Postavke stranice',
-'qbpageinfo' => 'O stranici',
'qbmyoptions' => 'Moje stranice',
'qbspecialpages' => 'Posebne stranice',
'faq' => 'NajÄeÅ¡Äa pitanja',
@@ -711,7 +710,7 @@ $2',
# Login and logout pages
'logouttext' => "'''Odjavili ste se.'''
-Možete nastaviti s korištenjem {{SITENAME}} neprijavljeni, ili se možete ponovo [[Special:UserLogin|prijaviti]] pod istim ili drugim imenom.
+Možete nastaviti s korištenjem {{SITENAME}} neprijavljeni, ili se možete ponovo [$1 prijaviti] pod istim ili drugim imenom.
Neke se stranice mogu prikazivati kao da ste joÅ¡ uvijek prijavljeni, sve dok ne oÄistite meÄuspremnik svog preglednika.",
'welcomecreation' => '== Dobrodošli, $1! ==
VaÅ¡ je suradniÄki raÄun otvoren.
diff --git a/languages/messages/MessagesHsb.php b/languages/messages/MessagesHsb.php
index f983e4c5b3..a4a648e803 100644
--- a/languages/messages/MessagesHsb.php
+++ b/languages/messages/MessagesHsb.php
@@ -297,7 +297,6 @@ $messages = array(
'qbbrowse' => 'PÅepytowaÄ',
'qbedit' => 'WobdźÄÅaÄ',
'qbpageoptions' => 'Tuta strona',
-'qbpageinfo' => 'Kontekst',
'qbmyoptions' => 'Moje strony',
'qbspecialpages' => 'Specialne strony',
'faq' => 'Husto stajene prašenja (FAQ)',
@@ -557,7 +556,7 @@ Administrator, kiž je jón zawrÄÅ, je tule pÅiÄinu podaÅ: "$3".',
# Login and logout pages
'logouttext' => "'''{{GENDER:|Sy|Sy}} nÄtko {{GENDER:|wotzjewjeny|wotzjewjena}}.'''
-MóžeÅ¡ {{GRAMMAR:akuzatiw|{{SITENAME}}}} nÄtko anonymnje dale wužiwaÄ abo so ze samsnym abo druhim wužiwarskim mjenom [[Special:UserLogin|zaso pÅizjewiÄ]].
+MóžeÅ¡ {{GRAMMAR:akuzatiw|{{SITENAME}}}} nÄtko anonymnje dale wužiwaÄ abo so ze samsnym abo druhim wužiwarskim mjenom [$1 zaso pÅizjewiÄ].
Wobkedźbuj, zo so nÄkotre strony dale jewja, kaž by hiÅ¡Äe pÅizjewjeny byÅ, doniž pufrowak swojeho wobhladowaka njewuprózdnjeÅ¡.",
'welcomecreation' => '== Witaj, $1! ==
@@ -897,6 +896,15 @@ Zda so, zo je hîžo wušmórnjena.',
'edit-already-exists' => 'NjebÄ móžno nowu stronu wutworiÄ.
Eksistuje hižo.',
'defaultmessagetext' => 'Standardny tekst zdźÄlenki',
+'content-failed-to-parse' => 'Parsowanje wobsaha $2 za model $1 je so njeporadźiÅo: $3',
+'invalid-content-data' => 'NjepÅaÄiwe wobsahowe daty',
+'content-not-allowed-here' => 'Wobsah "$1" njeje na stronje [[$2]] dowoleny',
+
+# Content models
+'content-model-wikitext' => 'wikitekst',
+'content-model-text' => 'luty tekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Warnowanje: Tuta strona wobsahuje pÅewjele parserowych woÅanjow.
@@ -1797,7 +1805,7 @@ Snano chceÅ¡ wopisanje na jeje [$2 stronje datajoweho wopisanja] wobdźÄÅaÄ.'
'uploadnewversion-linktext' => 'nowu wersiju tuteje dataje nahraÄ',
'shared-repo-from' => 'z $1',
'shared-repo' => 'zhromadny repozitorij',
-'upload-disallowed-here' => 'Bohužel njemóžeÅ¡ tutón wobraz pÅepisaÄ.',
+'upload-disallowed-here' => 'NjemóžeÅ¡ tutu dataju pÅepisaÄ.',
# File reversion
'filerevert' => 'Wersiju $1 cofnyÄ',
@@ -2327,7 +2335,8 @@ W tutym padźe dyrbiÅ¡ najnowÅ¡u wuÅ¡mórnjenu wersiju znjemóžniÄ abo pokaza
'undeletedrevisions' => '$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} {{PLURAL:$1|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} a $2 {{PLURAL:$2|dataja|dataji|dataje|datajow}} {{PLURAL:$2|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}',
'undeletedfiles' => '$1 {{PLURAL:$1|dataja|dataji|dataje|datajow}} {{PLURAL:$1|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}.',
-'cannotundelete' => 'Wobnowjenje zwrÄÅ¡ÄiÅo; nÄchtó druhi je stronu prjedy wobnowiÅ.',
+'cannotundelete' => 'Wobnowjenje zwrÄÅ¡ÄiÅo:
+$1',
'undeletedpage' => "'''Strona $1 bu z wuspÄchom wobnowjena.'''
Hlej [[Special:Log/delete|protokol]] za lisÄinu aktualnych wuÅ¡mórnjenjow a wobnowjenjow.",
@@ -2613,6 +2622,7 @@ Cilowa strona â[[:$1]]â hižo eksistuje. ChceÅ¡ ju wuÅ¡mórnyÄ, zo by so p
'immobile-target-namespace-iw' => 'Interwiki-wotkaz njeje pÅaÄiwy cil za pÅesunjenja stronow.',
'immobile-source-page' => 'Strona njeda so pÅesunyÄ.',
'immobile-target-page' => 'Njemóžno do teje ciloweje strony pÅesunyÄ.',
+'bad-target-model' => 'Požadany cil wužiwa druhi wobsahowy model. $1 njeda so do $2 konwertowaÄ.',
'imagenocrossnamespace' => 'Wobraz njeda so do druheho mjenoweho ruma haÄ wobraz pÅesunyÄ',
'nonfile-cannot-move-to-file' => 'Njedataje njedadźa so do datajoweho mjenoweho ruma pÅesunyÄ',
'imagetypemismatch' => 'Nowa dataja swojemu typej njewotpowÄduje',
@@ -2845,6 +2855,7 @@ W poslednim padźe móžeÅ¡ tež wotkaz wužiwaÄ, na pÅ. â[[{{#Special:Expor
# Info page
'pageinfo-title' => 'Informacije za stronu "$1"',
+'pageinfo-not-current' => 'Informacije hodźa so jenož za aktualnu wersiju zwobrazniÄ.',
'pageinfo-header-basic' => 'ZakÅadne informacije',
'pageinfo-header-edits' => 'Stawizny wobdźÄÅaÄ',
'pageinfo-header-restrictions' => 'Å kit strony',
@@ -2870,10 +2881,17 @@ W poslednim padźe móžeÅ¡ tež wotkaz wužiwaÄ, na pÅ. â[[{{#Special:Expor
'pageinfo-authors' => 'CyÅkowna liÄba rozdźÄlnych awtorow',
'pageinfo-recent-edits' => 'LiÄba najnowÅ¡ich zmÄnow (za zaÅdźenych $1)',
'pageinfo-recent-authors' => 'NajnowÅ¡a liÄba rozdźÄlnych awtorow',
-'pageinfo-restriction' => 'Å kit strony ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|Magiske sÅowo|Magiskej sÅowje|Magiske sÅowa|Magiske sÅowa}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|ZapÅijata pÅedÅoha|ZapÅijatej pÅedÅoze|ZapÅijate pÅedÅohi|ZapÅijate pÅedÅohi}} ($1)',
+'pageinfo-toolboxlink' => 'Informacije wo stronje',
+'pageinfo-redirectsto' => 'SposrÄdkuje k',
+'pageinfo-redirectsto-info' => 'Info',
+'pageinfo-contentpage' => 'LiÄi so jako wobsahowa strona',
+'pageinfo-contentpage-yes' => 'Haj',
+'pageinfo-protect-cascading' => 'Kaskadowy Å¡kit wottud',
+'pageinfo-protect-cascading-yes' => 'Haj',
+'pageinfo-protect-cascading-from' => 'Kaskadowy Å¡kit wot',
# Skin names
'skinname-standard' => 'Klasiski',
@@ -3442,6 +3460,7 @@ Tutón wobkruÄenski kod spadnje $4.',
# Scary transclusion
'scarytranscludedisabled' => '[ZapÅijeÄe mjezyrÄÄnych wotkazow je znjemóžnjene]',
'scarytranscludefailed' => '[ZapÅijimanje pÅedÅohi za $1 je so njeporadźiÅo]',
+'scarytranscludefailed-httpstatus' => '[WotwoÅanje pÅedÅohi za $1 je so njeporadźiÅo: HTTP $2]',
'scarytranscludetoolong' => '[URL je pÅedoÅhi]',
# Delete conflict
diff --git a/languages/messages/MessagesHt.php b/languages/messages/MessagesHt.php
index 6be61f7444..65845fedc2 100644
--- a/languages/messages/MessagesHt.php
+++ b/languages/messages/MessagesHt.php
@@ -525,7 +525,7 @@ Rezon li bay yo se « ''$2'' ».",
# Login and logout pages
'logouttext' => "'''Ou dekonekte kounye a.'''
-Ou mèt kontinye itilize {{SITENAME}} san ou pa idantifye, oubyen ou ka [[Special:UserLogin|rekonekte]] w ankò ak menm non an oubyen yon lòt.
+Ou mèt kontinye itilize {{SITENAME}} san ou pa idantifye, oubyen ou ka [$1 rekonekte] w ankò ak menm non an oubyen yon lòt.
Note ke kèk paj gendwa afiche tankou ou te toujou konekte tank ou pa efase kach nan navigatè ou.",
'welcomecreation' => '== Byenvini, $1 ! ==
diff --git a/languages/messages/MessagesHu.php b/languages/messages/MessagesHu.php
index cdab924584..f04aae4947 100644
--- a/languages/messages/MessagesHu.php
+++ b/languages/messages/MessagesHu.php
@@ -456,7 +456,6 @@ $messages = array(
'qbbrowse' => 'Böngészés',
'qbedit' => 'Szerkesztés',
'qbpageoptions' => 'LapbeállÃtások',
-'qbpageinfo' => 'Lapinformáció',
'qbmyoptions' => 'Lapjaim',
'qbspecialpages' => 'Speciális lapok',
'faq' => 'GyIK',
@@ -469,7 +468,7 @@ $messages = array(
'vector-action-protect' => 'Lapvédelem',
'vector-action-undelete' => 'VisszaállÃtás',
'vector-action-unprotect' => 'Védelem módosÃtása',
-'vector-simplesearch-preference' => 'Továbbfejlesztett keresési javaslatok engedélyezése (csak Vector felületen)',
+'vector-simplesearch-preference' => 'EgyszerűsÃtett keresési sáv engedélyezése (csak Vector felületen)',
'vector-view-create' => 'Létrehozás',
'vector-view-edit' => 'Szerkesztés',
'vector-view-history' => 'Laptörténet',
@@ -576,6 +575,7 @@ További információkat a [[Special:Version|verzióinformációs lapon]] talál
'youhavenewmessages' => '$1 a vitalapodon! ($2 külön is megtekintheted.)',
'newmessageslink' => 'új üzenet vár',
'newmessagesdifflink' => 'az utolsó üzenetet',
+'youhavenewmessagesfromusers' => '$1 a vitalapodon {{PLURAL:$3|egy|$3}} szerkesztÅtÅl! ($2 külön is megtekintheted.)',
'youhavenewmessagesmanyusers' => '$1ed van több szerkesztÅtÅl ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|Ãj üzenet vár|Ãj üzenetek várnak}}',
'newmessagesdifflinkplural' => 'Az utolsó {{PLURAL:$1|változtatást|változtatásokat}}',
@@ -671,6 +671,8 @@ Jelezd ezt egy [[Special:ListUsers/sysop|adminiszttrátornak]] az URL megadásá
'cannotdelete' => 'A(z) $1 lapot vagy fájlt nem lehet törölni.
Talán már valaki más törölte.',
'cannotdelete-title' => 'Nem lehet törölni a(z) â$1â lapot',
+'delete-hook-aborted' => 'A törlés meg lett szakÃtva egy hook által.
+Nem lett magyarázat csatolva.',
'badtitle' => 'Hibás cÃm',
'badtitletext' => 'A kért oldal cÃme érvénytelen, üres, vagy rosszul hivatkozott nyelvközi vagy wikiközi cÃm volt. Olyan karaktereket is tartalmazhatott, melyek a cÃmekben nem használhatóak.',
'perfcached' => "Az alábbi adatok gyorsÃtótárból (''cache''-bÅl) származnak, és ezért lehetséges, hogy nem a legfrissebb változatot mutatják. Legfeljebb {{PLURAL:$1|egy|$1 }} eredmény áll rendelkezésre a gyorsÃtótárban.",
@@ -713,7 +715,7 @@ A lezárást végrehajtó rendszergazda az alábbi indoklást adta meg: "$3".',
# Login and logout pages
'logouttext' => "'''Sikeresen kijelentkeztél.'''
-Folytathatod névtelenül a(z) {{SITENAME}} használatát, vagy [[Special:UserLogin|ismét bejelentkezhetsz]] ugyanezzel, vagy egy másik névvel.
+Folytathatod névtelenül a(z) {{SITENAME}} használatát, vagy [$1 ismét bejelentkezhetsz] ugyanezzel, vagy egy másik névvel.
Lehetséges, hogy néhány oldalon továbbra is azt látod, be vagy jelentkezve, mindaddig, amÃg nem ürÃted a böngészÅd gyorsÃtótárát.",
'welcomecreation' => '== Köszöntünk, $1! ==
A felhasználói fiókodat létrehoztuk.
@@ -1406,7 +1408,7 @@ Itt van egy véletlenszerűen generált érték, amit használhatsz: $1',
'timezoneregion-indian' => 'Indiai-óceán',
'timezoneregion-pacific' => 'Csendes-óceán',
'allowemail' => 'E-mail engedélyezése más szerkesztÅktÅl',
-'prefs-searchoptions' => 'A keresés beállÃtásai',
+'prefs-searchoptions' => 'Keresés',
'prefs-namespaces' => 'Névterek',
'defaultns' => 'Egyébként a következŠnévterekben keressen:',
'default' => 'alapértelmezett',
@@ -1531,6 +1533,7 @@ A műveletet nem lehet visszavonni.',
'right-writeapi' => 'a szerkesztÅ-API használata',
'right-delete' => 'lapok törlése',
'right-bigdelete' => 'nagy történettel rendelkezŠfájlok törlése',
+'right-deletelogentry' => 'bizonyos napló bejegyzések törlése és visszaállÃtása',
'right-deleterevision' => 'lapok adott változatainak törlése és helyreállÃtása',
'right-deletedhistory' => 'törölt lapváltozatok megtekintése, a szövegük nélkül',
'right-deletedtext' => 'törölt változatok szövegének és a változatok közötti eltérés megtekintése',
@@ -1614,7 +1617,7 @@ A műveletet nem lehet visszavonni.',
# Recent changes
'nchanges' => '{{PLURAL:$1|egy|$1}} változtatás',
'recentchanges' => 'Friss változtatások',
-'recentchanges-legend' => 'A friss változások beállÃtásai',
+'recentchanges-legend' => 'A friss változtatások beállÃtásai',
'recentchanges-summary' => 'Ezen a lapon a wikiben történt legutóbbi fejleményeket lehet nyomon követni.',
'recentchanges-feed-description' => 'Kövesd a wiki friss változtatásait ezzel a hÃrcsatornával.',
'recentchanges-label-newpage' => 'Ezzel a szerkesztéssel egy új lap jött létre',
@@ -1622,8 +1625,8 @@ A műveletet nem lehet visszavonni.',
'recentchanges-label-bot' => 'Ezt a szerkesztést egy bot hajtotta végre',
'recentchanges-label-unpatrolled' => 'Ezt a szerkesztést még nem ellenÅrizték',
'rcnote' => "Alább az utolsó '''{{PLURAL:$2|egy|$2}}''' nap utolsó '''{{PLURAL:$1|egy|$1}}''' változtatása látható. A lap generálásának idÅpontja $4, $5.",
-'rcnotefrom' => 'Alább a $2 óta történt változások láthatóak ($1 db).',
-'rclistfrom' => '$1 után történt változások megtekintése',
+'rcnotefrom' => 'Alább a $2 óta történt változtatások láthatóak ($1 db).',
+'rclistfrom' => '$1 után történt változtatások megtekintése',
'rcshowhideminor' => 'apró szerkesztések $1',
'rcshowhidebots' => 'botok szerkesztéseinek $1',
'rcshowhideliu' => 'bejelentkezett felhasználók szerkesztéseinek $1',
@@ -1652,7 +1655,7 @@ A műveletet nem lehet visszavonni.',
'recentchangeslinked-feed' => 'Kapcsolódó változtatások',
'recentchangeslinked-toolbox' => 'Kapcsolódó változtatások',
'recentchangeslinked-title' => 'A(z) $1 laphoz kapcsolódó változtatások',
-'recentchangeslinked-noresult' => 'A megadott idÅtartam alatt nem történt változás a kapcsolódó lapokon.',
+'recentchangeslinked-noresult' => 'A megadott idÅtartam alatt nem történt változtatás a kapcsolódó lapokon.',
'recentchangeslinked-summary' => "Alább azon lapoknak a legutóbbi változtatásai láthatóak, amelyekre hivatkozik egy megadott lap (vagy tagjai a megadott kategóriának).
A [[Special:Watchlist|figyelÅlistádon]] szereplÅ lapok '''félkövérrel''' vannak jelölve.",
'recentchangeslinked-page' => 'Lap neve:',
@@ -2055,6 +2058,7 @@ Az áthúzott sorok a lista elkészülése óta javÃtva lettek.',
# Miscellaneous special pages
'nbytes' => '{{PLURAL:$1|egy|$1}} bájt',
'ncategories' => '{{PLURAL:$1|egy|$1}} kategória',
+'ninterwikis' => '{{PLURAL:$1|egy|$1}} interwiki',
'nlinks' => '{{PLURAL:$1|egy|$1}} hivatkozás',
'nmembers' => '{{PLURAL:$1|egy|$1}} elem',
'nrevisions' => '{{PLURAL:$1|egy|$1}} változat',
@@ -2083,6 +2087,7 @@ Az áthúzott sorok a lista elkészülése óta javÃtva lettek.',
'mostlinkedtemplates' => 'Legtöbbet hivatkozott sablonok',
'mostcategories' => 'Legtöbb kategóriába tartozó lapok',
'mostimages' => 'Legtöbbet hivatkozott fájlok',
+'mostinterwikis' => 'Legtöbb interwikit tartalmazó lapok',
'mostrevisions' => 'Legtöbbet szerkesztett lapok',
'prefixindex' => 'Keresés elÅtag szerint',
'prefixindex-namespace' => 'Ãsszes lap adott elÅtaggal ($1 névtér)',
@@ -2489,7 +2494,7 @@ változatot visszaállÃtották vagy eltávolÃtották az archÃvumból.',
'undeletedrevisions' => '{{PLURAL:$1|egy|$1}} változat helyreállÃtva',
'undeletedrevisions-files' => '{{PLURAL:$1|egy|$1}} változat és {{PLURAL:$2|egy|$2}} fájl visszaállÃtva',
'undeletedfiles' => '{{PLURAL:$1|egy|$1}} fájl visszaállÃtva',
-'cannotundelete' => 'Nem lehet a lapot visszaállÃtani; lehet, hogy azt már valaki visszaállÃtotta.',
+'cannotundelete' => 'Lap visszaállÃtása sikertelen: $1',
'undeletedpage' => "'''$1 helyreállÃtva'''
Lásd a [[Special:Log/delete|törlési naplót]] a legutóbbi törlések és helyreállÃtások listájához.",
@@ -2872,6 +2877,7 @@ Valamennyi transwiki importálási művelet az [[Special:Log/import|importálás
'import-interwiki-templates' => 'Az összes sablon hozzáadása',
'import-interwiki-submit' => 'Importálás',
'import-interwiki-namespace' => 'Célnévtér:',
+'import-interwiki-rootpage' => 'Cél gyökér lap (opcionális):',
'import-upload-filename' => 'Fájlnév:',
'import-comment' => 'Megjegyzés:',
'importtext' => 'Exportáld a fájlt a forráswikibÅl az [[Special:Export|exportáló eszköz]] segÃtségével.
@@ -2904,6 +2910,8 @@ Mentsd el a számÃtógépedre, majd töltsd fel ide.',
'import-error-interwiki' => 'â$1â lap nem került importálásra, mert a név külsÅ hivatkozásokra van fenntartva (interwiki).',
'import-error-special' => 'â$1â lap nem került importálásra, mert olyan speciális névtérbe tartozik, amelyen nem engedélyezettek a lapok.',
'import-error-invalid' => 'â$1â lap nem került importálásra, mert a neve nem érvényes.',
+'import-options-wrong' => 'Rossz {{PLURAL:$2|opció|opciók}}:
-Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo manipud ti maysa a nawaya a pagturayan ti publiko wenno ti kapadpadana a lnawaya a nagtaudan.
+Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo manipud ti maysa a nawaya a pagturayan ti publiko wenno ti kapadpadana a nawaya a nagtaudan.
'''Saan a mangited ti adda karbenganna a panagipablaak nga obra no awan ti pammalubos!'''",
-'copyrightwarning2' => "Pangngaasiyo, apo, a laglagipen nga amin a parawad iti {{SITENAME}} ket mabalin a maurnos, masuktan, wenno ikkaten dagiti sabali pay nga agar-aramat.
+'copyrightwarning2' => "Pangngaasiyo, apo, a laglagipen nga amin a maiparawad iti {{SITENAME}} ket mabalin a maurnos, masuktan, wenno ikkaten dagiti sabali pay nga agar-aramat.
No dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmo laengen nga ip-ipan wenno ipabpablaak ditoy.
Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo manipud ti maysa a nawaya a pagturayan ti publiko wenno ti kapadpadana a nawaya a pagtaudan (kitaen ti $1 para iti salaysay).
'''Saan a mangipan iti adda ti karbenganna a panagpablaak nga obra no awan ti pammalubos!'''",
@@ -1058,7 +1057,7 @@ Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete
'searchresults-title' => 'Dagiti nabirukan a nagbanagan para iti "$1"',
'searchresulttext' => 'Para iti adu pay a pakaammo a maipanggep ti panagbiruk {{SITENAME}}, kitaem ti [[{{MediaWiki:Helppage}}|{{int:help}}]].',
'searchsubtitle' => 'Nagbirukka para iti \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|amin a panid a mangrugi iti "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|amin a panid nga agsilpo iti "$1"]])',
-'searchsubtitleinvalid' => "Nagbiruk ka para iti '''$1'''",
+'searchsubtitleinvalid' => "Nagbirukka para iti '''$1'''",
'toomanymatches' => 'Adu unay ti napasubli nga agpapada, pangngaasi a padasem ti sabali a panagsapul',
'titlematches' => 'Dagiti kapadpada a titulo ti panid',
'notitlematches' => 'Awan dagiti kapadpada a titulo ti panid',
@@ -1195,7 +1194,7 @@ Adda ditoy ti pugto a pateg a mausarmo: $1',
'allowemail' => 'Pakabaelam ti e-surat a naggapu kadagiti sabali nga agar-aramat',
'prefs-searchoptions' => 'Biruken',
'prefs-namespaces' => 'Nagan ti luglugar',
-'defaultns' => 'Wenno no saan agbirukka kadagitoy a nagan ti luglugar:',
+'defaultns' => 'Wenno saan agbirukka kadagitoy a nagan ti luglugar:',
'default' => 'kasisigud',
'prefs-files' => 'Dagiti papeles',
'prefs-custom-css' => 'Naiduma a CSS',
@@ -1454,7 +1453,7 @@ Dagiti panid iti [[Special:Watchlist|listaan ti bambantayam]] ket '''napuskol'''
# Upload
'upload' => 'Mangipan iti papeles',
'uploadbtn' => 'Mangipan iti papeles',
-'reuploaddesc' => 'Ukasen ti pag-ipan ken absubli idiay kabuklan ti pag-ipan',
+'reuploaddesc' => 'Ukasen ti pag-ipan ken agsubli idiay kabuklan ti pag-ipan',
'upload-tryagain' => 'Ited ti napabaro a panagipalawag ti papeles',
'uploadnologin' => 'Saan a nakastrek',
'uploadnologintext' => 'Masapul a [[Special:UserLogin|nakaserrekka]] tapno makaipanka iti papeles.',
@@ -1520,7 +1519,7 @@ Pangngaasi ta kitaem no kayatmo latta nga ipapan daytoy a papeles.',
'windows-nonascii-filename' => 'Daytoy a wiki ket saanna a tapayaen dagiti nagan ti papeles nga adda ti kangrunaan a kababalin',
'fileexists' => 'Adda ti papeles nga agnagan ti kastoy, pangngaasi a kitaemti [[:$1]] no saanka a sigurado a mangsukat.
[[$1|thumb]]',
-'filepageexists' => 'Ti panangipalpalawag a panid ti daytoy a papeles ket naaramiden idiay [[:$1]], mgem awan ti agnagan ti katoy a papeles.
+'filepageexists' => 'Ti panangipalpalawag a panid ti daytoy a papeles ket naaramiden idiay [[:$1]], ngem awan ti agnagan ti katoy a papeles.
Ti pakabuklan nga inkabilmo ket saan nga agparang idiay panid ti panangipalpalawag.
Tapno ti pakabuklan ket agparang idiay, masapul a baliwam idiay.
[[$1|thumb]]',
@@ -1687,9 +1686,9 @@ Para iti kangatuan a talinaay, nabaldado ti img_auth.php.',
'upload-curl-error6-text' => 'Ti URL a naited ket saan a madanon.
Pangngaasi ta kitaem manen no husto ti URL ken adda dayta a pagsaadan.',
'upload-curl-error28' => 'Nagsardeng ti panag-ipan',
-'upload-curl-error28-text' => 'Ti pagsaadan ket nabayag unay nga simmungbat.
-Pangngaasi ti kitaen no naipatakder ti pagsaadan, aguray no madamdama ket padasem manen.
-Baka kayatmo a padasen no saan da a makumikom.',
+'upload-curl-error28-text' => 'Ti pagsaadan ket nabayag unay a simmungbat.
+Pangngaasi a kitaen no naipatakder ti pagsaadan, aguray no madamdama ket padasem manen.
+Baka kayatmo a padasen no saan a makumikom nga oras.',
'license' => 'Lisensia:',
'license-header' => 'Lisensia',
@@ -1748,7 +1747,7 @@ Baka kayatmo nga urnosen ti bukodna a deskripsion idiay [$2 deskripsion ti papel
'sharedupload-desc-create' => 'Daytoy a papeles ket naggapu manipud idiay $1 ken mabalin a mausar babaen dagiti sabali a gandat.
Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti papeles a panid].',
'filepage-nofile' => 'Awan ti agnagan ti kasta a papeles.',
-'filepage-nofile-link' => 'Awan ti agnagan ti kastoy a papeles, ngem mabalin mo ti [$1 mangipan].',
+'filepage-nofile-link' => 'Awan ti agnagan ti kastoy a papeles, ngem mabalinmo ti [$1 mangipan].',
'uploadnewversion-linktext' => 'Mangipan ti kabarbaro a bersion iti daytoy a papeles',
'shared-repo-from' => 'Naggapo iti $1',
'shared-repo' => 'iti pagbingbingayan a nagikabilan',
@@ -1762,7 +1761,7 @@ Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti pap
'filerevert-defaultcomment' => 'Naisubli ti bersion manipud idi $2, $1',
'filerevert-submit' => 'Isubli',
'filerevert-success' => "Ti '''[[Media:$1|$1]]''' ket naipasubli idiay [$4 bersion ti oras ken petsa $3, $2].",
-'filerevert-badversion' => 'Awan ti dati a lokal a bersion daytoy a papelesa naited ti dayta nga oras ken petsa.',
+'filerevert-badversion' => 'Awan ti dati a lokal a bersion daytoy a papeles a naited ti dayta nga oras ken petsa.',
# File deletion
'filedelete' => 'Ikkaten ti $1',
@@ -1780,7 +1779,7 @@ Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti pap
'filedelete-reason-dropdown' => '*Kadawyan a rasrason ti pannakaikkat
** Panagsalungasing iti karbengan ti panagkopia
** Nadoble a papeles',
-'filedelete-edit-reasonlist' => 'Unosen dagiti rason ti panagikkat',
+'filedelete-edit-reasonlist' => 'Urnosen dagiti rason ti panagikkat',
'filedelete-maintenance' => 'Ti panagikkat ken panagisubli kadagiti papaeles ket nabaldado iti las-ud ti panagtartaripatu.',
'filedelete-maintenance-title' => 'Saan a maikkat daytoy a papeles',
@@ -1822,14 +1821,14 @@ Laglagipem ti agkita kadagiti sabsabali a panilpo ti plantilia sakbay nga ikkate
'statistics-pages' => 'Pampanid',
'statistics-pages-desc' => 'Dagiti amin a panid ti wiki, a mairaman dagiti tungtungan a panid, dagiti baw-ing, ken dadduma pay',
'statistics-files' => 'Ti naipapan a papeles',
-'statistics-edits' => 'Dagit naurnos a panid manipud idi nairugi ti {{SITENAME}}',
-'statistics-edits-average' => 'Pagtengngaan nga urnos tungal maysa a panid',
+'statistics-edits' => 'Dagiti naurnos a panid manipud idi nairugi ti {{SITENAME}}',
+'statistics-edits-average' => 'Pagtengngaan nga urnos ti tunggal maysa a panid',
'statistics-views-total' => 'Dagiti dagup ti panagkita',
'statistics-views-total-desc' => 'Saan a naikabil ti panagkita dagiti awan a panid ken dagiti espesial a panid',
-'statistics-views-peredit' => 'Mano a panagkita tunggal maysa nga urnos',
+'statistics-views-peredit' => 'Mano a panagkita ti tunggal maysa nga urnos',
'statistics-users' => 'Dagiti nakarehistro nga [[Special:ListUsers|agar-aramat]]',
'statistics-users-active' => 'Dagiti nasiglat nga agar-aramat',
-'statistics-users-active-desc' => 'Dagiti agar-aramat a nagtungpal iti aramid idi napalubos nga {{PLURAL:$1|aldaw|$1 al-aldaw}}',
+'statistics-users-active-desc' => 'Dagiti agar-aramat a nagtungpal ti aramid ti napalabas nga {{PLURAL:$1|aldaw|$1 nga al-aldaw}}',
'statistics-mostpopular' => 'Kaaduan a nabuya a pampanid',
'disambiguations' => 'Dagiti panid a nakasilpo kadagiti panangilawlawag',
@@ -1934,7 +1933,7 @@ Pangngaasi a laglagipen a dagiti sabali a sapot ti pagsaadan ket makasilpoda ti
'booksources-search-legend' => 'Agsapul kadagiti nagtaudan ti liblibro',
'booksources-go' => 'Inkan',
'booksources-text' => 'Dita baba ket listaan dagiti panilpo ti sabsali a lugar nga aglaklako ti liblibro, ken baka adda pay adu a pakaammo da kadagiti liblibro a kitkitaem:',
-'booksources-invalid-isbn' => 'Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti pinagtulad kadagiti naggappuanna a taudan.',
+'booksources-invalid-isbn' => 'Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad kadagiti naggappuanna a taudan.',
# Special:Log
'specialloguserlabel' => 'Ti nagtungpal:',
@@ -2193,7 +2192,7 @@ ti naudi a nakaaramid ket iti laeng nagsurat daytoy a panid..',
'alreadyrolled' => 'Saan a maipasubli ti kinaudi a panagurnos iti [[:$1]] babaen ni [[User:$2|$2]] ([[User talk:$2|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
adda sabali a naurnos wenno nagipasubli ti panid.
-Ti kinaudi a panagurnos daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Ti kinaudi a panagurnos ti daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
'editcomment' => "Ti panagurnos a pakabuklan idi ket: \"''\$1''\".",
'revertpage' => 'Insubli ti panagurnos babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]]), naisubli ti kinaudi a panagbaliw babaen ni [[User:$1|$1]]',
'revertpage-nouser' => 'Naisubli ti panagurnos babaen ni (naikkat ti nagan ti agar-aramat) ti kinaudi a panagbaliw babaen ni [[User:$1|$1]]',
@@ -2431,7 +2430,7 @@ Kitaen ti [[Special:BlockList|listaan ti lapden nga IP ]] tapno marepaso dagiti
'ipb-blocklist' => 'Kitaen dagiti adda a serra',
'ipb-blocklist-contribs' => 'Dagiti naaramidan ni $1',
'unblockip' => 'Lukatan ti serra ti agar-aramat',
-'unblockiptext' => 'Usaren ti kinabuklan dita baba ti pinagisubli ti pinagserrek nga agsurat ti napalubos a naserran nga IP a pagtaengan wenno nagan ti agar-aramat.',
+'unblockiptext' => 'Usaren ti kinabuklan dita baba ti pinagisubli ti pinagserrek nga agsurat ti napalabas a naserran nga IP a pagtaengan wenno nagan ti agar-aramat.',
'ipusubmit' => 'Ikkaten daytoy a serra',
'unblocked' => 'Naikkat ti panakaserra ni [[User:$1|$1]]',
'unblocked-range' => '$1 naikkaten ti serra na',
@@ -2588,7 +2587,7 @@ Pangngaasim a mangpilika iti sabali a nagan.',
'talkexists' => "'''Sibaballigi a naiyalis ti panid, nupay kasta saan a maiyalis ti panid ti tungtongan gapu ta addan panid-tungtongan iti baro a titulo.
Pangngaasim ta i-manualmo lattan a pagtiponem ida.'''",
'movedto' => 'naiyalis iti',
-'movetalk' => 'Iyalis ti mainaig a panid ti tungtongan',
+'movetalk' => 'Iyalis ti mainaig a panid ti tungtungan',
'move-subpages' => 'Iyalis dagiti apo ti panid (aginggana ti $1)',
'move-talk-subpages' => 'Iyalis dagiti apo ti panid iti tungtungan ti panid (aginggana ti $1)',
'movepage-page-exists' => 'Ti panid ti $1 ket addan ken saan a mautomatiko a suratan manen.',
@@ -2606,7 +2605,7 @@ Pangngaasim ta i-manualmo lattan a pagtiponem ida.'''",
'delete_and_move_text' => '== Masapul nga ikkaten ==
Ti pangipanan ti panid ket "[[:$1]]" addan.
Kayatmo nga ikkaten tapno makaiyalis ka?',
-'delete_and_move_confirm' => 'Wen, ikkatenen ti panid',
+'delete_and_move_confirm' => 'Wen, ikkaten ti panid',
'delete_and_move_reason' => 'Naikkat tapno mawayaan ti panaka-iyalis idiay "[[$1]]"',
'selfmove' => 'Ti titulo ti taudan ken ti pangipanan ket agpadpada;
saanmo a maiyalis ti panid ti isu met laeng a panid.',
@@ -2626,7 +2625,7 @@ Ti kinaudi a naikabil ti listaan ket adda dita baba tapno mausar a reperensia:",
'semiprotectedpagemovewarning' => "'''Pakaammo:''' Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaiyalis daytoy.
Ti kinaudi a naikabil ti listaan ket adda iti baba tapno mausar a reperensia:",
'move-over-sharedrepo' => '== Addaan ti papeles ==
-[[:$1]] addaan idiay pagbingayan a nagikabilan. Ti panagiyalis ti papeles iti titulo nga itoy ket paawanen na ti pagbingayan a papeles.',
+[[:$1]] addaan idiay pagbingayan a nagikabilan. Ti panagiyalis ti papeles iti titulo nga itoy ket paawanenna ti pagbingayan a papeles.',
'file-exists-sharedrepo' => 'Ti napilim a nagan ti papeles ket naususaren idiay pagbingayan a pagikabilan.
Pangngaasi nga agpilika ti sabali a nagan.',
@@ -2635,13 +2634,13 @@ Pangngaasi nga agpilika ti sabali a nagan.',
'exporttext' => 'Maipanmo ti testo ken pakasaritaan ti inurnos iti maysa a panid wenno pampanid a nabalkut ti XML.
Daytoy ket mabalin a maikabil iti sabali a wiki nga agususar ti MediaWiki nga usaren ti [[Special:Import|pinagala ti panid]].
-Ti pinagipan ti panid, ikabil ti titulo dita kahon ti testo dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a pinagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a pinagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a pinagurnos.
+Ti pinagipan ti panid, ikabil ti titulo dita kahon ti testo dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a panagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a panagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a panagurnos.
No iti kinaudi a kaso mabalinmo nga usaren ti panilpo, a kas pagarigan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para iti panid "[[{{MediaWiki:Mainpage}}]]".',
'exportall' => 'Ipan amin a pampanid',
'exportcuronly' => 'Iraman laeng ti kinaudi a panagbaliw, saan a ti napno a pakasaritaan',
'exportnohistory' => "----
-'''Palagip:''' Ti pagipapan dagiti punno a pakasaritaan dagiti panid iti daytoy a kinabuklan ket nabaldado gapu dagiti pinakalaing ti pinagandar a rason.",
+'''Palagip:''' Ti pagipapan dagiti punno a pakasaritaan dagiti panid iti daytoy a kinabuklan ket nabaldado gapu dagiti panakalaing ti panagandar a rason.",
'exportlistauthors' => 'Iraman ti amin a listaan kadagiti nagaramid iti tunggal a maysa a panid',
'export-submit' => 'Agipan',
'export-addcattext' => 'Agnayon kadagiti panid a naggapu idiay kategoria:',
@@ -2658,10 +2657,10 @@ No iti kinaudi a kaso mabalinmo nga usaren ti panilpo, a kas pagarigan [[{{#Spec
'allmessagesdefault' => 'Kasisigud a testo ti mensahe',
'allmessagescurrent' => 'Agdama a testo ti mensahe',
'allmessagestext' => 'Daytoy ti listaan dagiti mensahe ti sistema a magun-od idiay MediaWiki a nagan ti lugar.
-Pangngaasi a bisitaeen ti [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ken [//translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.',
+Pangngaasi a bisitaen ti [//www.mediawiki.org/wiki/Localisation Lokalisasion ti MediaWiki] ken [//translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.',
'allmessagesnotsupportedDB' => "Saan a mausar daytoy a panid ngamin ket ti '''\$wgUseDatabaseMessages''' ket nabaldado.",
'allmessages-filter-legend' => 'Sagat',
-'allmessages-filter' => 'Sagaten ti naiduma a estado:',
+'allmessages-filter' => 'Sagaten babaen ti naipaduma nga estado:',
'allmessages-filter-unmodified' => 'Saan a nabaliwan',
'allmessages-filter-all' => 'Amin',
'allmessages-filter-modified' => 'Napabaro',
@@ -2680,7 +2679,7 @@ Pangngaasi a bisitaeen ti [//www.mediawiki.org/wiki/Localisation MediaWiki Local
'thumbnail_invalid_params' => 'Imbalido a parametro ti imahen',
'thumbnail_dest_directory' => 'Saan a nakaaramid ti pangipanan a direktoria.',
'thumbnail_image-type' => 'Daytoy a kita ti imahen ket saan a nasuportaran.',
-'thumbnail_gd-library' => 'Saan a kompleto a GD bibliotika a pinakaaramid: Awan ti opisio $1',
+'thumbnail_gd-library' => 'Saan a kompleto a GD biblioteka a panakaaramid: Awan ti opisio $1',
'thumbnail_image-missing' => 'Daytoy a papeles ket kasla napukaw: $1',
# Special:Import
@@ -2706,7 +2705,7 @@ Amin a transwiki nga alaem ket mailista idiay [[Special:Log/import|listaan ti pi
'importunknownsource' => 'Di amammo a kita ti taudan ti innala',
'importcantopen' => 'Saan a maluktan ti innala a papeles',
'importbadinterwiki' => 'Saan a nasayaat a panilpo nga interwiki',
-'importnotext' => 'Awanan linaon wenno awanan testo',
+'importnotext' => 'Awan linaon wenno awan ti testo',
'importsuccess' => 'Nalpasen ti pinagala!',
'importhistoryconflict' => 'Adda kasinnungat a pinagbaliw ti pakasaritaan (baka naala daytoy a panid idi)',
'importnosources' => 'Awan ti innala a taudan ti transwiki ti naipalawag ken ti dagus a pakasaritaan ti pinag-ipan ket nabaldado.',
@@ -2722,11 +2721,11 @@ Awan ti saan nga agnayon a polder.',
'import-nonewrevisions' => 'Amin a panagbalbaliw ket dati a naala.',
'xml-error-string' => '$1 iti linia $2, tukol $3 (byte $4): $5',
'import-upload' => 'Ipan ti XML data',
-'import-token-mismatch' => 'Napukaw ti gimong ti data.
-Pangngaasi ta padasem manen.',
+'import-token-mismatch' => 'Napukaw ti gimong ti datos.
+Pangngaasi a padasem manen.',
'import-invalid-interwiki' => 'Saan a makaala dita naited a wiki.',
-'import-error-edit' => 'Ti panid ti "$1" ket saan a naala ngamin ket saan mo a mabalin nga urnosen.',
-'import-error-create' => 'Ti panid ti "$1" ket saan a naala ngamin ket saan mo a mabalin nga aramiden.',
+'import-error-edit' => 'Ti panid ti "$1" ket saan a naala ngamin ket saanmo a mabalin nga urnosen.',
+'import-error-create' => 'Ti panid ti "$1" ket saan a naala ngamin ket saanmo a mabalin nga aramiden.',
'import-error-interwiki' => 'Ti panid ti "$1" ket saan a naala ngamin ket ti nagan ket nailasin para iti ruar a panagsilpo (interwiki).',
'import-error-special' => 'Ti panid ti "$1" ket saan a naala ngamin ket bukod ti espesial a nagan a lugar a saan nga agpalubos ti pampanid.',
'import-error-invalid' => 'Ti panid ti "$1" ket saan a naala ngamin ket ti nagan ket imbalido.',
@@ -2809,9 +2808,9 @@ Mabalinmo a kitaen ti taudanna.',
'tooltip-ca-nstab-category' => 'Kitaen ti panid ti kategoria',
'tooltip-minoredit' => 'Markaan daytoy a kas bassit a panag-urnos',
'tooltip-save' => 'Idulin dagiti sinukatam',
-'tooltip-preview' => 'Ipadas dagiti sinukatam, pangngaasimnga usarem daytoy sakbay nga idulinmo ti panid!',
+'tooltip-preview' => 'Ipadas dagiti sinukatam, pangngaasim nga usarem daytoy sakbay nga idulinmo ti panid!',
'tooltip-diff' => 'Ipakita no ania dagiti sinukatan nga inaramidmo iti testo',
-'tooltip-compareselectedversions' => 'Kitaen ti naggidiatan dagiti dua a napili a bersion daytoy a panid.',
+'tooltip-compareselectedversions' => 'Kitaen ti naggidiatan dagiti dua a napili a bersion ti daytoy a panid.',
'tooltip-watch' => 'Inayon daytoy a panid idiay listaan dagiti bambantayam',
'tooltip-watchlistedit-normal-submit' => 'Ikkaten dagiti titulo',
'tooltip-watchlistedit-raw-submit' => 'Pabaruen ti listaan ti bambantayan',
@@ -2873,10 +2872,10 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
'pageinfo-authors' => 'Dagup a bilang dagiti naisangsangayn a mannurat',
'pageinfo-recent-edits' => 'Itay nabiit a bilang dagiti inurnos (ti uneg ti napalabas ti $1)',
'pageinfo-recent-authors' => 'Itay nabiit a bilang dagiti naisangsangayan a mannurat',
-'pageinfo-restriction' => 'Panagsalaknib ti panid ({{lcfirst:$1}})',
'pageinfo-magic-words' => 'Salamangka {{PLURAL:$1|a balikas|a balbalikas}} ($1)',
'pageinfo-hidden-categories' => 'Nailemmeng {{PLURAL:$1|a kategoria|a katkategoria}} ($1)',
'pageinfo-templates' => 'Nailak-am {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
+'pageinfo-toolboxlink' => 'Pakaammo ti panid',
# Patrolling
'markaspatrolleddiff' => 'Markaan a kas napatruliaan',
@@ -3412,11 +3411,11 @@ ta pasardengem ti pinakasingkedan ti e-surat a pagtaengam:
$5
Daytoy a pammasingked a kodigo ket agpaso iti $4.',
-'confirmemail_body_changed' => 'Addaan, baka sika, ti naggapu ti IP a apagtaengam $1,
+'confirmemail_body_changed' => 'Addaan, baka sika, ti naggapu ti IP a pagtaengam $1,
ket nangsukat ti e-surat a pagtaengan ti pakabilangan "$2" iti daytoy a pagtaengan idiay {{SITENAME}}
Tapno mapasingkedan daytoy a pakabilangan ket kukuam ken ti
-pinagpabalin ti e-surat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:
+panagpabalin ti e-surat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:
$3
diff --git a/languages/messages/MessagesIo.php b/languages/messages/MessagesIo.php
index 71218a7d12..ca0f05860a 100644
--- a/languages/messages/MessagesIo.php
+++ b/languages/messages/MessagesIo.php
@@ -409,7 +409,7 @@ nekorekta interlinguale od interwikale ligilo.',
# Login and logout pages
'logouttext' => "'''Vu nun esas nun ek {{SITENAME}}.'''
-Vu povas durar uzante {{SITENAME}} anonimale, o vu povas [[Special:UserLogin|enirar itere]] kom la sama o diferenta uzanto.
+Vu povas durar uzante {{SITENAME}} anonimale, o vu povas [$1 enirar itere] kom la sama o diferenta uzanto.
Atencez ke kelka pagini posible duras montresar semblante ke vu ne ekirus, til vu vakuigas la tempala-magazino di vua navigilo.",
'welcomecreation' => '== Bonveno, $1! ==
Vua konto kreesis.
diff --git a/languages/messages/MessagesIs.php b/languages/messages/MessagesIs.php
index 36bfc40ce9..4ba8dc3b2b 100644
--- a/languages/messages/MessagesIs.php
+++ b/languages/messages/MessagesIs.php
@@ -377,7 +377,6 @@ $messages = array(
'qbbrowse' => 'Flakka',
'qbedit' => 'Breyta',
'qbpageoptions' => 'Ãessi sÃða',
-'qbpageinfo' => 'Samhengi',
'qbmyoptions' => 'MÃnar sÃður',
'qbspecialpages' => 'KerfissÃður',
'faq' => 'Algengar spurningar',
@@ -637,7 +636,7 @@ Möppudýrið sem læsti skránni gaf þessa ástæðu: "\'\'$3\'\'".',
# Login and logout pages
'logouttext' => "'''Ãú hefur verið skráð(ur) út.'''
-Ãú getur haldið áfram að nota {{SITENAME}} óþekkt(ur), eða þú getur [[Special:UserLogin|skráð þig inn aftur]] sem sami eða annar notandi.
+Ãú getur haldið áfram að nota {{SITENAME}} óþekkt(ur), eða þú getur [$1 skráð þig inn aftur] sem sami eða annar notandi.
Athugaðu að sumar sÃður kunna að birtast lÃkt og þú sért ennþá skráð(ur) inn, þangað til að þú hreinsar skyndiminnið à vafranum þÃnum.",
'welcomecreation' => '== Velkomin(n), $1! ==
Aðgangurinn þinn hefur verið búinn til.
@@ -2114,7 +2113,7 @@ Studdar samskiptareglur: $1
(ekki bæta neinum af þessum à leitin
'emailpagetext' => 'Hafi notandi tilgreint netfang à stillingunum sÃnum er hægt að senda póst til hans hér.
Póstfangið sem þú tilgreindir à [[Special:Preferences|stillingunum þÃnum]] birtist à "Frá:" hluta tölvupóstsins, svo að viðtakandi þess geti svarað beint til þÃn.',
'usermailererror' => 'Póst hlutur skilaði villu:',
-'defemailsubject' => '{{SITENAME}} netfang notanda "$1"',
+'defemailsubject' => '{{SITENAME}} skilaboð frá notandanum "$1"',
'usermaildisabled' => 'Netfang notenda er óvirkt',
'usermaildisabledtext' => 'Ãú getur ekki sent tölvupóst til annara notenda á þessum wiki',
'noemailtitle' => 'Ekkert póstfang',
@@ -2188,7 +2187,7 @@ Frekari breytingar á henni eða spallsÃðu hennar munu verða sýndar þar, og
$1',
'enotif_lastdiff' => 'Einnig getur þú heimsótt eftirfarandi tengil til að skoða þessa breytingu:
$1',
-'enotif_anon_editor' => 'ónefndur notandi $1',
+'enotif_anon_editor' => 'ónefndum notanda $1',
'enotif_body' => 'Kæri $WATCHINGUSERNAME,
Ãað lÃtur út fyrir að þú hafir ný skilaboð á {{SITENAME}} sÃðunni $PAGETITLE.
@@ -2715,7 +2714,7 @@ Ef sÃðari möguleikinn á við getur þú einnig notað tengil, til dæmis
'allmessagesdefault' => 'Sjálfgefinn skilaboða texti',
'allmessagescurrent' => 'Núverandi texti',
'allmessagestext' => 'Ãetta er listi yfir kerfismeldingar à Melding-nafnrýminu.
-Gjörðu svo vel og heimsæktu [//www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt à almennri MediaWiki-staðfæringu.',
+Vinsamlegast heimsæktu [//www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt à almennri MediaWiki-staðfæringu.',
'allmessagesnotsupportedDB' => "Ãað er ekki hægt að nota '''{{ns:special}}:Allmessages''' þvà '''\$wgUseDatabaseMessages''' hefur verið gerð óvirk.",
'allmessages-filter-legend' => 'SÃa',
'allmessages-filter' => 'SÃa með breytingarstöðu:',
diff --git a/languages/messages/MessagesIt.php b/languages/messages/MessagesIt.php
index d6c12f604c..5eaedf2809 100644
--- a/languages/messages/MessagesIt.php
+++ b/languages/messages/MessagesIt.php
@@ -412,7 +412,6 @@ $messages = array(
'qbbrowse' => 'Sfoglia',
'qbedit' => 'Modifica',
'qbpageoptions' => 'Opzioni pagina',
-'qbpageinfo' => 'Informazioni sulla pagina',
'qbmyoptions' => 'Le mie pagine',
'qbspecialpages' => 'Pagine speciali',
'faq' => 'Domande frequenti',
@@ -674,7 +673,7 @@ L\'amministratore che lo ha bloccato ha fornito questa motivazione: "$3".',
# Login and logout pages
'logouttext' => "'''Logout effettuato.'''
-Si può continuare ad usare {{SITENAME}} come utente anonimo oppure [[Special:UserLogin|eseguire un nuovo accesso]], con lo stesso nome utente o un nome diverso.
+Si può continuare ad usare {{SITENAME}} come utente anonimo oppure [$1 eseguire un nuovo accesso], con lo stesso nome utente o un nome diverso.
Nota che alcune pagine potrebbero continuare ad apparire come se il logout non fosse avvenuto finché non viene pulita la cache del proprio browser.",
'welcomecreation' => "== Benvenuto, $1! ==
@@ -1021,6 +1020,15 @@ Sembra che sia stata cancellata.',
'edit-already-exists' => 'Impossibile creare una nuova pagina.
Esiste già .',
'defaultmessagetext' => 'Testo predefinito',
+'content-failed-to-parse' => 'Impossibile analizzare $2 per il modello $1: $3',
+'invalid-content-data' => 'Dati contenuti non validi',
+'content-not-allowed-here' => 'Contenuto in "$1" non consentito nella pagine [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitesto',
+'content-model-text' => 'testo normale',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Attenzione:''' Questa pagina contiene troppe chiamate alle parser functions.
@@ -1908,7 +1916,7 @@ Probabilmente vuoi modificare la descrizione presente nella [$2 pagina di descri
'shared-repo-from' => 'da $1',
'shared-repo' => 'un archivio condiviso',
'filepage.css' => '/* Il CSS messo qui viene incluso nella pagina di descrizione del file, inclusa anche su wiki client esterni */',
-'upload-disallowed-here' => 'Impossibile sovrascrivere questa immagine.',
+'upload-disallowed-here' => 'Impossibile sovrascrivere questo file.',
# File reversion
'filerevert' => 'Ripristina $1',
@@ -2442,7 +2450,8 @@ Il testo contenuto nelle revisioni cancellate è disponibile solo agli amministr
'undeletedrevisions' => '{{PLURAL:$1|Una revisione recuperata|$1 revisioni recuperate}}',
'undeletedrevisions-files' => '{{PLURAL:$1|Una revisione|$1 revisioni}} e $2 file recuperati',
'undeletedfiles' => '{{PLURAL:$1|Un file recuperato|$1 file recuperati}}',
-'cannotundelete' => 'Ripristino non riuscito; è possibile che la pagina sia già stata recuperata da un altro utente.',
+'cannotundelete' => 'Ripristino non riuscito:
+$1',
'undeletedpage' => "'''La pagina $1 è stata recuperata'''
Consultare il [[Special:Log/delete|log delle cancellazioni]] per vedere le cancellazioni e i recuperi più recenti.",
@@ -2730,6 +2739,7 @@ La pagina specificata come destinazione "[[:$1]]" esiste già . Vuoi cancellarla
'immobile-target-namespace-iw' => 'Un collegamento interwiki non è una destinazione valida per spostare la pagina.',
'immobile-source-page' => 'Questa pagina non può essere spostata.',
'immobile-target-page' => 'Non è possibile spostare sul titolo indicato.',
+'bad-target-model' => 'La destinazione desiderata utilizza un modello di contenuti diverso. Non è possibile convertire da $1 a $2.',
'imagenocrossnamespace' => 'Non è possibile spostare un file fuori dal relativo namespace.',
'nonfile-cannot-move-to-file' => 'Non è possibile spostare un file fuori dal relativo namespace.',
'imagetypemismatch' => 'La nuova estensione del file non corrisponde al tipo dello stesso',
@@ -2992,6 +3002,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
# Info page
'pageinfo-title' => 'Informazioni per "$1"',
+'pageinfo-not-current' => 'Le informazioni possono essere visualizzate solo per la versione corrente.',
'pageinfo-header-basic' => 'Informazioni di base',
'pageinfo-header-edits' => 'Cronologia delle modifiche',
'pageinfo-header-restrictions' => 'Protezione della pagina',
@@ -3016,10 +3027,17 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
'pageinfo-authors' => 'Numero totale di autori diversi',
'pageinfo-recent-edits' => 'Numero di modifiche recenti (negli ultimi $1)',
'pageinfo-recent-authors' => 'Numero di autori diversi recenti',
-'pageinfo-restriction' => 'Protezione della pagina ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|Parola magica|Parole magiche}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria nascosta|Categorie nascoste}} ($1)',
'pageinfo-templates' => 'Template {{PLURAL:$1|incluso|inclusi}} ($1)',
+'pageinfo-toolboxlink' => 'Informazioni sulla pagina',
+'pageinfo-redirectsto' => 'Reindirizza a',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Conteggiata come una pagina di contenuto',
+'pageinfo-contentpage-yes' => 'Sì',
+'pageinfo-protect-cascading' => 'Protezione ricorsiva da qui',
+'pageinfo-protect-cascading-yes' => 'Sì',
+'pageinfo-protect-cascading-from' => 'Protezione ricorsiva ereditata da',
# Patrolling
'markaspatrolleddiff' => 'Segna la modifica come verificata',
@@ -3598,6 +3616,7 @@ Questo codice di conferma scadrà automaticamente alle $4.',
# Scary transclusion
'scarytranscludedisabled' => "[L'inclusione di pagine tra siti wiki non è attiva]",
'scarytranscludefailed' => '[Errore: Impossibile ottenere il template $1]',
+'scarytranscludefailed-httpstatus' => '[Errore: impossibile ottenere il template $1: HTTP $2]',
'scarytranscludetoolong' => '[Errore: URL troppo lunga]',
# Delete conflict
diff --git a/languages/messages/MessagesJa.php b/languages/messages/MessagesJa.php
index dcde4768ac..fb473e35d1 100644
--- a/languages/messages/MessagesJa.php
+++ b/languages/messages/MessagesJa.php
@@ -494,7 +494,7 @@ $messages = array(
'about' => '解説',
'article' => 'æ¬æ',
-'newwindow' => 'ï¼æ°ããã¦ã£ã³ãã¦ãéãã¾ãï¼',
+'newwindow' => '(æ°ããã¦ã£ã³ãã¦ã§éãã¾ã)',
'cancel' => 'ä¸æ¢',
'moredotdotdot' => 'ç¶ã...',
'mypage' => 'èªåã®ãã¼ã¸',
@@ -508,7 +508,6 @@ $messages = array(
'qbbrowse' => 'é²è¦§',
'qbedit' => 'ç·¨é',
'qbpageoptions' => 'ãã®ãã¼ã¸ã«ã¤ãã¦',
-'qbpageinfo' => 'é¢é£æ
å ±',
'qbmyoptions' => 'èªåã®ãã¼ã¸',
'qbspecialpages' => 'ç¹å¥ãã¼ã¸',
'faq' => 'ãããã質åã¨åç',
@@ -532,7 +531,7 @@ $messages = array(
'variants' => 'å¤ç¨®',
'errorpagetitle' => 'ã¨ã©ã¼',
-'returnto' => '$1ã«æ»ãã',
+'returnto' => '$1 ã«æ»ãã',
'tagline' => 'æä¾ï¼{{SITENAME}}',
'help' => 'ãã«ã',
'search' => 'æ¤ç´¢',
@@ -749,7 +748,7 @@ URL ãééã£ã¦å
¥åããããæ£ãããªããªã³ã¯ããã©ã£ãå¯
'viewyourtext' => "ãã®ãã¼ã¸ã¸ã®'''ããªãã®ç·¨é'''ã®ã½ã¼ã¹ã®é²è¦§ãã³ãã¼ãã§ãã¾ãï¼",
'protectedinterface' => 'ãã®ãã¼ã¸ã«ã¯ãã®ã¦ã£ãã®ã½ããã¦ã§ã¢ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ä½¿ç¨ãããããã¹ããä¿åããã¦ããããããããªã©ã®é²æ¢ã®ããã«ä¿è·ããã¦ãã¾ãã
ãã¹ã¦ã®ã¦ã£ãã«å¯¾ãã¦ç¿»è¨³ã追å /å¤æ´ããå ´åã¯ãMediaWiki ã®å°ååããã¸ã§ã¯ã [//translatewiki.net/ translatewiki.net] ã使ç¨ãã¦ãã ããã',
-'editinginterface' => "'''è¦å:''' ã½ããã¦ã§ã¢ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ä½¿ç¨ãããã®ããã¹ãã®ãã¼ã¸ãç·¨éãã¦ãã¾ãã
+'editinginterface' => "'''è¦å:''' ã½ããã¦ã§ã¢ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ä½¿ç¨ãããããã¹ãã®ãã¼ã¸ãç·¨éãã¦ãã¾ãã
ãã®ãã¼ã¸ãå¤æ´ããã¨ããã®ã¦ã£ãã®ä»ã®å©ç¨è
ã®ã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®å¤è¦³ã«å½±é¿ãã¾ãã
ãã¹ã¦ã®ã¦ã£ãã«å¯¾ãã¦ç¿»è¨³ã追å /å¤æ´ããå ´åã¯ãMediaWiki ã®å°ååããã¸ã§ã¯ã [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] ã使ç¨ãã¦ãã ããã",
'sqlhidden' => '(SQL ã¯ã¨ãªé表示)',
@@ -777,7 +776,7 @@ $2',
# Login and logout pages
'logouttext' => "'''ãã°ã¢ã¦ããã¾ããã'''
-ãã®ã¾ã¾å¿åã§{{SITENAME}}ã®ä½¿ç¨ãç¶è¡ã§ãã¾ããåãã¾ãã¯å¥ã®å©ç¨è
ã¨ãã¦[[Special:UserLogin|ããä¸åº¦ãã°ã¤ã³]]ãããã¨ãã§ãã¾ãã
+ãã®ã¾ã¾å¿åã§{{SITENAME}}ã®ä½¿ç¨ãç¶è¡ã§ãã¾ããåãã¾ãã¯å¥ã®å©ç¨è
ã¨ãã¦[$1 ããä¸åº¦ãã°ã¤ã³]ãããã¨ãã§ãã¾ãã
ãªãããã¼ã¸ã«ãã£ã¦ã¯ããã©ã¦ã¶ã¼ã®ãã£ãã·ã¥ãã¯ãªã¢ããã¾ã§ããã°ã¤ã³ãã¦ãããã®ããã«è¡¨ç¤ºããç¶ããå ´åãããããã注æãã ããã",
'welcomecreation' => '== ããããã$1 ããï¼ ==
ã¢ã«ã¦ã³ããä½æããã¾ããã
@@ -801,7 +800,7 @@ $2',
'nologin' => 'ç»é²ãã¾ã ã®å ´åã$1ã',
'nologinlink' => 'ã¢ã«ã¦ã³ããä½æãã¦ãã ãã',
'createaccount' => 'ã¢ã«ã¦ã³ãä½æ',
-'gotaccount' => 'æ¢ã«ã¢ã«ã¦ã³ããæã£ã¦ããå ´åã$1ã',
+'gotaccount' => 'ã¢ã«ã¦ã³ããæ¢ã«æã£ã¦ããå ´åã$1ã',
'gotaccountlink' => 'ãã°ã¤ã³ãã¦ãã ãã',
'userlogin-resetlink' => 'ãã°ã¤ã³æ
å ±ããå¿ãã§ããï¼',
'createaccountmail' => 'ã¡ã¼ã«ã§éä¿¡',
@@ -1037,7 +1036,7 @@ $1ã¾ãã¯ä»ã®[[{{MediaWiki:Grouppage-sysop}}|管çè
]]ã«ãã®ããã
'loginreqtitle' => 'ãã°ã¤ã³ãå¿
è¦',
'loginreqlink' => 'ãã°ã¤ã³',
'loginreqpagetext' => 'ä»ã®ãã¼ã¸ãé²è¦§ããã«ã¯$1ããå¿
è¦ãããã¾ãã',
-'accmailtitle' => 'ãã¹ã¯ã¼ããéä¿¡ãã¾ããã',
+'accmailtitle' => 'ãã¹ã¯ã¼ãããéããã¾ããã',
'accmailtext' => "[[User talk:$1|$1]]ã®ããã«ç¡ä½çºã«çæãããã¹ã¯ã¼ããã$2ã«éä¿¡ãã¾ããã
ãã®æ°ã¢ã«ã¦ã³ãã®ãã¹ã¯ã¼ãã¯ããã°ã¤ã³ããéã«''[[Special:ChangePassword|ãã¹ã¯ã¼ãå¤æ´]]''ãã¼ã¸ã§å¤æ´ã§ãã¾ãã",
@@ -1050,11 +1049,11 @@ $1ã¾ãã¯ä»ã®[[{{MediaWiki:Grouppage-sysop}}|管çè
]]ã«ãã®ããã
IP ã¢ãã¬ã¹ã¯è¤æ°ã®å©ç¨è
ã§å
±æããã¦ããå ´åãããã¾ãã
ãããããªããå¿åå©ç¨è
ã§ãããèªåã«é¢ä¿ã®ãªãã³ã¡ã³ããå¯ãããã¦ããèããããå ´åã¯ã[[Special:UserLogin/signup|ã¢ã«ã¦ã³ããä½æãã]]ã[[Special:UserLogin|ãã°ã¤ã³ãã¦]]ä»ã®å¿åå©ç¨è
ã¨ééããããªãããã«ãã¦ãã ããã''",
'noarticletext' => 'ç¾å¨ãã®ãã¼ã¸ã«ã¯å
容ãããã¾ããã
-ä»ã®ãã¼ã¸å
ã§[[Special:Search/{{PAGENAME}}|ãã®ãã¼ã¸åãæ¤ç´¢]]ãããã
-[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} é¢é£ããè¨é²ãæ¤ç´¢]ãããã
-[{{fullurl:{{FULLPAGENAME}}|action=edit}} ãã®ãã¼ã¸ãç·¨é]ãããã¨ãã§ãã¾ãã',
+ä»ã®ãã¼ã¸å
ã§[[Special:Search/{{PAGENAME}}|ãã®ãã¼ã¸åãæ¤ç´¢]]ã
+[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} é¢é£ããè¨é²ãæ¤ç´¢]ã
+ã¾ãã¯[{{fullurl:{{FULLPAGENAME}}|action=edit}} ãã®ãã¼ã¸ãç·¨é]ã§ãã¾ãã',
'noarticletext-nopermission' => 'ç¾å¨ãã®ãã¼ã¸ã«ã¯å
容ãããã¾ããã
-ä»ã®ãã¼ã¸å
ã§[[Special:Search/{{PAGENAME}}|ãã®ãã¼ã¸åãæ¤ç´¢]]ãããã[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} é¢é£è¨é²ãæ¤ç´¢]ãããã¨ãã§ãã¾ãããããªãã«ã¯ãã®ãã¼ã¸ãä½æãã権éã¯ããã¾ããã',
+ä»ã®ãã¼ã¸å
ã§[[Special:Search/{{PAGENAME}}|ãã®ãã¼ã¸åãæ¤ç´¢]]ãã¾ãã¯[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} é¢é£ããè¨é²ãæ¤ç´¢]ã§ãã¾ãããããªãã«ã¯ãã®ãã¼ã¸ãä½æãã権éã¯ããã¾ããã',
'missing-revision' => 'ã{{PAGENAME}}ãã¨ãããã¼ã¸ã®ççªå· $1 ã®çã¯åå¨ãã¾ããã
é常ãåé¤ããããã¼ã¸ã®çã¸ã®å¤ãå·®å表示ãåºå®ãªã³ã¯ããã©ã£ãéã«ããã®ãããªãã¨ãèµ·ãã¾ãã
@@ -1117,10 +1116,10 @@ IP ã¢ãã¬ã¹ã¯è¤æ°ã®å©ç¨è
ã§å
±æããã¦ããå ´åãããã¾
'editingold' => "'''è¦åï¼ãã®ãã¼ã¸ã®å¤ãçãç·¨éãã¦ãã¾ãã'''
ä¿åããã¨ããã®ç以éã«è¿½å ããã¦ããå¤æ´ããã¹ã¦å¤±ããã¾ãã",
'yourdiff' => 'å·®å',
-'copyrightwarning' => "{{SITENAME}}ã¸ã®æ稿ã¯ããã¹ã¦$2ï¼è©³ç´°ã¯$1ãåç
§ï¼ã®ãã¨ã§å
¬éããã¨è¦ãªããããã¨ã«ã注æãã ããã
+'copyrightwarning' => "{{SITENAME}}ã¸ã®æ稿ã¯ããã¹ã¦$2 (詳細ã¯$1ãåç
§) ã®ãã¨ã§å
¬éããã¨è¦ãªããããã¨ã«ã注æãã ããã
ããªããæ稿ãããã®ããä»äººããã£ã¦é æ
®ãªãç·¨éãããããèªç±ã«é
å¸ããã®ãæã¾ãªãå ´åã¯ãããã«ã¯æ稿ããªãã§ãã ããã
ã¾ããæ稿ããã®ã¯ãããªããæ¸ãããã®ãããããªã㯠ãã¡ã¤ã³ã¾ãã¯ããã«é¡ããããªã¼ãªè³æããã®è¤è£½ã§ãããã¨ãç´æãã¦ãã ããã
-'''èä½æ¨©ä¿è·ããã¦ããä½åãã許諾ãªãã«æ稿ããªãã§ãã ããï¼'''",
+'''èä½æ¨©ä¿è·ããã¦ããä½åãã許諾ãªãã«æ稿ããªãã§ãã ãã!'''",
'copyrightwarning2' => "{{SITENAME}}ã¸ã®ãã¹ã¦ã®æ稿ã¯ãä»ã®å©ç¨è
ãç·¨éãå¤æ´ãé¤å»ããå¯è½æ§ãããã¾ãã
ããªãã®æ稿ããä»äººãé æ
®ãªãç·¨éããã®ãæã¾ãªãå ´åã¯ãããã«ã¯æ稿ããªãã§ãã ããã
ã¾ããæ稿ããã®ã¯ãããªããæ¸ãããã®ãããããªã㯠ãã¡ã¤ã³ã¾ãã¯ããã«é¡ããããªã¼ãªè³æããã®è¤è£½ã§ãããã¨ãç´æãã¦ãã ããï¼è©³ç´°ã¯$1ãåç
§ï¼ã
@@ -1170,6 +1169,15 @@ IP ã¢ãã¬ã¹ã¯è¤æ°ã®å©ç¨è
ã§å
±æããã¦ããå ´åãããã¾
'edit-already-exists' => 'æ°ãããã¼ã¸ãä½æã§ãã¾ããã§ããã
ãã®ãã¼ã¸ã¯æ¢ã«åå¨ãã¦ãã¾ãã',
'defaultmessagetext' => 'æ¢å®ã®ã¡ãã»ã¼ã¸æ',
+'content-failed-to-parse' => '$2 ã®æ¬æã$1ã¢ãã«ã¨ãã¦æ§æ解æã§ãã¾ããã§ãã: $3',
+'invalid-content-data' => 'æ¬æãã¼ã¿ãç¡å¹ã§ã',
+'content-not-allowed-here' => 'ãã¼ã¸ [[$2]] ã§ã¯ãã$1ãã³ã³ãã³ãã¯è¨±å¯ããã¦ãã¾ãã',
+
+# Content models
+'content-model-wikitext' => 'ã¦ã£ãããã¹ã',
+'content-model-text' => 'ãã¬ã¼ã³ããã¹ã',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''è¦åï¼'''ãã®ãã¼ã¸ã§ã®é«è² è·ãªãã¼ãµã¼é¢æ°ã®å¼ã³åºãåæ°ãå¤éãã¾ãã
@@ -1296,7 +1304,7 @@ $3ã示ããçç±ï¼''$2''",
'revdelete-hide-comment' => 'ç·¨éã®è¦ç´ãé ã',
'revdelete-hide-user' => 'æ稿è
ã®å©ç¨è
åã¾ãã¯IPãé ã',
'revdelete-hide-restricted' => 'ä»ã®å©ç¨è
ã¨åæ§ã«ç®¡çè
ããããã¼ã¿ãé ã',
-'revdelete-radio-same' => 'ï¼å¤æ´ããªãï¼',
+'revdelete-radio-same' => '(å¤æ´ããªã)',
'revdelete-radio-set' => 'ã¯ã',
'revdelete-radio-unset' => 'ããã',
'revdelete-suppress' => 'ä»ã®å©ç¨è
ã¨åæ§ã«ç®¡çè
ããããã¼ã¿ãé ã',
@@ -1427,7 +1435,7 @@ $1",
'search-suggest' => 'ããããã¦ï¼$1',
'search-interwiki-caption' => 'å§å¦¹ããã¸ã§ã¯ã',
'search-interwiki-default' => '$1ã®çµæï¼',
-'search-interwiki-more' => 'ï¼ç¶ãï¼',
+'search-interwiki-more' => '(ç¶ã)',
'search-relatedarticle' => 'é¢é£',
'mwsuggest-disable' => 'Ajaxã«ããæ¤ç´¢åè£ã®æ示ãç¡å¹ã«ãã',
'searcheverything-enable' => 'ãã¹ã¦ã®åå空éãæ¤ç´¢',
@@ -1484,7 +1492,7 @@ $1",
'prefs-watchlist-edits-max' => 'æ大æ°ï¼1000',
'prefs-watchlist-token' => 'ã¦ã©ãããªã¹ãã®ãã¼ã¯ã³:',
'prefs-misc' => 'ãã®ä»',
-'prefs-resetpass' => 'ãã¹ã¯ã¼ãã®å¤æ´',
+'prefs-resetpass' => 'ãã¹ã¯ã¼ããå¤æ´',
'prefs-changeemail' => 'ã¡ã¼ã«ã¢ãã¬ã¹ãå¤æ´',
'prefs-setemail' => 'ã¡ã¼ã«ã¢ãã¬ã¹ãè¨å®',
'prefs-email' => 'ã¡ã¼ã«ã®è¨å®',
@@ -1648,7 +1656,7 @@ $1 {{PLURAL:$1|æå}}以ä¸ã§ããå¿
è¦ãããã¾ãã',
'right-suppressredirect' => '転éãã¼ã¸ãä½æããã«ãã¼ã¸ã移å',
'right-upload' => 'ãã¡ã¤ã«ãã¢ãããã¼ã',
'right-reupload' => 'æ¢åã®ãã¡ã¤ã«ã«ä¸æ¸ã',
-'right-reupload-own' => 'èªåèªèº«ãã¢ãããã¼ãããæ¢åã®ãã¡ã¤ã«ã«ä¸æ¸ã',
+'right-reupload-own' => 'èªèº«ãã¢ãããã¼ãããæ¢åã®ãã¡ã¤ã«ã«ä¸æ¸ã',
'right-reupload-shared' => 'å
±æã¡ãã£ã¢ãªãã¸ããªä¸ã®ãã¡ã¤ã«ã«ãã¼ã«ã«ã§ä¸æ¸ã',
'right-upload_by_url' => 'URL ãããã¡ã¤ã«ãã¢ãããã¼ã',
'right-purge' => '確èªãªãã§ãµã¤ãã®ãã£ãã·ã¥ãç ´æ£',
@@ -1672,7 +1680,7 @@ $1 {{PLURAL:$1|æå}}以ä¸ã§ããå¿
è¦ãããã¾ãã',
'right-hideuser' => 'å©ç¨è
åããããã¯ãã¦å
¬éè¨é²ããé ã',
'right-ipblock-exempt' => 'IPãããã¯ãèªåãããã¯ãåºåãããã¯ãåé¿',
'right-proxyunbannable' => 'ãããã·ã®èªåãããã¯ãåé¿',
-'right-unblockself' => 'èªåèªèº«ã«å¯¾ãããããã¯ã解é¤',
+'right-unblockself' => 'èªèº«ã«å¯¾ãããããã¯ã解é¤',
'right-protect' => 'ä¿è·ã¬ãã«ãå¤æ´ããä¿è·ããããã¼ã¸ãç·¨é',
'right-editprotected' => 'ä¿è·ãã¼ã¸ï¼ã«ã¹ã±ã¼ãä¿è·ãé¤ãï¼ãç·¨é',
'right-editinterface' => 'ã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¤ã¹ãç·¨é',
@@ -1685,7 +1693,7 @@ $1 {{PLURAL:$1|æå}}以ä¸ã§ããå¿
è¦ãããã¾ãã',
'right-import' => 'ä»ã®ã¦ã£ããããã¼ã¸ãåãè¾¼ã¿',
'right-importupload' => 'ãã¡ã¤ã«ã¢ãããã¼ãã§ãã¼ã¸ãåãè¾¼ã¿',
'right-patrol' => 'ä»äººã®ç·¨éãå·¡åæ¸ã¿ã«ãã',
-'right-autopatrol' => 'èªåã®ç·¨éãèªåçã«å·¡åæ¸ã¿ã«ãã',
+'right-autopatrol' => 'èªèº«ã®ç·¨éãèªåã§å·¡åæ¸ã¿ã«ãã',
'right-patrolmarks' => 'æè¿ã®æ´æ°ã§å·¡åæ¸ã¿å°ãé²è¦§',
'right-unwatchedpages' => 'ã¦ã©ããããã¦ããªããã¼ã¸ä¸è¦§ãé²è¦§',
'right-mergehistory' => 'ãã¼ã¸ã®å±¥æ´ãçµ±å',
@@ -2108,7 +2116,7 @@ $1ã§ã®[$2 ãã¡ã¤ã«è§£èª¬ãã¼ã¸]ã«ãã説æãç·¨éããã»ãã
'shared-repo' => 'å
±æãªãã¸ããª',
'shared-repo-name-wikimediacommons' => 'ã¦ã£ãã¡ãã£ã¢ã»ã³ã¢ã³ãº',
'filepage.css' => '/* ããã«è¨è¿°ããCSSã¯ãã¡ã¤ã«è§£èª¬ãã¼ã¸ã«ã¦èªã¿è¾¼ã¾ãã¾ããã¾ãå¤é¨ã®ã¯ã©ã¤ã¢ã³ãã¦ã£ãã«ãå½±é¿ãã¾ã */',
-'upload-disallowed-here' => 'æ®å¿µãªãããã®ç»åã«ã¯ä¸æ¸ãã§ãã¾ããã',
+'upload-disallowed-here' => 'ãã®ãã¡ã¤ã«ã«ã¯ä¸æ¸ãã§ãã¾ããã',
# File reversion
'filerevert' => '$1ãå·®ãæ»ã',
@@ -2257,7 +2265,7 @@ contenttype/subtypeã®å½¢å¼ã§å
¥åãã¦ãã ããï¼ä¾ï¼image/jpeg
'deadendpagestext' => '以ä¸ã®ãã¼ã¸ã¯ã{{SITENAME}}ã®ä»ã®ãã¼ã¸ã«ãªã³ã¯ãã¦ãã¾ããã',
'protectedpages' => 'ä¿è·ããã¦ãããã¼ã¸',
'protectedpages-indef' => 'ç¡æéä¿è·ã®ã¿',
-'protectedpages-cascade' => 'é£ç¶ä¿è·ã®ã¿',
+'protectedpages-cascade' => 'ã«ã¹ã±ã¼ãä¿è·ã®ã¿',
'protectedpagestext' => '以ä¸ã®ãã¼ã¸ã¯ç§»åãç·¨éãç¦æ¢ããã¦ãã¾ã',
'protectedpagesempty' => 'æå®ããæ¡ä»¶ã§ä¿è·ä¸ã®ãã¼ã¸ã¯ç¾å¨ããã¾ããã',
'protectedtitles' => 'ä½æä¿è·ããã¦ãããã¼ã¸å',
@@ -2291,7 +2299,7 @@ contenttype/subtypeã®å½¢å¼ã§å
¥åãã¦ãã ããï¼ä¾ï¼
image/jpeg
'booksources-isbn' => 'ISBN:',
'booksources-go' => 'æ¤ç´¢',
'booksources-text' => 'ãæ¢ãã®æ¸ç±ã®æ°å/ä¸å¤åã販売ãã¦ããå¤é¨ãµã¤ãã¸ã®ãªã³ã¯ã以ä¸ã«åæãã¾ãããã®æ¸ç±ã«ã¤ãã¦ããã«è©³ããæ
å ±ãããããããã¾ãã:',
-'booksources-invalid-isbn' => 'æå®ããISBNçªå·ã¯æå¹ã§ã¯ãªãããã§ããæ
å ±æºããåãééãã¦ããªãã確èªãã¦ãã ããã',
+'booksources-invalid-isbn' => 'æå®ãã ISBN ã¯æå¹ã§ã¯ãªãããã§ããæ
å ±æºããåãééãã¦ããªãã確èªãã¦ãã ããã',
# Special:Log
'specialloguserlabel' => 'å®è¡è
:',
@@ -2597,7 +2605,7 @@ $2ã«ããç´åã®çã¸å¤æ´ããã¾ããã',
'protect-fallback' => 'ã$1ã権éãå¿
è¦',
'protect-level-autoconfirmed' => 'æ°è¦å©ç¨è
ã¨å¿åå©ç¨è
ãç¦æ¢',
'protect-level-sysop' => '管çè
ã®ã¿',
-'protect-summary-cascade' => 'é£ç¶',
+'protect-summary-cascade' => 'ã«ã¹ã±ã¼ã',
'protect-expiring' => '$1(UTC)ã§èªåçã«è§£é¤',
'protect-expiring-local' => 'æé $1',
'protect-expiry-indefinite' => 'ç¡æé',
@@ -2619,7 +2627,7 @@ $2ã«ããç´åã®çã¸å¤æ´ããã¾ããã',
'restriction-level' => 'å¶éã¬ãã«ï¼',
'minimum-size' => 'æå°ãµã¤ãº',
'maximum-size' => 'æ大ãµã¤ãºï¼',
-'pagesize' => 'ï¼ãã¤ãï¼',
+'pagesize' => '(ãã¤ã)',
# Restrictions (nouns)
'restriction-edit' => 'ç·¨é',
@@ -2659,12 +2667,12 @@ $2ã«ããç´åã®çã¸å¤æ´ããã¾ããã',
'undeleteviewlink' => 'é²è¦§',
'undeletereset' => 'ãªã»ãã',
'undeleteinvert' => 'é¸æãå転',
-'undeletecomment' => 'çç±ï¼',
+'undeletecomment' => 'çç±:',
'undeletedrevisions' => '{{PLURAL:$1|$1ç}}ã復å
ãã¾ãã',
'undeletedrevisions-files' => '{{PLURAL:$1|$1ç}}ã¨{{PLURAL:$2|$2ãã¡ã¤ã«}}ã復å
ãã¾ãã',
'undeletedfiles' => '{{PLURAL:$1|$1ãã¡ã¤ã«}}ã復å
ãã¾ãã',
-'cannotundelete' => '復å
ã«å¤±æãã¾ããã
-ä»ã®èª°ãããã®ãã¼ã¸ãæ¢ã«å¾©å
ããå¯è½æ§ãããã¾ãã',
+'cannotundelete' => '復å
ã«å¤±æãã¾ãã:
+$1',
'undeletedpage' => "'''$1ã復å
ãã¾ããã'''
æè¿ã®åé¤ã¨å¾©å
ã®è¨é²ã«ã¤ãã¦ã¯[[Special:Log/delete|åé¤è¨é²]]ãåç
§ãã¦ãã ããã",
@@ -2690,9 +2698,9 @@ $1',
# Namespace form on various pages
'namespace' => 'åå空é:',
'invert' => 'é¸æãããã®ãé¤ã',
-'tooltip-invert' => 'é¸æããåå空éï¼ãã§ãã¯ããã¦ããå ´åã¯ãé¢é£ä»ããããåå空éãï¼ã®ãã¼ã¸ã®å¤æ´ãé表示ã«ããã«ã¯ããã®ããã¯ã¹ã«ãã§ãã¯ãå
¥ãã',
-'namespace_association' => 'é¢é£ä»ããããåå空é',
-'tooltip-namespace_association' => 'é¸æããåå空éã«é¢é£ä»ãããããã¼ã¯ãã¼ã¸ã¾ãã¯å¯¾è±¡ã®åå空éãå«ããã«ã¯ããã®ããã¯ã¹ã«ãã§ãã¯ãå
¥ãã',
+'tooltip-invert' => 'é¸æããåå空é (ãã§ãã¯ãå
¥ãã¦ããå ´åã¯ãé¢é£ä»ããããåå空éãå«ã) ã®ãã¼ã¸ã®å¤æ´ãé表示ã«ããã«ã¯ããã®ããã¯ã¹ã«ãã§ãã¯ãå
¥ãã',
+'namespace_association' => 'é¢é£ä»ããããåå空éãå«ãã',
+'tooltip-namespace_association' => 'é¸æããåå空éã«é¢é£ä»ãããããã¼ã¯ãã¼ã¸ (éã«ãã¼ã¯ãã¼ã¸ã®åå空éãé¸æããå ´åãåæ§) ã®åå空éãå«ããã«ã¯ããã®ããã¯ã¹ã«ãã§ãã¯ãå
¥ãã',
'blanknamespace' => '(æ¨æº)',
# Contributions
@@ -2790,7 +2798,7 @@ $1',
'ipb-blocklist' => 'ç¾å¨æå¹ãªãããã¯ã表示',
'ipb-blocklist-contribs' => '$1ã®æ稿ã®ä¸è¦§',
'unblockip' => 'ãããã¯ã解é¤',
-'unblockiptext' => '以ä¸ã®ãã©ã¼ã ã使ç¨ãã¦ã以åãããã¯ããIPã¢ãã¬ã¹ã¾ãã¯å©ç¨è
ããã®æ¸ãè¾¼ã¿ã¢ã¯ã»ã¹ããããã¯è§£é¤ã§ãã¾ãã',
+'unblockiptext' => '以ä¸ã®ãã©ã¼ã ã§å©ç¨è
ã¾ãã¯IPã¢ãã¬ã¹ã®ãããã¯ã解é¤ã§ãã¾ãã',
'ipusubmit' => 'ãã®ãããã¯ã解é¤',
'unblocked' => '[[User:$1|$1]]ã®ãããã¯ã解é¤ãã¾ãã',
'unblocked-range' => '$1ã®ãããã¯ã¯è§£é¤ããã¦ãã¾ã',
@@ -2815,8 +2823,8 @@ $1',
'expiringblock' => '$1$2ã«è§£é¤',
'anononlyblock' => 'å¿åå©ç¨è
ã®ã¿',
'noautoblockblock' => 'èªåãããã¯ç¡å¹',
-'createaccountblock' => 'ã¢ã«ã¦ã³ãä½æã®ãããã¯',
-'emailblock' => 'ã¡ã¼ã«éä¿¡ã®ãããã¯',
+'createaccountblock' => 'ã¢ã«ã¦ã³ãä½æã®ç¦æ¢',
+'emailblock' => 'ã¡ã¼ã«éä¿¡ã®ç¦æ¢',
'blocklist-nousertalk' => 'èªåã®ãã¼ã¯ãã¼ã¸ã®ç·¨éç¦æ¢',
'ipblocklist-empty' => 'ãããã¯ä¸è¦§ã¯ç©ºã§ãã',
'ipblocklist-no-results' => 'æå®ãããIPã¢ãã¬ã¹ã¾ãã¯å©ç¨è
åã¯ãããã¯ããã¦ãã¾ããã',
@@ -2973,6 +2981,7 @@ $1 ã®ãããã¯ã®çç±ã¯ã''$2''ãã§ãã",
'immobile-target-namespace-iw' => 'ã¦ã£ãéãªã³ã¯ã¯ããã¼ã¸ã®ç§»åå
ã«ã¯æå®ã§ãã¾ããã',
'immobile-source-page' => 'ãã®ãã¼ã¸ã¯ç§»åã§ãã¾ããã',
'immobile-target-page' => '移åå
ãã¼ã¸åã«ç§»åããããã¨ãã§ãã¾ããã',
+'bad-target-model' => 'æå®ãã移åå
ã§ã¯ãç°ãªãã³ã³ãã³ã ã¢ãã«ã使ç¨ãã¦ãã¾ãã$1ãã$2ã«ã¯å¤æã§ãã¾ããã',
'imagenocrossnamespace' => 'ãã¡ã¤ã«ãããã¡ã¤ã«åå空é以å¤ã«ç§»åããããã¨ã¯ã§ãã¾ãã',
'nonfile-cannot-move-to-file' => 'ãã¡ã¤ã«ã§ã¯ãªããã®ãããã¡ã¤ã«åå空éã«ç§»åããããã¨ã¯ã§ãã¾ãã',
'imagetypemismatch' => 'æ°ãããã¡ã¤ã«ã®æ¡å¼µåããã¡ã¤ã«ã®ã¿ã¤ãã¨ä¸è´ãã¦ãã¾ãã',
@@ -3243,6 +3252,7 @@ MediaWiki å
¨è¬ã®ãã¼ã«ã©ã¤ãºï¼å°ååï¼ã«è²¢ç®ãããå ´åã¯
# Info page
'pageinfo-title' => 'ã$1ãã®æ
å ±',
+'pageinfo-not-current' => 'ç¾å¨ã®ãã¼ã¸ã§ã³ã®æ
å ±ã®ã¿ã表示ãããå¯è½æ§ãããã¾ãã',
'pageinfo-header-basic' => 'åºæ¬æ
å ±',
'pageinfo-header-edits' => 'ç·¨éå±¥æ´',
'pageinfo-header-restrictions' => 'ãã¼ã¸ã®ä¿è·',
@@ -3268,10 +3278,17 @@ MediaWiki å
¨è¬ã®ãã¼ã«ã©ã¤ãºï¼å°ååï¼ã«è²¢ç®ãããå ´åã¯
'pageinfo-authors' => 'ç·æ稿è
æ°',
'pageinfo-recent-edits' => 'æè¿ã®ç·¨éåæ° (éå» $1)',
'pageinfo-recent-authors' => 'æè¿ã®æ稿è
æ°',
-'pageinfo-restriction' => 'ãã¼ã¸ä¿è· ({{lcfirst:$1}})',
'pageinfo-magic-words' => 'ãã¸ã㯠{{PLURAL:$1|ã¯ã¼ã}} ($1)',
'pageinfo-hidden-categories' => 'é ã{{PLURAL:$1|ã«ãã´ãª}} ($1)',
'pageinfo-templates' => 'åç
§èªã¿è¾¼ã¿ããã{{PLURAL:$1|ãã³ãã¬ã¼ã}} ($1)',
+'pageinfo-toolboxlink' => 'ãã¼ã¸æ
å ±',
+'pageinfo-redirectsto' => '転éå
',
+'pageinfo-redirectsto-info' => 'æ
å ±',
+'pageinfo-contentpage' => 'æ¬æãã¼ã¸ã¨ãã¦æ°ãã',
+'pageinfo-contentpage-yes' => 'ã¯ã',
+'pageinfo-protect-cascading' => 'ã«ã¹ã±ã¼ãä¿è·ããã¦ãã',
+'pageinfo-protect-cascading-yes' => 'ã¯ã',
+'pageinfo-protect-cascading-from' => 'ã«ã¹ã±ã¼ãä¿è·ã®èµ·ç¹',
# Skin names
'skinname-standard' => 'ã¯ã©ã·ãã¯',
@@ -3354,6 +3371,9 @@ $1',
# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
'video-dims' => '$1ã $2 Ã $3',
+'seconds-abbrev' => '$1 s',
+'hours-abbrev' => '$1 h',
+'days-abbrev' => '$1 d',
'seconds' => '{{PLURAL:$1|$1 ç§}}',
'minutes' => '{{PLURAL:$1|$1 å}}',
'hours' => '{{PLURAL:$1|$1 æé}}',
@@ -3698,7 +3718,7 @@ Variants for Chinese language
'exif-flash-mode-1' => 'å¼·å¶çºå
ã¢ã¼ã',
'exif-flash-mode-2' => 'å¼·å¶éçºå
ã¢ã¼ã',
'exif-flash-mode-3' => 'èªåçºå
ã¢ã¼ã',
-'exif-flash-function-1' => 'ã¹ãããæ©è½ç¡ã',
+'exif-flash-function-1' => 'ã¹ãããæ©è½ãªã',
'exif-flash-redeye-1' => '赤ç®è»½æ¸æã',
'exif-focalplaneresolutionunit-2' => 'ã¤ã³ã',
@@ -3917,6 +3937,7 @@ $5
# Scary transclusion
'scarytranscludedisabled' => '[ã¦ã£ãéã®åç
§èªã¿è¾¼ã¿ã¯ç¡å¹ã«ãªã£ã¦ãã¾ã]',
'scarytranscludefailed' => '[$1ã«å¯¾ãã¦ãã³ãã¬ã¼ãã®åå¾ã«å¤±æãã¾ãã]',
+'scarytranscludefailed-httpstatus' => '[$1ã«å¯¾ãã¦ãã³ãã¬ã¼ãã®åå¾ã«å¤±æãã¾ãã: HTTP $2]',
'scarytranscludetoolong' => '[URLãé·ããã¾ã]',
# Delete conflict
@@ -4254,7 +4275,7 @@ MediaWikiã¯ãæç¨ã§ãããã¨ãæå¾
ãã¦é
å¸ããã¦ãã¾ãã
# Feedback
'feedback-bugornote' => 'æè¡çãªåé¡ã®è©³ç´°ã説æããæºåãã§ãã¦ããå ´åã¯ã[$1 ãã°å ±å]ããé¡ããã¾ãã
-æºåãã§ãã¦ããªãå ´åã¯ãä¸ã®ç°¡æãã©ã¼ã ã使ç¨ãã¦ãã ãããããªãã®ã³ã¡ã³ãã¨å©ç¨è
åãããã¼ã¸"[$3 $2]"ã«è¿½å ããã¾ãã',
+æºåãã§ãã¦ããªãå ´åã¯ãä¸ã®ç°¡æãã©ã¼ã ã使ç¨ãã¦ãã ãããããªãã®ã³ã¡ã³ãã¨å©ç¨è
åãããã¼ã¸ã[$3 $2]ãã«è¿½å ããã¾ãã',
'feedback-subject' => '件åï¼',
'feedback-message' => 'ã¡ãã»ã¼ã¸ï¼',
'feedback-cancel' => 'ãã£ã³ã»ã«',
diff --git a/languages/messages/MessagesJam.php b/languages/messages/MessagesJam.php
index 21202a4a89..5494817f08 100644
--- a/languages/messages/MessagesJam.php
+++ b/languages/messages/MessagesJam.php
@@ -403,7 +403,7 @@ Di riizn dehn gi a "\'\'$2\'\'".',
# Login and logout pages
'logouttext' => "'''Yu nou lag out.'''
-Yu kiahn kantiniu yuuz {{SITENAME}} ananimosli, ar yu kiahn [[Special:UserLogin|lag iin agen]] az di siem ar az difrant yuuza.
+Yu kiahn kantiniu yuuz {{SITENAME}} ananimosli, ar yu kiahn [$1 lag iin agen] az di siem ar az difrant yuuza.
Nuot se som piej maita kantiniu fi displie laik se yu stil log iin, antel yu klier yu brouza kiash.",
'welcomecreation' => '== Welkom, $1! ==
Yu akount don kriet.
diff --git a/languages/messages/MessagesJv.php b/languages/messages/MessagesJv.php
index 1dfc1cee8d..cfc77ad58f 100644
--- a/languages/messages/MessagesJv.php
+++ b/languages/messages/MessagesJv.php
@@ -195,7 +195,6 @@ $messages = array(
'qbbrowse' => 'Navigasi',
'qbedit' => 'Sunting',
'qbpageoptions' => 'Kaca iki',
-'qbpageinfo' => 'Kontèks kaca',
'qbmyoptions' => 'Opsiku',
'qbspecialpages' => 'Kaca-kaca astaméwa',
'faq' => 'FAQ (Pitakonan sing kerep diajokaké)',
@@ -448,7 +447,7 @@ Pangurus sing ngopèni kuwi ngawedharaké: "$3".',
# Login and logout pages
'logouttext' => "'''Sampéyan wis metu log'''
-Sampéyan bisa nganggo {{SITENAME}} sacara anonim, utawa bisa [[Special:UserLogin|mlebu log manèh]] kanthi jeneng panganggo sing padha utawa beda.
+Sampéyan bisa nganggo {{SITENAME}} sacara anonim, utawa bisa [$1 mlebu log manèh] kanthi jeneng panganggo sing padha utawa beda.
Cathet yèn sapérangan kaca mungkin isih nampilaké tulisan yèn Sampéyan isih nèng njero log, kuwi bisa ilang yèn Sampéyan ngresiki ''cache'' pramban Sampéyan.",
'welcomecreation' => '== Sugeng rawuh, $1! ==
diff --git a/languages/messages/MessagesKa.php b/languages/messages/MessagesKa.php
index 1b5c76e21d..12356df2ed 100644
--- a/languages/messages/MessagesKa.php
+++ b/languages/messages/MessagesKa.php
@@ -314,7 +314,6 @@ $messages = array(
'qbbrowse' => 'ááááá®ááá',
'qbedit' => 'á áááá¥á¢áá ááá',
'qbpageoptions' => 'áá¡ áááá áá',
-'qbpageinfo' => 'áááá¢áá¥á¡á¢á',
'qbmyoptions' => 'á©ááá áááá áááá',
'qbspecialpages' => 'á¡áááªáááá£á á áááá áááá',
'faq' => 'á®á¨áá á á¨ááááá®áááá',
@@ -327,7 +326,7 @@ $messages = array(
'vector-action-protect' => 'áááªáá',
'vector-action-undelete' => 'áá¦ááááá',
'vector-action-unprotect' => 'áááªááá¡ ááááá¡ á¨ááªááá',
-'vector-simplesearch-preference' => 'á«ááááá¡ ááá¤áá ááááá£áá ááááá¨ááááááá¡ á©áá ááá (áá®áááá ááá¥á¢áá á£áá ááá á¡áá®áá¡áááá¡)',
+'vector-simplesearch-preference' => 'á«ááááá¡ ááá¤áá ááááá£áá ááááá¡ á©áá ááá (áá®áááá ááá¥á¢áá á£áá ááá á¡áá®áá¡áááá¡)',
'vector-view-create' => 'á¨áá¥ááá',
'vector-view-edit' => 'á áááá¥á¢áá ááá',
'vector-view-history' => 'áá¡á¢áá áá',
@@ -584,7 +583,7 @@ $2',
'logouttext' => "'''áá¥ááá ááááááá á¡áá¡á¢áááááá ááá¡á£áá á®áá á.'''
á¨áááá«áááá áááááá§áááá {{SITENAME}} ááááááá£á áá, áá á¨áááá«áááá
-[[Special:UserLogin|á¨áá®ááááá áá¡áá]] á áááá ᪠ááááá áá á¡á®áá áááá®ááá ááááá.
+[$1 á¨áá®ááááá áá¡áá] á áááá ᪠ááááá áá á¡á®áá áááá®ááá ááááá.
á¨áááá¨ááá, á áá áááááá á áááá ááá á¨áá¡áá«ááá áá¡áá á£á©áááááááá¡ á áá á¨áá¡á£áá á®áá á á¡áááá áá¥áááá áá áá£ááá áá¡ ááá®á¡ááá áááá¡ áá ááá¬ááááá.",
'welcomecreation' => '== ááááá¡ááááááá, $1! ==
áá¥áááá ááááá áá¨á á¨áá¥áááááá.
@@ -956,6 +955,15 @@ $2
'edit-already-exists' => 'áá®ááá áááá ááá¡ á¨áá¥ááá áá ááá®áá á®áá.
áá¡ á£ááá áá á¡ááááá¡.',
'defaultmessagetext' => 'á¨áá¢á§áááááááá¡ á¡á¢ááááá á¢á£áá á¢áá¥á¡á¢á',
+'content-failed-to-parse' => '$2-áá¡ á¨ááááá á¡á áá á¨ááá¡ááááááá $1-áá¡ á¢ááá¡: $3.',
+'invalid-content-data' => 'ááá£á¨áááááá áááááªááááá',
+'content-not-allowed-here' => 'â$1â-áá¡ á¨ááááá á¡á ááá£á¨ááááááá [[$2]] áááá ááá',
+
+# Content models
+'content-model-wikitext' => 'ááááá¢áá¥á¡á¢á',
+'content-model-text' => 'á£áá ááá á¢áá¥á¡á¢á',
+'content-model-javascript' => 'á¯áááá¡áá ááá¢á',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'á§á£á ááá¦ááá. áááªááá£áá áááá áá á¨áááªááá¡ á«ááááá áááá áá«ááá á¤á£áá¥áªááá¡.
@@ -1853,7 +1861,7 @@ $1',
'shared-repo-from' => ' $1-ááá',
'shared-repo' => 'á¡ááá áá á¡ááªáááááá',
'shared-repo-name-wikimediacommons' => 'ááááá¡áá¬á§ááá',
-'upload-disallowed-here' => 'á¡ááá¬á£á®áá áá, áá¥ááá áá á¨áááá«áááá áá á¡á£á áááá ááááá¬áá á.',
+'upload-disallowed-here' => 'áá¥ááá áá á¨áááá«áááá áá á¤ááááá ááááá¬áá á.',
# File reversion
'filerevert' => 'ááááá á£áá $1',
@@ -2402,7 +2410,8 @@ $UNWATCHURL
'undeletedrevisions' => '$1 ááá á¡áá áá¦áááááááá',
'undeletedrevisions-files' => '$1 ááá á¡áá áá $2 á¤áááá áá¦áááááááá',
'undeletedfiles' => '$1 á¤áááá áá¦áááááááá',
-'cannotundelete' => 'á¬áá¨ááá¡ ááá£á¥áááá ááá áááá®áá áªááááá; á¨áá¡áá«ááá áá¥ááááááá á¡á®ááá á£ááá áááá£á¥áá á¬áá¨áá.',
+'cannotundelete' => 'á¬áá¨ááá¡ ááá£á¥áááá ááá áááá®áá áªááááá:
+$1',
'undeletedpage' => "'''$1 áá¦áááááááá'''
á£ááááá¡ááááá á¬áá¨ááááá áá áá¦áááááá¡ á¡áá á¨áááá«áááá ááá®áá [[Special:Log/delete|á¬áá¨ááááá á¡ááá¨á]].",
@@ -2696,6 +2705,7 @@ $1',
'immobile-target-namespace-iw' => 'ááá¢áá ááááá¡ ááá£áá á¨áá£á«ááááááá ááááá§ááááá£áá áá¥ááá¡ ááááá á¥ááááá¡áááá¡.',
'immobile-source-page' => 'áá ááááá ááá¡ ááááá¢ááá á¨áá£á«ááááááá.',
'immobile-target-page' => 'á¨áá£á«ááááááá áááªááá£á á¡áá®áááá ááááá¢ááá.',
+'bad-target-model' => 'á¨áá£á«ááááááá $1-áá¡ ááá ááá¥ááá $2-áá: áááááªáááááá¡ á¨áá£á¡ááááá áááááá.',
'imagenocrossnamespace' => 'á¨áá£á«ááááááá á¤áááá¡ ááááªáá¡ á¡áá®ááá á¡áá®áááá á¡á®áá á¡ááá áªáááá',
'nonfile-cannot-move-to-file' => 'á¨áá£á«ááááááá áá áá¤ááááááá¡ ááááá¢ááá á¤ááááá¡ á¡áá®áááá á¡ááá áªáá¨á',
'imagetypemismatch' => 'á¤áááá¡ áá®ááá ááá¤áá ááááá áá á¨ááá¡ááááááá ááá¡ á¢ááá¡',
@@ -2943,6 +2953,7 @@ $1',
# Info page
'pageinfo-title' => 'ááá¤áá áááªáá â$1â-áááá¡',
+'pageinfo-not-current' => 'áááááªááááá á¬áá áááááááááá áá®áááá áááááááá á á áááá¥á¢áá áááá¡ááááá¡.',
'pageinfo-header-basic' => 'á¡áááááá¡á ááá¤áá áááªáá',
'pageinfo-header-edits' => 'á áááá¥á¢áá áááá¡ áá¡á¢áá áá',
'pageinfo-header-restrictions' => 'áááá ááá¡ áááªáá',
@@ -2968,10 +2979,10 @@ $1',
'pageinfo-authors' => 'áááá¡á®áááááá£á ááá¢áá áá á¯ááá£á á á áááááááá',
'pageinfo-recent-edits' => 'áááá áªááááááááá (á£ááááá¡ááááá $1 ááááááááááá¨á)',
'pageinfo-recent-authors' => 'á£áááááá£á á ááá¢áá áááá¡ á£ááááá¡ááááá á áááááááá',
-'pageinfo-restriction' => 'áááá ááá¡ áááªáá ({{lcfirst:$1}})',
'pageinfo-magic-words' => 'á¯áááá¡áá£á á {{PLURAL:$1|á¡áá¢á§áá|á¡áá¢á§áá}} ($1)',
'pageinfo-hidden-categories' => 'áááááá£áá {{PLURAL:$1|ááá¢áááá áá|ááá¢áááá áá}} ($1)',
'pageinfo-templates' => 'ááá¢ááá áá ááá£ááá {{PLURAL:$1|ááá áá|ááá áá}} ($1)',
+'pageinfo-toolboxlink' => 'áááá ááá¡ ááá¤áá áááªáá',
# Skin names
'skinname-standard' => 'áááá¡ááá£á á',
@@ -3598,6 +3609,7 @@ $5
# Scary transclusion
'scarytranscludedisabled' => '[«Interwiki transcluding» ááááá¨á£ááá]',
'scarytranscludefailed' => '[$1-ááá áááááá¨áá áááá¡ á¨ááªáááá]',
+'scarytranscludefailed-httpstatus' => '[ááá ááá®áá á®áá ááá ááá¡ á©áá¢ááá ááá $1-áááá¡: HTTP $2]',
'scarytranscludetoolong' => '[URL á«ááááá áá á«áááá]',
# Delete conflict
diff --git a/languages/messages/MessagesKaa.php b/languages/messages/MessagesKaa.php
index 24ff9148ae..6e8a6d4a3c 100644
--- a/languages/messages/MessagesKaa.php
+++ b/languages/messages/MessagesKaa.php
@@ -511,7 +511,7 @@ Keltirilgen sebep: ''$2''.",
'logouttext' => "'''Siz endi sayttan shıqtın'ız.'''
Siz {{SITENAME}} saytınan anonim halda paydalanıwın'ız mu'mkin.
-Yamasa siz ja'ne ha'zirgi yaki basqa paydalanıwshı atı menen [[Special:UserLogin|qaytadan sistemag'a kiriwin'izge]] boladı.
+Yamasa siz ja'ne ha'zirgi yaki basqa paydalanıwshı atı menen [$1 qaytadan sistemag'a kiriwin'izge] boladı.
Sonı este saqlan', ayrım betler sizin' brauzerin'izdin' keshi tazalanbag'anlıg'ı sebebli sistemada kirgenin'izdey ko'riniste dawam ettire beriwi mu'mkin.",
'welcomecreation' => "== Xosh keldin'iz, $1! ==
diff --git a/languages/messages/MessagesKab.php b/languages/messages/MessagesKab.php
index 0c10a6f9aa..2a4c5409b2 100644
--- a/languages/messages/MessagesKab.php
+++ b/languages/messages/MessagesKab.php
@@ -9,9 +9,11 @@
*
* @author Agurzil
* @author Agzennay
+ * @author Amazigh84
* @author Azwaw
* @author Mmistmurt
* @author MoubarikBelkasim
+ * @author Salem333
* @author Teak
* @author Urhixidur
*/
@@ -185,7 +187,6 @@ $messages = array(
'qbbrowse' => 'áºer isebtar',
'qbedit' => 'Beddel',
'qbpageoptions' => 'Asebter-agi',
-'qbpageinfo' => 'Asatal',
'qbmyoptions' => 'isebtar inu',
'qbspecialpages' => 'isebtar usligen',
'faq' => 'Isteqsiyen',
@@ -198,7 +199,7 @@ $messages = array(
'vector-action-protect' => 'Mmesten',
'vector-action-undelete' => 'UÉ£aled',
'vector-action-unprotect' => 'Beddel amesten',
-'vector-simplesearch-preference' => 'Sermed isumar n unadi i silɣen (i "Vector" kan)',
+'vector-simplesearch-preference' => 'Sermed tafeggast taḥerfit n unadi (i "Vector" kan)',
'vector-view-create' => 'Snulfu',
'vector-view-edit' => 'áºáºiáºreg',
'vector-view-history' => 'áºeá¹ amazray',
@@ -304,6 +305,10 @@ $1',
'youhavenewmessages' => 'Æur-k $1 ($2).',
'newmessageslink' => 'Izen amaynut',
'newmessagesdifflink' => 'Abeddel aneggaru',
+'youhavenewmessagesfromusers' => 'TesÉiḠ$1 n {{PLURAL:$3|useqdac nniá¸en|$3 iseqdacen nniá¸en}} ( $2 ).',
+'youhavenewmessagesmanyusers' => 'TesÉiḠ$1 n aá¹as n iseqdacen ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|izen amaynut|inzan imaynuten}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|abeddel aneggaru|ibeddilen ineggura}}',
'youhavenewmessagesmulti' => 'TesÉiḠiznan imaynuten deg $1',
'editsection' => 'beddel',
'editold' => 'beddel',
@@ -383,7 +388,7 @@ Ilaq ad εeggenem yiwen [[Special:ListUsers/sysop|anedbal]] war ad ttum asefkem
'fileappenderror' => 'Ulamek an seffes « $1 » ar « $2 ».',
'filecopyerror' => 'Ur yezmir ara ad yexdem alsaru n ufaylu "$1" ar "$2".',
'filerenameerror' => 'Ur yezmir ara ad ibeddel isem ufaylu "$1" ar "$2".',
-'filedeleteerror' => 'Ur yezmir ara ad yemḥu afaylu "$1".',
+'filedeleteerror' => 'Ulamek an mḥu afaylu "$1".',
'directorycreateerror' => 'Ulamek an snulfu akaram « $1 ».',
'filenotfound' => 'Ur yezmir ara ad yaf afaylu "$1".',
'fileexistserror' => 'Ulamek an aru afaylu « $1 » : afaylu agi yesnulfad yakan.',
@@ -393,6 +398,8 @@ Ilaq ad εeggenem yiwen [[Special:ListUsers/sysop|anedbal]] war ad ttum asefkem
'cannotdelete' => 'Ulamek ad yemḥu asebter naɣ afaylu « $1 ».
Ahat amdan wayeḠyemḥa-t.',
'cannotdelete-title' => 'Ulamek an kkes asebter « $1 »',
+'delete-hook-aborted' => 'Tukkesa tesemmet s usiɣzef.
+Ulac asefru ɣef wagi.',
'badtitle' => 'Azwel ur yelhi',
'badtitletext' => 'Asebter i testeqsiḠfell-as maÄÄi á¹£aḥiḥ, d ilem, neÉ£ yella ugul deg wezday seg wikipedia s tutlayt tayeḠneÉ£ deg wezday n wiki nniá¸en. Ahat tesÉa asekkil ur yezmir ara ad yettuseqdac deg wezwel.',
'perfcached' => 'TalÉ£ut deg ukessar seg lkac u waqila maÄÄi d tasiwelt taneggarut. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
@@ -420,6 +427,13 @@ $2',
'ns-specialprotected' => 'Ur t-zemred ara ad beddeleḠisebtar usligen',
'titleprotected' => "Azwel agi yegdel deg usnulfu ɣef [[User:$1|$1]].
TaÉ£áºint id yenna : ''$2''",
+'filereadonlyerror' => 'Ulamek an beddel afaylu « $1 » acku akaram n ifuyla « $2 » yella deg taɣuri kan.
+
+Anedbal i tid sekkweá¹en yefkad taÉ£áºint agi : « $3 ».',
+'invalidtitle-knownnamespace' => 'Azwel ur i ɣbel ara s tallunt n isemawen « $2 » dɣa d-uglam « $3 »',
+'invalidtitle-unknownnamespace' => 'Azwel ur i É£bel ara s uá¹á¹un n tallunt n isemawen $1 dÉ£a d-uglam « $2 » warisem',
+'exception-nologin' => 'Ur tekcimeḠara',
+'exception-nologin-text' => 'I usebter agi naɣ i tigawt agi, ilaq ad qqeneḠɣef wiki agi.',
# Virus scanner
'virus-badscanner' => "Yir tawila : anafraḠn infafaden warisem : ''$1''",
@@ -429,7 +443,7 @@ TaÉ£áºint id yenna : ''$2''",
# Login and logout pages
'logouttext' => "'''Tura tesensereá¸.'''
-TzemreḠad tesseqdceḠ{{SITENAME}} d udrig, [[Special:UserLogin|ad tkecmeḠdaÉ£en]] s yisem n wemseqdac inek (neÉ£ nniá¸en).
+TzemreḠad tesseqdceḠ{{SITENAME}} d udrig, [$1 ad tkecmeḠdaÉ£en] s yisem n wemseqdac inek (neÉ£ nniá¸en).
Kra n isebtar zemren ad sskanen belli mazal-ik s yisem n wemseqdac inek armi temḥuḠlkac.",
'welcomecreation' => '== Aná¹£uf yisek (yisem), $1 ! ==
@@ -441,6 +455,7 @@ Ur tettuḠara ad tbeddleḠ[[Special:Preferences|isemyifiyen inek (inem) ɣef
'remembermypassword' => 'Cfu É£ef wawal n tbaá¸nit inu di uselkim-agi (i afellay n $1 {{PLURAL:$1|ass|ussan}})',
'securelogin-stick-https' => 'Qqim uqqin s HTTPS sakin tuqqna',
'yourdomainname' => 'Taɣult inek',
+'password-change-forbidden' => 'Ur zemreḠara ad beddeleḠawalen n uÉaddi É£ef uwiki agi.',
'externaldberror' => 'Yella ugul aberrani n database neɣ ur tettalaseḠara ad tbeddleḠisem an wemseqdac aberrani inek.',
'login' => 'Kcem',
'nav-login-createaccount' => 'Kcem / Xleq isem n wemseqdac',
@@ -505,6 +520,7 @@ iwakken ad tbeyyneḠbelli tansa n email inek.',
'emailconfirmlink' => 'Sentem tansa e-mail inek',
'invalidemailaddress' => 'Tansa e-mail-agi ur telhi, ur tesÉi ara taseddast n lÉali. Ssekcem tansa e-mail s taseddast n lÉali neÉ£ ur tefkiḠacemma.',
'cannotchangeemail' => 'Ur t-zemreḠara ad beddeleḠtansa e-mail deg uwiki agi.',
+'emaildisabled' => 'Asmel agi ur yezmer ara ad i cegaÉ e-mail.',
'accountcreated' => 'Isem n wemseqdac yettwaxleq',
'accountcreatedtext' => 'Isem n wemseqdac i $1 yettwaxleq.',
'createaccount-title' => 'Asnulfu n umiá¸an i {{SITENAME}}',
@@ -548,10 +564,31 @@ Ahat ilaq ad beddeleḠawal ik/im n uÉaddi naÉ£ ad ssutereḠawal n uÉaddi a
'passwordreset-username' => 'Isem n useqdac',
'passwordreset-domain' => 'Talɣut :',
'passwordreset-capture' => 'áºeá¹ tirawt ?',
+'passwordreset-capture-help' => 'Lukan ad tekkiḠɣef texxamt agi, tirawt (deg-es awal n uÉaddi akudan) att beqqeḠdÉ£a ad tetwetceggaÉ i useqdac.',
'passwordreset-email' => 'Tansa e-mail :',
+'passwordreset-emailtitle' => 'TilÉ£a n umiá¸an É£ef {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'Yiwen (Ahat keÄÄ/kem, seg tansa IP $1) yessutered asiwel n tilÉ£a n umiá¸an inek/inem i {{SITENAME}} ($4). {{PLURAL:$3|Amiá¸an n useqdac agi yedrew|imiá¸anen n iseqdacen agi drewen}} s tansa e-mail agi :
+
+$2
+
+{{PLURAL:$3|Awal n uÉaddi agi ad i aff tasewti-s|Awalen n uÉaddi agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḠdÉ£a ad freneḠawal n uÉaddi amaynut. Lukan maÄÄi d keÄÄ/kem i xedmen asuter agi, naÉ£ tecfiḠtura i awal n uÉaddi inek/inem, tzemreḠad eǧǧeḠizen agi.',
+'passwordreset-emailtext-user' => 'Aseqdac $1 É£ef {{SITENAME}} yessutered asiwel n tilÉ£a n umiá¸an inek/inem i {{SITENAME}} ($4). {{PLURAL:$3|Amiá¸an n useqdac agi yedrew|imiá¸anen n iseqdacen agi drewen}} s tansa e-mail agi :
+
+$2
+
+{{PLURAL:$3|Awal n uÉaddi agi ad i aff tasewti-s|Awalen n uÉaddi agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḠdÉ£a ad freneḠawal n uÉaddi amaynut. Lukan maÄÄi d keÄÄ/kem i xedmen asuter agi, naÉ£ tecfiḠtura i awal n uÉaddi inek/inem, tzemreḠad eǧǧeḠizen agi.',
+'passwordreset-emailelement' => 'Isem n useqdac : $1
+Awal n uÉddi akudan : $2',
+'passwordreset-emailsent' => 'Tirawt n usmekti tetwazen.',
+'passwordreset-emailsent-capture' => 'Tirawt n usmekti tetwazen, áºeá¹-itt ddaw agi.',
+'passwordreset-emailerror-capture' => 'Tirawt n usmekti t-arewed, áºeá¹-itt ddaw agi, lamaÉna azen yefkad anezri (tirawt ur tru ara) : $1',
# Special:ChangeEmail
+'changeemail' => 'Beddel tansa n e-mail',
+'changeemail-header' => 'Beddel tansa n e-mail n umiá¸an',
+'changeemail-text' => 'ÄÄur tiferkit agi iwakken ad beddeleḠtansa e-mail inek/inem. Ilaq ad sekcemeḠawal ik/im n uÉaddi iwakken ad sergegeḠabeddel agi.',
'changeemail-no-info' => 'Ilaq ad qqeneḠiwakken ad áºá¹eḠasebter agi.',
+'changeemail-oldemail' => 'Tansa e-mail n tura :',
'changeemail-newemail' => 'Tansa e-mail tamaynut :',
'changeemail-none' => '(ulac)',
'changeemail-submit' => 'Beddel tansa e-mail',
@@ -588,6 +625,7 @@ Ahat ilaq ad beddeleḠawal ik/im n uÉaddi naÉ£ ad ssutereḠawal n uÉaddi a
'showlivepreview' => 'Pre-timeáºriwt taǧiḥbuá¹',
'showdiff' => 'Ssken ibeddlen',
'anoneditwarning' => "'''Aɣtal:''' Ur tkecmiḠara. Tansa IP inek ad tettusmekti deg umezruy n usebter-agi.",
+'anonpreviewwarning' => "''Ur tesuluḠara. Aḥraz ad yekles tansa IP inek/inem deg umezruy n ibeddilen n usebter.''",
'missingsummary' => "'''Ur tettuḠara:''' Ur tefkiḠara azwel i ubeddel inek. Lukan twekkiḠ''Smekti'' tikelt nniá¸en, abeddel inek ad yettusmekti mebla azwel.",
'missingcommenttext' => 'Ssekcem awennit deg ukessar.',
'missingcommentheader' => "'''Ur tettuḠara:''' Ur tefkiḠara azwel-azellum i ubeddel inek. Lukan twekkiḠ''Smekti'' tikelt nniá¸en, abeddel inek ad yettusmekti mebla azwel-azellum.",
@@ -621,6 +659,7 @@ TzemreḠad tmeslayeḠs $1 neɣ [[{{MediaWiki:Grouppage-sysop}}|anedbal]] nni
Lukan ur tefkiḠara email saḥih deg [[Special:Preferences|isemyifiyen n wemseqdac]], ur tezmireḠara ad tazneḠemail.
Tansa n IP inek n tura d $3, ID n uÉekkil d #$5.
Smekti-ten u fka-ten i unedbal-nni.",
+'blockednoreason' => 'Ulac taÉ£áºint',
'whitelistedittext' => 'Yessefk ad $1 iwakken ad tbeddleḠisebtar.',
'confirmedittext' => 'Yessefk ad tsentmeḠtansa e-mail inek uqbel abeddel. Xtar tansa e-mail di [[Special:Preferences|isemyifiyen n wemseqdac]].',
'nosuchsectiontitle' => 'Ulamek an af tigezmi',
@@ -629,21 +668,31 @@ Smekti-ten u fka-ten i unedbal-nni.",
'loginreqlink' => 'Kcem',
'loginreqpagetext' => 'Yessefk $1 iwakken ad teáºriḠisebtar wiyaá¸.',
'accmailtitle' => 'Awal n tbaá¸nit yettwazen.',
-'accmailtext' => 'Awal n tbaá¸nit n "$1" yettwazen ar $2.',
+'accmailtext' => "Awal n uÉaddi id yuran s ugacur i [[User talk:$1|$1]] yetwecgaÉ i $2.
+Awal n uÉaddi i umiá¸an agi amaynut yezmer ad yetbeddel É£ef usebter n ''[[Special:ChangePassword|ubeddel n awal uÉddi]]'' sakin tuqqna.",
'newarticle' => '(Amaynut)',
'newarticletext' => 'Tá¸efreḠazday É£er usebter mazal ur yettwaxleq ara.
Akken ad txelqeḠasebter-nni, aru deg tenkult i tella deg ukessar
(áºer [[{{MediaWiki:Helppage}}|asebter n tallat]] akken ad tessneḠkter).
Ma tÉ£elá¹eá¸, wekki kan É£ef tqeffalt "Back/Précédent" n browser/explorateur inek.',
-'anontalkpagetext' => "----''Wagi d asebter n umyennan n wemseqdac adrig. Ihi, yessef ad as nefk ID, nesseqdac tansa IP ines akken a t-neÉqel. Tansa IP nni ahat tettuseqdac sÉ£ur aá¹á¹as n yimdanen. Lukan ula d keÄÄ aqla-k amseqdac adrig u ur tebÉ£iḠara ad tettwabcreḠizen am wigini, ihi [[Special:UserLogin|xleq isem n wemseqdac neÉ£ kcem]].''",
+'anontalkpagetext' => "---- ''Wagi d asebter n umyennan n useqdac adrig, mazal ur d-yesnufa ara amiá¸an. I taÉ£áºint agi, ilaq an seqdec tansa IP ines iwakken at-id n sulu. Yiwet tansa IP tezmer at tettuseqdac sÉ£ur aá¹á¹as n iseqdacen. Lukan ula d keÄÄ aqla-k amseqdac adrig dÉ£a ur tebÉ£iḠara ad tettwabcreḠizen am wigini, ihi [[Special:UserLogin/signup|snulfud amiá¸an]] naÉ£ [[Special:UserLogin|qqened]] iwakken sya d asawen ur t-illint ara uguren n usulu.''",
'noarticletext' => 'Ulac aá¸ris deg usebter-agi, tzemreḠad [[Special:Search/{{PAGENAME}}|tnadiḠɣef wezwel n usebter-agi]] deg isebtar wiyaḠneÉ£ [{{fullurl:{{FULLPAGENAME}}|action=edit}} tettbeddileḠasebter-agi].',
'noarticletext-nopermission' => 'Imira ulac aá¸ris deg usebter agi.
TzemreḠ[[Special:Search/{{PAGENAME}}|ad nadiḠɣef azwel agi]] deg isebtaren nniá¸en,
naɣ [{{fullurl:{{#Special:Log}}|asebter={{FULLPAGENAMEE}}}} ad nadiḠdeg iɣmisen iqqenen].',
+'missing-revision' => 'Tacaggart #$1 n usebter s isem « {{PAGENAME}} » ulac-itt.
+
+Acku azday n umezruy, É£ef wayen tsennedeá¸, d-aqbur. Asebter yemḥa.
+TzemreḠad affeḠtilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n isebtar yemḥan].',
+'userpage-userdoesnotexist' => 'Amiá¸an n useqdac «
Aqlak teggaleḠbelli tureḠwagi d keÄÄ, neÉ£ teddmiá¸-t seg taÉ£ult azayez neÉ£ iÉ£bula tilelliyin (áºer $1 akken ad tessneḠkter).
'''UR TEFKIḠARA AXDAM S COPYRIGHT MEBLA TURAGT!'''",
-'longpageerror' => "'''AGUL: Aá¸ris i tefkiḠyesÉa $1 kB/ko, tiddi-yagi kter n $2 kB/ko, ur yezmir ara ad yesmekti.'''",
-'readonlywarning' => "'''AÆTAL: Database d tamsekker akken ad teddwaxdem,
-ihi ur tezmireḠara ad tesmektiḠibeddlen inek tura. Smekti aá¸ris inek
-deg afaylu nniá¸en akken tesseqdceá¸-it umbeÉd.'''",
-'protectedpagewarning' => "'''AÆTAL: Asebter-agi yettwaḥrez, ala inedbalen zemren a t-beddlen'''",
-'semiprotectedpagewarning' => "'''Tamawt:''' Asebter-agi yettwaḥrez, ala imseqdacen i yesÉan isem n wemseqdac zemren a t-beddlen.",
-'cascadeprotectedwarning' => "'''AÉ£tal:''' Asebter-agi iÉekkel iwakken ad zemren ala inedbalen a t-beddlen, axaá¹er yettwassekcem deg isebtar i yettwaḥerzen agi (acercur):",
+'longpageerror' => "'''Anezri : Aá¸ris i sekcemeḠyeÉbeá¹ {{PLURAL:$1|yiwen kilobyte|$1 kilobytes}}, tiddi-yagi kter n talast yellan af {{PLURAL:$2|yiwen kilobyte|$1 kilobytes}}.'''
+Ur yezmer ara ad yetwaḥrez.",
+'readonlywarning' => "'''ÆUR-WET : taffa n isefka t-sekkweá¹ i timhelin n ibeddi. Ur tzemreḠara ad ḥrezeḠibeddilen tura.'''
+TzemreḠad nÉ£eleḠaá¸ris ik/im deg ufaylu iwakken ad tesqedceḠsakin.
+
+Anedbal i sekkweá¹en taffa n isefka agi, yefka-d taÉ£áºint agi : $1",
+'protectedpagewarning' => "'''ÆUR-WET : Asebter-agi yettwaḥrez, inedbalen kan i zemren a t-beddlen.'''
+Asekcem aneggaru n uɣmis yella ddaw-agi :",
+'semiprotectedpagewarning' => "'''Tamawt :''' Asebter-agi yettwaḥrez, iseqdacen yesÉan amiá¸an kan i zemren a t-beddlen.
+Asekcem aneggaru n uɣmis yella ddaw-agi :",
+'cascadeprotectedwarning' => "'''ÆUR-WET :''' Asebter-agi yettwaḥrez, inedbalen kan i zemren a t-beddlen. Yettwaḥrez acku yettwassekcem deg {{PLURAL:$1|asebter i ḥerzen agi yesÉan|isebtar i ḥerzen agi yesÉan}} « amesten s uceá¹cuṠ» i sermeden :",
+'titleprotectedwarning' => "'''ÆUR-WET : Asebter agi yemesten, dÉ£a ilaq ad sÉuḠ[[Special:ListGroupRights|izerfan usligen]] iwakken at id snulfuá¸.''' Asekcem aneggaru n uÉ£mis yebeqqeḠddaw agi :",
'templatesused' => '{{PLURAL:$1|Talɣa i seqdacen|Tilɣatin i seqdacen}} deg usebter agi :',
-'templatesusedpreview' => 'TalÉ£iwin ttuseqdacen deg pre-timeáºriwt-agi:',
+'templatesusedpreview' => '{{PLURAL:$1|Talɣa i seqdacen|Tilɣatin i seqdacen}} deg azaraskan agi :',
'templatesusedsection' => '{{PLURAL:$1|Talɣa i seqdacen|Tilɣatin i seqdacen}} deg tigezmi agi :',
'template-protected' => '(yettwaḥrez)',
'template-semiprotected' => '(nnefṣ-yettwaḥrez)',
'hiddencategories' => 'Asebter agi yella deg {{PLURAL:$1|Taggayt i ffren|Tiggayin i ffren}} agi :',
'edittools' => '',
'nocreatetitle' => 'Axleq n isebtar meḥdud',
-'nocreatetext' => 'Adeg n internet agi iḥedded axleq n isebtar imaynuten.
-TzemreḠa d-uɣaleḠu tbeddleḠasebter i yellan, neɣ ad [[Special:UserLogin|tkecmeḠneɣ ad txelqeḠisem n wemseqdac]].',
+'nocreatetext' => '{{SITENAME}} yekref iáºubaẠn usnulfu n isebtar imaynuten.
+TzemreḠad uÉ£aleḠar deffir dÉ£a ad beddeleḠasebter yellan yakan, naÉ£ [[Special:UserLogin|ad qqeneḠnaÉ£ ad snulfuḠamiá¸an]].',
+'nocreate-loggedin' => 'Ur tesÉiḠara turagt i usnulfu n isebtar imaynuten.',
+'sectioneditnotsupported-title' => 'Abeddel n tigezmi agi ur yezmer ara',
+'sectioneditnotsupported-text' => 'Abeddel n tigezmi ur yezmer ara deg usebtar agi n ubeddel.',
'permissionserrors' => 'Anezri n turagt',
'permissionserrorstext' => 'Ur tesÉiḠara turagt iwakken ad xedmeḠwayagi i {{PLURAL:$1|taÉ£áºint|tiÉ£áºinin}} agi :',
'permissionserrorstext-withaction' => 'Ur sÉiḠara ttesriḥ af $2, i {{PLURAL:$1|taÉ£áºint|tiÉ£áºinin}} agi :',
@@ -709,20 +773,56 @@ TzemreḠa d-uɣaleḠu tbeddleḠasebter i yellan, neɣ ad [[Special:UserLog
Ilaq ad snulfum asebter agi haca ma i xater. AÉ£mis n isebtaren i twekkesen yella ddaw-agi :",
'moveddeleted-notice' => 'Asebter agi yetwekkes. AÉ£mis n isebtaren i twekkesen yella ddaw agi.',
+'log-fulllog' => 'áºeá¹ aÉ£mis ummid',
+'edit-hook-aborted' => 'Abrir n ubeddel s usiɣzef.
+Tamentilt warisem',
+'edit-gone-missing' => 'Ur yezmer ara ad yemucceḠasebter agi.
+Ahat yetwemḥa.',
+'edit-conflict' => 'Amgirred n ubeddel.',
+'edit-no-change' => 'Abeddel inek/inem ur yetwexdam ara acku ur di ban ara abeddel deg uá¸ris.',
+'edit-already-exists' => 'Asebter amaynut ur d yesnufu ara.
+Yella yakan.',
+'defaultmessagetext' => 'Izen s lexá¹£as',
+'content-failed-to-parse' => 'TasleṠn ugbur n $2 i talɣa $1 texseṠ: $3',
+'invalid-content-data' => 'Isefka n ugbur ur ɣbelen ara',
+'content-not-allowed-here' => 'Agbur "$1" ur yesÉa ara turagt É£ef usebter [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikiaá¸ris',
+'content-model-text' => 'aá¸ris afraray',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
+'expensive-parserfunction-warning' => "'''Æur-wet :''' Asebter agi yesÉa aá¹as n tiÉ£riwin ar tiseÉ£nin É£layen n umsisleḠtaseddast.
+Ilaq ad i sÉu ddaw n $2 {{PLURAL:$2|tiÉ£ri|tiÉ£riwin }}, wannag tura {{PLURAL:$1|tella $1 tiÉ£ri|llant $1 tiÉ£riwin}}.",
+'expensive-parserfunction-category' => 'Isebtar yesÉan aá¹as tiÉ£riwin É£layen n tiseeÉ£nin n umsisleḠtaseddast',
'post-expand-template-inclusion-warning' => 'Æur-wet : Asebter agi yesÉa aá¹as tilÉ£atin. Kra n tilÉ£atin ur zemrent ara ad seqdacent.',
'post-expand-template-inclusion-category' => 'Isebtaren i sÉan aá¹as tilÉ£atin',
'post-expand-template-argument-warning' => "'''Æur-wet''' : Asebter agi yesÉa tuccá¸a deg aÉ£ewwar n yiwet talÉ£a.",
'post-expand-template-argument-category' => 'Isebtaren i sÉan iÉ£ewwaren n talÉ£a ur skazelen ara',
+'parser-template-loop-warning' => 'N-ufad talɣa s tineddict : [[$1]]',
+'parser-template-recursion-depth-warning' => 'Talast n lqay n tiɣriwin n tilɣatin tefel ($1)',
+'language-converter-depth-warning' => 'Talast n lqay n uselkat n tutlayt tefel ($1)',
+'node-count-exceeded-category' => 'Isebtar anda amá¸a n tikerwas yefel',
+'node-count-exceeded-warning' => 'Asebter yefelen amá¸an n tikerwas',
+'expansion-depth-exceeded-category' => 'Isebtar anda lqay n uderrec yefel',
+'expansion-depth-exceeded-warning' => 'Isebtar yefelen lqay n uderrec',
+'parser-unstrip-loop-warning' => 'Tifin n tineddict ur nezmer ara an sentuter',
+'parser-unstrip-recursion-limit' => 'Talast n usniles ur nezmer ara an sentuter tefel ($1)',
+'converter-manual-rule-error' => 'Tifin n unezri deg alugen awfus n uselket n tutlayt',
# "Undo" feature
'undo-success' => 'TzemreḠad tessefsuḠabeddil. Ssenqed asidmer akken ad tessneḠayen tebÉ£iḠad txdmeḠd ṣṣeḥ, umbeÉd smekti ibeddlen u tkemmleḠad tessefsuḠabeddil.',
'undo-failure' => 'Ur yezmir ara ad issefu abeddel axaá¹er yella amennuÉ£ abusari deg ubeddel.',
+'undo-norev' => 'Abeddel ur yezmer ara ad yetwekkes acku ulac-itt naɣ tetwekkes yakan',
'undo-summary' => 'Ssefsu tasiwelt $1 sɣur [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]])',
# Account creation failure
'cantcreateaccounttitle' => 'Ur yezmir ara ad yexleq isem n wemseqdac',
+'cantcreateaccount-text' => "Asnulfu n umiá¸an seg tansa IP ($1) tekyef sÉ£ur [[User:$3|$3]].
+
+TaÉ£áºint n $3 : ''$2''",
# History pages
'viewpagelogs' => 'áºer aÉ£mis n usebter-agi',
@@ -761,6 +861,7 @@ Ahat yettumḥa neɣ yettbeddel isem-is.
'rev-deleted-comment' => '(agzul n taáºrigt yettwakes)',
'rev-deleted-user' => '(isem n wemseqdac yettwakes)',
'rev-deleted-event' => '(asekcem yettwakkes)',
+'rev-deleted-user-contribs' => '[isem n useqdac naɣ tansa IP yetwemḥa - abeddel yeffer deg tiwsitin]',
'rev-deleted-text-permission' => "Lqem n usebter agi '''tetwesfeá¸'''.
TilÉ£a llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uÉ£mis n usfeá¸].",
'rev-deleted-text-unhide' => "Lqem n usebter agi '''tetwesfeá¸'''.
@@ -791,11 +892,21 @@ TzemreḠatt áºá¹eḠ; tilÉ£a llant deg [{{fullurl:{{#Special:Log}}/delete|p
'revisiondelete' => 'Mḥu/kkes amḥay tisiwal',
'revdelete-nooldid-title' => 'Lqem asaá¸as ur i É£bel ara',
'revdelete-nooldid-text' => 'Ur textareḠara lqem nnican akken ad txedmeḠtawuri fell-as.',
+'revdelete-nologtype-title' => 'Ulac tawsit n uɣmis',
+'revdelete-nologtype-text' => 'Ur d ssefruḠara tawsit n uɣmis ɣef anwa tigawt agi ad tetwexdam.',
+'revdelete-nologid-title' => 'Asekcem n uɣmis ur i ɣbel ara',
+'revdelete-nologid-text' => 'Ur d ssefruḠara asekcem n uɣmis ɣef anwa tigawt agi ilaq ad tetwexdam, naɣ tadyant agi ur tella ara.',
+'revdelete-no-file' => 'Afaylu id ssefruḠur yella ara.',
+'revdelete-show-file-confirm' => 'TebɣriḠad mḥuḠtacaggart n ufaylu «
''', iwakken ad beqqeá¸eḠafaylu deg tabadut taÄurant (lukan d-tugna) ;
+* '''
''' i useqdac n uqmamaḠn 200px s tehri deg tanaka af uzelmeḠs « aá¸ris n uglam » am aglam ;
+* '''
''' iwakken ad qqeneḠɣer ufaylu war ubeqqeá¸.",
+'upload-permitted' => 'Amasal n ifuyla i siregen : $1.',
+'upload-preferred' => 'Amasal n ifuyla i smenyifen : $1.',
+'upload-prohibited' => 'Amasal n ifuyla igdelen : $1.',
'uploadlog' => 'amezruy n usekcam',
'uploadlogpage' => 'Amezruy n usekcam',
-'uploadlogpagetext' => 'Deg ukessar, yella wumuɣ n usekcam n ufayluwen imaynuten.',
+'uploadlogpagetext' => 'Hat-an umuɣ n ifuyla ineggura i kteren ɣef uqeddac.
+áºeá¹ [[Special:NewFiles|tihawt n tugniwin timaynutin]].',
'filename' => 'Isem n ufaylu',
'filedesc' => 'Agzul',
'fileuploadsummary' => 'Agzul:',
-'filestatus' => 'Aáºayer n copyright:',
-'filesource' => 'Seg way yekka',
+'filereuploadsummary' => 'Ibeddilen n ufaylu :',
+'filestatus' => 'Aáºayer n uzref n umeskar :',
+'filesource' => 'AÉ£balu :',
'uploadedfiles' => 'Ifuyla yettwaznen',
'ignorewarning' => 'Ttu aɣtal u smekti afaylu',
'ignorewarnings' => 'Ttu iɣtalen',
+'minlength1' => 'Isem ufaylu ilaq ad yesεu ma drus yiwen usekkil',
'illegalfilename' => 'Isem n ufaylu "$1" yesÉa isekkilen ur tettalaseḠara a ten-tesseqdceḠdeg yizwal n isebtar. G leÉnayek beddel isem n ufaylu u azen-it tikkelt nniá¸en.',
+'filename-toolong' => 'Isem ufaylu ilaq ad yesεu m-ay aá¹as 240 iá¹amá¸anen (bytes).',
'badfilename' => 'Isem ufaylu yettubeddel ar "$1".',
+'filetype-mime-mismatch' => 'AsiÉ£zef n ufaylu « .$1 » ur yesÉa ara tuqqna s tawsit MIME id n-ufa deg ufaylu ($2).',
'filetype-badmime' => 'Ur tettalaseḠara ad tazneḠufayluwen n anaw n MIME "$1".',
+'filetype-bad-ie-mime' => 'Afaylu ur yezmer ara ad yetwekter acku yetwaf am « $1 » sɣur Internet Explorer. Tawsit agi d tazanbagt acku d tamihawt.',
+'filetype-unwanted-type' => "'''« .$1 »''' d amasal n ufaylu azanbag.
+Ilaq ad seqdeceḠ{{PLURAL:$3|amasal|imusal}} $2.",
+'filetype-banned-type' => "''' « .$1 » '''maÄÄi d {{PLURAL:$4|amasal yesÉan turagt|imusal yesÉan turagt}}.
+{{PLURAL:$3|Amasal yesÉan turagt d-wagi :|Imusal yesÉan turagt d-wigi :}} $2.",
'filetype-missing' => 'Afaylu ur yesÉi ara taseggiwit (am ".jpg").',
+'empty-file' => 'Afaylu id cegÉeḠd-ilem.',
+'file-too-large' => 'Afaylu id cegÉed d-ameqqá¹an aá¹as.',
+'filename-tooshort' => 'Isem n ufaylu d-awezzlan aá¹as.',
+'filetype-banned' => 'Tawsit agi n ufaylu d-tazanbagt.',
+'verification-error' => 'Afaylu agi ur i Éedda ara aselken n ifuyla.',
+'hookaborted' => 'Abeddel i ÉerdeḠad xedmeḠyetweḥbes s tamdeyt n usiÉ£zef.',
+'illegal-filename' => 'Isem n ufaylu agi ur yeɣbel ara.',
+'overwrite' => 'Asefxes n ufaylu yellan ur yeɣbel ara.',
+'unknown-error' => 'Yefkad anezri warisem.',
+'tmp-create-error' => 'Ulamek ad nesnulfu afaylu agi akudan.',
+'tmp-write-error' => 'Anezri deg tira n ufaylu agi akudan.',
'large-file' => 'Ilaq tiddi n ufayluwen ur tettili kter n $1; tiddi n ufaylu-agi $2.',
'largefileserver' => 'Afaylu meqqer aá¹á¹as, server ur t-yeqbil ara.',
'emptyfile' => 'Afaylu i tazneḠd ilem. Waqila tÉ£elá¹eḠdeg isem-is. G leÉnayek ssenqed-it.',
+'windows-nonascii-filename' => 'Wiki agi ur yebra ara isemawen n ifuyla s isekkilen usligen.',
'fileexists' => 'Afaylu s yisem-agi yewǧed yagi, ssenqed [[:$1]] ma telliḠmaÄÄi meá¸mun akken a t-tbeddleá¸.
[[$1|thumb]]',
-'fileexists-extension' => 'Afaylu s yisem-agi yewǧed: [[$2|thumb]]
-* Isem n ufaylu i tazneá¸: [[:$1]]
-* Isem n ufaylu i yewǧed: [[:$2]]
-Amgirred i yella kan deg isekkilen imecá¹uḥen/imeqqranen deg taseggiwit (am ".jpg"/".jPg"). G leÉnayek ssenqed-it.',
+'filepageexists' => 'Asebter n uglam i ufaylu agi yesnulfad yakan d-agi [[:$1]], maca ulac asebter s isem agi.
+Agzul ad efkeḠtura ur d yettban ara ɣef asebter n uglam.
+Ma tebɣiḠad yeban, ilaq ad beddeleḠs awfus asebter. [[$1|thumb]]',
+'fileexists-extension' => 'Afaylu s yisem yecban wagi yella : [[$2|thumb]]
+* Isem n ufaylu i tezneá¸: [[:$1]]
+* Isem n ufaylu i yellan: [[:$2]]
+Ilaq ad xtiá¹eḠisem nniá¸en.',
'fileexists-thumbnail-yes' => "Iban-d belli tugna-nni d tugna tamecá¹uht n tugna nniá¸en ''(thumbnail)''. [[$1|thumb]]
G leÉnayek ssenqed tugna-agi [[:$1]].
Ma llant kif-kif ur tt-taznepd ara.",
-'file-thumbnail-no' => "Isem n tugna yebda s $1. Waqila tugna-nni d tugna tamecá¹uht n tugna nniá¸en ''(thumbnail)''.
-Ma tesÉiḠtugna-nni s resolution tameqqrant, azen-it, ma ulac beddel isem-is.",
-'fileexists-forbidden' => 'Tugna s yisem kif-kif tewǧed yagi; g leÉnayek uÉ£al u beddel isem-is. [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'Tugna s yisem kif-kif tewǧed yagi; g leÉnayek uÉ£al u beddel isem-is. [[File:$1|thumb|center|$1]]',
+'file-thumbnail-no' => "Isem n ufaylu yezwer s $1.
+Ahat d lqem tamectuḥt ''(aqmamaá¸)''.
+Lukan tesÉiḠafaylu s tabadut taÉlayant, azen-it, m-ulac beddel isem-is.",
+'fileexists-forbidden' => 'Afaylu s isem agi yella yakan, dɣa ur yezmer ara ad yetsefxes.
+Ma tebɣiḠad azeneḠafaylu inek/inem, ilaq ad uɣaleḠar deffir dɣa ad as efkeḠisem amaynut.
+[[File:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Afaylu s isem agi yella yakan deg uzadur n ifuyla azduklan.
+Ma tebɣiḠad azeneḠafaylu inek/inem, ilaq ad uɣaleḠar deffir dɣa ad as efkeḠisem amaynut.
+[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => 'Afaylu agi d-asleg n {{PLURAL:$1|ufaylu agi|ifuyla agi}} :',
+'file-deleted-duplicate' => 'Afaylu am wagi ([[:$1]]) yetwekkes yakan. Ilaq ad selkeneḠaÉ£mis n tukksiwin n ufaylu agi uqbel atid ktereḠtikkelt nniá¸en.',
'uploadwarning' => 'AÉ£tal deg wazan n ufayluwen',
+'uploadwarning-text' => 'Beddel aglam n ufaylu dÉ£a ÉreḠtikkelt nniá¸en',
'savefile' => 'Smekti afaylu',
'uploadedimage' => '"[[$1]]" yettwazen',
+'overwroteimage' => 'yekter lqem amaynut n « [[$1]] »',
'uploaddisabled' => 'Suref-aɣ, azen n ufayluwen yettwakkes',
-'uploaddisabledtext' => 'Azen n ufayluwen yettwakkes deg wiki-yagi',
+'copyuploaddisabled' => 'Taktert n ufaylu s URL yensan.',
+'uploadfromurl-queued' => 'Afaylu inek/inem yekcem deg udras n ugani.',
+'uploaddisabledtext' => 'Azen n ifuyla yettwakkes deg wiki agi.',
+'php-uploaddisabledtext' => 'Taktert n ifuyla tensa deg PHP. Selken taxtiá¹it n tawila file_uploads.',
'uploadscripted' => 'Afaylu-yagi yesÉa angal n HTML/script i yexdem agula deg browser/explorateur.',
'uploadvirus' => 'Afaylu-nni yesÉa anfafad asenselkim (virus)! áºer kter: $1',
-'sourcefilename' => 'And yella afyalu',
-'destfilename' => 'Anda iruḥ afaylu',
-'watchthisupload' => 'Æass asebter-agi',
+'uploadjava' => 'Wagi d afaylu ZIP yesÉan afaylu Java .class.
+Azdam n ifuyla Java ur yesÉa ara turagt, acku zemren ad zizdewen ikyafen n taÉ£ellist.',
+'upload-source' => 'Afaylu aɣbalu',
+'sourcefilename' => 'Isem n ufaylu aɣbalu :',
+'sourceurl' => 'URL aγbalu',
+'destfilename' => 'Isem n ufaylu deg aserken',
+'upload-maxfilesize' => 'Tiddi tafellayt n ufaylu : $1',
+'upload-description' => 'Aglam n ufaylu',
+'upload-options' => 'Tixtiá¹iyin n taktert ifuyla',
+'watchthisupload' => 'Æass asebter agi',
'filewasdeleted' => 'Afaylu s yisem-agi yettwazen umbeÉd yettumḥa. Ssenqed $1 qbel ad tazniḠtikelt nniá¸en.',
+'filename-bad-prefix' => "Isem n ufaylu yezwer s '''« $1 »''', wagi d isem i sedgeren s uwurman sÉ£ur timsakenwin tumá¸inin.
+Xteá¹ isem n ufaylu agelmaw.",
'upload-success-subj' => 'Azen yekfa',
+'upload-success-msg' => 'Taktert inek/inem seg [$2] yesmures. Af-it d-agi : [[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'Ugur n taktert',
+'upload-failure-msg' => 'Yella ugur s taktert inek/inem seg [$2] :
+
+$1',
+'upload-warning-subj' => 'Alɣu deg taktert',
+'upload-warning-msg' => 'Yella ugur s taktert seg [$2]. TzemreḠad uɣaleḠar [[Special:Upload/stash/$1|tiferkit n taktert]] iwakken ad fruḠugur agi.',
'upload-proto-error' => 'Agul deg protokol',
'upload-proto-error-text' => 'Assekcam yená¹err URL i yebdan s http://
neɣ ftp://
.',
'upload-file-error' => 'Agul zdaxel',
-'upload-file-error-text' => 'Agul n daxel yeá¸ran asmi yeÉreḠad yexleq afaylu temporaire deg server. G leÉnayek, meslay akk d unedbal n system.',
+'upload-file-error-text' => 'Anezri agensan yeá¸ran asmi yeÉreḠad yesnulfu afaylu akudan É£ef uqeddac. Ilaq ad meslayeḠs [[Special:ListUsers/sysop|unedbal]].',
'upload-misc-error' => 'Agul maÄÄi mechur asmi yettwazen ufaylu',
-'upload-misc-error-text' => 'Agul maÄÄi mechur teá¸ra asmi yettwazen afaylu. G leÉnayek sseqed belli URL d á¹£aḥiḥ u ÉreḠtikelt nniá¸en. Ma yella daÉ£en wagul, mmeslay akk d unedbal n system.',
+'upload-misc-error-text' => 'Anezri warisem yegweá¸eḠasmi yettwazen afaylu.
+Ilaq ad selkeneḠma URL nni teÉ£bel, dÉ£a ÉreḠtikkelt nniá¸en.
+Ma yella daɣen anezri, ilaq ad meslaye Ḡs [[Special:ListUsers/sysop|unedbal]].',
+'upload-too-many-redirects' => 'URL agi yesÉa aá¹as illusen n wesnili.',
+'upload-unknown-size' => 'Tiddi warisem',
+'upload-http-error' => 'Anezri HTTP : $1',
+'upload-copy-upload-invalid-domain' => 'Anɣel n izdamen ur yezmer ara seg taɣult agi.',
+
+# File backend
+'backend-fail-stream' => 'Ulamek an ɣeṠafaylu $1.',
+'backend-fail-backup' => 'Ulamek an ḥrez afaylu $1.',
+'backend-fail-notexists' => 'Afaylu $1 ulac it.',
+'backend-fail-hashes' => 'Ulamek an sÉu idwayen n ufaylu i usnemhel.',
+'backend-fail-notsame' => 'Afaylu imeáºli yella yakan i $1.',
+'backend-fail-invalidpath' => '$1 maÄÄi d abrid n uḥraz iÉ£belen.',
+'backend-fail-delete' => 'Ulamek an mḥu afaylu "$1".',
+'backend-fail-alreadyexists' => 'Afaylu $1 yella yakan.',
+'backend-fail-store' => 'Ulamek an ḥrez afaylu $1 deg $2.',
+'backend-fail-copy' => 'Ulamek an nɣel afaylu $1 deg $2.',
+'backend-fail-move' => 'Ulamek an sekḥer afaylu $1 deg $2.',
+'backend-fail-opentemp' => 'Ulamek an ldi afaylu akudan.',
+'backend-fail-writetemp' => 'Ulamek an aru deg ufaylu akudan.',
+'backend-fail-closetemp' => 'Ulamek an mdel afaylu akudan.',
+'backend-fail-read' => 'Ulamek an ɣeṠafaylu "$1".',
+'backend-fail-create' => 'Ulamek an aru afaylu "$1".',
+'backend-fail-maxsize' => 'Ulamek an aru afaylu "$1" acku yugar {{PLURAL:$2|yiwen atamá¸an|$2 itamá¸anen}}.',
+'backend-fail-readonly' => 'Tannalt n uḥraz "$1" yella deg taɣuri kan. Taɣzint id yefka : "$2"',
+'backend-fail-synced' => 'Afaylu "$1" yesÉa addad azanbag deg tannalin n uḥraz tigensanin',
+'backend-fail-connect' => 'Ulamek an qqen ar tannalt n uḥraz "$1".',
+'backend-fail-internal' => 'Yella anezri warisem deg tannalt n uraz "$1".',
+'backend-fail-contenttype' => 'Ulamek ad n efk tawsit n ugbur n ufaylu an ḥrez deg "$1".',
+'backend-fail-batchsize' => 'Tannalt n uḥraz yefkad akemmus n $1 {{PLURAL:$1|tamhelt|timehlin}} n ufaylu ; talast tella ar $2 {{PLURAL:$2|tamhelt|timehlin}}.',
+'backend-fail-usable' => 'Ulamek an ɣeṠnaɣ an aru afaylu « $1 » acku drus izerfan naɣ ikaramen xusen.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Ulamek an qqen ar taffa n isefka n uɣmis i ixf n uḥraz "$1".',
+'filejournal-fail-dbquery' => 'Ulamek an mucceḠtaffa n isefka n uɣmis i ixf n uḥraz "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Ulamek an kkes aseá¸ru « $1 » ; ur yesÉa ara asekkweá¹.',
+'lockmanager-fail-closelock' => 'Ulamek an mdel afaylu n uzeká¹un i « $1 ».',
+'lockmanager-fail-deletelock' => 'Ulamek an mḥu afaylu n uzeká¹un i « $1 ».',
+'lockmanager-fail-acquirelock' => 'Ulamek an krez azeká¹un i « $1 ».',
+'lockmanager-fail-openlock' => 'Ulamek an ldi afaylu n uzeká¹un i « $1 ».',
+'lockmanager-fail-releaselock' => 'Ulamek an bru azeká¹un i « $1 ».',
+'lockmanager-fail-db-bucket' => 'Ulamek an siwel ddeqs taffa n isefka n usekkweá¹ deg uqbuc $1.',
+'lockmanager-fail-db-release' => 'Ulamek an bru izeká¹unen É£ef taffa n isefka $1.',
+'lockmanager-fail-svr-acquire' => 'Ulamek an krez izeká¹unen É£ef uqeddac $1.',
+'lockmanager-fail-svr-release' => 'Ulamek an bru izeká¹unen É£ef uqeddac $1.',
+
+# ZipDirectoryReader
+'zip-file-open-error' => 'Yella agul mi d neldi afaylu i senqeden ifuyla zip.',
+'zip-wrong-format' => 'Afaylu agi maÄÄi d afaylu n weÉ£baá¹ ZIP.',
+'zip-bad' => 'Afaylu agi d afaylu n weɣbaṠameggafsu naɣ ur nezmer ara an ɣaṠdeg-es.
+Ur nezmer ara aten selken i taɣellist.',
+'zip-unsupported' => 'Afaylu agi d afaylu n weɣbaṠi seqdacen tiɣariwin ur yeḥemmel ara MediaWiki.
+Taɣellist ines ur tezmer ara at illi teseklen.',
+
+# Special:UploadStash
+'uploadstash' => 'Tazarkatut n taktert',
+'uploadstash-summary' => 'Asebter agi yetefk addaf i ifuyla yekteren (naÉ£ yesÉan taktert tanazzalt), maca mazal i beqqeá¸en deg wiki. Ifuyla agi mazal id banen, ḥaca i useqdac i tni kteren.',
+'uploadstash-clear' => 'SfeḠifuyla deg tazarkatut',
+'uploadstash-nofiles' => 'Ur tesÉiḠara ifuyla deg tazarkatut n taktert',
+'uploadstash-badtoken' => 'Aselkem n tigawt agi yexseá¹, ahat acku tilÉ£a inek/inem n usulu gweá¸ent ar tasewti nsent. ÆreḠtikkelt nniá¸en.',
+'uploadstash-errclear' => 'AsfeḠn ifuyla yefkad taruáºi',
+'uploadstash-refresh' => 'MucceḠumuɣ n ifuyla',
+'invalid-chunk-offset' => 'Tiggit n iɣil ur teɣbel ara',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'Addaf yugwi',
+'img-auth-nopathinfo' => 'Yexus BATH_INFU.
+Aqeddac inek/inem ur yeseÉ£wer ara iwakken ad i Éeddi talÉ£ut agi.
+Ahat i lḥu s CGI dɣa ur s-yezmer ara i img_auth.
+áºeá¹ https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
+'img-auth-notindir' => 'Abrid yesuteren maÄÄi d akaram n taktert yellan deg tawila.',
+'img-auth-badtitle' => 'Ulamek an ssali azwel i ɣbelen seg « $1 ».',
+'img-auth-nologinnWL' => 'Ur teqqneḠara dɣa « $1 » ur yella ara deg umuɣ amellal.',
+'img-auth-nofile' => 'Afaylu « $1 » ulac it.',
+'img-auth-isdir' => 'TÉerdeḠad ldiḠakaram « $1 ».
+TzemreḠkan ad ldiḠifuyla.',
+'img-auth-streaming' => 'Taɣuri tamaɣlalt n « $1 ».',
+'img-auth-public' => 'Tasɣent n img_auth.php tella i ubeqqeḠn ifuyla n yiwen wiki uslig.
+Wiki agi yesɣwer am wiki azayez.
+I taÉ£ellist tameqqá¹ant, img_auth.php yensa.',
+'img-auth-noread' => 'Aseqdac ur yesÉa ara azref deg taÉ£uri É£ef « $1 ».',
+'img-auth-bad-query-string' => 'URL tesÉa azrar n tuttra ur i É£belen ara.',
+
+# HTTP errors
+'http-invalid-url' => 'URL ur teɣbel ara : $1',
+'http-invalid-scheme' => 'URL s uzenziɣ « $1 » ur ɣbelen ara d-agi.',
+'http-request-error' => 'Anezri warisem deg uceggaÉ n tuttra.',
+'http-read-error' => 'Anezri n taɣuri HTTP.',
+'http-timed-out' => 'Tuttra HTTP teneffeá¹.',
+'http-curl-error' => 'Anezri deg tiririt n URL : $1',
+'http-host-unreachable' => 'Ulamek an siá¸es URL',
+'http-bad-status' => 'Yella ugur deg tuttra HTTP : $1 $2',
# Some likely curl errors. More could be added from
+Asebter yella d asebter n tiynisemt lukan yetseqdac talɣa i qqenen ar [[MediaWiki:Disambiguationspage]]",
'doubleredirects' => 'AsemmimeḠyeá¸ra snat tikwal',
'doubleredirectstext' => 'Mkull ajerriḠyesÉa azday É£er asmimeḠamezwaru akk d wis sin, ajerriḠamezwaru n uá¸ris n usebter wis sin daÉ£en, iwumi yefkan asmimeḠṣaḥiḥ i yessefk ad sÉan isebtar azday É£ur-s.',
+'double-redirect-fixed-move' => 'Alsanamud agi, É£ef ayed asaá¸as [[$1]] yetwebeddel isem, yetawi tura É£er [[$2]].',
+'double-redirect-fixed-maintenance' => 'Yetseɣtu alsanamud aslag seg [[$1]] ɣer [[$2]].',
+'double-redirect-fixer' => 'Aseɣtay n aslanamud',
'brokenredirects' => 'Isemmimá¸en imeráºa',
-'brokenredirectstext' => 'Isemmimá¸en-agi sÉan izdayen ar isebtar ulac-iten:',
+'brokenredirectstext' => 'Isemmimá¸en-agi sÉan izdayen ar isebtar ulac-iten :',
'brokenredirects-edit' => 'beddel',
'brokenredirects-delete' => 'mḥu',
-'withoutinterwiki' => 'isebtar mebla izdayen ar isebtar n wikipedia s tutlayin tiyaá¸',
-'withoutinterwiki-summary' => 'isebtar-agi ur sÉan ara izdayen ar isebtar n wikipedia s tutlayin tiyaá¸:',
+'withoutinterwiki' => 'Isebtar war izdayen ager-tutlayin',
+'withoutinterwiki-summary' => 'Isebtar agi ur sÉan ara izdayen É£er tutlayin nniá¸en :',
+'withoutinterwiki-legend' => 'Adat',
+'withoutinterwiki-submit' => 'Ssken',
+
+'fewestrevisions' => 'Isebtar yesÉan cwiá¹ ibeddilen',
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|byte/octet|bytes/octets}}',
'ncategories' => '$1 {{PLURAL:$1|Taggayt|Taggayin}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
'nlinks' => '$1 {{PLURAL:$1|azday|izdayen}}',
'nmembers' => '$1 {{PLURAL:$1|amaslad|imasladen}}',
'nrevisions' => '$1 {{PLURAL:$1|tasiwelt|tisiwal}}',
'nviews' => '$1 {{PLURAL:$1|timeáºriwt|tuáºrin}}',
+'nimagelinks' => 'Yetseqdec ɣef $1 {{PLURAL:$1|asebter|isebtar}}',
+'ntransclusions' => 'yetseqdec ɣef $1 {{PLURAL:$1|asebter|isebtar}}',
'specialpage-empty' => 'Asebter-agi d ilem.',
'lonelypages' => 'isebtar igujilen',
-'lonelypagestext' => 'isebtar-agi ur myezdin ara seg isebtar wiyaḠdeg wiki-yagi.',
+'lonelypagestext' => 'Isebtar agi ur sweá¹en, ur llan deg isebtar nniá¸en n {{SITENAME}}.',
'uncategorizedpages' => 'isebtar mebla taggayt',
'uncategorizedcategories' => 'Taggayin mebla taggayt',
-'uncategorizedimages' => 'Tugna mebla taggayt',
+'uncategorizedimages' => 'Ifuyla war taggayin',
'uncategorizedtemplates' => 'Talɣiwin mebla taggayt',
'unusedcategories' => 'Taggayin ur nettwaseqdac ara',
'unusedimages' => 'Ifayluwin ur nettwaseqdac ara',
'popularpages' => 'Isebtar iɣerfanen',
'wantedcategories' => 'Taggayin mmebɣant',
'wantedpages' => 'Isebtar mmebɣan',
+'wantedpages-badtitle' => 'Azwel ur yeɣbel ara deg igmad : $1',
+'wantedfiles' => 'Ifuyla yettwasutren s waá¹as.',
+'wantedfiletext-cat' => 'Ifuyla agi tseqdacen, maca ulac iten. Ifuyla n izudar agwemmad zemren ad illin deg umuÉ£ xas llan. Akkw ufrir imkerku ad yetjerreá¸. Isebtar yesÉan ifuyla ur llan ara, ur d-tebanen ara deg [[:$1]].',
+'wantedfiletext-nocat' => 'Ifuyla agi tseqdacen, maca ulac iten. Ifuyla n izudar agwemmad zemren ad illin deg umuÉ£ xas llan. Akkw ufrir imkerku ad yetjerreá¸.',
+'wantedtemplates' => 'Talɣiwin yetsuteren',
'mostlinked' => 'Isebtar myezdin aá¹as',
'mostlinkedcategories' => 'Taggayin myezdint aá¹as',
+'mostlinkedtemplates' => 'TalÉ£iwin yetseqdacen aá¹as.',
'mostcategories' => 'Isebtar i yesÉan aá¹á¹as taggayin',
-'mostimages' => 'Tugniwin myezdin aá¹as',
+'mostimages' => 'Ifuyla i seqdacen aá¹as',
+'mostinterwikis' => 'Isebtar yesÉan aá¹as interwikis',
'mostrevisions' => 'Isebtar i yettubedlen aá¹as',
'prefixindex' => 'Akk isebtaren s yisekkilen imezwura',
+'prefixindex-namespace' => 'Akkw isebtar s adat (tallunt n isemawe $1)',
'shortpages' => 'isebtar imecá¹uḥen',
'longpages' => 'Isebtar imeqqranen',
'deadendpages' => 'isebtar mebla izdayen',
-'deadendpagestext' => 'isebtar-agi ur sÉan ara azday É£er isebtar wiyaḠdeg wiki-yagi.',
+'deadendpagestext' => 'Isebtar agi ur sÉan ara izdayen É£er isebtar nniá¸en n {{SITENAME}}.',
'protectedpages' => 'isebtar yettwaḥerzen',
+'protectedpages-indef' => 'Imestenen imeɣlalen kan',
+'protectedpages-cascade' => 'Imestenen s uceá¹cuá¹ kan',
'protectedpagestext' => 'isebtar-agi yettwaḥerzen seg ubeddel neÉ£ asemmimeá¸',
'protectedpagesempty' => 'isebtar-agi ttwaḥerzen s imsektayen -agi.',
+'protectedtitles' => 'Izwal ugdilen',
+'protectedtitlestext' => 'Izwal agi ugdilen deg usnulfu nsen',
+'protectedtitlesempty' => 'Ulac azwel yesÉan asegdel s iÉ£ewwaren agi.',
'listusers' => 'Umuɣ n yimseqdacen',
+'listusers-editsonly' => 'Sekned kan iseqdacen yesÉan asekcem naÉ£ ugar',
+'listusers-creationsort' => 'Fren s azmez n usnulfu',
+'usereditcount' => '$1 {{PLURAL:$1|abeddel|ibeddilen}}',
'usercreated' => '{{GENDER:$3|Yesnulfu-d}} ass n $1 ar $2',
'newpages' => 'isebtar imaynuten',
'newpages-username' => 'Isem n wemseqdac:',
'ancientpages' => 'isebtar iqdimen',
'move' => 'Smimeá¸',
'movethispage' => 'SmimeḠasebter-agi',
-'unusedimagestext' => 'Ssen belli ideggen n internet sÉan izdayen É£er tugna-agi s URL n qbala, É£as akken tugna-nni hatt da.',
+'unusedimagestext' => 'Ifuyla agi llan, maca ulac asebter anda llan.
+Ahat llan ismal nniá¸en yesÉan azday É£er afaylu, ihi yezmer ad yiqqim afaylu d agi dÉ£a ad yetseqdac deg ismal nni.',
'unusedcategoriestext' => 'Taggayin-agi weǧden meÉna ulac isebtar neÉ£ taggayin i sseqdacen-iten.',
'notargettitle' => 'Ulac nnican',
'notargettext' => 'Ur textareḠara asebter d nnican neɣ asebter n wemseqdac d nnican.',
+'nopagetitle' => 'Ulac asebter asaá¸as am wagi',
+'nopagetext' => 'Asebter asaá¸as agi ulac-it.',
'pager-newer-n' => '{{PLURAL:$1|amaynut|$1 imaynuten}}',
'pager-older-n' => '{{PLURAL:$1|aqbur|$1 iqburen}}',
+'suppress' => 'Mdi',
+'querypage-disabled' => 'Asebter uslig agi yensa , taɣzint : timellal is.',
# Book sources
'booksources' => 'IÉ£bula n yidlisen',
'booksources-search-legend' => 'Nadi ɣef iɣbula n yidlisen',
'booksources-go' => 'Ruḥ',
'booksources-text' => 'Deg ukessar, yella wumuÉ£ n yizdayen iberraniyen izzenzen idlisen (imaynuten akk d weqdimen), yernu ahat sÉan kter talÉ£ut É£ef idlisen i tettnadiḠfell-asen:',
+'booksources-invalid-isbn' => 'ISBN agi ur yeɣbel ara ; selken ma ulac anezri deg-es.',
# Special:Log
-'specialloguserlabel' => 'Amseqdac:',
-'speciallogtitlelabel' => 'Azwel:',
+'specialloguserlabel' => 'Ameskar :',
+'speciallogtitlelabel' => 'Asaá¸as (azwel naÉ£ aseqdac) :',
'log' => 'AÉ£mis',
-'all-logs-page' => 'Akk iɣmisen',
-'alllogstext' => 'Ssken akk iɣmisen n {{SITENAME}}.
-TzemreḠad textareḠcwiá¹ seg-sen ma tebÉ£iá¸.',
+'all-logs-page' => 'Akk iɣmisen izayezen',
+'alllogstext' => 'AbeqqeḠn akkw iɣmisen yestufan ɣef {{SITENAME}}.
+TzemreḠad sageneḠabeqqeḠs tixtiá¹it n tawsit n uÉ£mis, isem n useqdac naÉ£ asebter nni.',
'logempty' => 'Ur yufi ara deg uɣmis.',
'log-title-wildcard' => 'Nadi É£ef izwal i yebdan s uá¸ris-agi',
+'showhideselectedlogentries' => 'Beqqeá¸/ffer isekcam n uÉ£mis agi',
# Special:AllPages
'allpages' => 'Akk isebtar',
@@ -1231,6 +1878,7 @@ TzemreḠad textareḠcwiá¹ seg-sen ma tebÉ£iá¸.',
'nextpage' => 'Asebter ameá¸fir ($1)',
'prevpage' => 'Asebter ssabeq ($1)',
'allpagesfrom' => 'Ssken isebtar seg:',
+'allpagesto' => 'BeqqeḠisebtar alama :',
'allarticles' => 'Akk imagraden',
'allinnamespace' => 'Akk isebtar ($1 isem n taɣult)',
'allnotinnamespace' => 'Akk isebtar (maÄÄi deg $1 isem n taÉ£ult)',
@@ -1240,50 +1888,108 @@ TzemreḠad textareḠcwiá¹ seg-sen ma tebÉ£iá¸.',
'allpagesprefix' => 'Ssken isebtar s uzwir:',
'allpagesbadtitle' => 'Azwel n usebter maÄÄi á¹£aḥiḥ neÉ£ yesÉa azwir inter-wiki. Waqila yesÉa isekkilen ur ttuseqdacen ara deg izwal.',
'allpages-bad-ns' => '{{SITENAME}} ur yesÉi ara isem n taÉ£ult "$1".',
+'allpages-hide-redirects' => 'Ffer isemmimá¸en',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'TetwaliḠlqem n usebter agi yellan deg tazarkatut, lqem agi yezmer ad i sÉu alama d $1.',
+'cachedspecial-viewing-cached-ts' => 'TetwaliḠlqem n usebter agi yellan deg tazarkatut, ahat ur yemucceḠara.',
+'cachedspecial-refresh-now' => 'áºeá¹ aneggaru.',
# Special:Categories
'categories' => 'Taggayin',
-'categoriespagetext' => 'Llant taggayin-agi deg wiki-yagi.
-[[Special:UnusedCategories|Unused categories]] are not shown here.
-Also see [[Special:WantedCategories|wanted categories]].',
+'categoriespagetext' => '{{PLURAL:$1|Taggayt agi teseqdec|Taggayin agi teseqdecet}} sɣur isebtar naɣ ifuyla.
+[[Special:UnusedCategories|Taggayin ur sÉan ara aqeddic]]
+áºeá¹ daÉ£en [[Special:WantedCategories|taggayin yetwesuteren]].',
+'categoriesfrom' => 'Ssken taggayin seg :',
+'special-categories-sort-count' => 'Afran s amá¸an n iferdisen',
+'special-categories-sort-abc' => 'afran s ugemmay',
+
+# Special:DeletedContributions
+'deletedcontributions' => 'Isekcam yemḥan',
+'deletedcontributions-title' => 'Isekcam yemḥan',
+'sp-deletedcontributions-contribs' => 'Isekcam',
# Special:LinkSearch
+'linksearch' => 'Anadi n izdayen yeffɣen',
+'linksearch-pat' => 'Anadi n tanfalit :',
+'linksearch-ns' => 'Talluntin n isemawen :',
+'linksearch-ok' => 'Nadi',
+'linksearch-text' => 'TzemreḠad seqdeceḠisekkilen imeáºliyen am « *.wikipedia.org ».
+Ilaq-asen deg udday taɣult n uswir imineg, am amedya « *.org ».
+Ineggafen imazdayen : $1
(ur d-renu acemma deg unadi inek/inem)',
'linksearch-line' => '$1 yeqqen seg $2',
# Special:ListUsers
'listusersfrom' => 'Ssken imseqdacen seg:',
'listusers-submit' => 'Ssken',
'listusers-noresult' => 'Ur yufi ḥedd (amseqdac).',
+'listusers-blocked' => '(yekyef)',
+
+# Special:ActiveUsers
+'activeusers' => 'Umuɣ n iseqdacen urmiden',
+'activeusers-intro' => 'Wagi d umuɣ n iseqdacen yexedmen armud deg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}.',
+'activeusers-count' => '$1 {{PLURAL:$1|abeddel n ussan agi ineggura|ibeddilen n ussan agi ineggura}} deg {{PLURAL:$3|ass aneggaru|$3 ussan ineggura}}',
+'activeusers-from' => 'Ssken iseqdacen seg :',
+'activeusers-hidebots' => 'Ffer iá¹ubuten',
+'activeusers-hidesysops' => 'Ffer inedbalen',
+'activeusers-noresult' => 'Ur yufi aseqdac.',
# Special:Log/newusers
'newuserlogpage' => 'AÉ£mis n isnulfan n imiá¸anen n imseqdacen',
+'newuserlogpagetext' => 'Asebter agi yebeqqeḠamezruy n usnulfu n imiá¸anen n iseqdacen.',
# Special:ListGroupRights
+'listgrouprights' => 'Izerfan n igrawen n iseqdacen',
+'listgrouprights-group' => 'Agraw',
+'listgrouprights-rights' => 'Izerfan',
+'listgrouprights-helppage' => 'Help:Izerfan n igrawen',
'listgrouprights-members' => '(umuɣ n imseqdacen)',
+'listgrouprights-addgroup' => 'Rnu iεeggalen i {{PLURAL:$2|ugraw|igrawen}} : $1',
+'listgrouprights-removegroup' => 'Ekkes iεeggalen i {{PLURAL:$2|ugraw|igrawen}} : $1',
+'listgrouprights-addgroup-all' => 'Rnu iεeggalen i akkw igrawen',
+'listgrouprights-removegroup-all' => 'Ekkes iεeggalen i akkw igrawen',
+'listgrouprights-addgroup-self' => 'Yezmer ad yernu {{PLURAL:$2|agraw|igrawen}} ar umiá¸an-is : $1',
+'listgrouprights-removegroup-self' => 'Yezmer ad yekkes {{PLURAL:$2|agraw|igrawen}} ar umiá¸an-is : $1',
+'listgrouprights-addgroup-self-all' => 'Yezmer ad yernu akkw igrawen ar umiá¸an-is',
+'listgrouprights-removegroup-self-all' => 'Yezmer ad yekkes akkw igrawen ar umiá¸an-is',
# E-mail user
'mailnologin' => 'Ur yufi ḥedd (tansa)',
'mailnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeá¸]] u tesÉiḠtansa e-mail á¹aá¹£hiḥt deg [[Special:Preferences|isemyifiyen]] inek
iwakken ad tazneḠemail i imseqdacen wiyaá¸.',
'emailuser' => 'Azen e-mail i wemseqdac-agi',
-'emailpage' => 'Azen e-mail i wemseqdac',
-'emailpagetext' => 'Lukan amseqdac-agi yefka-d tansa n email ṣaḥiḥ
-deg imsifiyen ines, talɣa deg ukessar a t-tazen izen.
-Tansa n email i tefkiḠdeg imisifyen inek ad tban-d
-deg « Expéditeur» n izen inek iwakken amseqdac-nni yezmer a k-yerr.',
+'emailuser-title-target' => 'CeggaÉ tirawt i {{GENDER:$1|aseqdac agi|taseqdact agi}}',
+'emailuser-title-notarget' => 'CeggaÉ tirawt i useqdac',
+'emailpage' => 'CeggaÉ tirawt i useqdac',
+'emailpagetext' => 'TzemreḠad seqdeceḠtiferkit ddaw agi iwakken ad ceggÉeḠtirawt i useqdac agi.
+Tansa e-mail id ekfeḠdeg [[Special:Preferences|iÉ£ewwaren inek/inem]] ad tban deg urti "AmceggaÉ" n izen ; akka, anermas ad yezmer ak/akem yefk tiririt.',
'usermailererror' => 'Yella ugul deg uzwel n email:',
-'defemailsubject' => 'e-mail n {{SITENAME}}',
+'defemailsubject' => '{{SITENAME}} tirawt n useqdac « $1 »',
+'usermaildisabled' => 'AceggaÉ n tira gar iseqdacen yensa',
+'usermaildisabledtext' => 'Ur tzermeḠara ad ceggeÉeḠtira i iseqdacen nniá¸en É£ef wiki agi',
'noemailtitle' => 'E-mail ulac-it',
-'noemailtext' => 'Amseqdac-agi ur yefki ara e-mail ṣaḥiḥ, neɣ ur yebɣi ara e-mailiyen seg medden.',
-'emailfrom' => 'Seg',
-'emailto' => 'i',
-'emailsubject' => 'Asentel',
-'emailmessage' => 'Izen',
+'noemailtext' => 'Aseqdac-agi ur d-yefka ara tansa e-mail iɣbelen.',
+'nowikiemailtitle' => 'Ulac turagt i e-mail',
+'nowikiemailtext' => 'Aseqdac agi ur yebÉ£a ara ad yeá¹á¹ef tirawt sÉ£ur iseqdacen nniá¸en.',
+'emailnotarget' => 'Isem useqdac n unermas ur yella ara naɣ ur yeɣbel ara.',
+'emailtarget' => 'Sekcem isem useqdac n unermas',
+'emailusername' => 'Isem n useqdac',
+'emailusernamesubmit' => 'Sumer',
+'email-legend' => 'CeggaÉ tirawt i yiwen useqdac nniá¸en n {{SITENAME}}',
+'emailfrom' => 'Seg :',
+'emailto' => 'I :',
+'emailsubject' => 'Asentel :',
+'emailmessage' => 'Izen :',
'emailsend' => 'Azen',
'emailccme' => 'Azen-iyi-d e-mail n ulsaru n izen inu.',
'emailccsubject' => 'Alsaru n izen inek i $1: $2',
'emailsent' => 'E-mail yettwazen',
'emailsenttext' => 'Izen n e-mail inek yettwazen.',
+'emailuserfooter' => 'Tirawt agi tetweceggaÉ sÉ£ur « $1 » i « $2 » s tasÉ£ent "CeggaÉ tirawt i useqdac" n {{SITENAME}}.',
+
+# User Messenger
+'usermessage-summary' => 'Yeǧǧa-d izen anagraw',
+'usermessage-editor' => 'Ameskar n unagraw',
# Watchlist
'watchlist' => 'UmuÉ£ n uÉessi inu',
@@ -1293,17 +1999,20 @@ deg « Expéditeur» n izen inek iwakken amseqdac-nni yezmer a k-yerr.',
'watchlistanontext' => 'G leÉnaya-k $1 iwakken ad twalaḠneÉ£ tbeddleḠiferdas deg wumuÉ£ n uÉessi inek.',
'watchnologin' => 'Ur tekcimeḠara',
'watchnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeá¸]] iwakken ad tbeddleḠumuÉ£ n uÉessi inek.',
+'addwatch' => 'Rnu i umuÉ£ n uÉassi',
'addedwatchtext' => "Asebter \"[[:\$1]]\" yettwarnu deg [[Special:Watchlist|wumuÉ£ n uÉessi]] inek.
Ma llan ibeddlen deg usebter-nni neɣ deg usbtar umyennan ines, ad banen dagi,
Deg [[Special:RecentChanges|wumuÉ£ n yibeddlen imaynuten]] ad banen s '''yisekkilen ibberbuzen''' (akken ad teáºriá¸).
Ma tebÉ£iḠad tekkseḠasebter seg wumuÉ£ n uÉessi inek, wekki É£ef \"Fakk aÉessi\".",
-'removedwatchtext' => 'Asebter "[[:$1]]" yettwakkes seg wumuÉ£ n uÉessi inek.',
+'removewatch' => 'Ekkes seg umuÉ£ n uÉassi',
+'removedwatchtext' => '!!Asebter "[[:$1]]" yettwakkes seg [[Special:Watchlist|umuÉ£ n uÉessi]] inek.',
'watch' => 'Æass',
'watchthispage' => 'Æass asebter-agi',
'unwatch' => 'Fakk aÉassi',
'unwatchthispage' => 'Fakk aÉassi',
'notanarticle' => 'MaÄÄi d amagrad',
+'notvisiblerev' => 'Lqem tetwemḥa',
'watchnochange' => 'Ulaḥedd n yiferdas n wumuÉ£ n uÉessi inek ma yettubeddel deg tawala i textareá¸.',
'watchlist-details' => 'ttÉassaÉ£ {{PLURAL:$1|$1 usebter|$1 n isebtaren}} mebla isebtaren "amyannan".',
'wlheader-enotif' => '* Yeǧǧa Email n talɣut.',
@@ -1312,13 +2021,14 @@ Ma tebÉ£iḠad tekkseḠasebter seg wumuÉ£ n uÉessi inek, wekki É£ef \"Fakk a
'watchmethod-list' => 'yessenqed isebtar i ttÉassaÉ£ i ibeddlen imaynuten',
'watchlistcontains' => 'UmuÉ£ n uÉessi inek É£ur-s $1 n {{PLURAL:$1|usebter|isebtar}}.',
'iteminvalidname' => "Agnu akk d uferdis '$1', isem maÄÄi á¹£aḥiḥ...",
-'wlnote' => "Deg ukessar {{PLURAL:$1|yella yiwen ubeddel aneggaru|llan '''$1''' n yibeddlen ineggura}} deg {{PLURAL:$2|saÉa taneggarut|'''$2''' swayeÉ tineggura}}.",
+'wlnote' => "Ddaw agi {{PLURAL:$1|yella abeddel aneggaru|llan '''$1''' ibeddilen ineggura}} n {{PLURAL:$2|usrag aneggaru|'''$2''' isragen ineggura}}, seg $3 af $4.",
'wlshowlast' => 'Ssken $1 n swayeÉ $2 n wussan neÉ£ $3 ineggura',
'watchlist-options' => 'Tifranin n umuÉ£ n uÉessi',
# Displayed when you click the "watch" button and it is in the process of watching
'watching' => 'Ad iÉass...',
'unwatching' => 'Ad ifukk aÉessi...',
+'watcherrortext' => 'Yella anezri imi tebeddeleḠiÉ£ewwaren n umuÉ£ inek/inem n uÉassi i « $1 ».',
'enotif_mailer' => 'Email n talɣut n {{SITENAME}}',
'enotif_reset' => 'Rcem akk isebtar mmeáºren',
@@ -1329,27 +2039,35 @@ Ma tebÉ£iḠad tekkseḠasebter seg wumuÉ£ n uÉessi inek, wekki É£ef \"Fakk a
'enotif_subject' => 'Asebter $PAGETITLE n {{SITENAME}} $CHANGEDORCREATED sɣur $PAGEEDITOR',
'enotif_lastvisited' => 'áºer $1 i akk ibeddlen segwasmi tkecmeḠtikelt taneggarut.',
'enotif_lastdiff' => 'áºer $1 akken ad tmuqleḠabeddel.',
+'enotif_anon_editor' => 'aseqdac ur i siggezen ara $1',
'enotif_body' => 'Ay $WATCHINGUSERNAME,
-Asebter n {{SITENAME}} $PAGETITLE $CHANGEDORCREATED deg wass $PAGEEDITDATE sÉ£ur $PAGEEDITOR, áºer $PAGETITLE_URL i tasiwelt n tura.
+Asebter « $PAGETITLE » n {{SITENAME}} $CHANGEDORCREATED ass n $PAGEEDITDATE sÉ£ur « $PAGEEDITOR », áºeá¹ $PAGETITLE_URL iwakken ad áºá¹eḠlqem n tura.
$NEWPAGE
Abeddel n wegzul: $PAGESUMMARY $PAGEMINOREDIT
-Meslay akk d ambeddel:
-email: $PAGEEDITOR_EMAIL
+Meslay s umbeddel:
+e-mail: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-Ur yelli ara email n talÉ£ut asmi llan ibeddlen deg usebter ala lukan teáºreḠasebter-nni. TzemreḠad terreḠi zero email n talÉ£ut i akk isebraen i tettÉasseá¸.
+Ur yelli ara email n talÉ£ut asmi llan ibeddlen deg usebter ala lukan teáºreḠasebter-nni.
+TzemreḠad awennezeḠakkw isenǧaqen n talÉ£ut i akkw isebtar yellan deg umuÉ£ inek/inem n uÉassi.
- email n talɣut n {{SITENAME}}
+ Anagraw inek/inem n talɣut n {{SITENAME}}
--
-Akken ad tbeddleḠn wumuÉ£ n uÉessi inek settings, ruḥ É£er
+Iwakken ad beddeleḠiÉ£ewwaren n talÉ£ut deg tirawt, áºeá¹
+{{canonicalurl:{{#special:Preferences}}}}
+
+Iwakken ad beddeleḠiÉ£ewwaren n umuÉ£ inek/inem n uÉassi, áºeá¹
{{canonicalurl:{{#special:EditWatchlist}}}}
-Tadhelt:
+Iwakken ad mḥuḠasebter deg umuÉ£ inek/inem n uÉassi, áºeá¹
+$UNWATCHURL
+
+Tuɣalin d tadhelt :
{{canonicalurl:{{MediaWiki:Helppage}}}}',
# Delete
@@ -1359,6 +2077,8 @@ Tadhelt:
'excontentauthor' => "Ayen yella: '$1' ('[[Special:Contributions/$2|$2]]' kan i yekken deg-s)",
'exbeforeblank' => "Ayen yella uqbal ma yettumḥa: '$1'",
'exblank' => 'asebter yella d ilem',
+'delete-confirm' => 'Kkes "$1"',
+'delete-legend' => 'Ekkes',
'historywarning' => 'Æur-wet : Asebter i ara temḥuḠyesÉa amezruy s azal alemmas n $1 {{PLURAL:$1|lqem|ileqman}} :',
'actioncomplete' => 'Axdam yekfa',
'actionfailed' => 'Tigawt agi texser',
@@ -1369,14 +2089,23 @@ Tadhelt:
'deletionlog' => 'Aɣmis n umḥay',
'reverted' => 'Asuɣal i tasiwel taqdimt',
'deletecomment' => 'Ayɣer',
+'deleteotherreason' => 'TaÉ£áºint nniá¸en / taÉ£zint tamarnant :',
+'deletereasonotherlist' => 'TaÉ£áºint nniá¸en',
+'delete-edit-reasonlist' => 'Beddel tiÉ£áºinin n umḥu n usebter',
# Rollback
+'rollback' => 'Semmet ibeddilen',
+'rollback_short' => 'Semmet',
'rollbacklink' => 'semmet',
+'rollbacklinkcount' => 'semmet $1 {{PLURAL:$1|abeddel|ibeddilen}}',
+'rollbacklinkcount-morethan' => 'semmet ugar n $1 {{PLURAL:$1|abeddel|ibeddilen}}',
+'rollbackfailed' => 'Asemmet yexseá¹',
'cantrollback' => 'Ur yezmir ara ad yessuɣal; yella yiwen kan amseqdac iwumi ibeddel/yexleq asebter-agi.',
'editcomment' => "Agzul n ubeddel yella: \"''\$1''\".",
'revertpage' => 'Yessuɣal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel ɣer tasiwelt taneggarut n [[User:$1|$1]]',
# Edit tokens
+'sessionfailure-title' => 'Anezri n tɣimit',
'sessionfailure' => 'Yella ugul akk d takmect inek;
Axdam-agi yebá¹el axaá¹er waqila yella wemdan nniá¸en i yeddem isem n wemseqdac inek.
G leÉnayek wekki É£ef taqeffalt "Back/Précédent" n browser/explorateur inek, umbeÉd wekki É£ef "Actualiser/reload" akk ad tÉerá¸eḠtikelt nniá¸en.',
@@ -1384,33 +2113,73 @@ G leÉnayek wekki É£ef taqeffalt "Back/Précédent" n browser/explorateur inek,
# Protect
'protectlogpage' => 'Aɣmis n wemḥay',
'protectedarticle' => '"[[$1]]" yettwaḥrez',
-'protect-title' => 'Ad yeḥrez "$1"',
+'modifiedarticleprotection' => 'yebeddel aswir n usegdel n « [[$1]] »',
+'unprotectedarticle' => 'yekkes asegdel n « [[$1]] »',
+'movedarticleprotection' => 'yesiweḠiɣewwaren n usegdel seg « [[$2]] » ɣer « [[$1]] »',
+'protect-title' => 'Beddel aswir n usegdel i "$1"',
+'protect-title-notallowed' => 'áºeá¹ aswir n usegdel n « $1 »',
'prot_1movedto2' => '[[$1]] yettusmimeḠar [[$2]]',
+'protect-badnamespace-title' => 'Tallunt n isemawen ur nezmer ara an segdel',
+'protect-badnamespace-text' => 'Isebtar deg tallunt agi n isemawen ur zemren ara ad sÉun asegdel.',
'protect-legend' => 'Sentem tiḥḥerzi',
+'protectcomment' => 'TaÉ£áºint :',
+'protectexpiry' => 'Azmez n tasewti :',
+'protect_expiry_invalid' => 'Azmez n tasewti ur yeɣbel ara.',
+'protect_expiry_old' => 'Azmez n tasewti i Éedda.',
+'protect-unchain-permissions' => 'Kkes aseá¸ru i aá¹as n tixtiá¹iyin n usegdel',
'protect-default' => '(ameslugen)',
+'protect-fallback' => 'Yeḥweǧ atrug « $1 »',
'protect-level-sysop' => 'Inedbalen kan',
'protect-summary-cascade' => 'acercur',
'protect-expiring' => 'yemmut deg $1 (UTC)',
+'protect-expiring-local' => 'ad i neffeá¹ ass n $1',
+'protect-expiry-indefinite' => 'ifeá¸',
+'protect-othertime' => 'Azmez nniá¸en n tasewti :',
+'protect-othertime-op' => 'azmez nniá¸en n tasewti',
+'protect-existing-expiry' => 'Yella azmez n tasewti : $2 af $3',
+'protect-otherreason' => 'TaÉ£áºint nniá¸en / taÉ£zint tamarnant :',
+'protect-otherreason-op' => 'TaÉ£áºint nniá¸en',
+'protect-edit-reasonlist' => 'Beddel tiÉ£áºinin n usegdel',
+'protect-expiry-options' => '1 asrag:1 hour,1 ass:1 day,1 imalas:1 week,2 imalasen:2 weeks,1 aggur:1 month,3 agguren:3 months,6 agguren:6 months,1 assegwas:1 year,adfi:infinite',
'restriction-type' => 'Turagt',
+'restriction-level' => 'Aswir n ukrif :',
'minimum-size' => 'Tiddi minimum',
+'maximum-size' => 'Tiddi tafellayt',
+'pagesize' => '(atamá¸an)',
# Restrictions (nouns)
'restriction-edit' => 'Beddel',
'restriction-move' => 'Smimeá¸',
+'restriction-create' => 'Snulfu',
+'restriction-upload' => 'Taktert n ifuyla',
+
+# Restriction levels
+'restriction-level-sysop' => 'asegdel ummid',
+'restriction-level-autoconfirmed' => 'adu-asegdel',
+'restriction-level-all' => 'akkw aswir',
# Undelete
+'undelete' => 'áºer isebtar yettumḥan',
+'undeletepage' => 'áºeá¹ dÉ£a erred isebtar yetwekkesen',
+'undeletepagetitle' => "'''UmuÉ£ agi yesÉa ileqman yetwekkesen n [[:$1|$1]]'''.",
'viewdeletedpage' => 'áºer isebtar yettumḥan',
+'undelete-fieldset-title' => 'Erred ileqman',
+'undeleterevisions' => '$1 {{PLURAL:$1|lqem i É£beá¹en|ileqman i É£beá¹en}}',
'undeletelink' => 'áºeá¹/uÉ£aled',
'undeleteviewlink' => 'áºeá¹',
+'undeleteinvert' => 'Snegdam ayen textareá¸',
'undeletecomment' => 'TaÉ£áºint :',
'undelete-header' => 'áºer [[Special:Log/delete|aÉ£mis n umḥay]] i isebtar ttumḥan tura.',
+'undelete-search-title' => 'Nadi ɣef isebtar yettumḥan',
'undelete-search-box' => 'Nadi ɣef isebtar yettumḥan',
'undelete-search-prefix' => 'Ssken isebtar i yebdan s:',
'undelete-search-submit' => 'Nadi',
'undelete-no-results' => 'Ur yufi ara ulaḥedd n wawalen i tnadiḠɣef isebtar deg iɣbaren.',
+'undelete-show-file-confirm' => 'TebÉ£riḠad áºá¹eḠlqem yemḥan n ufaylu «
-ت٠خÙÛ Ø§ÙاسÙ
{{SITENAME}} استعÙ
Ø§Ù Ø¬Ø§Ø±Û ÙاکھÛک٠بÙØ³Ø Ûا دÙØ¨Ø§Ø±Û Ú¾ÛÛ ÙاÙ
Ù Ûا Ù
ختÙÙ ÙاÙ
ا٠سÙرا Ø¯Ø§Ø®Ù Ø¯Û Ø¨Ûک٠بÙØ³Û Ú¾ÛÛ Ûاد Ø¢ÙØ±Û Ú©ÙØ±Û Ú©Û Ø§Û Ú©Ù
ا صÙØات ھش [[Special:UserLogin|دÙØ¨Ø§Ø±Û Ùاگ٠بÙس]] غÛÚÚ¾Û Ú¯ÙÙÛ Ú©Û ØªÙ Ú¾ÙÛØ³Û Ø®Ø§Ø±Ø¬ Ù٠بÛØªÛ Ø¢Ø³ÙØ³Ø Ú©ÙÛ Ù¾Øª Ú©Û ØªÙ ØªØ§Ù ØªÙصØÛ (براؤزرÙ) ابط٠(cache) صا٠ÙÙÚ©ÙرÙسÛ\",",
+ت٠خÙÛ Ø§ÙاسÙ
{{SITENAME}} استعÙ
Ø§Ù Ø¬Ø§Ø±Û ÙاکھÛک٠بÙØ³Ø Ûا دÙØ¨Ø§Ø±Û Ú¾ÛÛ ÙاÙ
Ù Ûا Ù
ختÙÙ ÙاÙ
ا٠سÙرا Ø¯Ø§Ø®Ù Ø¯Û Ø¨Ûک٠بÙØ³Û Ú¾ÛÛ Ûاد Ø¢ÙØ±Û Ú©ÙØ±Û Ú©Û Ø§Û Ú©Ù
ا صÙØات ھش [\$1 دÙØ¨Ø§Ø±Û Ùاگ٠بÙس] غÛÚÚ¾Û Ú¯ÙÙÛ Ú©Û ØªÙ Ú¾ÙÛØ³Û Ø®Ø§Ø±Ø¬ Ù٠بÛØªÛ Ø¢Ø³ÙØ³Ø Ú©ÙÛ Ù¾Øª Ú©Û ØªÙ ØªØ§Ù ØªÙصØÛ (براؤزرÙ) ابط٠(cache) صا٠ÙÙÚ©ÙرÙسÛ\",",
'welcomecreation' => '== رØÙ
ت عزÛز ÚتراÙÛ ØªØªÛ Ø®Ùشا٠گÛÛ Ø±ÛراÙØ $1 ! ==
ØªÛ Ú©Ú¾Ø§ØªÛ Ø³Ø§ÙزÛÙ٠بÛØªÛ Ø´Ûر ت٠تا٠[[Special:Preferences|{{SITENAME}} ترجÛØات]]Ù Ù
رتب Ú©ÙرÛÚ©Ù Ù
٠رÙØ®Ú
Û.',
diff --git a/languages/messages/MessagesKiu.php b/languages/messages/MessagesKiu.php
index 882839262c..08bf1de3d5 100644
--- a/languages/messages/MessagesKiu.php
+++ b/languages/messages/MessagesKiu.php
@@ -447,7 +447,7 @@ Sebebê ho ''$2'' dero.",
# Login and logout pages
'logouttext' => "'''Sıma nıka cı ra veciyê.'''
-Sıma Åikinê dızdêni {{SITENAME}} de dewam kerê, ya jê eyni karberi ya ki jê jüyê de bini [[Special:UserLogin|oncia cıkuyê]].
+Sıma Åikinê dızdêni {{SITENAME}} de dewam kerê, ya jê eyni karberi ya ki jê jüyê de bini [$1 oncia cıkuyê].
Beno ke taê peli sıma hona cıkote asnenê, hata ke sıma ''browser cache''ê ho kerd pak.",
'welcomecreation' => '== Xêr amê, $1! ==
Hesabê sıma vıraciya.
diff --git a/languages/messages/MessagesKk_arab.php b/languages/messages/MessagesKk_arab.php
index 3bd73b181f..8e1f306923 100644
--- a/languages/messages/MessagesKk_arab.php
+++ b/languages/messages/MessagesKk_arab.php
@@ -520,7 +520,6 @@ $messages = array(
'qbbrowse' => 'Ø´ÙÙÛ',
'qbedit' => 'ÙÚدÛÛ',
'qbpageoptions' => 'بÛ٠بÛت',
-'qbpageinfo' => 'اÙÙاÙا',
'qbmyoptions' => 'بÛتتÛرÙÙ
',
'qbspecialpages' => 'ارÙاÙ٠بÛتتÛر',
'faq' => 'ٴجÙÙÙ ÙÙÙÙÙعا٠ساÛاÙدار',
diff --git a/languages/messages/MessagesKk_cyrl.php b/languages/messages/MessagesKk_cyrl.php
index e5af11511a..2d4042f4c4 100644
--- a/languages/messages/MessagesKk_cyrl.php
+++ b/languages/messages/MessagesKk_cyrl.php
@@ -503,7 +503,6 @@ $messages = array(
'qbbrowse' => 'ШолÑ',
'qbedit' => 'ӨңдеÑ',
'qbpageoptions' => 'Ðұл беÑ',
-'qbpageinfo' => 'Ðйнала',
'qbmyoptions' => 'ÐеÑÑеÑÑм',
'qbspecialpages' => 'ÐÑÐ½Ð°Ð¹Ñ Ð±ÐµÑÑеÑ',
'faq' => 'ÐÐ¸Ñ ÒойÑлÒан ÑаÑалдаÑ',
@@ -756,7 +755,7 @@ $2',
# Login and logout pages
'logouttext' => "'''Ðүйеден ÑÑÒÑÑÒ£Ñз.'''
-Ðүйеге кÑÑмеÑÑен де {{SITENAME}} жобаÑÑн пайдалана алаÑÑз, немеÑе баÑÒÑ Ð½Ðµ өзге ÒаÑÑÑÑÑÑ ÑеÑÑнде жүйеге [[Special:UserLogin|ÒайÑа кÑÑÑÑÒ£Ñзге]] боладÑ.
+Ðүйеге кÑÑмеÑÑен де {{SITENAME}} жобаÑÑн пайдалана алаÑÑз, немеÑе баÑÒÑ Ð½Ðµ өзге ÒаÑÑÑÑÑÑ ÑеÑÑнде жүйеге [$1 ÒайÑа кÑÑÑÑÒ£Ñзге] боладÑ.
ÐÒ£ÒаÑÑпа: ÐейбÑÑ Ð±ÐµÑÑÐµÑ ÑолÒÑÑÑÒ£ÑздÑÒ£ кÑÑÑн ÑазаÑÑÒанÑа ÓÐ»Ñ Ð´Ðµ жүйеге кÑÑÑп оÑÑÑÒанÑÒ£Ñздай көÑÑнÑÑ Ð¼Ò¯Ð¼ÐºÑн.",
'welcomecreation' => '== ÒÐ¾Ñ ÐºÐµÐ»Ð´ÑÒ£Ñз, $1! ==
Ðаңа ÑÑÑкелгÑÒ£Ñз жаÑалдÑ.
diff --git a/languages/messages/MessagesKk_latn.php b/languages/messages/MessagesKk_latn.php
index 9c26f06319..9c491d9877 100644
--- a/languages/messages/MessagesKk_latn.php
+++ b/languages/messages/MessagesKk_latn.php
@@ -483,7 +483,6 @@ $messages = array(
'qbbrowse' => 'Åolw',
'qbedit' => 'Ãñdew',
'qbpageoptions' => 'Bul bet',
-'qbpageinfo' => 'Aýnala',
'qbmyoptions' => 'Betterim',
'qbspecialpages' => 'Arnaýı better',
'faq' => 'Jïi qoýılÄan sawaldar',
diff --git a/languages/messages/MessagesKm.php b/languages/messages/MessagesKm.php
index f6d1c60c81..77898c1f38 100644
--- a/languages/messages/MessagesKm.php
+++ b/languages/messages/MessagesKm.php
@@ -406,7 +406,6 @@ $messages = array(
'qbbrowse' => 'áá¶ááá',
'qbedit' => 'áááááá',
'qbpageoptions' => 'áááááááá',
-'qbpageinfo' => 'áááááá¶áááááá',
'qbmyoptions' => 'ááááááááááááá»á',
'qbspecialpages' => 'ááááááá·áááá',
'faq' => 'áááá½áááááá½ááá¹ááá¶áá',
@@ -419,7 +418,7 @@ $messages = array(
'vector-action-protect' => 'áá¶ááá¶á',
'vector-action-undelete' => 'ááááá»áá
áá',
'vector-action-unprotect' => 'áááá¼ááá¶ááá¶ááá¶á',
-'vector-simplesearch-preference' => 'áááá¾á¢áá»áá¶ááááá¶áááá
ááááááááá (áááá¶ááááááááááá·á
áááááá»ááááá)',
+'vector-simplesearch-preference' => 'áááá¾ááá¶áááááááááá¶áááá (áááá¶ááááááááááá·á
áááááá»ááááá)',
'vector-view-create' => 'ááááá¾áâ',
'vector-view-edit' => 'ááááááâ',
'vector-view-history' => 'áá¾áâáááááááá·â',
@@ -633,7 +632,8 @@ $1',
'protectedpagetext' => 'áááááááááá¶ááááá¼áá
á¶áááááá·áá±ááááááááâá',
'viewsourcetext' => 'á¢áááá¢á¶á
áá¾ááá·áá
áááááá¼áááááááááááááá',
'viewyourtext' => "á¢áááá¢á¶á
áá¾ááá·áá
áááááá¼ááááá'''áá¶áááááááááááá¢ááá'''áá
áá¶ááááááááááá",
-'protectedinterface' => 'áááááááá ááááááá¼á á¢áááááá¢áááááá»á ááááá¶áááááááááá, áá·á áá¶ááááá¼áá
á¶áááá áá¾áááá¸á
áááá¶á áá¶ááááá¶á á',
+'protectedinterface' => 'ááááááááááááááá¼áá¢áááááá¢áááááá»áááááá¶áááá¼á ááááááá
áááá»ááá·áá¸ááá áá·ááááá¼ááá¶áá
á¶áááááá¾áááá¸á
áááá¶ááá¶ááááá¶áá
+áá¾áááá¸ááááááá¬áááá¶áááááá¼ááá¶ááááááááááá¶áááá·áá¸áá¶ááá¢áá áá¼ááááá¾áááá¶áá [//translatewiki.net/ translatewiki.net] ááááá¶áááááááááááááááMediaWikiá',
'editinginterface' => "'''ááááááááá''' á¢ááááááá»ááááááááááááááááááá¶ááááá¾áááá¶ááâáá¾áááá¸ááááááá¼áá¢áááááá»áááááá¶ááááááááááâá áááá¶áááááá¼áá
ááááááááááááâáá¹áááááá¶ááááááááááá¢áááááá»áááá¢ááááááá¾áááá¶ááâáá¶á
ááá¾á ááááááá¾áááá¶áááá·ááá¶ááááá ááááá¶áááá¶ááááááá áá¼ááá·á
á¶ááá¶áááá¾áááá¶áá [//translatewiki.net/wiki/Main_Page?setlang=km translatewiki.net] (áááá¶áá·áá¸) ááááááâá¢áááááá¶áá¼ááá¸áááááâáááááá¶áá·áḠá",
'sqlhidden' => '(áá¶áá¢ááááá SQL áááá¼ááá·ááá¶áá)',
'cascadeprotected' => 'áááááááááááá¼ááá¶ááá¶ááá¶ááá¸áá¶ááá¶áááááááááá¶ááá¶áá¶á{{PLURAL:$1|ááááá, ááááá¶á}} ááááááá¼ááá¶ááá¶ááá¶ááá¶áá½ááááá¾á"áá¶ááááá¶áá"á
@@ -657,7 +657,7 @@ $2',
# Login and logout pages
'logouttext' => "'''á¥á¡á¼áááááááá¢ááááá¶áááááááááá
áááá¸áááá¸áááááááá¢áááá á¾áá'''
-á¢áááá¢á¶á
áááááááá¾áááá¶áá{{SITENAME}}áááá»ááá¶áá¢áá¶áá·á ᬠ[[Special:UserLogin|ááááááááá
á¼áááááááá]]áááá»ááá¶ááá¶á¢ááááááá¾áááá¶ááááááá¬ááááááááá
+á¢áááá¢á¶á
áááááááá¾áááá¶áá{{SITENAME}}áááá»ááá¶áá¢áá¶áá·á ᬠ[$1 ááááááááá
á¼áááááááá]áááá»ááá¶ááá¶á¢ááááááá¾áááá¶ááááááá¬ááááááááá
áá¼áááááááá¶áááá¶ááááááá½áá
ááá½ááááá áááá¶áá
áááááá á¶ááá¼á
ááááááá¢áááááááááááá
á¼ááááá»ááááá¸áááááááá¢áááááááá ááááá·ááá¾áá¶ááááá¸ááááá¾áá¡á¾á áá¼áááá¢á¶á ááá·áááá¶áááááááááá·áá¸áá»ááááááááááá¢áááá",
'welcomecreation' => '== áá¼ááááá¶áááá $1! ==
@@ -952,7 +952,7 @@ $2
á¢áááá¢á¶á
[[Special:Search/{{PAGENAME}}|áááááááâá
ááááá¾áâáááááááááá]]áááá»ááááááááááááââ ᬠ[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} áááááâááâáááááâá ááá»âáááâáá¶ááááááá] ᬠ[{{fullurl:{{FULLPAGENAME}}|action=edit}} ááááááâáááááááá]á',
'noarticletext-nopermission' => 'áá
áá
á»áááááá áááá¶áá¢ááááááá¶áá½ááááá»áááááááááááá
-á¢áááá¢á¶á
[[Special:Search/{{PAGENAME}}|áááááááâá
ááááá¾áâáááááááááá]] áááá»ááááááâáááááá á¬[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} áááááâááâáááááâá ááá»âáááâáá¶ááááááá]á',
+á¢áááá¢á¶á
[[Special:Search/{{PAGENAME}}|áááááááâá
ááááá¾áâáááááááááá]] áááá»ááááááâáááááá á¬[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} áááááâááâáááááâá ááá»âáááâáá¶ááááááá]á ááá»ááááá¢ááááááá¶ááá·áááá·áááá»ááá¶áááááá¾áááááááááááá',
'userpage-userdoesnotexist' => 'áááá¸á¢ááááááá¾ááááá"image/jpeg
.",
'statistics' => 'Statistik',
'statistics-header-pages' => 'Säitestatistiken',
'statistics-header-edits' => 'Statistik vun den Ãnnerungen',
-'statistics-header-views' => "Sttistiken iwwert d'Visiten",
+'statistics-header-views' => "Statistiken iwwert d'Visiten",
'statistics-header-users' => 'Benotzerstatistik',
'statistics-header-hooks' => 'Aner Statistiken',
'statistics-articles' => 'Säite mat Inhalt',
@@ -2356,7 +2367,8 @@ An esou Fäll däerf déi neiste Versioun net markéiert ginn oder déi neiste g
'undeletedrevisions' => '$1 {{PLURAL:$1|Versioun gouf|$1 Versioune goufe}} restauréiert',
'undeletedrevisions-files' => '{{PLURAL:$1|1 Versioun|$1 Versiounen}} a(n) {{PLURAL:$2|1 Fichier|$2 Fichiere}} goufe restauréiert',
'undeletedfiles' => '$1 {{PLURAL:$1|Fichier gouf|Fichiere goufe}} restauréiert',
-'cannotundelete' => "D'Restauratioun huet net fonktionéiert. Een anere Benotzer huet déi Säit warscheinlech scho virun iech restauréiert.",
+'cannotundelete' => "D'Restauratioun huet net fonctionnéiert:
+$1",
'undeletedpage' => "'''$1''' gouf restauréiert.
Am [[Special:Log/delete|Läsch-Logbuch]] fannt Dir déi geläscht a restauréiert Säiten.",
@@ -2768,6 +2780,8 @@ Späichert en op Ãrem Computer of a luet en hei nees erop.',
'import-error-special' => 'D\'Säit "$1" gouf net importéiert well se zu engem speziellen Nummraum gehéiert an deem et keng Säite gëtt.',
'import-error-invalid' => 'D\'Säit "$1" gouf net importéiert well hiren Numm net valabel ass.',
'import-options-wrong' => 'Falsch {{PLURAL:$2|Optioun|Optiounen}}:
Akawunti yo ekoledwa.
diff --git a/languages/messages/MessagesLi.php b/languages/messages/MessagesLi.php
index 84fed12848..f0c22827c7 100644
--- a/languages/messages/MessagesLi.php
+++ b/languages/messages/MessagesLi.php
@@ -301,7 +301,6 @@ $messages = array(
'qbbrowse' => 'Bladere',
'qbedit' => 'Bewirke',
'qbpageoptions' => 'Pagina-opties',
-'qbpageinfo' => 'Pagina-informatie',
'qbmyoptions' => 'mien opties',
'qbspecialpages' => "Speciaal pagina's",
'faq' => 'FAQ (väölgesjtèlde vraoge)',
@@ -558,7 +557,7 @@ d\'n Opgegaeve raej vanne sloetendje admin waar "\'\'$3\'\'".',
# Login and logout pages
'logouttext' => "'''De bis noe aafgemeld.'''
-De kèns {{SITENAME}} noe anoniem (mit vermeljing van IP-adres) gebroeke, of [[Special:UserLogin|opnuuj aanmelde]] ónger dezelfde of 'ne angere naam.
+De kèns {{SITENAME}} noe anoniem (mit vermeljing van IP-adres) gebroeke, of [$1 opnuuj aanmelde] ónger dezelfde of 'ne angere naam.
Mäögelik waert nog 'n deil pagina's getuind esofs te nog aangemeld bis pès te de cache van diene browser laeg maaks.",
'welcomecreation' => '== Wèlkóm, $1! ==
Diene gebroeker is noe vaerdig.
diff --git a/languages/messages/MessagesLij.php b/languages/messages/MessagesLij.php
index 04cfd83f62..b8160589a1 100644
--- a/languages/messages/MessagesLij.php
+++ b/languages/messages/MessagesLij.php
@@ -232,7 +232,6 @@ $messages = array(
'qbfind' => 'Attrêuva',
'qbedit' => 'Cangia',
'qbpageoptions' => "Opsioîn de 'sta paggina",
-'qbpageinfo' => 'Informassion inscia paggina',
'qbmyoptions' => 'E mæ paggine',
'qbspecialpages' => 'Pagine speçiä',
'faq' => 'Domande frequenti',
diff --git a/languages/messages/MessagesLmo.php b/languages/messages/MessagesLmo.php
index 7406469b9e..adaa3c1805 100644
--- a/languages/messages/MessagesLmo.php
+++ b/languages/messages/MessagesLmo.php
@@ -420,7 +420,7 @@ Per piasè, fa raport a 'n'[[Special:ListUsers/sysop|aministradur]], cun la nota
# Login and logout pages
'logouttext' => "'''Adess a sii descuness.'''
-A pudé andà inanz a druvà la {{SITENAME}} in manera anònima, o a pudé [[Special:UserLogin|cunètev anmò]] cun l'istess suranomm o cun un suranomm diferent.
+A pudé andà inanz a druvà la {{SITENAME}} in manera anònima, o a pudé [$1 cunètev anmò] cun l'istess suranomm o cun un suranomm diferent.
Tegné cünt che certi paginn pödass che i seguiten a vedess tant 'me se a füdìssuv anmò cuness, fin quand che hii nò vudaa 'l ''cache'' del voster browser.",
'welcomecreation' => "== Benvegnüü, $1! ==
'L to cünt l'è staa pruntaa. Desmenteghet mÃa de mudifegà i to [[Special:Preferences|preferenz de {{SITENAME}}]].",
diff --git a/languages/messages/MessagesLt.php b/languages/messages/MessagesLt.php
index b5eda82d68..43343170a1 100644
--- a/languages/messages/MessagesLt.php
+++ b/languages/messages/MessagesLt.php
@@ -326,7 +326,6 @@ $messages = array(
'qbbrowse' => 'Naršymas',
'qbedit' => 'Taisyti',
'qbpageoptions' => 'Å is puslapis',
-'qbpageinfo' => 'Kontekstas',
'qbmyoptions' => 'Mano puslapiai',
'qbspecialpages' => 'Specialieji puslapiai',
'faq' => 'DUK',
@@ -588,7 +587,7 @@ JÄ
užrakinÄs administratorius pateikÄ Å¡Ä¯ paaiÅ¡kinimÄ
: "$3".',
# Login and logout pages
'logouttext' => "'''Dabar jÅ«s esate atsijungÄs.'''
-Galite toliau naudoti {{SITENAME}} anonimiÅ¡kai arba [[Special:UserLogin|prisijunkite]] iÅ¡ naujo tuo paÄiu ar kitu naudotoju.
+Galite toliau naudoti {{SITENAME}} anonimiÅ¡kai arba [$1 prisijunkite] iÅ¡ naujo tuo paÄiu ar kitu naudotoju.
Pastaba: kai kuriuose puslapiuose ir toliau gali rodyti, kad esate prisijungÄs iki tol, kol iÅ¡valysite savo narÅ¡yklÄs podÄlį.",
'welcomecreation' => '== Sveiki, $1! ==
diff --git a/languages/messages/MessagesLus.php b/languages/messages/MessagesLus.php
index d2af51acf7..c431b99afc 100644
--- a/languages/messages/MessagesLus.php
+++ b/languages/messages/MessagesLus.php
@@ -156,7 +156,6 @@ $messages = array(
'qbbrowse' => 'Fangvêl rawh',
'qbedit' => 'Siamţhatna',
'qbpageoptions' => 'He phêk hi',
-'qbpageinfo' => 'Thukhawchang',
'qbmyoptions' => 'Ka phêkte',
'qbspecialpages' => 'Phêk vohbîkte',
'faq' => 'Zawhzin',
@@ -394,7 +393,7 @@ $2',
# Login and logout pages
'logouttext' => "'''I chhuak fel ta.'''
-Inziaklût kher lovin {{SITENAME}} hi i hmang chhunzawm thei ang, a nih loh vëk pawhin hmangtu hming pangngai emaw, a hming dang emawin [[Special:UserLogin|lût leh]] thei ang.
+Inziaklût kher lovin {{SITENAME}} hi i hmang chhunzawm thei ang, a nih loh vëk pawhin hmangtu hming pangngai emaw, a hming dang emawin [$1 lût leh] thei ang.
I fangtu cache i thenfai hma chu phêk ţhenkhat intar lang a awm reng mai thei, i la chhuak lo emaw tih mai tùrin.",
'welcomecreation' => '==Kan lo lawm a che, $1!==
I siangchan siam a ni ta.
@@ -1151,7 +1150,7 @@ Hmangtu azira i thliarhran erawh chuan a hmangtuina a hlankai hnuhnüng ber taks
Ahnuaih hian {{PLURAL:$1|zawmtu hmasa ber|zawmtu hmasa $1-te}} kan rawn tlar chhuak e.
Zawmtu zawng zawng [[Special:WhatLinksHere/$2|tlarchhuahna hetah hian a awm]] e.',
'nolinkstoimage' => 'He taksa zawmtu/hmanna phêk pakhat mah a awm lo.',
-'morelinkstoimage' => 'Hemi taksa zawmpui dang [[Special:WhatLinksHere/$1|enna}}.',
+'morelinkstoimage' => 'Hemi taksa zawmpui dang [[Special:WhatLinksHere/$1|enna]].',
'linkstoimage-redirect' => '$1 (taksa hruailuhna) $2',
'duplicatesoffile' => 'A hnuaia taksa{{PLURAL:$1||te}} khu hë taksa nihpui{{PLURAL:$1||te}} a{{PLURAL:$1||n}} ni ([[Special:FileDuplicateSearch/$2|chanchin kimchang]]):',
'sharedupload' => 'Hë taksa hi $1-a mi a ni a, hna-hmachhawp dangin a hmang vè mai thei.',
diff --git a/languages/messages/MessagesLv.php b/languages/messages/MessagesLv.php
index 8ac36d02c2..f8e3bc9b74 100644
--- a/languages/messages/MessagesLv.php
+++ b/languages/messages/MessagesLv.php
@@ -193,7 +193,6 @@ $messages = array(
'qbbrowse' => 'NavigÄcija',
'qbedit' => 'Izmainīšana',
'qbpageoptions' => 'Å Ä« lapa',
-'qbpageinfo' => 'Konteksts',
'qbmyoptions' => 'Manas lapas',
'qbspecialpages' => 'ĪpaÅ¡Äs lapas',
'faq' => 'BUJ',
@@ -429,7 +428,7 @@ NorÄdÄ«tais iemesls bija ''$2''.",
# Login and logout pages
'logouttext' => "'''Tu esi izgÄjis no {{grammar:Ä£enitÄ«vs|{{SITENAME}}}}.'''
-Vari turpinÄt to izmantot anonÄ«mi, vari [[Special:UserLogin|atgriezties]] kÄ cits lietotÄjs vai varbÅ«t tas pats.
+Vari turpinÄt to izmantot anonÄ«mi, vari [$1 atgriezties] kÄ cits lietotÄjs vai varbÅ«t tas pats.
Å
em vÄrÄ, ka arÄ« pÄc izieÅ¡anas, dažas lapas var tikt parÄdÄ«tas tÄ, it kÄ tu vÄl bÅ«tu iekÅ¡Ä, lÄ«dz tiks iztÄ«rÄ«ta pÄrlÅ«ka keÅ¡atmiÅa.",
'welcomecreation' => '== Laipni lūdzam, $1! ==
diff --git a/languages/messages/MessagesLzh.php b/languages/messages/MessagesLzh.php
index 907e269633..43ef68723a 100644
--- a/languages/messages/MessagesLzh.php
+++ b/languages/messages/MessagesLzh.php
@@ -291,7 +291,6 @@ $messages = array(
'qbbrowse' => '覽',
'qbedit' => 'çº',
'qbpageoptions' => 'æ¤é ',
-'qbpageinfo' => 'å
§æ',
'qbmyoptions' => 'å¾å¥½',
'qbspecialpages' => 'éå¡',
'faq' => 'é »çå',
@@ -521,7 +520,7 @@ $2',
# Login and logout pages
'logouttext' => "'''åå»ç°¿ç£'''
-åå¯å¿åé覽{{SITENAME}}ï¼æ[[Special:UserLogin|復ç»]]åç°¿ãç°ç°¿ã
+åå¯å¿åé覽{{SITENAME}}ï¼æ[$1 復ç»]åç°¿ãç°ç°¿ã
æªæ¸
è¬æ¬ï¼è¦½å¨æèï¼ä¸æ
ä¹ã",
'welcomecreation' => '== $1大é§å
è¨! ==
åç°¿å¢ç£ï¼æ¬æ´[[Special:Preferences|簿註]]ã',
diff --git a/languages/messages/MessagesMai.php b/languages/messages/MessagesMai.php
index 7c760c9eab..98788e66c8 100644
--- a/languages/messages/MessagesMai.php
+++ b/languages/messages/MessagesMai.php
@@ -170,7 +170,6 @@ $messages = array(
'qbbrowse' => 'à¤à¤µà¥à¤·à¤£ à¤à¤°à¥',
'qbedit' => 'समà¥à¤ªà¤¾à¤¦à¤¨ à¤à¤°à¥',
'qbpageoptions' => 'ठपनà¥à¤¨à¤¾',
-'qbpageinfo' => 'विषय',
'qbmyoptions' => 'हमर पनà¥à¤¨à¤¾ सà¤',
'qbspecialpages' => 'विशà¥à¤· पनà¥à¤¨à¤¾ सà¤',
'faq' => 'तà¥à¤µà¤°à¤¿à¤¤ पà¥à¤°à¤¶à¥à¤¨à¥à¤¤à¥à¤¤à¤°à¥',
@@ -422,7 +421,7 @@ $2',
# Login and logout pages
'logouttext' => "'''à¤
हाठनिषà¥à¤à¥à¤°à¤®à¤£ à¤à¤½ à¤à¥à¤² à¤à¥à¥¤'''
-à¤
हाठ{{à¤
नà¥à¤¤à¤°à¥à¤à¤¾à¤²}} पà¥à¤°à¤¯à¥à¤ à¤
नाम à¤à¤½ à¤à¤½ सà¤à¥ à¤à¥, वा à¤
हाठ[[Special:UserLogin|log in again]] वà¤à¤¹ à¤à¤à¤¿ à¤à¥à¤¨à¥ à¤à¤¨ पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾à¤ रà¥à¤ªà¤®à¥ सà¥à¤¹à¥ पà¥à¤°à¤¯à¥à¤ à¤à¤½ सà¤à¥ à¤à¥à¥¤
+à¤
हाठ{{à¤
नà¥à¤¤à¤°à¥à¤à¤¾à¤²}} पà¥à¤°à¤¯à¥à¤ à¤
नाम à¤à¤½ à¤à¤½ सà¤à¥ à¤à¥, वा à¤
हाठ[$1 log in again] वà¤à¤¹ à¤à¤à¤¿ à¤à¥à¤¨à¥ à¤à¤¨ पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾à¤ रà¥à¤ªà¤®à¥ सà¥à¤¹à¥ पà¥à¤°à¤¯à¥à¤ à¤à¤½ सà¤à¥ à¤à¥à¥¤
ठमà¥à¤¨ राà¤à¥ à¤à¥ à¤à¤¿à¤à¥ पनà¥à¤¨à¤¾ à¤à¤¨à¤¾ दà¥à¤à¤¾ पड़ि सà¤à¥à¤ à¤à¥à¤¨à¤¾ à¤
हाठà¤
à¤à¤¨à¥ समà¥à¤ªà¥à¤°à¤µà¥à¤¶à¤¿à¤¤ हà¥à¤, à¤à¤¾à¤µà¤¤ à¤
हाठà¤
पन à¤à¤µà¥à¤·à¤à¤ à¤à¤ªà¤¸à¥à¤®à¥à¤¤à¤¿ मà¥à¤à¤¾ नॠदॠà¤à¥à¥¤",
'welcomecreation' => '== सà¥à¤µà¤¾à¤à¤¤ à¤
à¤à¤¿, $1! ==
à¤
हाà¤à¤ à¤à¤¾à¤¤à¤¾ à¤à¥à¤à¤¿ à¤à¥à¤² à¤
à¤à¤¿à¥¤
diff --git a/languages/messages/MessagesMap_bms.php b/languages/messages/MessagesMap_bms.php
index 87e55c3186..7b6732d836 100644
--- a/languages/messages/MessagesMap_bms.php
+++ b/languages/messages/MessagesMap_bms.php
@@ -409,7 +409,7 @@ Alesane yakuwe "\'\'$2\'\'".',
# Login and logout pages
'logouttext' => "'''Rika uwis metu log sekang sistem.'''
-Rika teyeng terus nggunakna {{SITENAME}} kanthi anonim, utawa Rika teyeng [[Special:UserLogin|mlebu log maning]] nganggo jeneng panganggo sing padha utawa sejene.
+Rika teyeng terus nggunakna {{SITENAME}} kanthi anonim, utawa Rika teyeng [$1 mlebu log maning] nganggo jeneng panganggo sing padha utawa sejene.
Digatekna ya, nek ana kaca sing esih terus nidokna nek rika esih mlebu log nnganti Rika mbusak singgahan nang panjelajah web-e Rika.",
'welcomecreation' => '== Sugeng rawuh, $1! ==
diff --git a/languages/messages/MessagesMdf.php b/languages/messages/MessagesMdf.php
index 1d939ad7ff..f7b70be3f8 100644
--- a/languages/messages/MessagesMdf.php
+++ b/languages/messages/MessagesMdf.php
@@ -147,31 +147,34 @@ $messages = array(
'tog-underline' => 'СÑлмаÑкÑÐ½ÐµÐ½Ñ Ð°Ð»Ð³Ð° киÑÑкÑÑамÑ:',
'tog-justify' => 'Ð¢Ð¸ÐµÐ¼Ñ ÑÑÑмаÑÑÑÑ ÑÐºÐ°ÐºÑ ÑÑедомаÑÐ½ÐµÐ½Ñ Ð»Ð¾Ð¿Ð°ÑÑ ÐºÑвалмова',
'tog-hideminor' => 'Ðд полаÑÑомаÑÐ½ÐµÐ½Ñ ÑÑа кÑÑÐµÐ¼Ñ ÑÐ¼Ð»Ð°Ð½Ñ Ð²Ð¸Ð´ÐµÐ¿ÑемаÑне',
+'tog-hidepatrolled' => 'ÐÑÑÐµÐ¼Ñ Ð»ÑÐ²Ð¾Ð½Ñ ÐºÐ¸ÑдиÑ
Ð½ÐµÐ½Ñ Ð²Ð¸Ð´ÐµÐ¿ÑемаÑнон меколÑÑе полаÑнемаÑÐ½ÐµÐ½Ñ ÑÑа',
+'tog-newpageshidepatrolled' => 'ÐÑÑÐµÐ¼Ñ Ð»ÑÐ²Ð¾Ð½Ñ ÐºÐ¸ÑдиÑ
Ð½ÐµÐ½Ñ ÑÑа видепÑÑÑ Ð»Ð¾Ð¿Ð°Ñ Ð¾Ð´ Ð»Ð¾Ð¿Ð°Ð½Ñ Ð»ÑвÑа',
'tog-extendwatchlist' => 'ÐелепÑÐµÐ¼Ñ Ð¼ÐµÐ»ÑгеваномаÑÑ Ñембе полаÑÑомаÑÐ½ÐµÐ½Ñ Ð½ÑÑÑемга, Ð°Ñ Ð°Ð½ÑÑек меколÑÑеннеÑ',
-'tog-usenewrc' => 'Ðолдак ÑÐµÐ²Ñ ÑебÑÑÑгоÑÑÑ Ð¾Ð´ илÑкÑÑопÑÐ¾Ð¼Ð°Ñ (ÑÑÑви JavaScript)',
+'tog-usenewrc' => 'ÐолгаÑÑÑÐ¾Ð¼Ñ Ð¸Ð»ÑкÑÑопÑомаÑÐ½ÐµÐ½Ñ Ð»Ð¾Ð¿Ð°Ð½Ñ ÐºÐ¾ÑÑÑ Ð¼ÐµÐºÐ¾Ð»ÑÑе полаÑнемаÑÐ½ÐµÐ½Ñ ÑÑа ди мелÑгеваномаÑа (веÑи JavaScript)',
'tog-numberheadings' => 'СÑÑмадома конÑкÑÑ Ð»ÑвомÑÑÑкÑне ÑÑлек пÑÑовиÑ
ÑÑ',
'tog-showtoolbar' => 'ÐÑдÑÑÐ½ÐºÑ ÑедÑÑкÑÑÑ Ð½ÑÑÑÐµÐ¼Ñ ÑÑÑмадомбаÑк (JavaScript)',
'tog-editondblclick' => 'ÐаÑкÑÑÑ Ð»ÑпÑÑÐ°Ð·Ñ ÑÑÐ²Ð°Ð¼Ñ ÑÑÑмаÑÑÑÑ Ð¿ÐµÑнема (JavaScript)',
'tog-editsection' => 'ÐÑÑÑÐµÐ¼Ñ ÑÑлмаÑкÑÑÑ [пеÑемÑ] ÑÑÑ Ð¿ÑлÑкÑонди',
'tog-editsectiononrightclick' => 'ÐеÑÐ½ÐµÐ¼Ñ Ð¿ÑлÑкÑÑне: лÑпÑÑÐ°Ð¼Ñ ÑÑÑмадомбÑлÑкÑÑÑ Ð»ÐµÐ¼Ð¾Ð½Ñ Ð»Ð°Ð½Ð³Ñ Ð²Ð¸Ð´ÐµÑиÑе пÑнÑÑа (JavaScript)',
'tog-showtoc' => 'ÐÑÑÑÐµÐ¼Ñ ÑÑÑмаÑÑÑÑ Ð¿Ð¾ÑÐ¼Ð°ÐºÑ (лопаÑненÑ, конаÑÐ½ÐµÐ½Ñ ÑÑа 3 ÑÑÑмадома конÑкÑÑа лама)',
-'tog-rememberpassword' => 'ÐанÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð½Ñ ÑÑвама лемозе ÑÑ Ñодама маÑинаÑа (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-watchcreations' => 'СÑваÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð½Ñ ÑеÑÑÑ Ð»Ð¾Ð¿Ð°Ñне Ð¼Ð¾Ð½Ñ Ð¼ÐµÐ»Ñгеваномазон',
-'tog-watchdefault' => 'СÑваÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð½Ñ Ð¿ÐµÑнема лопане Ð¼Ð¾Ð½Ñ Ð¼ÐµÐ»Ñгеваномазон',
-'tog-watchmoves' => 'ÐопаÑÐ½ÐµÐ½Ñ ÑаÑÑÑомÑÑа ÑÑваÑÑÐ¾Ð¼Ñ ÑÐ¸Ð½Ñ Ð¼Ð¾Ð½Ñ Ð¼ÐµÐ»Ñгеваномазон',
-'tog-watchdeletion' => 'ÐопаÑÐ½ÐµÐ½Ñ Ð½Ð°ÑдамÑÑа ÑÑваÑÑÐ¾Ð¼Ñ ÑÐ¸Ð½Ñ Ð¼Ð¾Ð½Ñ Ð¼ÐµÐ»Ñгеваномазон',
+'tog-rememberpassword' => 'ÐанÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð½Ñ ÑÑвама лемозе ÑÑ ÑодаммаÑинаÑа (ÑÑда кÑваÑÑ $1 {{PLURAL:$1|Ñи|ÑиÑ}})',
+'tog-watchcreations' => 'СÑваÑÑÐ¾Ð¼Ñ Ð»Ð¾Ð¿Ð°ÑненÑ, конаÑÐ½ÐµÐ½Ñ Ñиине ди ÑайлаÑ, конаÑÐ½ÐµÐ½Ñ Ñонгине мелÑгеваномазон',
+'tog-watchdefault' => 'СÑваÑÑÐ¾Ð¼Ñ Ð»Ð¾Ð¿Ð°ÑÐ½ÐµÐ½Ñ Ð´Ð¸ ÑайлаÑненÑ, конаÑÐ½ÐµÐ½Ñ Ð¿ÐµÑнеÑайне мелÑгеваномазон',
+'tog-watchmoves' => 'СÑваÑÑÐ¾Ð¼Ñ Ð»Ð¾Ð¿Ð°ÑÐ½ÐµÐ½Ñ Ð´Ð¸ ÑайлаÑненÑ, конаÑÐ½ÐµÐ½Ñ ÑаÑÑÑÑне мелÑгеваномазон',
+'tog-watchdeletion' => 'СÑваÑÑÐ¾Ð¼Ñ Ð»Ð¾Ð¿Ð°ÑÐ½ÐµÐ½Ñ Ð´Ð¸ ÑайлаÑненÑ, конаÑÐ½ÐµÐ½Ñ Ð½Ð°ÑдÑне мелÑгеваномазон',
'tog-minordefault' => 'ТÑÑкÑÐµÐ¼Ñ Ñембе пеÑема анÑÑйнÑÑне мÑзÑÑÑ Ð¸Ð»ÑÐºÑ Ð¸Ð·Ñ Ð¼ÑÑÑгов',
'tog-previewontop' => 'ÐÑÑÑÐµÐ¼Ñ ÑÑÑмаÑÑÑÑ Ð²Ð°ÑÐµÐ½Ñ Ð½ÑÑÑемаÑÑ Ð¿ÐµÑÐµÐ¼Ð°Ð½Ñ ÑедÑÑкÑÑÑ Ð¸Ð½Ð³Ð¾Ð»Ðµ',
'tog-previewonfirst' => 'ÐаÑÐµÐ½Ñ Ð½ÑÑÑема ваÑенÑе пеÑнемада меле',
-'tog-nocache' => 'ÐÑ Ð¼ÑÑÑгома лопаÑÐ½ÐµÐ½Ñ ÑÑлек ванÑневи ÑайлÑнон ÑиемÑ',
-'tog-enotifwatchlistpages' => 'ÐÑÑÐµÐ¼Ñ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ ÑÑÑма Ð¼Ð¾Ð½Ñ Ð²Ð°Ð½Ð¾Ð¼Ð° лопаÑÑ Ð¸Ð»ÑкÑÑопÑомада меле',
+'tog-nocache' => 'ÐаÑÐ´Ð°Ð¼Ñ Ð¸Ð½ÑеÑнеÑÑ Ð²ÑÑиенди ÑÑлек ванÑневи ÑайлÑ
Ð½ÐµÐ½Ñ Ñиема',
+'tog-enotifwatchlistpages' => 'ÐÑÑÑ Ñейне е-ÑÑÑма мзÑÑда Ð¼Ð¾Ð½Ñ Ð¼ÐµÐ»ÑгеваномаÑÑа Ð»Ð¾Ð¿Ð°Ñ Ð¸Ð»ÑкÑÑопÑовиÑ
ÑÑ',
'tog-enotifusertalkpages' => 'ÐÑÑÐµÐ¼Ñ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ ÑÑÑма Ð¼Ð¾Ð½Ñ ÑииÑÑ ÐºÐ¾ÑÑ
Ñама Ð»Ð¾Ð¿Ð°Ð½Ñ Ð¸Ð»ÑкÑÑопÑомада меле',
-'tog-enotifminoredits' => 'ÐÑÑÐµÐ¼Ñ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ ÑÑÑма нÑлÑне пеÑема анÑÑйнÑда меле',
+'tog-enotifminoredits' => 'ÐÑÑÑ Ñейне е-ÑÑÑма нÑлÑне мÑзÑÑда Ð»Ð¾Ð¿Ð°Ñ Ñди ÑайлÑ
Ñ Ð°Ñ Ð»Ð°Ð¼Ð½Ðµ видепÑевиÑ
ÑÑ',
'tog-enotifrevealaddr' => 'ШÑаÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð½Ñ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ Ð°Ð´ÑеÑозе паÑÑÑема ÑÑÑмаÑа',
'tog-shownumberswatching' => 'ÐÑÑÑÐµÐ¼Ñ Ð¼ÑзÑÑа ÑÑвÑида ÐºÐ¾Ð½Ð°Ñ Ð°ÑаÑÑÐ¾Ð·Ñ Ð»Ð¾Ð¿Ð°ÑÑ ÑÑÑ Ð¼ÐµÐ»ÑгеваномазоÑÑ',
+'tog-oldsig' => 'ÐÑкÑкÑÐ¾Ð½Ñ ÐºÑдÑÑÑÑкÑ',
'tog-fancysig' => 'ÐÑдÑÑÑÑкÑÑ ÑлиÑ
ÑÑ Ð²Ð¸ÐºÐ¸ÑекÑÑÐ¾ÐºÑ (ÑÑлек Ñиеви ÑÑлмаÑкÑÑÑома)',
-'tog-externaleditor' => 'ÐÐ¾Ð»Ð´Ð°Ð¼Ñ ÑÐµÐ²Ñ ÑÑеÑиÑÐµÐ½Ñ Ð¿ÐµÑниÑÑ Ð¼ÑзÑÑÑ Ð¸Ð»ÑÐºÑ Ð¸Ð·Ñ Ð¼ÑÑÑгов (анÑÑек ÑÐµÐ²Ð¾Ð½Ñ ÑодайÑ
ненди, ÑÑÑ Ð¼ÐµÑ ÑÑÑвиÑ
ÑÑ Ð±Ð°Ñка кÑдÑÑнкÑÑ-аÑаÑÐ½ÐµÐ¼Ð°Ñ Ñодама маÑинаÑа)',
-'tog-externaldiff' => 'ÐÐ¾Ð»Ð´Ð°Ð¼Ñ ÑÐµÐ²Ñ ÑÑеÑиÑÐµÐ½Ñ Ð¿ÑогÑам веÑÐ·Ð¸ÐµÐ½Ñ Ð²Ð°ÐºÑÑ Ð¿ÑÑоманкÑа мÑзÑÑÑ Ð¸Ð»ÑÐºÑ Ð¸Ð·Ñ Ð¼ÑÑÑгов (анÑÑек ÑÐµÐ²Ð¾Ð½Ñ ÑодайÑ
ненди, ÑÑÑ Ð¼ÐµÑ ÑÑÑвиÑ
ÑÑ Ð±Ð°Ñка кÑдÑÑнкÑÑ-аÑаÑÐ½ÐµÐ¼Ð°Ñ Ñодама маÑинаÑа)',
+'tog-externaleditor' => 'ÐÐ¾Ð»Ð´Ð°Ð¼Ñ ÑÐµÐ²Ñ ÑÑеÑиÑÐµÐ½Ñ Ð¿ÐµÑниÑÑ Ð¼ÑзÑÑÑ Ð¸Ð»ÑÐºÑ Ð¸Ð·Ñ Ð¼ÑÑÑгов (анÑÑек ÑÐµÐ²Ð¾Ð½Ñ ÑодайÑ
ненди, ÑÑÑ Ð¼ÐµÑ ÑÑÑвиÑ
ÑÑ Ð±Ð°Ñка кÑдÑÑнкÑÑ-аÑаÑÐ½ÐµÐ¼Ð°Ñ Ñодама маÑинаÑа [//www.mediawiki.org/wiki/Manual:External_editors ÑÑда Ñов.])',
+'tog-externaldiff' => 'ÐÐ¾Ð»Ð´Ð°Ð¼Ñ ÑÐµÐ²Ñ ÑÑеÑиÑÐµÐ½Ñ Ð¿ÑогÑам веÑÐ·Ð¸ÐµÐ½Ñ Ð²Ð°ÐºÑÑ Ð¿ÑÑоманкÑа мÑзÑÑÑ Ð¸Ð»ÑÐºÑ Ð¸Ð·Ñ Ð¼ÑÑÑгов (анÑÑек ÑÐµÐ²Ð¾Ð½Ñ ÑодайÑ
ненди, ÑÑÑ Ð¼ÐµÑ ÑÑÑвиÑ
ÑÑ Ð±Ð°Ñка кÑдÑÑнкÑÑ-аÑаÑÐ½ÐµÐ¼Ð°Ñ Ñодама маÑинаÑа[//www.mediawiki.org/wiki/Manual:External_editors ÑÑда Ñов.])',
'tog-showjumplinks' => 'ÐÑÑÑÐ³Ð¾Ð¼Ñ "ÑпадемÑ" ÑаÑовома ÑÑлмаÑкÑÑненди',
'tog-uselivepreview' => 'ÐакÑÐ¾Ð¼Ñ ÑÑÑй ваÑÐµÐ½Ñ Ð½ÑÑÑемаÑÑ (JavaScript) (ÐаÑжаманÑ)',
'tog-forceeditsummary' => 'ÐÑÑÑÐµÐ¼Ñ Ð¼Ð¾Ð½Ð´Ð¸Ð½Ðµ мезе ÑÑÑÐ¼Ð°Ð´Ð¾Ð¼Ñ Ñава пеÑнема валÑÐ¼Ð°Ñ ÑÑвамÑÑа',
@@ -180,6 +183,7 @@ $messages = array(
'tog-watchlisthideminor' => 'ÐÑÑÐµÐ¼Ñ Ð¿ÐµÑнема анÑÑйнÑÑне ванома лопаÑÑа',
'tog-watchlisthideliu' => 'ÐÑÑÐµÐ¼Ñ ÑÑÑмаÑÑÑÑ ÑииÑ
Ð½ÐµÐ½Ñ Ð¿ÐµÑнемаÑнон мелÑгеваномаÑа',
'tog-watchlisthideanons' => 'ÐÑÑÐµÐ¼Ñ Ð»ÐµÐ¼ÑÑома ÑииÑ
Ð½ÐµÐ½Ñ Ð¿ÐµÑнемаÑнон мелÑгеваномаÑа',
+'tog-watchlisthidepatrolled' => 'ÐÑÑÐµÐ¼Ñ Ð»ÑÐ²Ð¾Ð½Ñ ÐºÐ¸ÑдиÑ
Ð½ÐµÐ½Ñ Ð²Ð¸Ð´ÐµÐ¿ÑемаÑнон мелÑгеваномаÑа',
'tog-ccmeonemails' => 'ÐÑÑÑ Ñейне ÐºÐ¾Ð¿Ð¸Ñ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ ÑеÑмане конаÑÐ½ÐµÐ½Ñ ÐºÑÑÑайне Ð¸Ð»Ñ ÑииÑ
ненди.',
'tog-diffonly' => 'ТÑÑ Ð½ÑÑÑе Ð»Ð¾Ð¿Ð°Ð½Ñ Ð¿Ð¾ÑÐ¼Ð¾Ñ ÐºÐ°ÑÑа веÑзиÑÑÐ½ÐµÐ½Ñ Ð²Ð°ÐºÑÑ Ð¿ÑÑомаÑÑ Ð°Ð»Ð°',
'tog-showhiddencats' => 'ÐÑÑÑÐµÐ¼Ñ ÐºÑÑÑ ÐºÐ°ÑегоÑиеÑ',
@@ -189,6 +193,13 @@ $messages = array(
'underline-never' => 'ÐÑзÑÑдонга',
'underline-default' => 'ÐнÑеÑÐ½ÐµÑ Ð¿Ð¾Ð»Ð°ÑкÑÑÑ ÐºÐ°Ð´Ð¾Ð¼Ñ Ð°Ð¿Ð°Ðº полаÑÑÑ',
+# Font style option in Special:Preferences
+'editfont-style' => 'ÐолаÑÑÐ¾Ð¼Ñ ÑÑ Ð¿Ð°ÐºÑÑÐ½Ñ ÑÑÑмадома ÑÑиленÑ',
+'editfont-default' => 'ÐнÑеÑнеÑÑ Ð²ÑÑиÑÑ Ð°Ð¿Ð°Ðº полаÑÑÑ',
+'editfont-monospace' => 'Ð¤ÐºÑ ÐºÐµÐ»ÐµÑа ÑÑÑмадома',
+'editfont-sansserif' => 'СÑÑмадома Sans-serif',
+'editfont-serif' => 'Serif ÑÑÑмадома',
+
# Dates
'sunday' => 'ТаÑгоÑи (ÐедлÑÑи)',
'monday' => 'ÐдговÑи (ÐанеделÑник)',
@@ -256,7 +267,9 @@ $messages = array(
'category-file-count' => '{{PLURAL:$2|Ð¢Ñ ÐºÐ°ÑегоÑиеÑа анÑÑек ÑÐºÑ Ñайл.|Ðага {{PLURAL:$1|Ñайл|$1 ÑайлÑ
Ñ}} ÑÑ ÐºÐ°ÑегоÑиеÑа $2-Ð½Ñ ÑÑÑа.}}',
'category-file-count-limited' => 'Ðага {{PLURAL:$1|Ñайл|$1 ÑайлÑ
Ñ}} ÑÑ ÐºÐ°ÑегоÑиеÑа.',
'listingcontinuesabbrev' => 'полаÑкÑоÑ',
+'index-category' => 'ÐндекÑÑÑÑ Ð»Ð¾Ð¿Ð°Ñ',
'noindex-category' => 'âÐндекÑÑÑома лопаÑне',
+'broken-file-category' => 'ÐÐ¾Ð¿Ð°Ñ ÐºÐ¾Ð»Ð°Ñ ÑÑлмаÑкÑÐ½ÐµÐ½Ñ Ð¼Ð°ÑÑ
Ñа',
'about' => 'Ðолганза',
'article' => 'СÑÑмаÑÑÑÑ Ð¿Ð¾ÑÐ¼Ð¾Ð½Ñ Ð»Ð¾Ð¿Ð°Ñ',
@@ -274,18 +287,19 @@ $messages = array(
'qbbrowse' => 'Ðанондома',
'qbedit' => 'ÐеÑнема',
'qbpageoptions' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°ÑÑ',
-'qbpageinfo' => 'ÐонÑекÑÑÑÑ',
'qbmyoptions' => 'ÐÐ¾Ð½Ñ Ð»Ð¾Ð¿Ð°Ð½Ðµ',
'qbspecialpages' => 'ÐаÑка ÑÐµÐ²Ð¾Ð½Ñ Ð»Ð¾Ð¿Ð°Ñ',
'faq' => 'СидеÑÑа Ðеподеви ÐизеÑкÑне',
'faqpage' => 'Project:СидеÑÑа Ðеподеви ÐизеÑкÑне',
# Vector skin
+'vector-action-addsection' => 'ÐÐ¾Ð»Ð°Ð´Ð¾Ð¼Ñ Ð¼ÐµÐ·ÐµÐ½Ñ ÐºÐ¾Ð»Ð³Ð° коÑÑ
ÑамÑ',
'vector-action-delete' => 'ÐаÑдамÑ',
'vector-action-move' => 'ШаÑÑÑомÑ',
'vector-action-protect' => 'ÐÑаламÑ',
'vector-action-undelete' => 'ÐÑÑдаÑÑомÑ',
-'vector-action-unprotect' => 'ÐÑалама лоÑкамÑ',
+'vector-action-unprotect' => 'ÐÑаламаÑÑ Ð¿Ð¾Ð»Ð°ÑÑомÑ',
+'vector-simplesearch-preference' => 'ÐÐ¾Ð´Ð°Ð¼Ñ ÑÐµÐ²Ñ ÑÑждÑлгÑоÑÑ ÐºÑдÑÑнкÑÐ¾Ð½Ñ ÑедÑÑкÑÑÑ (анÑÑек векÑоÑÐ¾Ð½Ñ Ð»Ð°Ð½Ð³Ð°ÐºÑ)',
'vector-view-create' => 'ТиемÑ',
'vector-view-edit' => 'ÐеÑнемÑ',
'vector-view-history' => 'ÐÑÑоÑÐ¸Ñ Ð½ÑÑÑемÑ',
@@ -309,6 +323,7 @@ $messages = array(
'printableversion' => 'ÐиÑ
Ñеви веÑзие',
'permalink' => 'Ð¯Ð»Ð°Ð½Ñ ÑÑлмаÑкÑ',
'print' => 'ÐолдамÑ',
+'view' => 'ÐаномÑ',
'edit' => 'ÐеÑнеме',
'create' => 'ТиемÑ',
'editthispage' => 'ÐеÑÐ½ÐµÐ¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ',
@@ -316,11 +331,12 @@ $messages = array(
'delete' => 'ÐаÑдамÑ',
'deletethispage' => 'ÐаÑÐ´Ð°Ð¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ',
'undelete_short' => 'ÐÑÑдаÑÑÐ¾Ð¼Ñ {{PLURAL:$1|пеÑнема|$1 пеÑнемаÑ}}',
+'viewdeleted_short' => 'ÐÐ°Ð½Ð¾Ð¼Ñ {{PLURAL:$1|ÑÐºÑ Ð½Ð°ÑÐ´Ð°Ñ Ð²Ð¸Ð´ÐµÐ¿Ñема|$1 наÑÐ´Ð°Ñ Ð²Ð¸Ð´ÐµÐ¿ÑемаÑ}}',
'protect' => 'ÐÑаламÑ',
'protect_change' => 'полаÑÑÐ¾Ð¼Ñ Ð¿ÑÑÐ½Ñ Ð°ÑаламаÑÑ',
'protectthispage' => 'ÐÑÐ°Ð»Ð°Ð¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ',
-'unprotect' => 'ÐалÑ
ÑÐ¾Ð¼Ñ Ð°ÑаламаÑÑ',
-'unprotectthispage' => 'ÐалÑ
ÑÐ¾Ð¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ Ð°ÑаламаÑ',
+'unprotect' => 'ÐÑаламаÑÑ Ð¿Ð¾Ð»Ð°ÑÑомÑ',
+'unprotectthispage' => 'ÐолаÑÑÐ¾Ð¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ Ð°ÑаламанÑ',
'newpage' => 'Ðд лопа',
'talkpage' => 'ÐоÑÑ
ÑÐ°Ð¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ ÐºÐ¾Ð»Ð³Ð°',
'talkpagelinktext' => 'ÐоÑÑ
Ñама',
@@ -348,6 +364,13 @@ $messages = array(
'jumpto' => 'Ð®Ð¿Ð°Ð´ÐµÐ¼Ñ ÑÑзк:',
'jumptonavigation' => 'навигаÑие',
'jumptosearch' => 'веÑендема',
+'view-pool-error' => 'УжÑлÑ, ÑÑ Ð¿Ð¸Ð½Ð³ÑÑ ÑеÑвеÑÑ
Ð½ÐµÐ½Ñ Ð²Ð¸Ð¹Ñна Ð°Ñ ÑаÑовиÑ
ÑÑ.
+ÐелÑÑ Ð»Ð°Ð¼Ð° ÑииÑ
ÑÑ ÑÑÑÑÑниÑ
ÑÑ Ð²Ð°Ð½Ð¾Ð¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ.
+ÐнÑлÑÑÑÑма ÑÑÑ Ð°Ñ Ð»Ð°Ð¼Ð¾Ñ ÑÑ Ð»Ð¾Ð¿Ð°Ð½Ð´Ð¸ одÑÐºÑ Ñама инголе.
+$1',
+'pool-timeout' => 'ÐÐ¸Ð³Ð¾Ð½Ñ ÐºÐ¸ÑдемаÑÑ ÑÑи пÑкÑÑаманÑ',
+'pool-queuefull' => 'ТÑÑÑÑнемада велÑÑ Ð»Ð°Ð¼Ð°',
+'pool-errorunknown' => 'ÐÑ ÑÐ¾Ð´Ð°Ñ ÑлÑбÑÑÑкÑ',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'aboutsite' => '{{SITENAME}} колга',
@@ -381,6 +404,10 @@ $messages = array(
'youhavenewmessages' => 'Ð¢Ð¾Ð½Ñ Ñли $1 ($2).',
'newmessageslink' => 'Ðд ÑÑÑмаÑ',
'newmessagesdifflink' => 'меколÑÑе полаÑÑома',
+'youhavenewmessagesfromusers' => 'Ð¢Ð¾Ð½Ñ $1 {{PLURAL:$3|Ñага ÑÐºÑ ÑииÑÑ Ñзда|$3 ÑииÑ
Ð½ÐµÐ½Ñ Ñзда}} ($2).',
+'youhavenewmessagesmanyusers' => 'Ð¢Ð¾Ð½Ñ $1 лама ÑииÑ
Ð½ÐµÐ½Ñ Ñзда ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|од ÑÑÑма|од ÑÑÑмаÑ}}',
+'newmessagesdifflinkplural' => 'меколÑÑе {{PLURAL:$1|полаÑнема|полаÑнемаÑ}}',
'youhavenewmessagesmulti' => 'Ð¢Ð¾Ð½Ñ ÑлиÑ
ÑÑ Ð¾Ð´ ÑÑÑÐ¼Ð°Ñ $1-Ñа',
'editsection' => 'пеÑнемÑ',
'editold' => 'пеÑнемÑ',
@@ -391,6 +418,8 @@ $messages = array(
'toc' => 'ÐÐ¾Ð¿Ð°Ð½Ñ Ð¿Ð¾ÑмоÑ',
'showtoc' => 'нÑÑÑемÑ',
'hidetoc' => 'кÑÑемÑ',
+'collapsible-collapse' => 'ÐмлалгоÑÑомÑ',
+'collapsible-expand' => 'ÐелепÑемÑ',
'thisisdeleted' => 'ÐÐ°Ð½Ð¾Ð¼Ñ Ñли мÑÑдаÑÑÐ¾Ð¼Ñ $1?',
'viewdeleted' => 'ÐÐ°Ð½Ð¾Ð¼Ñ $1?',
'restorelink' => '{{PLURAL:$1|наÑÐ´Ð°Ñ Ð¿ÐµÑнема|$1 наÑÐ´Ð°Ñ Ð¿ÐµÑнемаÑ}}',
@@ -402,6 +431,8 @@ $messages = array(
'page-rss-feed' => '"$1" RSS линиÑ',
'page-atom-feed' => '"$1" Atom линиÑ',
'red-link-title' => '$1 (ÑÑама лопаÑÑ Ð°Ñ)',
+'sort-descending' => 'ÐÑаÑÑÐ¾Ð¼Ñ Ð°Ð»Ñ',
+'sort-ascending' => 'ÐÑаÑÑÐ¾Ð¼Ñ Ð²ÑÑи',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Ðопа',
@@ -428,12 +459,12 @@ $messages = array(
# General errors
'error' => 'ÐлÑбÑÑÑкÑ',
'databaseerror' => 'ÐаÑабаза ÑлÑбÑÑÑкÑ',
-'dberrortext' => 'ÐаÑÐ°Ð±Ð°Ð·Ð°Ð½Ñ Ð²ÐµÑендембаÑк лиÑÑÑ ÑинÑÐ°ÐºÑ ÑлÑбÑÑÑкÑ.
-ТÑ, Ñлема, пÑогÑÐ°Ð¼Ð¾Ð½Ñ ÑлÑбÑÑÑкÑ.
-ÐеколÑÑе даÑÐ°Ð±Ð°Ð·Ð¾Ð½Ñ Ð²ÐµÑендема ÑлÑÑÑ:
-$1
-ÑÑнкÑиеÑÑа "$2".
-ÐаÑабазаÑÑ Ð¼ÑÑдаÑÑозе ÑлÑбÑÑÑкÑÑÑ "$3: $4".',
+'dberrortext' => 'СодамоÑÐ¸Ð½Ñ Ð¿Ð°ÑÐ³Ð°Ð½Ñ Ð²ÐµÑендембаÑк лиÑÑÑ ÑинÑакÑÐ¾Ð½Ñ ÑлÑбÑÑÑкÑ.
+ТÑ, Ñлема, пÑогÑамгÑÑÑкÑÐ¾Ð½Ñ Ñи.
+ÐеколÑÑе ÑодамоÑÐ¸Ð½Ñ Ð¿Ð°ÑÐ³Ð°Ð½Ñ Ð²ÐµÑема:
+
+ÑÑнкÑиеÑÑа "$1
$2
".
+СодамоÑÐ¸Ð½Ñ Ð¿Ð°ÑгаÑÑ Ð¿Ð°ÑÑÑеÑÑ ÑлÑбÑÑÑÐºÑ "$3: $4".',
'dberrortextcl' => 'ÐаÑÐ°Ð±Ð°Ð·Ð¾Ð½Ñ Ð²ÐµÑендембаÑк лиÑÑÑ ÑинÑÐ°ÐºÑ ÑлÑбÑÑÑкÑ.
ÐеколÑÑе даÑÐ°Ð±Ð°Ð·Ð¾Ð½Ñ Ð²ÐµÑендема ÑлÑÑÑ:
"$1"
@@ -445,7 +476,7 @@ $messages = array(
'readonlytext' => 'ÐаÑабазаÑÑ ÑÑни пÑкÑÑÐ°Ñ Ð¾Ð´ ÑÑÑмадомаÑненди Ñли полаÑнемаÑненди, ÑÑÑÑÑа нежедемаÑненди, меле Ñон мÑÑдай ÑÑÑÑÐ¸Ð½Ñ Ð¿Ð¾ÐºÐ°Ð¼Ð°Ð½ÑÑÑ.
ÐÑÑнÑÑÑ ÐºÐ¾Ð½Ð° ÑÐ¾Ð½Ñ Ð¿ÑкÑÑазе аÑÑÑезе ÑÐ¾Ð½Ñ ÑаÑÑÑ
коÑÑÑÑемаÑ: $1',
-'missing-article' => 'ÐаÑабазаÑа Ð°Ñ Ð¼Ñви ÑекÑÑ ÐºÐ¾Ð½Ð°Ð½Ñ ÑÑÑви мÑмÑ, ÑÐ¾Ð½Ñ Ð»ÐµÐ¼Ð¾Ñ "$1" $2.
+'missing-article' => 'СодамоÑÐ¸Ð½Ñ Ð¿Ð°ÑгÑа Ð°Ñ Ð¼Ñви ÑекÑÑÑÑ ÐºÐ¾Ð½Ð°Ð½Ñ ÑÑÑви мÑмÑ, ÑÐ¾Ð½Ñ Ð»ÐµÐ¼Ð¾Ñ "$1" $2.
Ð¢Ñ ÑидеÑÑа лиÑи мÑзÑÑда молÑÑ ÑиÑелгоÑÑ Ð²ÐµÑзиева Ñли иÑÑоÑиÑÐ½Ñ ÑÑлмаÑкÑова, кона вÑÑи наÑÐ´Ð°Ñ Ð»Ð¾Ð¿Ð°Ñ.
@@ -456,6 +487,8 @@ $messages = array(
'readonly_lag' => 'ÐаÑабазаÑÑ ÑÑлек пÑкÑÑаÑÑ Ð¼ÑзÑÑÑ ÐºÑдÑла даÑабаза ÑеÑвеÑÑ
Ñ ÑоÑни пÑÑÑеÑвеÑÑÑ Ð¼Ð°ÑÑ
Ñа',
'internalerror' => 'ÐоÑÐ¼Ð¾Ð½Ñ ÑлÑбÑÑÑкÑ',
'internalerror_info' => 'ÐоÑÐ¼Ð¾Ð½Ñ ÑлÑбÑÑÑкÑ: $1',
+'fileappenderrorread' => '"$1" ÑайлаÑÑ Ð°Ñ Ð»Ñвови поладома пингÑÑа.',
+'fileappenderror' => '"$1" ÑайлаÑÑ Ð¸Ð·Ñ Ð¿Ð¾Ð»Ð°Ð´Ð¾Ð² "$2" ÑайлÑи.',
'filecopyerror' => 'ÐÑ ÐºÐ¾Ð´Ð° копиÑÐ¼Ñ Ñайл "$1" Ñайл "$2"Ñ.',
'filerenameerror' => 'ÐÑ ÐºÐ¾Ð´Ð° "$1" ÑайлÑи макÑÐ¾Ð¼Ñ Ð¾Ð´ лем "$2".',
'filedeleteerror' => 'Файл "$1" Ð°Ñ Ð½Ð°Ñдави.',
@@ -467,28 +500,43 @@ $messages = array(
'badarticleerror' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°Ñа ÑÑ Ð°Ñ Ñиеви.',
'cannotdelete' => 'ÐопаÑÑ Ñли коÑÐºÐ°Ñ "$1" ÑайлÑÑ Ð°Ñ Ð½Ð°Ñдави.
СонÑ, Ñлема, кинге наÑдазе ни.',
+'cannotdelete-title' => '"$1" лопаÑÑ Ð°Ñ Ð½Ð°Ñдави',
+'delete-hook-aborted' => 'ТÑвоÑÐºÑ Ð¿ÑогÑам пеÑнемаÑÑ Ð»Ð¾ÑкаÑÑозе.
+ÐаÑÑÑÐµÐ¼Ð°Ñ ÑÑÐ½Ñ ÐºÐ¾ÑÑÑ Ð°Ñ.',
'badtitle' => 'ÐÑ ÐºÐ¾Ð½Ð´ÑÑÑи лем',
'badtitletext' => 'ÐеÑÑ Ð»Ð¾Ð¿Ð°Ð½Ñ Ð»ÐµÐ¼Ð¾Ñ Ð°Ñ ÑÑÑÑама Ñли Ñава, ÑÑÑÑÑа кÑленÑ-ÑÑка Ñли викинÑ-ÑÑка лемÑна Ð°Ñ Ð»Ð°Ñ ÑÑлмаÑÑ. Ð¡Ð¾Ð½Ñ ÑÑа, Ñлема аÑи ÑÐºÑ Ñли ÑÑда лама баÑка ÑÑÑÑÑкÑÑÑ ÐºÐ¾Ð½Ð°Ñ ÐºÐ¾Ð½ÑкÑонди Ð°Ñ ÐºÐ¾Ð½Ð´ÑÑÑиÑ
ÑÑ.',
-'perfcached' => 'ÐеÑÑ Ð¿ÑогÑÐ°Ð¼Ð¾Ð½Ñ Ð¸Ð½ÑоÑмаÑиеÑÑ ÑÑÑмаÑÑÐ¾Ð»Ñ ÑÑлек ванÑневи ÑайлÑ
Ð½ÐµÐ½Ñ ÑÑа ди, Ñлема, ÑиÑелгодÑÑ. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Ð¢Ñ Ð¿ÑогÑÐ°Ð¼Ð¾Ð½Ñ Ð¸Ð½ÑоÑмаÑиеÑÑ ÑÑÑмаÑÑÐ¾Ð»Ñ ÑÑлек ванÑневи ÑайлÑ
Ð½ÐµÐ½Ñ ÑÑа ди меколÑÑеда Ð¾Ð´Ð¾Ð½Ð·Ð°Ñ $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'ÐеÑÑ Ð¿ÑогÑÐ°Ð¼Ð¾Ð½Ñ Ð¸Ð½ÑоÑмаÑиеÑÑ ÑÑÑмаÑÑÐ¾Ð»Ñ ÑÑлек ванÑневи ÑайлÑ
Ð½ÐµÐ½Ñ ÑÑа ди, Ñлема, ÑиÑелгодÑÑ. СÑда {{PLURAL:$1|ÑÐºÑ Ð¼ÑÑкÑ|$1 мÑÑкÑÑ}} ÑÑлек ванÑневи ÑÐ°Ð¹Ð»Ð°Ð½Ñ ÐºÑÑÑкÑÑа.',
+'perfcachedts' => 'Ð¢Ñ Ð¿ÑогÑÐ°Ð¼Ð¾Ð½Ñ Ð¸Ð½ÑоÑмаÑиеÑÑ ÑÑÑмаÑÑÐ¾Ð»Ñ ÑÑлек ванÑневи ÑайлÑ
Ð½ÐµÐ½Ñ ÑÑа ди меколÑÑеда Ð¾Ð´Ð¾Ð½Ð·Ð°Ñ $1. СÑда {{PLURAL:$4|ÑÐºÑ Ð¼ÑÑкÑ|$4 мÑÑкÑÑ}} ÑÑлек ванÑневи ÑÐ°Ð¹Ð»Ð¾Ð½Ñ ÐºÑÑÑкÑÑа.',
'querypage-no-updates' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°ÑÑ Ð¾Ð´Ð¾Ð½Ð·Ð°Ð¿Ð½Ðµ ÑÑни Ð°Ñ ÑиевиÑ
ÑÑ. ÐнÑоÑмаÑиеÑÑ ÑÑÑа ÑÑни Ð°Ñ Ð¾Ð´Ð¾Ð½Ð·Ð°Ð²Ð¸.',
'wrong_wfQuery_params' => 'ÐÑ ÐºÐ¾Ð½Ð´ÑÑÑи паÑамеÑÑаÑне ÑÑнкÑиÑÑа wfQuery()
ФÑнкÑие: $1
ÐеÑÑкÑ: $2',
'viewsource' => 'ÐÐ°Ð½Ð¾Ð¼Ñ Ð»Ð¸ÑÑмоÑÑ',
+'viewsource-title' => 'Ðанк $1 лиÑÑмаÑÑа',
'actionthrottled' => 'ÐÑÑокÑÑиÑÑ ÐºÐ¸ÑÑÑÑаÑ',
'actionthrottledtext' => 'ÐÑдна маÑÑ
Ñа ÑÑÑема ÑÑÑÑалонкÑа ÑÑ ÑевÑÑ Ð»Ð°Ð¼Ð¾ÐºÑÑÑ ÑиемаÑÑ Ð½ÑÑÑÑ
ÐºÐ¾Ð½Ñ ÑÑка пингÑÑа каÑдаÑ. ÐнÑлÑÑÑÑма мÑÑÐ´Ð°Ð¼Ñ ÑÑ ÑевÑи мÑзÑÑоÑка минÑÑода меле.',
'protectedpagetext' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°Ñ ÑÑвама пÑкÑÑÐ°Ñ Ð»Ð¾Ð¿Ð°Ð½Ñ Ð¿ÐµÑнема каÑдамаÑÑ ÑÑнеда.',
'viewsourcetext' => 'ТейÑÑ Ñли кода Ð²Ð°Ð½Ð¾Ð¼Ñ Ñди копиÑÐ¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ Ð»Ð¸ÑÑмоÑ:',
-'protectedinterface' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°Ñа аÑи лопаÑÑ Ð²Ð°Ð½ÑÐ¾Ð½Ñ Ð¿ÑогÑÐ°Ð¼Ð¾Ð½Ñ ÑекÑÑоÑ, Ñон пÑкÑÑÐ°Ñ ÐºÐ°Ð»ÑдÑв Ñевда аÑаламаÑÑ ÑÑнеда.',
-'editinginterface' => "'''Ðнголе каÑдама:''' Тон пеÑнеÑак лопаÑÑ ÐºÐ¾Ð½Ð°Ð½Ñ ÑÑа аÑи лопаÑÑ Ð²Ð°Ð½ÑÐ¾Ð½Ñ Ð¿ÑогÑÐ°Ð¼Ð¾Ð½Ñ ÑекÑÑоÑ. ÐеÑнемаÑне полаÑÑÑÐ°Ð·Ñ ÑÐ¾Ð½Ñ Ð²Ð°Ð½ÑÐ¾Ñ ÐºÐ¾Ð´Ð° Ñон нÑеви Ð¸Ð»Ñ ÑииÑ
ненди. ÐÑаÑÑома ÑиеманкÑа ÑнÑлÑÑÑÑма Ð²Ð°Ð½Ð¾Ð¼Ñ [//translatewiki.net/wiki/Main_Page?setlang=mdf translatewiki.net] ÐедиаÐикиÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°ÑиеÑÑ Ð¿ÑоекÑÑÑ.",
+'viewyourtext' => "ТондейÑÑ Ñли кода ÑÑ Ð»Ð¾Ð¿Ð°Ð½Ñ '''пеÑнемаÑненÑ''' Ð²Ð°Ð½Ð¾Ð¼Ñ Ð´Ð¸ ÑÐ¸ÐµÐ¼Ñ ÐºÐ¾Ð¿Ð¸ÑнÑнон:",
+'protectedinterface' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°ÑÑ ÑÑа инÑеÑÑÐµÐ¹Ñ ÑекÑÑÑÑ ÑÑ Ð²Ð¸ÐºÐ¸ÑÑ Ð¿ÑогÑамгÑÑкÑÑи, Ñон аÑÐ°Ð»Ð°Ñ ÐºÐ°Ð»ÑдÑв Ñиемада.
+Ðики ÑÑаÑÑомаÑÐ½ÐµÐ½Ñ Ð¿Ð¾Ð»Ð°Ð´Ð¾Ð¼Ð°Ð½Ð´Ð¸ полаÑнемандивок ÑÑвак [//translatewiki.net/ translatewiki.net], MediaWiki локализаÑÐ¸ÐµÐ½Ñ Ð¿ÑоекÑÑи.',
+'editinginterface' => "'''Ðнголи каÑдама:''' Тон пеÑнеÑак лопаÑÑ ÐºÐ¾Ð½Ð°Ð½Ñ ÑÑа аÑи инÑеÑÑÐµÐ¹Ñ ÑекÑÑ Ð¿ÑогÑамкÑÑÑкÑонди. ÐеÑнемаÑне полаÑÑÑÐ°Ð·Ñ ÑÐ¾Ð½Ñ Ð²Ð°Ð½ÑоÑ, кода Ñон нÑеви Ð¸Ð»Ñ ÑииÑ
ненди. Ðики ÑÑаÑÑомаÑÐ½ÐµÐ½Ñ Ð¿Ð¾Ð»Ð°Ð´Ð¾Ð¼Ð°Ð½Ð´Ð¸, полаÑÑомандивок ÑÑвак [//translatewiki.net/ translatewiki.net] MediaWiki локализаÑÐ¸ÐµÐ½Ñ Ð¿ÑоекÑÑи.",
'sqlhidden' => '(SQL веÑÑÐºÑ ÐºÑÑÑ)',
'cascadeprotected' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°ÑÑ Ð°ÑÐ°Ð»Ð°Ð·Ñ Ð¿ÐµÑнемада ÑÑÑ Ð¼ÐµÑ Ñон ÑÑваÑни {{PLURAL:$1|Ñай лопаÑ, кона пÑÑÑолÑ|Ñай лопаÑ, ÐºÐ¾Ð½Ð°Ñ Ð¿ÑÑÑолÑÑ
ÑÑ}} каÑкад аÑаламаÑ:
$2',
'namespaceprotected' => "ТондейÑÑ Ð°Ñ Ð¼ÑÑÑгови пеÑÐ½ÐµÐ¼Ñ Ð»Ð¾Ð¿Ð°Ñне '''$1''' Ð»ÐµÐ¿Ð½ÐµÐ½Ñ Ð¼Ð°ÑÑ
Ñа.",
+'customcssprotected' => 'ТейÑÑ Ð°Ñ Ð¼ÑÑÑгови пеÑÐ½ÐµÐ¼Ñ CSS лопаÑÑ, ÑÑÑ Ð¼ÐµÑ Ð¿Ð¾ÑмоÑонза Ð¸Ð»Ñ ÑииÑÑ Ð»Ð°ÑÑеманза.',
+'customjsprotected' => 'ТейÑÑ Ð°Ñ Ð¼ÑÑÑгови пеÑÐ½ÐµÐ¼Ñ JavaScript лопаÑÑ, ÑÑÑ Ð¼ÐµÑ Ð¿Ð¾ÑмоÑонза Ð¸Ð»Ñ ÑииÑÑ Ð»Ð°ÑÑеманза.',
'ns-specialprotected' => '{{ns:special}} Ð»ÐµÐ¿Ð½ÐµÐ½Ñ Ð¼Ð°ÑÑ
Ñа лопаÑне Ð°Ñ Ð¿ÐµÑневиÑ
ÑÑ.',
'titleprotected' => "[[User:$1|$1]] каÑÐ´Ð°Ð·Ñ ÑÑ Ð»ÐµÐ¼ÑÑ Ð¼Ð°ÑÑ
Ñа лопа ÑиемаÑÑ.
ТÑÑÑалÑÑ ''$2''.",
+'filereadonlyerror' => '"$1" ÑайлаÑÑ Ð°Ñ Ð¿Ð¾Ð»Ð°ÑÑови ÑÑÑ Ð¼ÐµÑ "$2" ÑÐ°Ð¹Ð»Ð¾Ð½Ñ Ð¿ÑÑдаÑкÑÑÑ Ð°Ð½ÑÑек моÑаÑÑови ÑоÑмаÑÑа.
+
+ÐдминÑÑ ÐºÐ¾Ð½Ð°ÑÑ ÑÑлгозе кадÑÑ Ð¿Ð°ÑÑÑема: "$3".',
+'invalidtitle-knownnamespace' => 'ÐÑ ÐºÐ¾Ð½Ð´ÑÑÑи лем "$2" лембоÑмоÑа ди "$3" ÑекÑÑÑÑ ÑÑа',
+'invalidtitle-unknownnamespace' => 'ÐÑ ÐºÐ¾Ð½Ð´ÑÑÑи лем $1 лембоÑмоÑа ди "$2" ÑекÑÑÑÑ ÑÑа',
+'exception-nologin' => 'Ðпак ÑÑвак',
+'exception-nologin-text' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°ÑÑ Ñли ÑиемаÑÑ ÑаÑоманди ваÑенда ÑÑÑви ÑÑÐ²Ð°Ð¼Ñ Ð²Ð¸ÐºÐ¸Ñ.',
# Virus scanner
'virus-badscanner' => "ÐÑ ÐºÐ¾Ð½Ð´ÑÑÑи конÑигÑÑаÑиеÑÑ: Ð°Ñ ÑÐ¾Ð´Ð°Ñ Ð²Ð¸ÑÑÑÐ¾Ð½Ñ Ð²ÐµÑендема пÑогÑамÑÑ: ''$1''",
@@ -498,7 +546,7 @@ $2',
# Login and logout pages
'logouttext' => "'''Тон лиÑеÑÑ.'''
-ТондейÑÑ Ñли кода аÑÐµÐ¼Ñ {{SITENAME}}Ñа апак Ñодак Ñли [[Special:UserLogin|ÑÑвак Ñага веÑÑÑ]] кода ÑÑка Ñли Ð¸Ð»Ñ ÑииÑÑ.
+ТондейÑÑ Ñли кода аÑÐµÐ¼Ñ {{SITENAME}}Ñа апак Ñодак Ñли [$1 ÑÑвак Ñага веÑÑÑ] кода ÑÑка Ñли Ð¸Ð»Ñ ÑииÑÑ.
Ðой-кона лопаÑне илÑдÑÑÑ ÑÑÐ°Ð¼ÐºÑ ÐºÐ¾Ð´Ð°Ð¼ÐºÑ ÑÐ¸Ð½Ñ ÑлÑÑÑÑ ÑÐ¾Ð½Ñ Ð»Ð¸Ñемада инголе мÑзÑÑÑ ÑÐ¾Ð½Ñ Ð¸Ð½ÑеÑÐ½ÐµÑ Ð¿Ð¾Ð»Ð°ÑкÑÑе Ð¸Ð·Ñ Ð°ÑÑÑÑÑов ÑÑÑ Ð²Ð°Ð½Ñневи ÑайлÑ
Ð½ÐµÐ½Ñ Ñзда.",
'welcomecreation' => '== СÑвак, $1! ==
@@ -507,12 +555,15 @@ $2',
'yourpassword' => 'СÑвама валÑе:',
'yourpasswordagain' => 'СÑÑмаÑк ÑÑвама валÑе омбоÑекÑ:',
'remembermypassword' => 'ÐанÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð½Ñ ÑÑвама лемозе ÑÑ Ñодам маÑинаÑа (макÑимÑм $1 {{PLURAL:$1|ÑиÑ|ÑиÑ}})',
+'securelogin-stick-https' => 'ÐÐ°Ð´Ð¾Ð²Ð¾Ð¼Ñ ÑоÑÑÐ¾ÐºÑ HTTPS велÑде ÑÑвамада меле',
'yourdomainname' => 'Ð¢Ð¾Ð½Ñ Ð´Ð¾Ð¼ÐµÐ½Ñе:',
+'password-change-forbidden' => 'СÑвама валÑ
не ÑÑ Ð²Ð¸ÐºÐ¸ÑÑ ÑÑа Ð°Ñ Ð¿Ð¾Ð»Ð°ÑÑовиÑ
ÑÑ',
'externaldberror' => 'ÐиÑÑÑ ÑлÑбÑÑÑÐºÑ ÑÑеÑиÑÐµÐ½Ñ Ð´Ð°ÑÐ°Ð±Ð°Ð·Ð¾Ð½Ñ Ð²ÐµÐ»Ñде кемокÑÑакÑнембаÑк Ñли ÑондейÑÑ Ð°Ñ Ð¼ÑÑÑгови полаÑÐ½ÐµÐ¼Ñ ÑÐ¾Ð½Ñ ÑÑеÑиÑÐµÐ½Ñ ÑÑÑмаÑÑÑомаÑенÑ.',
'login' => 'СÑвама',
'nav-login-createaccount' => 'СÑвама / ÑÑÑмаÑÑÑома',
'loginprompt' => 'ТондейÑÑ ÑÑÑви Ð½Ð¾Ð»Ð´Ð°Ð¼Ñ ÑÐµÐ²Ñ cookies {{SITENAME}}Ñ ÑÑваманди.',
'userlogin' => 'СÑвама / ÑÑÑмаÑÑÑома',
+'userloginnocreate' => 'СÑвамÑ',
'logout' => 'ÐиÑема',
'userlogout' => 'ÐиÑема',
'notloggedin' => 'Ðпак ÑÑвак',
@@ -521,12 +572,18 @@ $2',
'createaccount' => 'Ð¢Ð¸ÐµÐ¼Ñ Ð¾Ð´ ÑÑÑмаÑÑÑомаÑÑ',
'gotaccount' => "СÑÑмаÑÑÑÑÑÑ Ð½Ð¸? '''$1'''.",
'gotaccountlink' => 'СÑвамÑ',
+'userlogin-resetlink' => 'СÑвама ÑÑÑвикÑÐ½ÐµÐ½Ñ ÑкÑÑайÑÑ?',
'createaccountmail' => 'ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ ÑÑÑма велÑде',
+'createaccountreason' => 'ТÑÑÑал:',
'badretype' => 'СÑвама валÑ
не Ñон пÑÑÑÑÑ Ð°Ñ ÑкаÑ.',
-'userexists' => 'Ð¢Ñ Ð»ÐµÐ¼ÑÑ ÐºÐ¾Ð¹-кие ÑÑÐ²Ð¾Ð·Ñ Ð½Ð¸. ÐнÑлÑÑÑÑма, аÑÑÑек Ð¸Ð»Ñ Ð»ÐµÐ¼ÑÑ.',
+'userexists' => 'Ð¢Ñ Ð»ÐµÐ¼ÑÑ ÑÑÐ²Ð¾Ð·Ñ Ð½Ð¸.
+ÐнÑлÑÑÑÑма, аÑÑÑек ÑÑÑейÑÑ Ð¸Ð»Ñ.',
'loginerror' => 'СÑвама ÑлÑбÑÑÑкÑ',
+'createaccounterror' => 'СÑÑмаÑÑÑомаÑÑ Ð°Ñ Ñиеви: $1',
'nocookiesnew' => 'ТииÑÑ ÑÑÑмаÑÑÑомаÑе анок, анÑÑек Ñон изеÑÑ ÑÑва. {{SITENAME}}-Ñа ÑииÑ
Ð½ÐµÐ½Ñ ÑодаÑÑоманкÑа ÑÑнкÑие cookies ÑÑÑви. ТÑни ÑÐ¾Ð½Ñ Ñодама маÑинаÑа ÑÑнкÑие cookies каÑдаÑ. ÐнÑлÑÑÑÑма Ð½Ð¾Ð»Ð´Ð°Ð¼Ñ ÑÐµÐ²Ñ cookies, меле ÑÑвак од ÑÑÑ ÑииÑÑ Ð»ÐµÐ¼ÑÐµÐ½Ñ Ñди ÑÑвама валÑÐµÐ½Ñ Ð¼Ð°ÑÑ
Ñа.',
'nocookieslogin' => '{{SITENAME}} лопаÑа ÑииÑ
Ð½ÐµÐ½Ñ ÑодаÑÑоманкÑа ÑÑнкÑие cookies ÑÑÑви. ТÑни ÑÐ¾Ð½Ñ Ñодама маÑинаÑа ÑÑнкÑие cookies каÑдаÑ. ÐнÑлÑÑÑÑма Ð½Ð¾Ð»Ð´Ð°Ð¼Ñ ÑÐµÐ²Ñ cookies, меле ÑÑвак Ñага веÑÑÑ.',
+'nocookiesfornew' => 'ТииÑÑ ÑÑÑмаÑÑÑомаÑÑ Ð°Ð¿Ð°Ðº Ñик ÑÑÑ Ð¼ÐµÑ Ð»Ð¸ÑÑÐ¼Ð¾Ð½Ñ Ð°Ñ ÐºÐµÐ¼Ð¾ÐºÑÑави.
+ÐаÑжак cookies нолдаÑÑ Ñли аÑ, одонзаÑÑк лопаÑÑ Ð´Ð¸ ÑÑÑÑÑÑÑ Ð¾Ð´ÑкÑ.',
'noname' => 'Тон изеÑÑ Ð¿ÑÑа кемокÑÑÐ°Ñ ÑииÑÑ Ð»ÐµÐ¼Ð¾Ñ.',
'loginsuccesstitle' => 'СÑвамаÑÑ ÑÑаÑÑ Ð»Ð°Ñ',
'loginsuccess' => "'''Тон ÑÑваÑÑ {{SITENAME}}-Ñ ÐºÐ¾Ð´Ð° \"\$1\".'''",
@@ -535,9 +592,12 @@ $2',
ÐлÑÐºÑ ÑондейÑÑ ÑÑÑви [[Special:UserLogin/signup|ÑÑÑмаÑÑÑÐ¾Ð¼Ñ Ð¾Ð´ÑкÑ]].',
'nosuchusershort' => 'ТииÑÑ "$1" лемÑа аÑ. Ðанк, Ñлема, Ñон ÑÑÑмадÑÑÑ Ð»ÐµÐ¼ÑÑ Ð°Ñ Ð»Ð°Ñ.',
'nouserspecified' => 'ТииÑÑ Ð»ÐµÐ¼ÑÑ ÑÑÑви.',
+'login-userblocked' => 'ТииÑÑ Ð¿ÐµÑÑÑ. СÑвама каÑдаÑ.',
'wrongpassword' => 'СÑвама валÑÑ ÑÑÑмаÑÑ Ð°Ñ Ð»Ð°Ñ. ÐаÑжак Ñага веÑÑÑ.',
'wrongpasswordempty' => 'СÑвама валÑÑ ÐºÐ°Ð´Ð¾Ð²ÑÑ Ð°Ð¿Ð°Ðº ÑÑÑмаÑк. СÑÑмаÑк одÑкÑ.',
'passwordtooshort' => 'Ð¢Ð¾Ð½Ñ ÑÑвама валÑенди ÑÑÑви ÑÐ»ÐµÐ¼Ñ Ð°Ñ {{PLURAL:$1|1 ÑÑÑкÑÑа|$1 ÑÑÑкÑÑа}} кÑÑжа',
+'password-name-match' => 'СÑвама лемÑе ди ÑÑвама ÑÑвама валÑе ÑÐ»ÐµÐ¼Ð°Ñ Ð°Ñ ÑкаÑ.',
+'password-login-forbidden' => 'Ð¢Ñ ÑÑвама лемÑÑ Ñди ÑÑвама валÑÑ ÐºÐ°ÑдаÑÑ.',
'mailmypassword' => 'ÐÑÑÑ Ð¾Ð´ ÑÑвама вал',
'passwordremindertitle' => 'Ðд ÑÑÐºÐ¾Ð¿Ð¸Ð½Ð³Ð¾Ð½Ñ ÑÑвама валÑÑ {{SITENAME}}Ñ ÑÑваманди',
'passwordremindertext' => 'Ðивок (Ñлема, Ñон IP адÑеÑÑÑа $1) веÑÑÑ Ð¾Ð´ ÑÑвама валÑÑ {{SITENAME}} ($4)Ñ ÑÑваманди.
@@ -545,6 +605,7 @@ $2',
УлендÑÑÑй киге Ð¸Ð»Ñ ÐºÑÑÑÑ ÑÑ Ð²ÐµÑÑкÑÑÑ Ñли Ñон мÑлÑÑÑÑак ÑÐ¾Ð½Ñ ÑÑвама валÑÐµÐ½Ñ Ñди ÑÐ¾Ð½Ñ ÑÑни Ð°Ñ Ð¼ÑлÑÑе ÑÐ¾Ð½Ñ Ð¿Ð¾Ð»Ð°ÑÑома, ÑÑÑ Ñие мезеге ÑÑ Ð¿Ð°ÑÑÑемаÑÑ Ñамда меле ди киÑÑÑÑ ÑÐ¾Ð½Ñ Ð¸Ð½Ð³Ð¾Ð»ÑÐ´ÐµÐ½Ñ ÑÑвама валÑенÑ.',
'noemail' => '"$1" ÑииÑÑ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ Ð°Ð´ÑеÑÐ¾Ñ Ð°Ñ.',
+'noemailcreate' => 'ÐÑÑви ÑÑÑÑÐµÐ¼Ñ Ð°ÑкÑÐºÑ Ðµ-паÑга',
'passwordsent' => 'Ðд ÑÑвама валÑÑ ÐºÑÑÑÐ¾Ð»Ñ "$1" ÑииÑÑ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ Ð°Ð´ÑеÑонÑÑÑ.
СÑвак ÑÐ¾Ð½Ñ ÐºÑндамда меле.',
'blocked-mailpassword' => 'ÐеÑÐ½ÐµÐ¼Ð°Ñ ÑиемаÑÑ ÑÐ¾Ð½Ñ IP адÑеÑÑÐ¾Ñ ÐºÐ°ÑдаÑ. СÑвама валÑÑ ÐºÐµÐ¼Ð¾ÐºÑÑама ÑÑнкÑÐ¸ÐµÑ ÐºÑндама Ð°Ñ Ð¼ÑÑÑгови калÑдÑв Ñиемада аÑалама ÑÑÑÑалонкÑа.',
@@ -560,15 +621,24 @@ $2',
'noemailprefs' => 'ÐÑзÑÑÑ Ñон аÑеÑÑ Ð¿ÑÑа ÑÐ¾Ð½Ñ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ Ð°Ð´ÑеÑÑе ÐикиÑÑ ÑÑÑмаÑÐ½ÐµÐ½Ñ ÐºÐ¾ÑÑÑ Ð¿ÑогÑамÑÑ ÐºÐ¾Ð´Ð°Ð¼Ð¾Ð³Ð° ÑÑÑÐ¼Ð°Ñ Ð°Ñ ÐºÑÑÑÑне.',
'emailconfirmlink' => 'ÐемокÑÑак ÑÐ¾Ð½Ñ ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ Ð°Ð´ÑеÑÑе',
'invalidemailaddress' => 'ÐлекÑÑÐ¾Ð½Ð¾Ð½Ñ Ð°Ð´ÑеÑÑÑ Ð°Ñ Ð¿ÑÑÑнÑндави ÑÑÑ ÑÐ¾Ð½Ñ Ð°Ñ ÐºÐ¾Ð½Ð´ÑÑÑи ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ Ð°Ð´ÑеÑоÑ. ÐÑÑÑ ÐºÐ¾Ð½Ð´ÑÑÑи ÑлекÑÑÐ¾Ð½Ð¾Ð½Ñ Ð°Ð´ÑеÑÐ¾Ð½Ñ Ñли каÑк ÑÑ Ð¿Ð°ÐºÑÑнÑÑÑ ÑавакÑ.',
+'cannotchangeemail' => 'СÑÑмаÑÑÑомаÑÑ Ðµ-паÑÐ³Ð¾Ñ Ð°Ñ Ð¿Ð¾Ð»Ð°ÑÑови ÑÑ Ð²Ð¸ÐºÐ¸ÑÑ ÑÑа',
+'emaildisabled' => 'Ð¢Ñ Ð»Ð¾Ð¿Ð°Ð½Ð´Ð¸ Ð°Ñ ÐºÐ¾Ð´Ð° кÑÑÐµÐ¼Ñ Ðµ-ÑÑÑмаÑ.',
'accountcreated' => 'СÑÑмаÑÑÑомаÑÑ ÑиÑ',
'accountcreatedtext' => '$1 ÑииÑÑ ÑÑÑмаÑÑÑомаÑÑ ÑиÑ.',
'createaccount-title' => 'СÑÑмаÑÑнемаÑÑ {{SITENAME}}-Ñ',
'createaccount-text' => 'ÐаÑи-кие Ñизе ÑÑÑмаÑÑÑомаÑÑ $2 {{SITENAME}} ($4)-Ñа. "$2" -ÑÑ ÑÑвама валÑÑ "$3". ТондейÑÑ ÑÑÑви ÑÑÐ²Ð°Ð¼Ñ Ñозк Ñди аÑаÑÑÐ¾Ð¼Ñ Ð¾Ð´ ÑÑвама валÑÑ.
УлендÑÑÑÐ»Ñ ÑÑ ÑÑÑмаÑÑÑомаÑÑ ÑлÑбÑÑÑкÑÐ¾ÐºÑ Ð¼ÐµÐ·ÐµÐ³Ðµ ÑÑÑ Ñие.',
+'usernamehasherror' => 'ТииÑÑ Ð»ÐµÐ¼Ð¾Ð·Ð¾Ð½Ð·Ð° ÑÑÑÑама ÑÑÑкÑÑ Ð°Ñ Ð¼ÑÑÑговиÑ
ÑÑ',
'login-throttled' => 'Тон ÑлÑ
комба велÑÑ Ð»Ð°Ð¼Ð¾Ñ ÑÑÑÑÑнеÑÑ ÑÑÐ²Ð°Ð¼Ñ ÑÑ ÑÑвама валÑÑ Ð²ÐµÐ»Ñде.
ÐнÑлÑÑÑÑма, ÑÑÑ Ð°Ñ Ð»Ð°Ð¼Ð¾Ñ Ñага веÑÑÑ ÑÑÑÑÑÑома инголе.',
+'login-abort-generic' => 'СÑвамаÑÐµÐ½Ñ Ð°Ð¿Ð°Ðº ÑиевÑÑ Ð»Ð°Ñ - ÐалÑ
ÑÑ',
'loginlanguagelabel' => 'ÐÑлÑ: $1',
+'suspicious-userlogout' => 'ÐеÑÑкÑÑе лиÑÐµÐ¼Ñ ÐºÐ°ÑдаÑÐ¾Ð»Ñ ÑÑÑ Ð¼ÐµÑ Ð½Ñеви ÑÑÐ½Ñ ÐºÑÑÐµÐ·Ñ ÐºÐ¾Ð»Ð°Ñ Ð¸Ð½ÑеÑнеÑÑ Ð²ÑÑÐ¸ÐµÐ½Ñ Ñли ÑÑка ÑÐºÐ°Ð¼Ð°Ð½Ñ ÑеÑÐ²ÐµÑ Ð²ÐµÐ»Ñде.',
+
+# E-mail sending
+'php-mail-error-unknown' => 'ÐÑ ÑÐ¾Ð´Ð°Ñ ÑлÑбÑÑÑÐºÑ PHP ÑÑÑмавÑÑÐµÐ¼Ð°Ð½Ñ ÑÑнкÑиеÑа.',
+'user-mail-no-addy' => 'ТÑÑÑÑÑÑÑ
ÑÑ ÐºÑÑÐµÐ¼Ñ Ðµ-ÑÑÑма е-паÑгаÑÑома',
# Change password dialog
'resetpass' => 'ÐолаÑÑÐ¾Ð¼Ñ ÑÑвама валÑенÑ',
@@ -582,10 +652,23 @@ $2',
'resetpass_forbidden' => 'СÑвама валÑ
Ð½ÐµÐ½Ñ Ð¿Ð¾Ð»Ð°ÑÑÐ¾Ð¼Ñ Ð°Ñ ÐºÐ¾Ð´Ð°',
'resetpass-no-info' => 'ТондейÑÑ ÑÑÑви ÑÑÑмаÑÑÑÐ¾Ð¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°Ñ Ð²Ð¸Ð´ÐµÑÑа ÑÑваманди.',
'resetpass-submit-loggedin' => 'ÐолаÑÑÐ¾Ð¼Ñ ÑÑвама валÑенÑ',
+'resetpass-submit-cancel' => 'ÐалÑ
ÑомÑ',
'resetpass-wrong-oldpass' => 'ÐÑ Ð²Ð¸Ð´Ðµ ÑÑÐºÐ¾Ð¿Ð¸Ð½Ð³Ð¾Ð½Ñ Ñли ÑÑÐ½Ð¸ÐµÐ½Ñ ÑÑвама валÑÑ.
Улема Ñон полаÑÑÑÑÑ ÑÑвама валÑе ни Ñли кÑÑеÑÑ Ð²ÐµÑÑÐºÑ Ð¾Ð´ ÑÑÐºÐ¾Ð¿Ð¸Ð½Ð³Ð¾Ð½Ñ ÑÑвама вал кÑндаманкÑа.',
'resetpass-temp-password' => 'ÐÐ¸Ð½Ð³Ð¾Ð½Ñ ÑÑвама валÑÑ:',
+# Special:PasswordReset
+'passwordreset' => 'ÐолаÑÑÐ¾Ð¼Ñ ÑÑвама валÑенÑ',
+'passwordreset-text' => 'ÐÑÑви пÑÑÐºÐ¾Ð´ÐµÐ¼Ñ ÑÑ ÑоÑмаÑÑ Ðµ-ÑÑÑма ÑÑÑмаÑÑÑомаÑÐµÐ½Ñ ÐºÐ¾Ð»Ð³Ð° ÑÑвоманди.',
+'passwordreset-legend' => 'ÐолаÑÑÐ¾Ð¼Ñ ÑÑвама валÑенÑ',
+'passwordreset-disabled' => 'СÑвама валÑÑ Ð°Ñ Ð¿Ð¾Ð»Ð°ÑÑови ÑÑ Ð²Ð¸ÐºÐ¸ÑÑ ÑÑа.',
+'passwordreset-pretext' => '{{PLURAL:$1||ТÑÑÑÑк Ñодама пÑлÑкÑÐ½ÐµÐ½Ñ Ñзда ÑÐºÑ Ð°Ð»Ñ}}',
+'passwordreset-username' => 'ТииÑÑ Ð»ÐµÐ¼Ð¾Ñ',
+'passwordreset-domain' => 'Ðомен:',
+'passwordreset-capture' => 'ÐÐ°Ð½Ð¾Ð¼Ñ Ð¼ÐµÐºÐ¾Ð»ÑÑе е-ÑÑÑма?',
+'passwordreset-capture-help' => 'ÐÑÑондÑÑÑÑ ÑÑÑÐºÑ ÑÑ Ð¿Ð°ÐºÑÑÑÑ ÑÑа е-ÑÑÑма (Ð¿Ð¸Ð½Ð³Ð¾Ð½Ñ ÑÑвама вал маÑÑ
Ñа) каÑмай нÑÑÑевома кодак кÑÑÑ Ñиенди.',
+'passwordreset-emailtitle' => 'СеÑмаÑÑÑомаÑÑ ÐºÐ¾Ð»Ð³Ð° {{SITENAME}}Ñа',
+
# Edit page toolbar
'bold_sample' => 'ÐÑке ÑÑÑмадома',
'bold_tip' => 'ÐÑке ÑÑÑмадома',
@@ -675,6 +758,9 @@ $2',
ТондейÑÑ Ñли кода [[Special:Search/{{PAGENAME}}|веÑÐµÐ½Ð´ÐµÐ¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ ÐºÐ¾Ð½ÑкÑонÑ]] Ð¸Ð»Ñ Ð»Ð¾Ð¿Ð°Ð²Ð°,
[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} веÑÐµÐ½Ð´ÐµÐ¼Ñ Ð¼Ð°Ð»Ð°Ð´Ñ Ð»Ñвомава],
Ñли [{{fullurl:{{FULLPAGENAME}}|action=edit}} пеÑÐ½ÐµÐ¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ].',
+'noarticletext-nopermission' => 'ТÑни Ð°Ñ ÑекÑÑ ÑÑ Ð»Ð¾Ð¿Ð°Ñа.
+ТондейÑÑ Ñли кода [[Special:Search/{{PAGENAME}}|веÑÐµÐ½Ð´ÐµÐ¼Ñ ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ ÐºÐ¾Ð½ÑкÑонÑ]] Ð¸Ð»Ñ Ð»Ð¾Ð¿Ð°Ð²Ð°,
+[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} веÑÐµÐ½Ð´ÐµÐ¼Ñ Ð¼Ð°Ð»Ð°Ð´Ñ Ð»Ñвомава], анÑÑек ÑÐ¾Ð½Ñ Ð°Ñ Ð¼ÑÑÑговомаÑе ÑÑ Ð»Ð¾Ð¿Ð°ÑÑ ÑÑедомÑ.',
'userpage-userdoesnotexist' => 'СÑÑмаÑÑÑомаÑÑ Â«
$1
aza ampiana ao amin'ny karokao izy ireo.",
'mailnologin' => 'Tsy misy adiresy handefasana ny tenimiafina',
'mailnologintext' => "Mila [[Special:UserLogin|miditra]] ianao sady manana imailaka mandeha sy voamarina ao amin'ny [[Special:Preferences|mombamomba anao]] vao afaka mandefa imailaka amin'ny mpikambana hafa.",
'emailuser' => 'Andefaso imailaka io mpikambana io',
+'emailuser-title-notarget' => "Handefa imailaka an'ilay mpikambana",
'emailpage' => 'Andefaso imailaka io mpikambana io',
'emailpagetext' => "Raha nametraka adiresy tena miasa tao amin'ny [[Special:Preferences|mombamomba azy io mpikambana io]],
dia ahafahana mandefa hafatra tokana ho any aminy ity fisy eto ambany ity.
diff --git a/languages/messages/MessagesMhr.php b/languages/messages/MessagesMhr.php
index 77eb3d2934..46b691a774 100644
--- a/languages/messages/MessagesMhr.php
+++ b/languages/messages/MessagesMhr.php
@@ -662,7 +662,7 @@ $messages = array(
'filehist-dimensions' => 'ÐÑгÑÑÑо',
'filehist-filesize' => 'ФайлÑн кÑгÑÑÑо',
'filehist-comment' => 'Файл неÑген:',
-'imagelinks' => 'Файл деке кÑлвеÑ-влак',
+'imagelinks' => 'ФайлÑм кÑÑÑлÑмаÑ',
'linkstoimage' => 'Тиде {{PLURAL:$1|$1 лаÑÑÑк Ñаде Ñайл дене кÑлдалÑÑн|$1 лаÑÑÑк-влак Ñаде Ñайл дене кÑлдалÑÑнÑÑ}}:',
'nolinkstoimage' => 'Тиде Ñайл дене кÑлдалÑÑе ик лаÑÑÑÐºÐ°Ñ Ñке.',
'sharedupload' => 'Тиде ÑайлÑн веÑже: $1, ÑÑге гÑнаÑ, ÑÑдÑм моло веÑÐµÐ½Ð°Ñ ÐºÑÑÑлÑÐ°Ñ Ð»Ð¸ÐµÑ.',
@@ -719,6 +719,7 @@ $messages = array(
'shortpages' => 'ÐÓ±ÑÑк лаÑÑÑк-влак',
'longpages' => 'ÐÑÐ¶Ñ Ð»Ð°ÑÑÑк-влак',
'protectedpages' => 'ТӧÑлаÑÑÐ¼Ð°Ñ Ð´ÐµÑ Ð°ÑалÑме лаÑÑÑк-влак',
+'usercreated' => '$1, $2 ÑагаÑлан {{GENDER:$3|ÑегиÑÑÑаÑийÑм ÑÑÑен|ÑегиÑÑÑаÑийÑм ÑÑÑен}}',
'newpages' => 'У лаÑÑÑк-влак',
'newpages-username' => 'ÐайдаланÑÑÑн лӱмжӧ:',
'move' => 'ÐÑÑаÑаÑ',
@@ -877,6 +878,7 @@ $messages = array(
'whatlinkshere-hideredirs' => 'Ð²ÐµÑ Ð²ÐµÑе колÑÑмаÑ-влакÑм $1',
'whatlinkshere-hidetrans' => 'пÑÑÑÑмаÑÑм $1',
'whatlinkshere-hidelinks' => 'кÑлвеÑ-влакÑм $1',
+'whatlinkshere-hideimages' => 'ÑÓ±ÑÐµÑ Ð´ÐµÐºÐµ кÑлвеÑ-влакÑм $1',
'whatlinkshere-filters' => 'ФилÑÑÑ-влак',
# Block/unblock
@@ -935,6 +937,7 @@ $messages = array(
'export' => 'ÐаÑÑÑк-влакÑм келÑÑÑаÑаÑ',
# Namespace 8 related
+'allmessagesname' => 'Ðӱм',
'allmessages-filter-all' => 'ЧÑла',
# Thumbnails
diff --git a/languages/messages/MessagesMin.php b/languages/messages/MessagesMin.php
index f248963760..b5f7718be8 100644
--- a/languages/messages/MessagesMin.php
+++ b/languages/messages/MessagesMin.php
@@ -400,7 +400,7 @@ Alasan nan diberikan adolah ''$2''.",
# Login and logout pages
'logouttext' => "'''Sanak alah kalua log dari sistem.'''
-Sanak dapek taruih manggunoan {{SITENAME}} sacaro anonim, atau Sanak dapek [[Special:UserLogin|masuak log liak]] sabagai pangguno nan samo atau pangguno nan lain.
+Sanak dapek taruih manggunoan {{SITENAME}} sacaro anonim, atau Sanak dapek [$1 masuak log liak] sabagai pangguno nan samo atau pangguno nan lain.
Parhatian bahawa bara laman mungkin masih taruih manunjukkan bahawa Sanak masih masuak log sampai Sanak mambarasihan singgahan panjelajah web Sanak.",
'welcomecreation' => '== Salamaik datang, $1! ==
diff --git a/languages/messages/MessagesMk.php b/languages/messages/MessagesMk.php
index eb1d435512..163bc26577 100644
--- a/languages/messages/MessagesMk.php
+++ b/languages/messages/MessagesMk.php
@@ -491,7 +491,6 @@ $messages = array(
'qbbrowse' => 'ÐÑелиÑÑаÑ',
'qbedit' => 'УÑеди',
'qbpageoptions' => 'Ðваа ÑÑÑаниÑа',
-'qbpageinfo' => 'СодÑжина на ÑÑÑаниÑа',
'qbmyoptions' => 'Ðои ÑÑÑаниÑи',
'qbspecialpages' => 'СпеÑиÑални ÑÑÑаниÑи',
'faq' => 'ЧÐÐ',
@@ -566,7 +565,7 @@ $messages = array(
'lastmodifiedat' => 'Ðваа ÑÑÑаниÑа поÑледен Ð¿Ð°Ñ Ðµ изменеÑа на $1 во $2 Ñ.',
'viewcount' => 'Ðваа ÑÑÑаниÑа била поÑеÑена {{PLURAL:$1|еднаÑ|$1 паÑи}}.',
'protectedpage' => 'ÐаÑÑиÑена ÑÑÑаниÑа',
-'jumpto' => 'Скокни на:',
+'jumpto' => 'ÐÑеÑди на:',
'jumptonavigation' => 'ÑодÑжини',
'jumptosearch' => 'баÑаÑ',
'view-pool-error' => 'Ðа жал во моменÑов опÑлÑжÑваÑиÑе Ñе пÑеопÑоваÑени.
@@ -761,7 +760,7 @@ $2',
# Login and logout pages
'logouttext' => "'''Сега ÑÑе одÑавени.'''
-ÐожеÑе да пÑодолжиÑе Ñо коÑиÑÑеÑе на {{SITENAME}} анонимно или можеÑе [[Special:UserLogin|повÑоÑно да Ñе наÑавиÑе]] под иÑÑо или ÑазлиÑно коÑиÑниÑко име.
+ÐожеÑе да пÑодолжиÑе Ñо коÑиÑÑеÑе на {{SITENAME}} анонимно или можеÑе [$1 повÑоÑно да Ñе наÑавиÑе] под иÑÑо или ÑазлиÑно коÑиÑниÑко име.
Ðа напоменеме дека некои ÑÑÑаниÑи може да пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°Ñ Ð´Ð° Ñе пÑикажÑÐ²Ð°Ð°Ñ ÐºÐ°ÐºÐ¾ да ÑÑе наÑавени, Ñе додека не го иÑÑиÑÑиÑе кеÑÐ¾Ñ Ð½Ð° ваÑÐ¸Ð¾Ñ Ð¿ÑелиÑÑÑваÑ.",
'welcomecreation' => '== ÐобÑедоÑдовÑе, $1! ==
ÐаÑаÑа коÑиÑниÑка ÑмеÑка е Ñоздадена.
@@ -1142,6 +1141,15 @@ $2
'edit-already-exists' => 'Ðе може да Ñе Ñоздаде нова ÑÑÑаниÑа.
ÐÑÑаÑа веÑе поÑÑои.',
'defaultmessagetext' => 'ТекÑÑ Ð½Ð° поÑакаÑа по оÑновно',
+'content-failed-to-parse' => 'Ðе ÑÑпеав да Ñа пÑедадам ÑодÑжинаÑа од ÑÐ¸Ð¿Ð¾Ñ $2 за Ð¼Ð¾Ð´ÐµÐ»Ð¾Ñ $1: $3',
+'invalid-content-data' => 'ÐеважеÑки подаÑоÑи од ÑодÑжинаÑа',
+'content-not-allowed-here' => 'СодÑжиниÑе од Ð¼Ð¾Ð´ÐµÐ»Ð¾Ñ â$1â не Ñе допÑÑÑени на ÑÑÑаниÑаÑа [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'викиÑекÑÑ',
+'content-model-text' => 'пÑоÑÑ ÑекÑÑ',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'ÐÑедÑпÑедÑваÑе: Ðваа ÑÑÑаниÑа коÑиÑÑи пÑÐµÐ¼Ð½Ð¾Ð³Ñ Ð¿Ð¾Ð²Ð¸ÐºÑваÑа на parser ÑÑнкÑии.
@@ -2064,7 +2072,7 @@ $1',
'shared-repo' => 'заедниÑко ÑкладиÑÑе',
'shared-repo-name-wikimediacommons' => 'ÐаедниÑкаÑа РизниÑа',
'filepage.css' => '/* ТÑка поÑÑавениÑе каÑкадни ÑÑилÑки ÑÑÑаниÑи (CSS) Ñе вклÑÑени во ÑÑÑаниÑаÑа за Ð¾Ð¿Ð¸Ñ Ð½Ð° подаÑоÑекаÑа, како и на клиенÑÑкиÑе викиÑа */',
-'upload-disallowed-here' => 'ÐажалоÑÑ, не можеÑе да Ñа замениÑе Ñликава Ñо нова.',
+'upload-disallowed-here' => 'ÐажалоÑÑ, не можеÑе да пÑезапиÑеÑе вÑз Ñликава.',
# File reversion
'filerevert' => 'ÐÑаÑи $1',
@@ -2617,7 +2625,8 @@ $UNWATCHURL
'undeletedrevisions' => '{{PLURAL:$1|1 измена е обновена|$1 измени Ñе обновени}}',
'undeletedrevisions-files' => '{{PLURAL:$1|1 измена|$1 измени}} и {{PLURAL:$2|1 подаÑоÑека|$2 подаÑоÑеки}} Ñе вÑаÑени',
'undeletedfiles' => '{{PLURAL:$1|1 подаÑоÑека е вÑаÑена|$1 подаÑоÑеки Ñе вÑаÑени}}',
-'cannotundelete' => 'ÐÑаÑаÑеÑо не ÑÑпеа. Ðожеби Ð½ÐµÐºÐ¾Ñ Ð´ÑÑг веÑе Ñа вÑаÑил ÑÑÑаниÑаÑа.',
+'cannotundelete' => 'ÐÑаÑаÑеÑо не ÑÑпеа:
+$1',
'undeletedpage' => "'''$1 беÑе обновена'''
ÐогледнеÑе го [[Special:Log/delete|Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐ¾Ñ Ð½Ð° бÑиÑеÑа]] за Ð¿Ð¾Ð¿Ð¸Ñ Ð½Ð° пÑеÑÑ
одни бÑиÑеÑа и обновÑваÑа.",
@@ -2926,6 +2935,7 @@ $1',
'immobile-target-namespace-iw' => 'ÐеÑÑвики-вÑÑка не може да Ñе коÑиÑÑи за пÑеименÑваÑе на ÑÑÑаниÑи.',
'immobile-source-page' => 'Ðваа ÑÑÑаниÑа не може да Ñе пÑемеÑÑÑва.',
'immobile-target-page' => 'Ðе може да Ñе пÑемеÑÑи под баÑÐ°Ð½Ð¸Ð¾Ñ Ð½Ð°Ñлов.',
+'bad-target-model' => 'СаканаÑа одÑедниÑа коÑиÑÑи дÑÑг ÑодÑжинÑки модел. Ðе можам да пÑеÑвоÑам од $1 во $2.',
'imagenocrossnamespace' => 'Ðе може да Ñе пÑемеÑÑи подаÑоÑека во неподаÑоÑеÑен именÑки пÑоÑÑоÑ',
'nonfile-cannot-move-to-file' => 'Ðе можам да пÑемеÑÑам неподаÑоÑека во подаÑоÑеÑен именÑки пÑоÑÑоÑ',
'imagetypemismatch' => 'ÐоваÑа наÑÑавка на подаÑоÑекаÑа не ÑоодвеÑÑÑвÑва на неÑÐ·Ð¸Ð½Ð¸Ð¾Ñ Ñип',
@@ -3194,6 +3204,7 @@ $1',
# Info page
'pageinfo-title' => 'ÐнÑоÑмаÑии за â$1â',
+'pageinfo-not-current' => 'ÐнÑоÑмаÑииÑе може да Ñе пÑÐ¸ÐºÐ°Ð¶Ð°Ñ Ñамо за ÑековнаÑа ÑевизиÑа.',
'pageinfo-header-basic' => 'ÐÑновни инÑоÑмаÑии',
'pageinfo-header-edits' => 'ÐÑÑоÑиÑа на ÑÑедÑваÑа',
'pageinfo-header-restrictions' => 'ÐаÑÑиÑа на ÑÑÑаниÑаÑа',
@@ -3219,10 +3230,17 @@ $1',
'pageinfo-authors' => 'ÐÑÐ¾Ñ Ð½Ð° заÑебни авÑоÑи',
'pageinfo-recent-edits' => 'ÐÑÐ¾Ñ Ð½Ð° ÑкоÑеÑни ÑÑедÑваÑа (во поÑледниÑе $1)',
'pageinfo-recent-authors' => 'ÐÑÐ¾Ñ Ð½Ð° ÑкоÑеÑни заÑебни авÑоÑи',
-'pageinfo-restriction' => 'ÐаÑÑиÑа на ÑÑÑаниÑаÑа ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|ÐолÑебен збоÑ|ÐолÑебни збоÑови}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|СкÑиена каÑегоÑиÑа|СкÑиени каÑегоÑии}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|ÐÑевмеÑÐ½Ð°Ñ Ñаблон|ÐÑевмеÑнаÑи Ñаблони}} ($1)',
+'pageinfo-toolboxlink' => 'ÐнÑоÑмаÑии за ÑÑÑаниÑаÑа',
+'pageinfo-redirectsto' => 'ÐÑенаÑоÑÑва кон',
+'pageinfo-redirectsto-info' => 'инÑо',
+'pageinfo-contentpage' => 'Се вбÑоÑÑва во ÑодÑжинÑки ÑÑÑаниÑи',
+'pageinfo-contentpage-yes' => 'Ðа',
+'pageinfo-protect-cascading' => 'ÐаÑкаднаÑа заÑÑиÑа на ÑÑÑаниÑиÑе важи од ÑÑка',
+'pageinfo-protect-cascading-yes' => 'Ðа',
+'pageinfo-protect-cascading-from' => 'СÑÑаниÑи Ñо каÑкадна заÑÑиÑа од',
# Skin names
'skinname-standard' => 'ÐлаÑиÑно',
@@ -3876,6 +3894,7 @@ $5
# Scary transclusion
'scarytranscludedisabled' => '[ÐÑевмеÑнÑваÑеÑо помеÑÑ Ð²Ð¸ÐºÐ¸ÑаÑа е оневозможено]',
'scarytranscludefailed' => '[ÐÑеземаÑеÑо на ÑÐ°Ð±Ð»Ð¾Ð½Ð¾Ñ Ð·Ð° $1 не ÑÑпеа]',
+'scarytranscludefailed-httpstatus' => '[ÐÑеземаÑеÑо на ÑÐ°Ð±Ð»Ð¾Ð½Ð¾Ñ Ð½Ðµ ÑÑпеа за $1: HTTP $2]',
'scarytranscludetoolong' => '[ÐÑÐµÐ¼Ð½Ð¾Ð³Ñ Ð´Ð¾Ð»Ð³Ð¾ URL]',
# Delete conflict
@@ -4173,8 +4192,8 @@ $5
'dberr-cachederror' => 'Следнава ÑодÑжина е кеÑиÑана копиÑа на баÑанаÑа ÑÑÑаниÑа, коÑа може да е заÑÑаÑена.',
# HTML forms
-'htmlform-invalid-input' => 'Ðма пÑоблеми Ñо дел од ваÑÐ¸Ð¾Ñ Ð²Ð½ÐµÑ',
-'htmlform-select-badoption' => 'ÐÑедноÑÑа коÑа Ñа наведовÑе не е важеÑка.',
+'htmlform-invalid-input' => 'Ðма пÑоблеми Ñо дел од ваÑÐ¸Ð¾Ñ Ð²Ð½Ð¾Ñ',
+'htmlform-select-badoption' => 'УкажанаÑа вÑедноÑÑ Ðµ неважеÑка како можноÑÑ.',
'htmlform-int-invalid' => 'ÐÑедноÑÑа коÑа Ñа наведовÑе не е Ñел бÑоÑ.',
'htmlform-float-invalid' => 'ÐÑедноÑÑа коÑа Ñа наведовÑе не е бÑоÑ.',
'htmlform-int-toolow' => 'ÐÑедноÑÑа коÑа Ñа наведовÑе е под минимÑÐ¼Ð¾Ñ Ð¾Ð´ $1',
diff --git a/languages/messages/MessagesMl.php b/languages/messages/MessagesMl.php
index 9adb47673d..fc159a19d5 100644
--- a/languages/messages/MessagesMl.php
+++ b/languages/messages/MessagesMl.php
@@ -472,7 +472,6 @@ $messages = array(
'qbbrowse' => 'à´¬àµà´°àµà´¸àµ',
'qbedit' => 'തിരàµà´¤àµà´¤àµà´',
'qbpageoptions' => 'ഠതാൾ',
-'qbpageinfo' => 'സനàµà´¦àµ¼à´à´',
'qbmyoptions' => 'à´à´¨àµà´±àµ താളàµà´àµ¾',
'qbspecialpages' => 'à´ªàµà´°à´¤àµà´¯àµà´ താളàµà´àµ¾',
'faq' => 'പതിവàµà´àµà´¦àµà´¯à´àµà´àµ¾',
@@ -736,7 +735,7 @@ $2',
'logouttext' => "'''താà´àµà´àµ¾ à´à´ªàµà´ªàµàµ¾ {{SITENAME}} à´¸à´à´°à´à´à´¤àµà´¤à´¿àµ½à´¨à´¿à´¨àµà´¨àµà´ à´²àµà´àµà´àµà´àµ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ'''
à´
à´àµà´à´¾à´¤à´®à´¾à´¯à´¿à´°àµà´¨àµà´¨àµ à´àµà´£àµà´àµ {{SITENAME}} à´¸à´âà´°à´à´à´ താà´àµà´àµ¾à´àµà´àµ à´¤àµà´àµ¼à´¨àµà´¨àµà´ à´à´ªà´¯àµà´à´¿à´àµà´à´¾à´µàµà´¨àµà´¨à´¤à´¾à´£àµâ.
-à´
à´²àµà´²àµà´àµà´à´¿àµ½ [[Special:UserLogin|à´²àµà´à´¿àµ» à´¸àµà´à´°àµà´¯à´ à´à´ªà´¯àµà´à´¿à´àµà´àµ]] à´µàµà´£àµà´àµà´ à´²àµà´à´¿àµ» à´àµà´¯àµà´¯à´¾à´µàµà´¨àµà´¨à´¤àµà´ à´à´£àµâ.
+à´
à´²àµà´²àµà´àµà´à´¿àµ½ [$1 à´²àµà´à´¿àµ» à´¸àµà´à´°àµà´¯à´ à´à´ªà´¯àµà´à´¿à´àµà´àµ] à´µàµà´£àµà´àµà´ à´²àµà´à´¿àµ» à´àµà´¯àµà´¯à´¾à´µàµà´¨àµà´¨à´¤àµà´ à´à´£àµâ.
താà´àµà´àµ¾ à´µàµà´¬àµ à´¬àµà´°àµà´¸à´±à´¿à´¨àµà´±àµ à´àµà´¯à´¾à´·àµ à´¶àµà´¨àµà´¯à´®à´¾à´àµà´à´¿à´¯à´¿à´àµà´à´¿à´²àµà´²àµà´àµà´à´¿àµ½ à´à´¿à´² താളàµà´à´³à´¿àµ½ താà´àµà´àµ¾ à´²àµà´à´¿àµ» à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨à´¤à´¾à´¯à´¿ à´à´¾à´£à´¿à´àµà´à´¾àµ» സാധàµà´¯à´¤à´¯àµà´£àµà´àµ.",
'welcomecreation' => '== à´¸àµà´µà´¾à´à´¤à´, $1! ==
താà´àµà´à´³àµà´àµ à´
à´à´à´¤àµà´µà´ à´¸àµà´·àµà´à´¿à´àµà´à´ªàµà´ªàµà´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ.
@@ -1076,6 +1075,15 @@ $1 à´à´£àµ à´ à´¤à´à´¯àµ½ à´¨à´à´¤àµà´¤à´¿à´¯à´¤àµ. ''$2'' à´à´¨àµà´¨
'edit-already-exists' => 'à´ªàµà´¤à´¿à´¯ താൾ à´¸àµà´·àµà´à´¿à´àµà´à´¾àµ» à´à´´à´¿à´àµà´à´¿à´²àµà´².
താൾ à´à´ªàµà´ªàµàµ¾ തനàµà´¨àµ നിലവിലàµà´£àµà´àµ.',
'defaultmessagetext' => 'à´¸àµà´µà´¤àµà´¯àµà´³àµà´³ സനàµà´¦àµà´¶ à´à´´àµà´¤àµà´¤àµ',
+'content-failed-to-parse' => '$2 à´à´³àµà´³à´à´àµà´à´ $1 മാതàµà´à´¯à´¿àµ½ പാഴàµà´¸àµ à´àµà´¯àµà´¯àµ½ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: $3',
+'invalid-content-data' => 'à´
സാധàµà´µà´¾à´¯ à´à´³àµà´³à´à´àµà´ à´¡àµà´±àµà´±',
+'content-not-allowed-here' => '"$1" à´à´³àµà´³à´à´àµà´à´ [[$2]] താളിൽ à´
à´¨àµà´µà´¦à´¿à´àµà´àµà´¨àµà´¨à´¿à´²àµà´²',
+
+# Content models
+'content-model-wikitext' => 'വിà´àµà´à´¿à´à´´àµà´¤àµà´¤àµ',
+'content-model-text' => 'à´¶àµà´¦àµà´§ à´à´´àµà´¤àµà´¤àµ',
+'content-model-javascript' => 'à´à´¾à´µà´¾à´¸àµà´àµà´°à´¿à´ªàµà´±àµà´±àµ',
+'content-model-css' => 'സി.à´à´¸àµ.à´à´¸àµ.',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ:''' ഠതാളിൽ വളരàµà´àµà´àµà´àµà´¤àµ½ പാഴàµà´¸àµ¼ à´«à´àµà´·à´¨àµà´àµ¾ വിളിà´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ.
@@ -1976,7 +1984,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization à´à´¾à´£àµà´.',
'shared-repo' => 'à´à´°àµ à´ªà´àµà´àµà´µàµà´àµà´à´ªàµà´ªàµà´àµà´ à´¸à´à´à´°à´£à´¿',
'shared-repo-name-wikimediacommons' => 'വിà´àµà´à´¿à´®àµà´¡à´¿à´¯ à´àµà´®àµºà´¸àµ',
'filepage.css' => '/* à´à´µà´¿à´àµ നൽà´àµà´¨àµà´¨ സി.à´à´¸àµ.à´à´¸àµ. à´ªàµà´°à´®à´¾à´£ വിവരണ താളàµà´à´³à´¿àµ½ à´àµ¾à´ªàµà´ªàµà´àµà´¤àµà´¤à´ªàµà´ªàµà´àµà´¨àµà´¨à´¤à´¾à´¯à´¿à´°à´¿à´àµà´àµà´, ബാഹàµà´¯ à´àµà´²àµà´¨àµà´±àµ വിà´àµà´à´¿à´à´³à´¿à´²àµà´ à´
തൠലà´àµà´¯à´®à´¾à´¯à´¿à´°à´¿à´àµà´àµà´ */',
-'upload-disallowed-here' => 'നിർà´à´¾à´àµà´¯à´µà´¶à´¾àµ½ à´ à´à´¿à´¤àµà´°à´¤àµà´¤à´¿à´¨àµ à´®àµà´à´³à´¿àµ½ മറàµà´±àµà´°àµ à´à´¿à´¤àµà´°à´ à´àµàµ¼à´àµà´à´¾àµ» താà´àµà´àµ¾à´àµà´àµ à´à´´à´¿à´¯à´¿à´²àµà´².',
+'upload-disallowed-here' => 'à´ à´ªàµà´°à´®à´¾à´£à´¤àµà´¤à´¿à´¨àµ à´®àµà´à´³à´¿àµ½ മറàµà´±àµà´°àµ à´ªàµà´°à´®à´¾à´£à´ à´àµàµ¼à´àµà´à´¾àµ» താà´àµà´àµ¾à´àµà´àµ à´à´´à´¿à´¯à´¿à´²àµà´².',
# File reversion
'filerevert' => '$1 തിരസàµà´àµà´à´°à´¿à´àµà´àµà´',
@@ -2515,7 +2523,8 @@ $UNWATCHURL
'undeletedrevisions' => '{{PLURAL:$1|à´à´°àµ പതിപàµà´ªàµ|$1 പതിപàµà´ªàµà´àµ¾}} à´ªàµà´¨à´à´¸àµà´¥à´¾à´ªà´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ',
'undeletedrevisions-files' => '{{PLURAL:$1|à´à´°àµ പതിപàµà´ªàµà´|$1 പതിപàµà´ªàµà´à´³àµà´}} {{PLURAL:$2|à´à´°àµ à´ªàµà´°à´®à´¾à´£à´µàµà´|$2 à´ªàµà´°à´®à´¾à´£à´àµà´à´³àµà´}} à´ªàµà´¨à´à´¸àµà´¥à´¾à´ªà´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ',
'undeletedfiles' => '{{PLURAL:$1|à´à´°àµ à´ªàµà´°à´®à´¾à´£à´|$1 à´ªàµà´°à´®à´¾à´£à´àµà´àµ¾}} à´ªàµà´¨à´à´¸àµà´¥à´¾à´ªà´¿à´àµà´àµ',
-'cannotundelete' => 'മായàµà´àµà´àµ½ തിരസàµà´àµà´à´°à´¿à´àµà´à´¾à´¨àµà´³àµà´³ à´¶àµà´°à´®à´ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ. മറàµà´±à´¾à´°àµà´àµà´à´¿à´²àµà´ à´à´¤à´¿à´¨àµ à´®àµàµ»à´ªàµ മായàµà´àµà´àµ½ തിരസàµà´àµà´à´°à´¿à´àµà´à´¿à´°à´¿à´àµà´à´¾à´.',
+'cannotundelete' => 'മായàµà´àµà´àµ½ തിരസàµà´à´°à´£à´ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ:
+$1',
'undeletedpage' => "'''$1 à´ªàµà´¨à´à´¸àµà´¥à´¾à´ªà´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ'''
à´ªàµà´¤à´¿à´¯à´¤à´¾à´¯à´¿ à´¨à´à´¨àµà´¨ à´à´´à´¿à´µà´¾à´àµà´à´²àµà´à´³àµà´àµà´¯àµà´ à´ªàµà´¨à´à´¸àµà´¥à´¾à´ªà´¨à´àµà´à´³àµà´àµà´¯àµà´ വിവരà´àµà´àµ¾ à´à´¾à´£à´¾àµ» [[Special:Log/delete|മായàµà´àµà´àµ½ à´²àµà´àµ]] à´à´¾à´£àµà´.",
@@ -2821,6 +2830,7 @@ $1',
'immobile-target-namespace-iw' => 'à´
à´¨àµà´¤àµ¼à´µà´¿à´àµà´à´¿ à´à´£àµà´£à´¿ താൾ മാറàµà´±à´¾à´¨àµà´³àµà´³ സാധàµà´µà´¾à´¯ à´²à´àµà´·àµà´¯à´®à´²àµà´².',
'immobile-source-page' => 'ഠതാൾ മാറàµà´±à´¾àµ» സാദàµà´§àµà´¯à´®à´²àµà´²',
'immobile-target-page' => 'à´²à´àµà´·àµà´¯à´®à´¾à´àµà´à´¿à´¯ തലà´àµà´àµà´àµà´à´¿à´²àµà´àµà´àµ മാറàµà´±à´¾àµ» സാധിà´àµà´à´¿à´²àµà´².',
+'bad-target-model' => 'à´à´àµà´°à´¹à´¿à´àµà´àµà´¨àµà´¨ à´²à´àµà´·àµà´¯à´ മറàµà´±àµà´°àµ à´à´³àµà´³à´à´àµà´ മാതàµà´à´¯à´¾à´£àµ à´à´ªà´¯àµà´à´¿à´àµà´àµà´¨àµà´¨à´¤àµ. $1 à´à´¨àµà´¨à´¤à´¿à´¨àµ $2 à´à´àµà´à´¿ മാറàµà´±à´¾àµ» à´à´´à´¿à´¯à´¿à´²àµà´².',
'imagenocrossnamespace' => 'à´ªàµà´°à´®à´¾à´£à´ à´
തിനായി à´
à´²àµà´²à´¾à´¤àµà´¤ നാമമàµà´à´²à´¯à´¿à´²àµà´¯àµà´àµà´àµ മാറàµà´±à´¾àµ» à´à´´à´¿à´¯à´¿à´²àµà´²',
'nonfile-cannot-move-to-file' => 'à´ªàµà´°à´®à´¾à´£à´®à´²àµà´²à´¾à´¤àµà´¤à´µ à´ªàµà´°à´®à´¾à´£à´ നാമമàµà´à´²à´¯à´¿à´²àµà´¯àµà´àµà´àµ മാറàµà´±à´¾àµ» à´à´´à´¿à´¯à´¿à´²àµà´².',
'imagetypemismatch' => 'à´ªàµà´¤à´¿à´¯ à´ªàµà´°à´®à´¾à´£à´¤àµà´¤à´¿à´¨àµà´±àµ à´à´àµà´¸àµà´±àµà´±àµàµ»à´·àµ» à´
തിനàµà´±àµ തരവàµà´®à´¾à´¯à´¿ à´à´¤àµà´¤àµà´ªàµà´àµà´¨àµà´¨à´¿à´²àµà´².',
@@ -3077,6 +3087,7 @@ $1',
# Info page
'pageinfo-title' => '"$1" à´à´¨àµà´¨ താളിനàµà´±àµ വിവരà´àµà´àµ¾',
+'pageinfo-not-current' => 'à´à´ªàµà´ªàµà´´à´¤àµà´¤àµ നാൾപàµà´ªà´¤à´¿à´ªàµà´ªà´¿àµ½ മാതàµà´°à´®àµ വിവരà´àµà´àµ¾ à´ªàµà´°à´¦àµ¼à´¶à´¿à´ªàµà´ªà´¿à´àµà´à´ªàµà´ªàµà´à´¾à´¨à´¿à´à´¯àµà´³àµà´³àµ.',
'pageinfo-header-basic' => 'à´
à´à´¿à´¸àµà´¥à´¾à´¨à´µà´¿à´µà´°à´àµà´àµ¾',
'pageinfo-header-edits' => 'തിരàµà´¤àµà´¤àµ½à´à´°à´¿à´¤àµà´°à´',
'pageinfo-header-restrictions' => 'à´¸à´à´°à´àµà´·à´£à´',
@@ -3101,10 +3112,14 @@ $1',
'pageinfo-authors' => 'à´à´àµ à´µàµà´¯à´¤àµà´¯à´¸àµà´¤à´°à´à´¯à´¿à´¤à´¾à´àµà´à´³àµà´àµ à´à´£àµà´£à´',
'pageinfo-recent-edits' => 'സമàµà´ªà´à´¾à´²à´¤àµà´¤àµ തിരàµà´¤àµà´¤àµà´àµ¾ (à´à´´à´¿à´àµà´ $1 à´à´¾à´²à´¯à´³à´µà´¿à´¨àµà´³àµà´³à´¿àµ½)',
'pageinfo-recent-authors' => 'സമàµà´ªà´à´¾à´²à´¤àµà´¤àµ à´µàµà´¯à´¤àµà´¯à´¸àµà´¤à´°à´à´¯à´¿à´¤à´¾à´àµà´à´³àµà´àµ à´à´£àµà´£à´',
-'pageinfo-restriction' => 'താൾ à´¸à´à´°à´àµà´·à´£à´ ($1)',
'pageinfo-magic-words' => 'മാനàµà´¤àµà´°à´¿à´{{PLURAL:$1|വാà´àµà´àµ|വാà´àµà´àµà´àµ¾}} ($1)',
'pageinfo-hidden-categories' => 'മറà´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨ {{PLURAL:$1|വർà´àµà´à´|വർà´àµà´à´àµà´àµ¾}} ($1)',
'pageinfo-templates' => 'à´àµ¾à´ªàµà´ªàµà´àµà´¤àµà´¤à´¿à´¯à´¿à´àµà´àµà´³àµà´³ {{PLURAL:$1|à´«à´²à´à´|à´«à´²à´à´àµà´àµ¾}} ($1)',
+'pageinfo-toolboxlink' => 'താളിനàµà´±àµ വിവരà´àµà´àµ¾',
+'pageinfo-redirectsto' => 'തിരിà´àµà´àµà´µà´¿à´àµà´¨àµà´¨àµ',
+'pageinfo-redirectsto-info' => 'വിവരà´',
+'pageinfo-contentpage' => 'à´à´³àµà´³à´à´àµà´ താളായി à´à´£àµà´£àµà´¨àµà´¨à´µ',
+'pageinfo-contentpage-yes' => 'à´
à´¤àµ',
# Skin names
'skinname-standard' => 'സാർവതàµà´°à´¿à´à´',
@@ -3673,6 +3688,7 @@ $5
# Scary transclusion
'scarytranscludedisabled' => '[à´
à´¨àµà´¤àµ¼à´µà´¿à´àµà´à´¿ à´àµ¾à´ªàµà´ªàµà´àµà´¤àµà´¤àµ½ à´¸à´àµà´à´®à´²àµà´²]',
'scarytranscludefailed' => '[$1-നൠഫലà´à´ à´à´£àµà´àµà´ªà´¿à´à´¿à´àµà´à´¾àµ» പറàµà´±à´¿à´¯à´¿à´²àµà´²]',
+'scarytranscludefailed-httpstatus' => '[$1-നൠഫലà´à´ à´à´àµà´àµà´à´¾àµ» à´à´´à´¿à´àµà´à´¿à´²àµà´²: à´à´àµà´àµ.à´±àµà´±à´¿.à´±àµà´±à´¿.പി. $2]',
'scarytranscludetoolong' => '[വളരൠനàµà´³à´àµà´àµà´àµà´¤à´²àµà´³àµà´³ à´¯àµ.à´àµ¼.à´àµ½.]',
# Delete conflict
diff --git a/languages/messages/MessagesMn.php b/languages/messages/MessagesMn.php
index 5252d6516b..ab2a0106c1 100644
--- a/languages/messages/MessagesMn.php
+++ b/languages/messages/MessagesMn.php
@@ -186,7 +186,6 @@ $messages = array(
'qbbrowse' => 'ÐÑлгÑÑ
',
'qbedit' => 'ÐаÑваÑлаÑ
',
'qbpageoptions' => 'ÐÐ½Ñ Ñ
ÑÑдаÑ',
-'qbpageinfo' => 'ÐгÑÑлга',
'qbmyoptions' => 'Ðиний Ñ
ÑÑдÑÑÑд',
'qbspecialpages' => 'ТÑÑгай Ñ
ÑÑдÑÑÑд',
'faq' => 'ТогÑмол Ñавигддаг аÑÑÑлÑÑÑд',
@@ -437,7 +436,7 @@ $2',
# Login and logout pages
'logouttext' => "'''Та одоо гаÑлаа.'''
-Та ÑÐ¼Ð°Ñ Ð½Ñг Ñ
ÑÑÑглÑгÑийн бүÑÑгÑлгүйгÑÑÑ {{SITENAME}}-г аÑиглаÑ
боломжÑой, ÑÑвÑл ÑаÑÑнÑ
аа болон Ó©Ó©Ñ Ñ
ÑÑÑглÑгÑийн бүÑÑгÑлÑÑ Ð°Ñиглан [[Special:UserLogin|даÑ
ин нÑвÑÑÑÑ]] болно.
+Та ÑÐ¼Ð°Ñ Ð½Ñг Ñ
ÑÑÑглÑгÑийн бүÑÑгÑлгүйгÑÑÑ {{SITENAME}}-г аÑиглаÑ
боломжÑой, ÑÑвÑл ÑаÑÑнÑ
аа болон Ó©Ó©Ñ Ñ
ÑÑÑглÑгÑийн бүÑÑгÑлÑÑ Ð°Ñиглан [$1 даÑ
ин нÑвÑÑÑÑ] болно.
ÐÑоÑзеÑийнÑ
аа Ñ
ийÑвÑÑ ÑанаÑ
ойг ÑÑвÑÑлÑÑ
Ñ
Ò¯ÑÑÑл заÑим нÑг Ñ
ÑÑдÑÑÑд Ð½Ñ ÑÐ°Ð½Ñ Ñ
олбогдÑон Ð±Ð°Ð¹Ð´Ð»Ð°Ð°Ñ Ñ
аÑагдаж болзоÑгүйг анÑ
ааÑÑÑлÑÑ.",
'welcomecreation' => '= $1, ÑавÑай моÑилно ÑÑ! ==
Та амжилÑÑай бүÑÑгÑгдлÑÑ.
diff --git a/languages/messages/MessagesMr.php b/languages/messages/MessagesMr.php
index d899219a78..ad74677b1f 100644
--- a/languages/messages/MessagesMr.php
+++ b/languages/messages/MessagesMr.php
@@ -464,7 +464,6 @@ $messages = array(
'qbbrowse' => 'नà¥à¤¯à¤¾à¤¹à¤¾à¤³à¤¾',
'qbedit' => 'सà¤à¤ªà¤¾à¤¦à¤¨',
'qbpageoptions' => 'हॠपान',
-'qbpageinfo' => 'सामà¤à¥à¤°à¥',
'qbmyoptions' => 'माà¤à¥ पानà¥',
'qbspecialpages' => 'विशà¥à¤· पानà¥',
'faq' => 'नà¥à¤¹à¤®à¥à¤à¥ पà¥à¤°à¤¶à¥à¤¨à¤¾à¤µà¤²à¥',
@@ -708,7 +707,7 @@ $2',
# Login and logout pages
'logouttext' => "'''तà¥à¤®à¥à¤¹à¥ à¤à¤¤à¤¾ à¤
दाà¤à¤² à¤à¤¾à¤²à¤¾(logout)à¤à¤¹à¤¾à¤¤.'''
-तà¥à¤®à¥à¤¹à¥ à¤
नामिà¤à¤ªà¤£à¥ {{SITENAME}}à¤à¤¾ à¤à¤ªà¤¯à¥à¤ à¤à¤°à¤¤ राहॠशà¤à¤¤à¤¾, à¤à¤¿à¤à¤µà¤¾ तà¥à¤¯à¤¾à¤ à¤
थवा वà¥à¤à¤³à¥à¤¯à¤¾ सदसà¥à¤¯ नावानॠ[[Special:UserLogin| पà¥à¤¨à¥à¤¹à¤¾ दाà¤à¤² हà¥à¤ शà¤à¤¤à¤¾]].
+तà¥à¤®à¥à¤¹à¥ à¤
नामिà¤à¤ªà¤£à¥ {{SITENAME}}à¤à¤¾ à¤à¤ªà¤¯à¥à¤ à¤à¤°à¤¤ राहॠशà¤à¤¤à¤¾, à¤à¤¿à¤à¤µà¤¾ तà¥à¤¯à¤¾à¤ à¤
थवा वà¥à¤à¤³à¥à¤¯à¤¾ सदसà¥à¤¯ नावानॠ[$1 पà¥à¤¨à¥à¤¹à¤¾ दाà¤à¤² हà¥à¤ शà¤à¤¤à¤¾].
à¤à¤ªà¤£ सà¥à¤µà¤¤:à¤à¥à¤¯à¤¾ नà¥à¤¯à¤¾à¤¹à¤¾à¤³à¤à¤¾à¤à¥ सय (cache) रिà¤à¤¾à¤®à¥ à¤à¤°à¤¤ नाहॠतॠपरà¥à¤¯à¤à¤¤ à¤à¤¾à¤¹à¥ पानॠà¤à¤ªà¤£ à¤
à¤à¥à¤¨ दाà¤à¤² à¤à¤¹à¤¾à¤¤, à¤
सॠनà¥à¤¸à¤¤à¥à¤ दाà¤à¤µà¤¤ राहॠशà¤à¤¤à¥à¤².",
'welcomecreation' => '== सà¥à¤¸à¥à¤µà¤¾à¤à¤¤à¤®, $1! ==
diff --git a/languages/messages/MessagesMs.php b/languages/messages/MessagesMs.php
index 61cf7376e1..9b2d5fec7f 100644
--- a/languages/messages/MessagesMs.php
+++ b/languages/messages/MessagesMs.php
@@ -338,7 +338,6 @@ $messages = array(
'qbbrowse' => 'Semak imbas',
'qbedit' => 'Sunting',
'qbpageoptions' => 'Laman ini',
-'qbpageinfo' => 'Konteks',
'qbmyoptions' => 'Laman-laman saya',
'qbspecialpages' => 'Laman khas',
'faq' => 'Soalan Lazim',
@@ -603,7 +602,7 @@ Pentadbir yang menguncinya memberikan penjelasan yang berikut: "$3".',
# Login and logout pages
'logouttext' => "'''Anda telah log keluar.'''
-Anda boleh terus menggunakan {{SITENAME}} sebagai pengguna tanpa nama, atau anda boleh [[Special:UserLogin|log masuk sekali lagi]] sebagai pengguna lain. Anda boleh membersihkan cache pelayar web anda sekiranya terdapat laman yang memaparkan seolah-olah anda masih log masuk.",
+Anda boleh terus menggunakan {{SITENAME}} sebagai pengguna tanpa nama, atau anda boleh [$1 log masuk sekali lagi] sebagai pengguna lain. Anda boleh membersihkan cache pelayar web anda sekiranya terdapat laman yang memaparkan seolah-olah anda masih log masuk.",
'welcomecreation' => '== Selamat datang, $1! ==
Akaun anda telah dibuka. Jangan lupa untuk mengubah [[Special:Preferences|keutamaan {{SITENAME}}]] anda.',
@@ -953,6 +952,15 @@ Log penghapusan bagi laman ini dilampirkan di bawah untuk rujukan.',
'edit-no-change' => 'Suntingan anda diabaikan kerana tiada perubahan dibuat pada teks tersebut.',
'edit-already-exists' => 'Tidak dapat mencipta laman baru kerana ia telah wujud.',
'defaultmessagetext' => 'Teks mesej asal',
+'content-failed-to-parse' => 'Kandungan $2 tidak dapat dihuraikan untuk model $1: $3',
+'invalid-content-data' => 'Data kandungan tidak sah',
+'content-not-allowed-here' => 'Kandungan "$1" tidak dibenarkan di halaman [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikiteks',
+'content-model-text' => 'teks biasa',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Amaran: Laman ini mengandungi terlalu banyak panggilan fungsi penghurai yang intensif.
@@ -2408,7 +2416,7 @@ atau semakan tersebut telah dipulihkan atau dibuang daripada arkib.',
'undeletedrevisions' => '$1 semakan dipulihkan',
'undeletedrevisions-files' => '$1 semakan dan $2 fail dipulihkan',
'undeletedfiles' => '$1 fail dipulihkan',
-'cannotundelete' => 'Penyahhapusan gagal; mungkin orang lain telah pun mengnyahhapuskannya.',
+'cannotundelete' => 'Penyahhapusan gagal: $1',
'undeletedpage' => "'''$1 telah dipulihkan'''
Sila rujuk [[Special:Log/delete|log penghapusan]] untuk rekod penghapusan terkini.",
@@ -2712,6 +2720,7 @@ Laman destinasi "[[:$1]]" telah pun wujud. Adakah anda mahu menghapuskannya supa
'immobile-target-namespace-iw' => 'Pautan interwiki tidak boleh dijadikan sasaran untuk pemindahan laman.',
'immobile-source-page' => 'Anda tidak boleh memindahkan laman ini.',
'immobile-target-page' => 'Anda tidak boleh memindahkan laman ke tajuk itu.',
+'bad-target-model' => 'Destinasi yang dikehendaki menggunakan model kandungan yang berlainan. $1 tidak dapat ditukar kepada $2.',
'imagenocrossnamespace' => 'Anda tidak boleh memindahkan fail ke ruang nama bukan fail',
'nonfile-cannot-move-to-file' => 'Laman bukan fail tidak boleh dipindahkan ke ruang nama fail',
'imagetypemismatch' => 'Sambungan baru fail tersebut tidak sepadan dengan jenisnya',
@@ -2976,10 +2985,10 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
'pageinfo-authors' => 'Jumlah pengarang yang berlainan',
'pageinfo-recent-edits' => 'Bilangan suntingan terkini (dalam $1 yang lalu)',
'pageinfo-recent-authors' => 'Bilangan pengarang berbeza yang terkini',
-'pageinfo-restriction' => 'Perlindungan halaman ({{lcfirst:$1}})',
'pageinfo-magic-words' => 'Kata sakti ($1)',
'pageinfo-hidden-categories' => 'Kategori tersembunyi ($1)',
'pageinfo-templates' => 'Templat tertransklusi ($1)',
+'pageinfo-toolboxlink' => 'Maklumat halaman',
# Skin names
'skinname-standard' => 'Klasik',
@@ -3559,6 +3568,7 @@ Kod pengesahan ini akan luput pada $4.',
# Scary transclusion
'scarytranscludedisabled' => '[Penyertaan pautan interwiki dilumpuhkan]',
'scarytranscludefailed' => '[Gagal mendapatkan templat $1]',
+'scarytranscludefailed-httpstatus' => '[Ambilan templat gagal untuk $1: HTTP $2]',
'scarytranscludetoolong' => '[URL terlalu panjang]',
# Delete conflict
diff --git a/languages/messages/MessagesMt.php b/languages/messages/MessagesMt.php
index 4e300693ab..432c87160d 100644
--- a/languages/messages/MessagesMt.php
+++ b/languages/messages/MessagesMt.php
@@ -418,7 +418,6 @@ $messages = array(
'qbbrowse' => 'Qalleb',
'qbedit' => 'Immodifika',
'qbpageoptions' => 'Din il-paġna',
-'qbpageinfo' => 'Kuntest',
'qbmyoptions' => 'Il-paġni tiegħi',
'qbspecialpages' => 'PaÄ¡ni speÄjali',
'faq' => 'Mistoqsijiet komuni',
@@ -664,7 +663,7 @@ Ir-raġuni li ġiet mogħtija kienet ''$2''.",
# Login and logout pages
'logouttext' => "'''Bħalissa tinsab barra mill-kont tiegħek.'''
-Tista' tkompli tuża' {{SITENAME}} bħala utent anonimu, jew tista' terġa [[Special:UserLogin|tidħol]] bħala l-istess utent jew wieħed differenti.
+Tista' tkompli tuża' {{SITENAME}} bħala utent anonimu, jew tista' terġa [$1 tidħol] bħala l-istess utent jew wieħed differenti.
Kun af li Äerti paÄ¡ni jistgħu jkomplu jidhru bħallikieku l-illogjar 'l barra mill-kont qatt ma seħħ, sakemm ma tħassarx il-cache tal-browser.",
'welcomecreation' => "== Merħba, $1! ==
Il-kont tiegħek ġie maħluq.$1-na função "$2". -O banco de dados retornou o erro "$3: $4".', +
$1
+na função "$2
".
+O banco de dados retornou o erro "$3: $4".',
'dberrortextcl' => 'Ocorreu um erro de sintaxe de busca no banco de dados.
A última tentativa de busca no banco de dados foi:
"$1"
@@ -652,10 +651,10 @@ O banco de dados retornou o erro "$3: $4".',
Quem fez o bloqueio oferece a seguinte explicação: $1',
'missing-article' => 'O banco de dados não encontrou o texto de uma página que deveria ter encontrado, com o nome "$1" $2.
-Isso normalmente é causado ao acessar uma ligação de diferença (diff) desatualizada ou para o histórico de uma página que foi apagada.
+Isso normalmente é causado ao acessar um link de diferença (dif) desatualizado ou para o histórico de uma página que foi apagada.
-Se não for este o caso, você pode ter encontrado um defeito (bug) no software.
-Anote o URL e reporte o ocorrido a um [[Special:ListUsers/sysop|administrador]].',
+Se este não for o caso, você pode ter encontrado um defeito (bug) no software.
+Anote a URL e reporte o ocorrido a um [[Special:ListUsers/sysop|administrador]].',
'missingarticle-rev' => '(revisão#: $1)',
'missingarticle-diff' => '(Dif.: $1, $2)',
'readonly_lag' => 'O banco de dados foi automaticamente bloqueado enquanto os servidores secundários se sincronizam com o principal',
@@ -721,7 +720,7 @@ O administrador que bloqueou ofereceu a seguinte explicação: "$3".',
# Login and logout pages
'logouttext' => "'''Agora você encontra-se desautenticado.'''
-à possÃvel continuar usando {{SITENAME}} anonimamente ou [[Special:UserLogin|autenticar-se novamente]] com o mesmo nome de usuário ou com um nome diferente.
+à possÃvel continuar usando {{SITENAME}} anonimamente ou [$1 autenticar-se novamente] com o mesmo nome de usuário ou com um nome diferente.
Note que algumas páginas podem continuar sendo exibidas como se você ainda estivesse autenticado até que você limpe a ''cache'' do seu navegador.",
'welcomecreation' => '== Bem-vindo(a), $1! ==
A sua conta foi criada.
@@ -850,12 +849,17 @@ Você pode já ter alterado com sucesso a sua senha, ou solicitado uma nova senh
'passwordreset-capture-help' => 'Se marcar esta caixa, o e-mail (com a senha temporária) será-lhe mostrado, além de ser enviado para o usuário.',
'passwordreset-email' => 'Endereço de e-mail:',
'passwordreset-emailtitle' => 'Detalhes da conta em {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Alguém (provavelmente você, do endereço IP $1) solicitou um lembrete do seu detalhes de conta para {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:
+'passwordreset-emailtext-ip' => 'Alguém (provavelmente você, a partir do endereço IP $1)
+solicitou um lembrete dos seus detalhes de conta para {{SITENAME}} ($4).
+{{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:
$2
-{{PLURAL:$3|Esta senha temporária |Essas senhas temporárias}} vão expirar em {{PLURAL:$5|um dia|$5 dias}}.
-Você deve efetuar login e escolher uma nova senha agora. Se você conseguir lembrar da senha, ignore este e-mail e continue usando sua senha anterior, do contrário, prossiga com as instruções clicando na ligação.',
+{{PLURAL:$3|Esta senha temporária vai|Essas senhas temporárias vão}} expirar em {{PLURAL:$5|um dia|$5 dias}}.
+Você deve efetuar login e escolher uma nova senha agora.
+Se você conseguir lembrar da senha, ignore este e-mail e continue
+usando sua senha anterior. Caso contrário, prossiga com as instruções
+disponÃveis no link.',
'passwordreset-emailtext-user' => 'O usuário $1 da {{SITENAME}} pediu a recuperação dos detalhes da sua conta na {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:
$2
@@ -883,10 +887,10 @@ Senha temporária: $2',
'bold_tip' => 'Texto em negrito',
'italic_sample' => 'Texto em itálico',
'italic_tip' => 'Texto em itálico',
-'link_sample' => 'TÃtulo da ligação',
-'link_tip' => 'Ligação interna',
-'extlink_sample' => 'http://www.example.com tÃtulo da ligação',
-'extlink_tip' => 'Ligação externa (lembre-se do prefixo http://)',
+'link_sample' => 'TÃtulo do link',
+'link_tip' => 'Link interno',
+'extlink_sample' => 'http://www.example.com tÃtulo do link',
+'extlink_tip' => 'Link externo (lembre-se do prefixo http://)',
'headline_sample' => 'Conteúdo do cabeçalho',
'headline_tip' => 'Seção de nÃvel 2',
'nowiki_sample' => 'Inserir texto não-formatado aqui',
@@ -894,7 +898,7 @@ Senha temporária: $2',
'image_sample' => 'Exemplo.jpg',
'image_tip' => 'Arquivo embutido',
'media_sample' => 'Exemplo.ogg',
-'media_tip' => 'Ligação para o arquivo',
+'media_tip' => 'Link para o arquivo',
'sig_tip' => 'Sua assinatura, com hora e data',
'hr_tip' => 'Linha horizontal (use de forma moderada)',
@@ -962,7 +966,7 @@ Ela pode ter sido movida ou removido enquanto você estava vendo a página.',
A senha para esta nova conta pode ser alterada na página ''[[Special:ChangePassword|de troca de senha]]'', após a autenticação.",
'newarticle' => '(Nova)',
-'newarticletext' => "Você seguiu uma ligação para uma página que ainda não existe.
+'newarticletext' => "Você seguiu um link para uma página que ainda não existe.
Para criá-la, comece escrevendo na caixa abaixo (veja [[{{MediaWiki:Helppage}}|a página de ajuda]] para mais informações).
Se você chegou aqui por engano, clique no botão '''voltar''' do seu navegador.",
'anontalkpagetext' => "---- ''Esta é a página de discussão para um usuário anônimo que ainda não criou uma conta ou que não a usa, de forma que temos de utilizar o endereço de IP para identificá-lo(a). Tal endereço de IP pode ser compartilhado por vários usuários. Se você é um usuário anônimo e acha que comentários irrelevantes foram direcionados a você, por gentileza, [[Special:UserLogin/signup|crie uma conta]] ou [[Special:UserLogin|autentique-se]], a fim de evitar futuras confusões com outros usuários anônimos.''",
@@ -971,7 +975,7 @@ Você pode [[Special:Search/{{PAGENAME}}|pesquisar pelo tÃtulo desta página]]
ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página].',
'noarticletext-nopermission' => 'No momento, não há conteúdo nesta página
Você pode [[Special:Search/{{PAGENAME}}|pesquisar pelo tÃtulo desta página]] em outras páginas,
-ou [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados] .',
+ou [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados] . Note que, no entanto, você não tem permissão para criar esta página.',
'missing-revision' => 'A revisão #$1 da página denominada "{{PAGENAME}}" não existe.
Isto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.
@@ -1434,7 +1438,7 @@ Eis um valor gerado aleatoriamente que você pode usar: $1",
'timezoneregion-indian' => 'Oceano Ãndico',
'timezoneregion-pacific' => 'Oceano PacÃfico',
'allowemail' => 'Permitir que outros usuários me enviem e-mails',
-'prefs-searchoptions' => 'Opções de busca',
+'prefs-searchoptions' => 'Busca',
'prefs-namespaces' => 'Espaços nominais',
'defaultns' => 'Caso contrário pesquisar nestes espaços nominais:',
'default' => 'padrão',
@@ -3107,7 +3111,6 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
'pageinfo-authors' => 'Número total de autores distintos',
'pageinfo-recent-edits' => 'Número de edições recentes (nos últimos $1)',
'pageinfo-recent-authors' => 'Número recente de autores distintos',
-'pageinfo-restriction' => 'Proteção da página ({{lcfirst:$1}})',
# Skin names
'skinname-standard' => 'Clássico',
diff --git a/languages/messages/MessagesQqq.php b/languages/messages/MessagesQqq.php
index a895f0b0a5..6684e66a73 100644
--- a/languages/messages/MessagesQqq.php
+++ b/languages/messages/MessagesQqq.php
@@ -726,7 +726,8 @@ See also {{msg-mw|protectedinterface}}.',
'exception-nologin-text' => 'Generic reason displayed on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
# Login and logout pages
-'logouttext' => 'Log out message',
+'logouttext' => 'Log out message
+* $1 is an URL to [[Special:Userlogin]] containing returnto and returntoquery parameters',
'welcomecreation' => 'The welcome message users see after registering a user account. $1 is the username of the new user.',
'yourname' => "In user preferences
@@ -1034,7 +1035,9 @@ Example: [http://translatewiki.net/w/i.php?title=Project:News&oldid=9999999 Perm
'explainconflict' => 'Appears at the top of a page when there is an edit conflict.',
'storedversion' => 'This is used in an edit conflict as the label for the top revision that has been stored, as opposed to your version that has not been stored which is shown at the bottom of the page.',
'yourdiff' => '',
-'copyrightwarning' => 'Copyright warning displayed under the edit box in editor',
+'copyrightwarning' => 'Copyright warning displayed under the edit box in editor
+*$1 - ...
+*$2 - ...',
'longpageerror' => 'Warning displayed when trying to save a text larger than the maximum size allowed',
'protectedpagewarning' => '{{Related|Semiprotectedpagewarning}}',
'semiprotectedpagewarning' => '{{Related|Semiprotectedpagewarning}}',
@@ -1059,6 +1062,36 @@ Please report at [[Support]] if you are unable to properly translate this messag
'moveddeleted-notice' => 'Shown on top of a deleted page in normal view modus ([http://translatewiki.net/wiki/Test example]).',
'edit-conflict' => "An 'Edit conflict' happens when more than one edit is being made to a page at the same time. This would usually be caused by separate individuals working on the same page. However, if the system is slow, several edits from one individual could back up and attempt to apply simultaneously - causing the conflict.",
'defaultmessagetext' => 'Caption above the default message text shown on the left-hand side of a diff displayed after clicking âShow changesâ when creating a new page in the MediaWiki: namespace',
+'content-failed-to-parse' => "Error message indicating that the page's content can not be saved because it is syntactically invalid. This may occurr for content types using serialization or a strict markup syntax.
+*$1 â content model ({{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}})
+*$2 â content format as MIME type (e.g. text/css)
+*$3 â specific error message",
+'invalid-content-data' => "Error message indicating that the page's content can not be saved because it is invalid. This may occurr for content types with internal consistency constraints.",
+'content-not-allowed-here' => 'Error message indicating that the desired content model is not supported in given localtion.
+* $1 is the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}
+* $2 is the title of the page in question.',
+
+# Content models
+'content-model-wikitext' => 'Name for the wikitext content model, used when decribing what type of content a page contains.
+
+This message is substituted in:
+*{{msg-mw|Bad-target-model}}
+*{{msg-mw|Content-not-allowed-here}}',
+'content-model-text' => 'Name for the plain text content model, used when decribing what type of content a page contains.
+
+This message is substituted in:
+*{{msg-mw|Bad-target-model}}
+*{{msg-mw|Content-not-allowed-here}}',
+'content-model-javascript' => 'Name for the JavaScript content model, used when decribing what type of content a page contains.
+
+This message is substituted in:
+*{{msg-mw|Bad-target-model}}
+*{{msg-mw|Content-not-allowed-here}}',
+'content-model-css' => 'Name for the CSS content model, used when decribing what type of content a page contains.
+
+This message is substituted in:
+*{{msg-mw|Bad-target-model}}
+*{{msg-mw|Content-not-allowed-here}}',
# Parser/template warnings
'expensive-parserfunction-warning' => 'On some (expensive) [[MetaWikipedia:Help:ParserFunctions|parser functions]] (e.g. {{#ifexist:}}
) there is a limit of how many times it may be used. This is an error message shown when the limit is exceeded.
@@ -1860,7 +1893,7 @@ This action allows editing of all of the "user rights", not just the rights of t
'recentchanges-legend' => 'Legend of the fieldset of [[Special:RecentChanges]]',
'recentchanges-summary' => 'Summary of [[Special:RecentChanges]].',
'recentchanges-label-newpage' => 'Tooltip for {{msg-mw|newpageletter}}',
-'recentchanges-label-minor' => 'Tooltip for {{msg-mw|newpageletter}}',
+'recentchanges-label-minor' => 'Tooltip for {{msg-mw|minoreditletter}}',
'recentchanges-label-bot' => 'Tooltip for {{msg-mw|boteditletter}}',
'recentchanges-label-unpatrolled' => 'Tooltip for {{msg-mw|unpatrolledletter}}',
'rcnote' => 'Used on [[Special:RecentChanges]].
@@ -2807,7 +2840,12 @@ This message was something like "unlock move protection" in the past.',
'protect-text' => 'Intro of the protection interface. See [[meta:Protect]] for more information.',
'protect-default' => '{{Identical|Default}}',
'protect-fallback' => 'This message is used as an option in the protection form on wikis were extra protection levels have been configured.',
-'protect-summary-cascade' => 'Used in edit summary when cascade protecting a page.',
+'protect-summary-cascade' => 'Used in edit summary when cascade protecting a page. Appears in protection log. See [[Special:Log]] and [[m:Special:Log]].
+
+Also used in [[Special:ProtectedPages]] when a page is cascade protected. See example: [[m:Special:ProtectedPages]].$1
is the combined wikitext of messages for all errors that caused the failure.',
'undelete-search-title' => 'Page title when showing the search form in Special:Undelete',
'undelete-search-submit' => '{{Identical|Search}}',
'undelete-error' => 'Page title when a page could not be undeleted',
@@ -2909,11 +2961,12 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
# Namespace form on various pages
'namespace' => 'This message is located at [[Special:Contributions]].',
-'invert' => 'Displayed in [[Special:RecentChanges|RecentChanges]], [[Special:RecentChangesLinked|RecentChangesLinked]] and [[Special:Watchlist|Watchlist]]
+'invert' => 'Displayed in [[Special:RecentChanges|RecentChanges]], [[Special:RecentChangesLinked|RecentChangesLinked]] and [[Special:Watchlist|Watchlist]].
-{{Identical|Invert selection}}
+This message means "Invert selection of namespace".
-This message has a tooltip {{msg-mw|tooltip-invert}}',
+This message has a tooltip {{msg-mw|tooltip-invert}}
+{{Identical|Invert selection}}',
'tooltip-invert' => 'Used in [[Special:Recentchanges]] as a tooltip for the invert checkbox. See also the message {{msg-mw|invert}}',
'namespace_association' => 'Used in [[Special:Recentchanges]] with a checkbox which selects the associated namespace to be added to the selected namespace, so that both are searched (or excluded depending on another checkbox selection). The association is between a namespace and its talk namespace.
@@ -3191,6 +3244,12 @@ Parameters:
'immobile-target-namespace-iw' => "This message appears when attempting to move a page, if a person has typed an interwiki link as a namespace prefix in the input box labelled 'To new title'. The special page 'Movepage' cannot be used to move a page to another wiki.
'Destination' can be used instead of 'target' in this message.",
+'bad-target-model' => 'This message is shown when attempting to move a page, but the move would change the page\'s content model.
+This may be the case when [[mw:Manual:$wgContentHandlerUseDB|$wgContentHandlerUseDB]] is set to false, because then a page\'s content model is derived from the page\'s title.
+* $1: The localized name of the original page\'s content model:
+**{{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}
+* $2: The localized name of the content model used by the destination title:
+**{{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}',
'fix-double-redirects' => 'This is a checkbox in [[Special:MovePage]] which allows to move all redirects from the old title to the new title.',
'protectedpagemovewarning' => 'Related message: [[MediaWiki:protectedpagewarning/{{#titleparts:{{PAGENAME}}|1|2}}]]
{{Related|Semiprotectedpagewarning}}',
@@ -3469,6 +3528,7 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
# Info page
'pageinfo-title' => 'Page title for action=info. Parameters:
* $1 is the page name',
+'pageinfo-not-current' => 'Error message displayed when information for an old revision is requested. Example: [{{fullurl:Project:News|oldid=4266597&action=info}}]',
'pageinfo-header-basic' => 'Table section header in action=info.',
'pageinfo-header-edits' => 'Table section header in action=info.',
'pageinfo-header-restrictions' => 'Table section header in action=info.',
@@ -3504,7 +3564,18 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
* $1 is the number of hidden categories on the page.',
'pageinfo-templates' => 'The list of templates transcluded within the page. Parameters:
* $1 is the number of templates transcluded within the page.',
-'pageinfo-toolboxlink' => 'Information link for the page (like \'What links here\', but to action=info for the current page instead)',
+'pageinfo-toolboxlink' => "Information link for the page (like 'What links here', but to action=info for the current page instead)",
+'pageinfo-redirectsto' => 'Key for the row shown if this page is a redirect.',
+'pageinfo-redirectsto-info' => 'Text to put in parentheses for the link to the action=info of the redirect target.',
+'pageinfo-contentpage' => 'Key for the row shown on [{{fullurl:News|action=info}} action=info] if this page is [[mw:Manual:Article count|counted as a content page]]',
+'pageinfo-contentpage-yes' => 'Yes, this page is a content page',
+'pageinfo-protect-cascading' => 'Key for the row which shows whether this page has cascading protection enabled
+*{{msg-mw|Pageinfo-protect-cascading}}
+*{{msg-mw|Pageinfo-protect-cascading-yes}}',
+'pageinfo-protect-cascading-yes' => 'Yes, protections are cascading from here
+*{{msg-mw|Pageinfo-protect-cascading}}
+*{{msg-mw|Pageinfo-protect-cascading-yes}}',
+'pageinfo-protect-cascading-from' => 'Key for a list of pages where protections are cascading from',
# Skin names
'skinname-standard' => '{{optional}}
@@ -4350,7 +4421,7 @@ See also [[MediaWiki:Confirmemail_body_changed]].
# Scary transclusion
'scarytranscludedisabled' => 'Shown when scary transclusion is disabled.',
'scarytranscludefailed' => 'Shown when the HTTP request for the template failed.',
-'scarytranscludefailed-httpstatus' => 'Identical to scarytranscludefailed, but shows the HTTP error which was received.',
+'scarytranscludefailed-httpstatus' => 'Identical to {{msg-mw|scarytranscludefailed}}, but shows the HTTP error which was received.',
'scarytranscludetoolong' => 'The URL was too long.',
'unit-pixel' => '{{optional}}',
diff --git a/languages/messages/MessagesQu.php b/languages/messages/MessagesQu.php
index 21cb4ecc02..afb3cc73ee 100644
--- a/languages/messages/MessagesQu.php
+++ b/languages/messages/MessagesQu.php
@@ -411,7 +411,6 @@ $messages = array(
'qbbrowse' => 'Maskapuy',
'qbedit' => "Llamk'apuy",
'qbpageoptions' => "P'anqap akllanankuna",
-'qbpageinfo' => "P'anqamanta willay",
'qbmyoptions' => 'Akllanaykuna',
'qbspecialpages' => "Sapaq p'anqakuna",
'faq' => 'Pasaq tapuykuna',
@@ -660,7 +659,7 @@ Amachaq kamachiqqa kayrayku amachani nispa nirqanmi: "$3".',
# Login and logout pages
'logouttext' => "'''Llamk'apuy tiyayniykiqa puchukasqañam.'''
-Sutinnaq kaspaykipas {{SITENAME}}pi wamp'uytam atinki. Mana hinataq munaspaykiqa, [[Special:UserLogin|musuqmanta yaykuy]] ñawpaq icha huk sutiwan. Huk p'anqakunaqa kaqllam rikch'akunqa, ''cache'' nisqa pakasqa hallch'ata mana ch'usaqchaptiykiqa.",
+Sutinnaq kaspaykipas {{SITENAME}}pi wamp'uytam atinki. Mana hinataq munaspaykiqa, [$1 musuqmanta yaykuy] ñawpaq icha huk sutiwan. Huk p'anqakunaqa kaqllam rikch'akunqa, ''cache'' nisqa pakasqa hallch'ata mana ch'usaqchaptiykiqa.",
'welcomecreation' => '== Allinmi hamusqayki $1! ==
Rakiqunaykiqa kicharisqañam.
Ama qunqaychu [[Special:Preferences|{{SITENAME}} allinkachinaykikunata]] kikinchayta.',
diff --git a/languages/messages/MessagesRm.php b/languages/messages/MessagesRm.php
index 8fedd557f0..e295cd6cb1 100644
--- a/languages/messages/MessagesRm.php
+++ b/languages/messages/MessagesRm.php
@@ -437,7 +437,7 @@ Il motiv inditgà è "\'\'$2\'\'".',
# Login and logout pages
'logouttext' => "'''Sortì cun success.'''
-Ti pos cuntinuar cun utilisar {{SITENAME}} anonimamain, u che ti pos [[Special:UserLogin|t'annunziar]] sco medem u in'auter utilisader. Resguarda che entginas paginas pon anc vesair or tuttina sco sche ti eras annunzià enfin che ti has stizzà il cache da tes navigatur.",
+Ti pos cuntinuar cun utilisar {{SITENAME}} anonimamain, u che ti pos [$1 t'annunziar] sco medem u in'auter utilisader. Resguarda che entginas paginas pon anc vesair or tuttina sco sche ti eras annunzià enfin che ti has stizzà il cache da tes navigatur.",
'welcomecreation' => '==Bainvegni, $1! ==
Tes conto è vegni creà .
Betg emblida da midar tias [[Special:Preferences|preferenzas da {{SITENAME}}]].',
diff --git a/languages/messages/MessagesRo.php b/languages/messages/MessagesRo.php
index 1172cdc7a6..ec3693af93 100644
--- a/languages/messages/MessagesRo.php
+++ b/languages/messages/MessagesRo.php
@@ -446,7 +446,6 @@ pe titlul secÈiunii (JavaScript)',
'qbbrowse' => 'RÄsfoieÈte',
'qbedit' => 'Modificare',
'qbpageoptions' => 'OpÈiuni ale paginii',
-'qbpageinfo' => 'InformaÈii ale paginii',
'qbmyoptions' => 'Paginile mele',
'qbspecialpages' => 'Pagini speciale',
'faq' => 'ÃntrebÄri frecvente',
@@ -712,7 +711,7 @@ Administratorul care a efectuat blocarea a furnizat explicaÈia: â$3â.',
# Login and logout pages
'logouttext' => "'''Acum sunteÈi deconectat.'''
-Sesiunea dumneavoastrÄ la {{SITENAME}} a fost închisÄ. PuteÈi continua sÄ folosiÈi {{SITENAME}} ca utilizator anonim, sau puteÈi sÄ vÄ [[Special:UserLogin|reautentificaÈi]] ca acelaÈi sau ca alt utilizator.
+Sesiunea dumneavoastrÄ la {{SITENAME}} a fost închisÄ. PuteÈi continua sÄ folosiÈi {{SITENAME}} ca utilizator anonim, sau puteÈi sÄ vÄ [$1 reautentificaÈi] ca acelaÈi sau ca alt utilizator.
ÈineÈi minte cÄ anumite pagini pot fi în continuare afiÈate ca Èi când aÈi fi autentificat pânÄ când curÄÈaÈi memoria cache a navigatorului.",
'welcomecreation' => '==Bun venit, $1!==
@@ -1077,6 +1076,15 @@ Se pare cÄ a fost ÈtearsÄ.',
'edit-already-exists' => 'Pagina nouÄ nu a putut fi creatÄ.
Ea existÄ deja.',
'defaultmessagetext' => 'Textul implicit',
+'content-failed-to-parse' => 'Nu s-a putut analiza conÈinutul de tip $2 pentru modelul $1: $3',
+'invalid-content-data' => 'Date de conÈinut invalide',
+'content-not-allowed-here' => 'ConÈinutul de tip â$1â nu este permis pe pagina [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitext',
+'content-model-text' => 'text simplu',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'AtenÈie: AceastÄ paginÄ conÈine prea multe apelÄri costisitoare ale funcÈiilor parser.
@@ -1578,7 +1586,7 @@ DacÄ decideÈi furnizarea sa, acesta va fi folosit pentru a vÄ atribui munca.'
'right-rollback' => 'Revocarea rapidÄ a modificÄrilor ultimului utilizator care a modificat o paginÄ particularÄ',
'right-markbotedits' => 'MarcheazÄ revenirea ca modificare efectuatÄ de robot',
'right-noratelimit' => 'Neafectat de limitele raportului',
-'right-import' => 'ImportÄ pagini de la alte wiki',
+'right-import' => 'ImportÄ pagini de la alte wikiuri',
'right-importupload' => 'ImportÄ pagini dintr-o încÄrcare de fiÈier',
'right-patrol' => 'MarcheazÄ modificÄrile altora ca patrulate',
'right-autopatrol' => 'ModificÄrile proprii marcate ca patrulate',
@@ -1977,7 +1985,7 @@ Poate doriÈi sÄ-i modificaÈi descrierea pe [$2 pagina sa descriptivÄ] de aco
'uploadnewversion-linktext' => 'ÃncarcÄ o versiune nouÄ a acestui fiÈier',
'shared-repo-from' => 'de la $1',
'shared-repo' => 'un depozit partajat',
-'upload-disallowed-here' => 'Din pÄcate, nu puteÈi suprascrie aceastÄ imagine.',
+'upload-disallowed-here' => 'Nu puteÈi suprascrie acest fiÈier.',
# File reversion
'filerevert' => 'Revenire $1',
@@ -2529,7 +2537,8 @@ S-ar putea ca legÄtura sÄ fie greÈitÄ, ori versiunea sÄ fi fost restauratÄ
'undeletedrevisions' => '{{PLURAL:$1|o versiune restauratÄ|$1 versiuni restaurate|$1 de versiuni restaurate}}',
'undeletedrevisions-files' => '{{PLURAL:$1|O versiune|$1 versiuni|$1 de versiuni}} Èi {{PLURAL:$2|un fiÈier|$2 fiÈiere|$2 de fiÈiere}} recuperate',
'undeletedfiles' => '{{PLURAL:$1|O versiune recuperatÄ|$1 versiuni recuperate|$1 de versiuni recuperate}}',
-'cannotundelete' => 'Recuperarea a eÈuat; este posibil ca altcineva sÄ fi recuperat pagina deja.',
+'cannotundelete' => 'Recuperarea a eÈuat:
+$1',
'undeletedpage' => "'''$1 a fost recuperat'''
ConsultaÈi [[Special:Log/delete|jurnalul Ètergerilor]] pentru a vedea toate Ètergerile Èi recuperÄrile recente.",
@@ -2841,6 +2850,7 @@ Pagina destinaÈie â[[:$1]]â existÄ deja. DoriÈi sÄ o ÈtergeÈi pentru a
'immobile-target-namespace-iw' => 'LegÄtura interwiki nu este o ÈintÄ validÄ pentru redenumire.',
'immobile-source-page' => 'AceastÄ paginÄ nu poate fi redenumitÄ.',
'immobile-target-page' => 'Imposibil de redenumit pagina la acel titlu.',
+'bad-target-model' => 'DestinaÈia doritÄ foloseÈte un alt model de conÈinut. Nu se poate converti $1 în $2.',
'imagenocrossnamespace' => 'FiÈierul nu poate fi mutat la un spaÈiu de nume care nu este destinat fiÈierelor',
'nonfile-cannot-move-to-file' => 'Entitatea (care nu este un fiÈier) nu poate fi mutatÄ Ã®n spaÈiul de nume destinat fiÈierelor',
'imagetypemismatch' => 'Extensia nouÄ a fiÈierului nu se potriveÈte cu tipul acestuia',
@@ -3084,6 +3094,7 @@ Permite adÄugarea unui motiv în descrierea modificÄrilor',
# Info page
'pageinfo-title' => 'InformaÈii pentru â$1â',
+'pageinfo-not-current' => 'InformaÈiile se pot afiÈa doar pentru versiunea curentÄ.',
'pageinfo-header-basic' => 'InformaÈii de bazÄ',
'pageinfo-header-edits' => 'Istoric modificÄri',
'pageinfo-header-restrictions' => 'ProtecÈie paginÄ',
@@ -3108,10 +3119,17 @@ Permite adÄugarea unui motiv în descrierea modificÄrilor',
'pageinfo-authors' => 'NumÄr total de autori distincÈi',
'pageinfo-recent-edits' => 'NumÄr de modificÄri recente (în ultima perioadÄ de $1)',
'pageinfo-recent-authors' => 'NumÄr de autori distincÈi recenÈi',
-'pageinfo-restriction' => 'ProtecÈie paginÄ ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|Cuvânt magic|Cuvinte magice}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorie ascunsÄ|Categorii ascunse}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Format inclus|Formate incluse}} ($1)',
+'pageinfo-toolboxlink' => 'InformaÈii despre paginÄ',
+'pageinfo-redirectsto' => 'RedirecÈioneazÄ cÄtre',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'NumÄratÄ ca paginÄ cu conÈinut',
+'pageinfo-contentpage-yes' => 'Da',
+'pageinfo-protect-cascading' => 'ProtecÈiile provin în cascadÄ de aici',
+'pageinfo-protect-cascading-yes' => 'Da',
+'pageinfo-protect-cascading-from' => 'ProtecÈiile provin în cascadÄ de la',
# Skin names
'skinname-standard' => 'Clasic',
@@ -3691,6 +3709,7 @@ Acest cod de confirmare va expira la $4.',
# Scary transclusion
'scarytranscludedisabled' => '[Transcluderea interwiki este dezactivatÄ]',
'scarytranscludefailed' => '[Èiretlicul formatului a dat greÈ pentru $1]',
+'scarytranscludefailed-httpstatus' => '[Èiretlicul formatului a dat greÈ pentru $1: HTTP $2]',
'scarytranscludetoolong' => '[URL-ul este prea lung]',
# Delete conflict
diff --git a/languages/messages/MessagesRoa_tara.php b/languages/messages/MessagesRoa_tara.php
index 2da6908c4a..d9ed9c981c 100644
--- a/languages/messages/MessagesRoa_tara.php
+++ b/languages/messages/MessagesRoa_tara.php
@@ -173,7 +173,6 @@ $messages = array(
'qbbrowse' => 'Sfoglie',
'qbedit' => 'Cange',
'qbpageoptions' => 'PÃ gene currende',
-'qbpageinfo' => 'Condeste',
'qbmyoptions' => 'PÃ ggene mije',
'qbspecialpages' => 'PÃ ggene speciale',
'faq' => 'FAQ',
@@ -446,7 +445,7 @@ L\'amministratore ca l\'ha bloccate dèje sta spiegazione: "$3".',
# Login and logout pages
'logouttext' => "'''Tu tè scolleghete.'''
-Tu puè condinuà a ausà {{SITENAME}} in mode anonime, o tu puè [[Special:UserLogin|collegarte 'n'otra vote]] cumme 'u stesse utende o cumme 'n'otre utende.
+Tu puè condinuà a ausà {{SITENAME}} in mode anonime, o tu puè [$1 collegarte 'n'otra vote] cumme 'u stesse utende o cumme 'n'otre utende.
Note Bbuene ca certe pà ggene ponne condinuà a essere viste cumme ce tu ste angore colleghete, fine a quanne a cache d'u browser no se sdeveche.",
'welcomecreation' => "== Bovegne, $1! ==
'U cunde tue ha state ccrejete.
@@ -2929,7 +2928,6 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
'pageinfo-authors' => 'Numere Totale de autore diverse',
'pageinfo-recent-edits' => "Numere de le urteme cangiaminde ('mbonde a $1)",
'pageinfo-recent-authors' => 'Numere de le urteme autore diverse',
-'pageinfo-restriction' => "Protezione d'a pà gene ({{lcfirst:$1}})",
'pageinfo-magic-words' => '{{PLURAL:$1|Parole|Parole}} maggiche ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorije|Categorije}} scunnute ($1)',
'pageinfo-templates' => 'Esclude {{PLURAL:$1|template|template}} ($1)',
diff --git a/languages/messages/MessagesRu.php b/languages/messages/MessagesRu.php
index 80192807ec..94b50396ba 100644
--- a/languages/messages/MessagesRu.php
+++ b/languages/messages/MessagesRu.php
@@ -28,6 +28,7 @@
* @author Dim Grits
* @author Don Alessandro
* @author Eleferen
+ * @author Erdemaslancan
* @author EugeneZelenko
* @author Eugrus
* @author Express2000
@@ -40,6 +41,7 @@
* @author HalanTul
* @author Huuchin
* @author Illusion
+ * @author Incnis Mrsi
* @author Iniquity
* @author Innv
* @author Jackie
@@ -61,6 +63,7 @@
* @author Sagan
* @author Shirayuki
* @author Sk
+ * @author Spider
* @author TarzanASG
* @author Temuri rajavi
* @author Vago
@@ -539,7 +542,6 @@ $messages = array(
'qbbrowse' => 'ÐÑоÑмоÑÑеÑÑ',
'qbedit' => 'ÐÑавиÑÑ',
'qbpageoptions' => 'ÐаÑÑÑойки ÑÑÑаниÑÑ',
-'qbpageinfo' => 'Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑÑÑаниÑе',
'qbmyoptions' => 'ÐаÑи наÑÑÑойки',
'qbspecialpages' => 'СпеÑиалÑнÑе ÑÑÑаниÑÑ',
'faq' => 'ЧаÐÐ',
@@ -552,7 +554,7 @@ $messages = array(
'vector-action-protect' => 'ÐаÑиÑиÑÑ',
'vector-action-undelete' => 'ÐоÑÑÑановиÑÑ',
'vector-action-unprotect' => 'ÐзмениÑÑ Ð·Ð°ÑиÑÑ',
-'vector-simplesearch-preference' => 'ÐклÑÑиÑÑ ÑаÑÑиÑеннÑе поиÑковÑе подÑказки (ÑолÑко Ð´Ð»Ñ Ð¾ÑоÑÐ¼Ð»ÐµÐ½Ð¸Ñ Â«ÐекÑоÑное»)',
+'vector-simplesearch-preference' => 'ÐклÑÑиÑÑ ÑпÑоÑÑннÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ð¸Ñка (ÑолÑко Ð´Ð»Ñ Ð¾ÑоÑÐ¼Ð»ÐµÐ½Ð¸Ñ Â«ÐекÑоÑное»)',
'vector-view-create' => 'Создание',
'vector-view-edit' => 'ÐÑавка',
'vector-view-history' => 'ÐÑÑоÑиÑ',
@@ -803,7 +805,7 @@ $2',
# Login and logout pages
'logouttext' => "'''ÐÑ Ð·Ð°Ð²ÐµÑÑили ÑÐµÐ°Ð½Ñ ÑабоÑÑ.'''
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑодолжиÑÑ ÑÑаÑÑие в {{grammar:genitive|{{SITENAME}}}} анонимно или [[Special:UserLogin|пÑедÑÑавиÑÑÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾]] под Ñем же или дÑÑгим именем.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑодолжиÑÑ ÑÑаÑÑие в {{grammar:genitive|{{SITENAME}}}} анонимно или [$1 пÑедÑÑавиÑÑÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾] под Ñем же или дÑÑгим именем.
ÐекоÑоÑÑе ÑÑÑаниÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿ÑодолжаÑÑ Ð¾ÑобÑажаÑÑÑÑ Ð² Ñом виде, как бÑдÑо Ð²Ñ Ð²ÑÑ ÐµÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÑиÑÑеме. ÐÐ»Ñ Ð±Ð¾ÑÑÐ±Ñ Ñ ÑÑим Ñвлением обновиÑе ÐºÐµÑ Ð±ÑаÑзеÑа.",
'welcomecreation' => '== ÐобÑо пожаловаÑÑ, $1! ==
ÐаÑа ÑÑÑÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ñоздана.
@@ -972,7 +974,7 @@ $2
'changeemail-oldemail' => 'ТекÑÑий адÑÐµÑ ÑлекÑÑонной поÑÑÑ:',
'changeemail-newemail' => 'ÐовÑй адÑÐµÑ ÑлекÑÑонной поÑÑÑ:',
'changeemail-none' => '(неÑ)',
-'changeemail-submit' => 'ÐзменениÑÑ Ð°Ð´ÑеÑ',
+'changeemail-submit' => 'ÐзмениÑÑ Ð°Ð´ÑеÑ',
'changeemail-cancel' => 'ÐÑмена',
# Edit page toolbar
@@ -1180,6 +1182,15 @@ $2
'edit-already-exists' => 'Ðевозможно ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑÑÑаниÑÑ.
Ðна Ñже ÑÑÑеÑÑвÑеÑ.',
'defaultmessagetext' => 'ТекÑÑ Ð¿Ð¾ ÑмолÑаниÑ',
+'content-failed-to-parse' => 'СодеÑжимое $2 не ÑооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¿Ñ $1: $3.',
+'invalid-content-data' => 'ÐедопÑÑÑимÑе даннÑе',
+'content-not-allowed-here' => 'СодеÑжимое "$1" недопÑÑÑимо на ÑÑÑаниÑе [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'викиÑекÑÑ',
+'content-model-text' => 'обÑÑнÑй ÑекÑÑ',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Ðнимание. ÐÑа ÑÑÑаниÑа ÑодеÑÐ¶Ð¸Ñ ÑлиÑком много вÑзовов ÑеÑÑÑÑоÑмкиÑ
ÑÑнкÑий.
@@ -2088,7 +2099,7 @@ $1',
'shared-repo-from' => 'из $1',
'shared-repo' => 'обÑего Ñ
ÑанилиÑа',
'shared-repo-name-wikimediacommons' => 'ÐикиÑклада',
-'upload-disallowed-here' => 'Ð ÑожалениÑ, Ð²Ñ Ð½Ðµ можеÑе пеÑезапиÑаÑÑ ÑÑо изобÑажение.',
+'upload-disallowed-here' => 'ÐÑ Ð½Ðµ можеÑе пеÑезапиÑаÑÑ ÑÑÐ¾Ñ Ñайл.',
# File reversion
'filerevert' => 'ÐозвÑÐ°Ñ Ðº ÑÑаÑой веÑÑии $1',
@@ -2632,7 +2643,8 @@ $UNWATCHURL
'undeletedrevisions' => '$1 {{PLURAL:$1|изменение|изменениÑ|изменений}} воÑÑÑановлено',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|веÑÑиÑ|веÑÑии|веÑÑий}} и $2 {{PLURAL:$2|Ñайл|Ñайла|Ñайлов}} воÑÑÑановлено',
'undeletedfiles' => '$1 {{PLURAL:$1|Ñайл воÑÑÑановлен|Ñайла воÑÑÑановлено|Ñайлов воÑÑÑановлено}}',
-'cannotundelete' => 'ÐÑибка воÑÑÑановлениÑ. Ðозможно, кÑо-Ñо дÑÑгой Ñже воÑÑÑановил ÑÑÑаниÑÑ.',
+'cannotundelete' => 'ÐÑибка воÑÑÑановлениÑ:
+$1',
'undeletedpage' => "'''СÑÑаниÑа «$1» бÑла воÑÑÑановлена.'''
ÐÐ»Ñ Ð¿ÑоÑмоÑÑа ÑпиÑка поÑледниÑ
Ñдалений и воÑÑÑановлений Ñм. [[Special:Log/delete|жÑÑнал Ñдалений]].",
@@ -2936,6 +2948,7 @@ $1',
'immobile-target-namespace-iw' => 'СÑÑлка инÑеÑвики не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзована Ð´Ð»Ñ Ð¿ÐµÑеименованиÑ.',
'immobile-source-page' => 'ÐÑÑ ÑÑÑаниÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð¿ÐµÑеименоваÑÑ.',
'immobile-target-page' => 'ÐелÑÐ·Ñ Ð¿ÑиÑвоиÑÑ ÑÑÑаниÑе ÑÑо имÑ.',
+'bad-target-model' => 'Ðевозможно пÑеобÑазоваÑÑ $1 в $2: неÑовмеÑÑимÑе модели даннÑÑ
.',
'imagenocrossnamespace' => 'Ðевозможно даÑÑ ÑÐ°Ð¹Ð»Ñ Ð¸Ð¼Ñ Ð¸Ð· дÑÑгого пÑоÑÑÑанÑÑва имÑн',
'nonfile-cannot-move-to-file' => 'Ðевозможно пеÑеименовÑваÑÑ ÑÑÑаниÑÑ Ð² ÑайлÑ',
'imagetypemismatch' => 'Ðовое ÑаÑÑиÑение Ñайла не ÑооÑвеÑÑÑвÑÐµÑ ÐµÐ³Ð¾ ÑипÑ',
@@ -3200,6 +3213,7 @@ The wiki server can't provide data in a format your client can read.",
# Info page
'pageinfo-title' => 'Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ «$1»',
+'pageinfo-not-current' => 'ÐаннÑе пÑедоÑÑавлÑÑÑÑÑ ÑолÑко Ð´Ð»Ñ ÑекÑÑей пÑавки.',
'pageinfo-header-basic' => 'ÐÑновнÑе ÑведениÑ',
'pageinfo-header-edits' => 'ÐÑÑоÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹',
'pageinfo-header-restrictions' => 'ÐаÑиÑа ÑÑÑаниÑÑ',
@@ -3214,6 +3228,7 @@ The wiki server can't provide data in a format your client can read.",
'pageinfo-views' => 'ÐолиÑеÑÑво пÑоÑмоÑÑов',
'pageinfo-watchers' => 'ЧиÑло наблÑдаÑÑиÑ
',
'pageinfo-redirects-name' => 'ÐеÑенапÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð° ÑÑÑ ÑÑÑаниÑÑ',
+'pageinfo-redirects-value' => '$1',
'pageinfo-subpages-name' => 'ÐодÑÑÑаниÑÑ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑÑаниÑÑ',
'pageinfo-subpages-value' => '$1($2 {{PLURAL:$2|пеÑенапÑавление|пеÑенапÑавлениÑ|пеÑенапÑавлений}}; $3 {{PLURAL:$3|обÑÑнаÑ|обÑÑнÑе|обÑÑнÑÑ
}})',
'pageinfo-firstuser' => 'СоздаÑÐµÐ»Ñ ÑÑÑаниÑÑ',
@@ -3224,10 +3239,12 @@ The wiki server can't provide data in a format your client can read.",
'pageinfo-authors' => 'ÐбÑее ÑиÑло ÑазлиÑнÑÑ
авÑоÑов',
'pageinfo-recent-edits' => 'ÐÑавок за поÑледнее вÑÐµÐ¼Ñ (в ÑеÑение $1)',
'pageinfo-recent-authors' => 'УникалÑнÑÑ
авÑоÑов за поÑледнее вÑемÑ',
-'pageinfo-restriction' => 'ÐаÑиÑа ÑÑÑаниÑÑ ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|ÐагиÑеÑкое Ñлово|ÐагиÑеÑкие Ñлова}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|СкÑÑÑÐ°Ñ ÐºÐ°ÑегоÑиÑ|СкÑÑÑÑÑ
каÑегоÑий}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Шаблон|Шаблонов}} ($1)',
+'pageinfo-toolboxlink' => 'Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑÑÑаниÑе',
+'pageinfo-contentpage-yes' => 'Ðа',
+'pageinfo-protect-cascading-yes' => 'Ðа',
# Skin names
'skinname-standard' => 'ÐлаÑÑиÑеÑкое',
@@ -3822,6 +3839,7 @@ $5
# Scary transclusion
'scarytranscludedisabled' => '[ÐнÑеÑвики-вклÑÑение оÑклÑÑено]',
'scarytranscludefailed' => '[ÐÑибка обÑаÑÐµÐ½Ð¸Ñ Ðº ÑÐ°Ð±Ð»Ð¾Ð½Ñ $1]',
+'scarytranscludefailed-httpstatus' => '[Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ Ñаблон Ð´Ð»Ñ $1: HTTP $2]',
'scarytranscludetoolong' => '[СлиÑком длиннÑй URL]',
# Delete conflict
@@ -4123,7 +4141,7 @@ MediaWiki ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð² надежде, ÑÑо она бÑ
'sqlite-no-fts' => '$1 без поддеÑжки полноÑекÑÑового поиÑка',
# New logging system
-'logentry-delete-delete' => '$1 Ñдалил ÑÑÑаниÑÑ $3',
+'logentry-delete-delete' => '$1 {{GENDER:$1|Ñдалил|Ñдалила}} ÑÑÑаниÑÑ $3',
'logentry-delete-restore' => '$1 воÑÑÑановил ÑÑÑаниÑÑ $3',
'logentry-delete-event' => '$1 изменил видимоÑÑÑ {{PLURAL:$5|$5 запиÑи жÑÑнала|$5 запиÑей жÑÑнала|$5 запиÑей жÑÑнала}} на $3: $4',
'logentry-delete-revision' => '$1 изменил видимоÑÑÑ {{PLURAL:$5|$5 веÑÑии|$5 веÑÑий|$5 веÑÑий}} на ÑÑÑаниÑе $3: $4',
diff --git a/languages/messages/MessagesRue.php b/languages/messages/MessagesRue.php
index e75f66c3bd..0865153c35 100644
--- a/languages/messages/MessagesRue.php
+++ b/languages/messages/MessagesRue.php
@@ -262,7 +262,6 @@ $messages = array(
'qbbrowse' => 'ÐеÑеглÑдаÑи',
'qbedit' => 'ÐдÑÑоваÑи',
'qbpageoptions' => 'ТоÑа ÑÑоÑÑнка',
-'qbpageinfo' => 'ÐонÑекÑÑ',
'qbmyoptions' => 'ÐÐ¾Ñ ÑÑоÑÑнкÑ',
'qbspecialpages' => 'ШпеÑÑÐ°Ð»Ð½Ñ ÑÑоÑÑнкÑ',
'faq' => 'ЧаÑÑÑ Ð·Ð²ÑдованÑ',
@@ -522,7 +521,7 @@ $2',
# Login and logout pages
'logouttext' => "'''ÐÑÐ½Ñ ÑÑÑе одголоÑенÑй(а).'''
-ÐожеÑе пÑодовжоваÑи в анонÑмнÑм пеÑезеÑÐ°Ð½Ñ Ñ ÐµÐ´ÑÑаÑÑÑ {{grammar:2sg|{{SITENAME}}}}, або ÑÑ Ð¼Ð¾Ð¶ÐµÑе [[Special:UserLogin|зÑÑÑ Ð¿ÑиголоÑиÑи]] Ñк ÑÐ¾Ñ ÑамÑй або Ñк ÑнÑÑй Ñ
оÑноваÑелÑ. ÐаÑÐºÑ ÑÑоÑÑÐ½ÐºÑ ÑÑ Ð¼Ð¾Ð¶ÑÑÑ Ð·Ð¾Ð±ÑажоваÑи Ñк кÑÐ±Ñ ÑÑÑе бÑли доÑепеÑÑ Ð¿ÑиголоÑенÑ, Ð¿Ð¾ÐºÑ Ð½Ðµ змажеÑе ÐºÐµÑ Ð¿ÐµÑеглÑдаÑа.",
+ÐожеÑе пÑодовжоваÑи в анонÑмнÑм пеÑезеÑÐ°Ð½Ñ Ñ ÐµÐ´ÑÑаÑÑÑ {{grammar:2sg|{{SITENAME}}}}, або ÑÑ Ð¼Ð¾Ð¶ÐµÑе [$1 зÑÑÑ Ð¿ÑиголоÑиÑи] Ñк ÑÐ¾Ñ ÑамÑй або Ñк ÑнÑÑй Ñ
оÑноваÑелÑ. ÐаÑÐºÑ ÑÑоÑÑÐ½ÐºÑ ÑÑ Ð¼Ð¾Ð¶ÑÑÑ Ð·Ð¾Ð±ÑажоваÑи Ñк кÑÐ±Ñ ÑÑÑе бÑли доÑепеÑÑ Ð¿ÑиголоÑенÑ, Ð¿Ð¾ÐºÑ Ð½Ðµ змажеÑе ÐºÐµÑ Ð¿ÐµÑеглÑдаÑа.",
'welcomecreation' => '== ÐÑÑаÑме ваÑ, $1! ==
ÐаÑе конÑо бÑло вÑÑвоÑене.
Ðе забÑдÑÑе змÑниÑи ÑÐ²Ð¾Ñ [[Special:Preferences|наÑÑавлÑÐ½Ñ ÑайÑÑ]].',
diff --git a/languages/messages/MessagesSa.php b/languages/messages/MessagesSa.php
index fe3cd0f81c..d83b5df61d 100644
--- a/languages/messages/MessagesSa.php
+++ b/languages/messages/MessagesSa.php
@@ -424,7 +424,6 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
'qbbrowse' => 'बà¥à¤°à¤¾à¤à¤¸à¥ à¤à¤¤à¥à¤¯à¥à¤¤à¤¤à¥ à¤à¤°à¥à¤¤à¥à¥¤',
'qbedit' => 'समà¥à¤ªà¤¾à¤¦à¥à¤¯à¤¤à¤¾à¤®à¥',
'qbpageoptions' => 'à¤à¤¦à¤ पà¥à¤·à¥à¤ मà¥',
-'qbpageinfo' => 'पà¥à¤°à¤¸à¤à¤à¤',
'qbmyoptions' => 'मम पà¥à¤·à¥à¤ ानि',
'qbspecialpages' => 'विशà¥à¤·à¤ªà¥à¤·à¥à¤ ानि',
'faq' => 'बहà¥à¤§à¤¾ पà¥à¤à¥à¤à¥à¤¯à¤®à¤¾à¤¨à¤¾à¤ पà¥à¤°à¤¶à¥à¤¨à¤¾à¤',
@@ -679,7 +678,7 @@ $2',
# Login and logout pages
'logouttext' => "'''à¤à¤µà¤¾à¤¨à¥ à¤
धà¥à¤¨à¤¾ बहिराà¤à¤¤à¤ ।'''
-à¤à¤µà¤¾à¤¨à¥ {{SITENAME}} à¤à¤¤à¥à¤¯à¥à¤¤à¤¤à¥ à¤
नामतया पà¥à¤°à¤¯à¥à¤à¥à¤¤à¥à¤ शà¤à¥à¤¨à¥à¤¤à¤¿, à¤
थवा à¤à¤µà¤¾à¤¨à¥ तà¥à¤¨à¥à¤µ पà¥à¤°à¤¯à¥à¤à¥à¤¤à¥à¤¨à¤¾à¤®à¥à¤¨à¤¾, à¤à¤¿à¤¨à¥à¤¨à¤ªà¥à¤°à¤¯à¥à¤à¥à¤¤à¥à¤¨à¤¾à¤®à¥à¤¨à¤¾ वा [[Special:UserLogin|पà¥à¤¨à¤ पà¥à¤°à¤µà¥à¤·à¥à¤à¥à¤ शà¤à¥à¤¨à¥à¤¤à¤¿]]।
+à¤à¤µà¤¾à¤¨à¥ {{SITENAME}} à¤à¤¤à¥à¤¯à¥à¤¤à¤¤à¥ à¤
नामतया पà¥à¤°à¤¯à¥à¤à¥à¤¤à¥à¤ शà¤à¥à¤¨à¥à¤¤à¤¿, à¤
थवा à¤à¤µà¤¾à¤¨à¥ तà¥à¤¨à¥à¤µ पà¥à¤°à¤¯à¥à¤à¥à¤¤à¥à¤¨à¤¾à¤®à¥à¤¨à¤¾, à¤à¤¿à¤¨à¥à¤¨à¤ªà¥à¤°à¤¯à¥à¤à¥à¤¤à¥à¤¨à¤¾à¤®à¥à¤¨à¤¾ वा [$1 पà¥à¤¨à¤ पà¥à¤°à¤µà¥à¤·à¥à¤à¥à¤ शà¤à¥à¤¨à¥à¤¤à¤¿]।
à¤à¤¦à¤¾à¤¨à¥à¤®à¤ªà¤¿ à¤à¤¾à¤¨à¤¿à¤à¤¨ पà¥à¤·à¥à¤ ानि पà¥à¤°à¥à¤µà¤µà¤¦à¥à¤µ दà¥à¤¶à¥à¤¯à¥à¤°à¤¨à¥ । à¤
सà¥à¤¯ वारणाय विà¤à¤°à¤à¤¸à¥à¤¯ सà¥à¤®à¥à¤¤à¤¿à¤¸à¤à¥à¤à¤¯à¤ रिà¤à¥à¤¤à¥à¤à¥à¤°à¤¿à¤¯à¤¤à¤¾à¤®à¥ ।",
'welcomecreation' => '==सà¥à¤µà¤¾à¤à¤¤à¤®à¥â, $1!==
à¤à¤µà¤¤à¤¾ सदसà¥à¤¯à¤¤à¤¾ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤¾ à¤
सà¥à¤¤à¤¿à¥¤
@@ -1075,7 +1074,7 @@ $2
'viewpagelogs' => 'à¤
सà¥à¤¯ पà¥à¤·à¥à¤ सà¥à¤¯ लà¥à¤à¤à¥ à¤à¤¤à¥à¤¯à¥à¤¤à¤¦à¥ दरà¥à¤¶à¤¯à¤¤à¥',
'nohistory' => 'à¤
सà¥à¤¯ पà¥à¤·à¥à¤ सà¥à¤¯ à¤à¥à¤¤à¥ पà¥à¤·à¥à¤ à¥à¤¤à¤¿à¤¹à¤¾à¤¸à¤ न वरà¥à¤¤à¤¤à¥à¥¤',
'currentrev' => 'सदà¥à¤¯à¤à¤à¤¾à¤²à¥à¤¨à¤¾ à¤à¤µà¥à¤¤à¥à¤¤à¤¿à¤',
-'currentrev-asof' => 'वरà¥à¤¤à¤®à¤¤à¥ à¤à¤µà¥à¤¤à¥à¤¤à¤¿à¤ $1 à¤à¤¤à¤¿ समयà¥',
+'currentrev-asof' => 'वरà¥à¤¤à¤®à¤¾à¤¨à¤¾ à¤à¤µà¥à¤¤à¥à¤¤à¤¿à¤ $1 à¤à¤¤à¤¿ समयà¥',
'revisionasof' => '$1 à¤à¤¤à¥à¤¯à¤¸à¥à¤¯ à¤à¤µà¥à¤¤à¥à¤¤à¤¿à¤',
'revision-info' => '$1à¤à¤¤à¤¿ समयसà¥à¤¯ à¤à¤µà¥à¤¤à¥à¤¤à¤¿à¤ $2 à¤à¤¤à¥à¤¯à¤¨à¥à¤¨',
'previousrevision' => 'â पà¥à¤°à¤¾à¤¤à¤¨à¤¾à¤¨à¤¿ सà¤à¤¸à¥à¤à¤°à¤£à¤¾à¤¨à¤¿',
@@ -1889,7 +1888,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
'filehist-current' => 'सदà¥à¤¯à¥à¤à¤¾à¤¤à¤®à¥',
'filehist-datetime' => 'दिनाà¤à¥à¤à¤/समयà¤',
'filehist-thumb' => 'à¤
à¤à¤à¥à¤·à¥à¤ नà¤à¤¾à¤à¤¾à¤°à¤®à¥',
-'filehist-thumbtext' => '$1 समयॠविदà¥à¤¯à¤®à¤¤à¥à¤¯à¤¾à¤ à¤à¤µà¥à¤¤à¥à¤¤à¥à¤ à¤
à¤à¤à¥à¤·à¥à¤ नà¤à¤¾à¤à¤¾à¤°à¤®à¥',
+'filehist-thumbtext' => '$1 समयॠविदà¥à¤¯à¤®à¤¾à¤¨à¤¾à¤¯à¤¾à¤ à¤à¤µà¥à¤¤à¥à¤¤à¥à¤ à¤
à¤à¤à¥à¤·à¥à¤ नà¤à¤¾à¤à¤¾à¤°à¤®à¥',
'filehist-nothumb' => 'à¤
à¤à¥à¤à¥à¤·à¥à¤à¤¨à¤à¤¾à¤à¤¾à¤°à¤à¤ नाशà¥à¤¤à¤¿ ।',
'filehist-user' => 'यà¥à¤à¤à¤',
'filehist-dimensions' => 'à¤à¤¯à¤¾à¤®à¤¾à¤',
@@ -2988,7 +2987,6 @@ $2 à¤à¤¤à¤¿ पà¥à¤°à¤à¤¾à¤°à¤¸à¥à¤¯ à¤
वरà¥à¤§à¤ à¤à¤°à¥à¤¤à¥à¤
'pageinfo-authors' => 'पà¥à¤°à¤¤à¥à¤¯à¥à¤à¤à¤°à¥à¤¤à¥à¤£à¤¾à¤ समà¤à¥à¤°à¤¾ सà¤à¥à¤à¥à¤¯à¤¾ ।',
'pageinfo-recent-edits' => 'सदà¥à¤¯à¥à¤à¤¾à¤¤à¤¸à¤®à¥à¤ªà¤¾à¤¦à¤¨à¤¾à¤¨à¤¾à¤ सà¤à¥à¤à¥à¤¯à¤¾ (à¤à¤¤à¥à¤·à¥ $1 दिनà¥à¤·à¥)',
'pageinfo-recent-authors' => 'पà¥à¤°à¤¤à¥à¤¯à¥à¤à¤à¤°à¥à¤¤à¥à¤£à¤¾à¤ सदà¥à¤¯à¤à¤à¤¾à¤²à¥à¤¨à¤¾ सà¤à¥à¤à¥à¤¯à¤¾ ।',
-'pageinfo-restriction' => 'पà¥à¤·à¥à¤ सà¤à¤°à¤à¥à¤·à¤£à¤®à¥ ({{lcfirst:$1}})',
'pageinfo-magic-words' => 'मानà¥à¤¤à¥à¤°à¤¿à¤{{PLURAL:$1|शबà¥à¤¦à¤|शबà¥à¤¦à¤¾à¤}} ($1)',
'pageinfo-hidden-categories' => 'à¤à¥à¤ªà¤¿à¤¤{{PLURAL:$1|वरà¥à¤à¤|वरà¥à¤à¤¾à¤}} ($1)',
'pageinfo-templates' => 'समायà¥à¤à¤¿à¤¤{{PLURAL:$1|फलà¤à¤®à¥|फलà¤à¤¾à¤¨à¤¿}} ($1)',
diff --git a/languages/messages/MessagesSah.php b/languages/messages/MessagesSah.php
index 7998429c70..f126d897f6 100644
--- a/languages/messages/MessagesSah.php
+++ b/languages/messages/MessagesSah.php
@@ -187,7 +187,6 @@ $messages = array(
'qbbrowse' => 'ÐÓ©Ñ',
'qbedit' => 'УлаÑÑÑ',
'qbpageoptions' => 'ÐÑ ÑиÑÑй',
-'qbpageinfo' => 'ÐÑ Ñ
оһооно',
'qbmyoptions' => 'Ðин ÑиÑÑйдÑÑим',
'qbspecialpages' => 'ÐналлааÑ
ÑиÑÑйдÑÑ',
'faq' => 'FAQ',
@@ -444,7 +443,7 @@ $2',
'logouttext' => "'''Ðн ÑиһиликÑÑн ÑаÒÑÑÑÑÒ¥.'''
{{SITENAME}} ÑиÑим-ÑиÑÐ³Ñ Ð±Ð¸Ð»Ð¸Ð³Ð¸Ð½ ÑÑÑÐºÐºÑ Ð°Ð°ÐºÐºÑнан бÑолбакка IP-аадÑÑÑÒ»Ñнан ÑÑÑ ÐºÓ©ÑÑÓ©Òүн.
-СалгÑÑ Ð°Ð°ÐºÐºÑн ааÑÑаабакка үлÑлиÑÑ
Ñ
ин Ñөп, ÑбÑÑÑÑ ÑаҥаÑÑан ÑÑÑÐºÐºÑ Ð°Ð°ÐºÐºÑнан дÑÑ, аÑÑн ааÑÑнан дÑÑ [[Special:UserLogin|кииÑиÑÑ
Ñ
ин]] Ñөп.
+СалгÑÑ Ð°Ð°ÐºÐºÑн ааÑÑаабакка үлÑлиÑÑ
Ñ
ин Ñөп, ÑбÑÑÑÑ ÑаҥаÑÑан ÑÑÑÐºÐºÑ Ð°Ð°ÐºÐºÑнан дÑÑ, аÑÑн ааÑÑнан дÑÑ [$1 кииÑиÑÑ
Ñ
ин] Ñөп.
СоÑоÑ
ÑиÑÑйдÑÑ Ó©ÑÑÓ© даÒÐ°Ð½Ñ Ñйигин ÑÑÑÐºÐºÑ Ð°Ð°ÐºÐºÑнан көÑдөÑÒ¯Ó©Ñ
ÑÑÑин Ñөп, Ð¾Ð½Ñ ÑÑоÑ
гÑнÑаÑ
Ñ
Ñн баÒаÑдаÑ
Ñ
Ñна инÑÑÑиниÑÑ ÐºÓ©ÑдөÑÓ©Ó©ÑÑÒ¯Ò¥ кÑÑһин ÑÑааÑÑаа.",
'welcomecreation' => '== ÐÓ©Ñүөн нөÑгүй, $1! ==
Ðн манна бÑлиÑÑÑнниҥ.
@@ -705,8 +704,8 @@ IP-аадÑÑÑһа ÑÑÑ ÐºÓ©ÑÑÓ©Ñ.
[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ÑÑÑÑнааллаÑга көÑдүөÑ
Ñ
үн Ñөп],
ÑбÑÑÑÑ [{{fullurl:{{FULLPAGENAME}}|action=edit}} маннÑк ааÑÑааÑ
Ñаҥа ÑÑÑаÑÑÐ¹Ð°Ð½Ñ ÑÑÑÑйÑоÑ
Ñ
Ñн] Ñөп.',
'noarticletext-nopermission' => 'Ðилигин Ð±Ñ ÑиÑÑй кÑÑаанаÑ
.
-ÐÑ [[Special:Search/{{PAGENAME}}|ÑÑÐ»Ñ Ð°ÑÑн ÑиÑÑйдÑÑÐ³Ñ ÐºÓ©Ñдөөн көÑÒ¯Ó©Ñ
Ñ
үн]] Ñөп,
-ÑбÑÑÑÑ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ÑÑÑÑнааллаÑга манна ÑÑÒ»ÑаннааÑ
ÑÑÑÑкÑаÑÑ Ð±ÑлÑоÑ
Ñ
Ñн Ñөп].',
+ÐÑ [[Special:Search/{{PAGENAME}}|ааÑÑ Ð°ÑÑн ÑиÑÑйдÑÑÐ³Ñ ÐºÓ©Ñдөөн көÑÒ¯Ó©Ñ
Ñ
үн]] Ñөп,
+ÑбÑÑÑÑ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ÑÑÑÑнааллаÑга манна ÑÑÒ»ÑаннааÑ
ÑÑÑÑкÑаÑÑ Ð±ÑлÑоÑ
Ñ
Ñн Ñөп]. ÐÑ ÑиÑÑйи Ð°Ð¹Ð°Ñ ÐºÑаÒÑÒ¥ ÑÑоÑ
.',
'userpage-userdoesnotexist' => '"$1
(teh ne dodajte v svoje iskanje).',
# Special:ListGroupRights
'listgrouprights' => 'Pravice uporabniških skupin',
-'listgrouprights-summary' => 'Spodaj se nahaja seznam uporabniških skupin na tem wikiju in njim dodeljene pravice dostopa.
-Na voljo so morda [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]] o posameznih skupinah.',
+'listgrouprights-summary' => 'Tu je na razpolago seznam uporabniških skupin na tem wikiju z navedbo dodeljenih pravic dostopa.
+Morda so na razpolago tudi [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]] o posameznih skupinah.',
'listgrouprights-key' => '* Dodeljena pravica
* Odvzeta pravica',
'listgrouprights-group' => 'Skupina',
@@ -2238,7 +2243,7 @@ Morebitne spremembe te strani in pripadajoÄe pogovorne strani bodo navedene tuk
'watchnochange' => 'V prikazanem Äasovnem obdobju ni nihÄe spremenil nadzorovanih strani.',
'watchlist-details' => 'Spremljate $1 {{PLURAL:$1|stran|strani|strani|strani|strani}} (pogovorne strani niso vštete).',
'wlheader-enotif' => '* ObveÅ¡Äanje po elektronski poÅ¡ti je omogoÄeno.',
-'wlheader-showupdated' => "* Od vašega zadnjega ogleda spremenjene strani so prikazanje '''krepko'''.",
+'wlheader-showupdated' => "* Strani, spremenjene od vašega zadnjega ogleda, so prikazane '''krepko'''.",
'watchmethod-recent' => 'med nedavnimi urejanji iÅ¡Äem spremljane strani',
'watchmethod-list' => 'med spremljanimi stranmi iÅ¡Äem nedavna urejanja',
'watchlistcontains' => 'Spremljate $1 {{PLURAL:$1|stran|strani}}.',
@@ -2312,7 +2317,7 @@ Za zapise nedavnih brisanj glej $2.',
'dellogpage' => 'Dnevnik brisanja',
'dellogpagetext' => 'Spodaj je prikazan seznam nedavnih brisanj.',
'deletionlog' => 'dnevnik brisanja',
-'reverted' => 'Obnovljeno na prejšnjo redakcijo',
+'reverted' => 'Vrnjeno na prejšnje urejanje.',
'deletecomment' => 'Razlog:',
'deleteotherreason' => 'Drugi/dodatni razlogi:',
'deletereasonotherlist' => 'Drug razlog',
@@ -2447,8 +2452,8 @@ Morda imate napaÄno povezavo ali pa je bila redakcija obnovljena ali odstranjen
'undeletedrevisions' => '{{PLURAL:$1|obnovljena $1 redakcija|obnovljeni $1 redakciji|obnovljene $1 redakcije|obnovljenih $1 redakcij}}',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij}} in $2 {{PLURAL:$2|datoteka|datoteki|datoteke|datotek}} {{PLURAL:$1+$2|obnovljena|obnovljeni|obnovljene|obnovljenih}}',
'undeletedfiles' => '{{PLURAL:$1|obnovljena je $1 datoteka|obnovljeni sta $1 datoteki|obnovljene so $1 datoteke|obnovljenih je $1 datotek}}',
-'cannotundelete' => 'Obnova ni uspela;
-morda je stran obnovil že kdo drug.',
+'cannotundelete' => 'Obnova je spodletela:
+$1',
'undeletedpage' => "'''Obnovili ste stran $1.'''
Nedavna brisanja in obnove so zapisani v [[Special:Log/delete|dnevniku brisanja]].",
@@ -2613,7 +2618,7 @@ Oglejte si [[Special:BlockList|seznam blokad]] za pregled blokad.',
Razlog za blokado uporabnika $1 je: »$2«',
'blocklogpage' => 'Dnevnik blokiranja',
'blocklog-showlog' => 'Ta uporabnik je že bil blokiran.
-Dnevnik blokiranja je na voljo spodaj:',
+Za sklicevanje so tule navedeni vnosi v dnevniku blokiranja:',
'blocklog-showsuppresslog' => 'Ta uporabnik je že bil blokiran in skrit.
Dnevnik skrivanja je na voljo spodaj:',
'blocklogentry' => '[[$1]] blokiran s Äasom poteka blokade $2 $3',
@@ -2762,10 +2767,10 @@ strani ni mogoÄe prestaviti samo vaÅ¡e.',
'imageinvalidfilename' => 'Ciljno ime datoteke je neveljavno',
'fix-double-redirects' => 'Posodobi vse preusmeritve, ki kažejo na prvotni naslov',
'move-leave-redirect' => 'Na prejšnji strani ustvari preusmeritev',
-'protectedpagemovewarning' => "'''Opozorilo:''' Stran je bila zaklenjena, tako da jo lahko prestavljajo samo uporabniki z administratorskimi dovoljenji.
-Najnovejši vnos v dnevniku je na voljo spodaj:",
-'semiprotectedpagemovewarning' => "'''Opomba:''' Stran je bila zaklenjena, tako da jo lahko prestavljajo samo registrirani uporabniki.
-Najnovejši vnos v dnevniku je na voljo spodaj:",
+'protectedpagemovewarning' => "'''Opozorilo:''' Stran je bila zaklenjena in jo lahko prestavljajo samo uporabniki z administratorskimi pravicami.
+Za sklicevanje je naveden zadnji vnos v dnevnik:",
+'semiprotectedpagemovewarning' => "'''Opomba:''' Stran je bila zaklenjena in jo lahko prestavljajo samo registrirani uporabniki.
+Za sklicevanje je naveden zadnji vnos v dnevniku:",
'move-over-sharedrepo' => '== Datoteka obstaja ==
[[:$1]] obstaja v deljeni shrambi. Premik datoteke na ta naslov bo prepisalo deljeno datoteko.',
'file-exists-sharedrepo' => 'Izbrano ime datoteke je že v uporabi v deljeni shrambi.
@@ -2959,7 +2964,7 @@ Prosimo, poskusite znova.',
'tooltip-watchlistedit-raw-submit' => 'Posodobi spisek nadzorov',
'tooltip-recreate' => 'Ponovno ustvari stran, Äeprav je bila izbrisana',
'tooltip-upload' => 'PriÄnite z nalaganjem',
-'tooltip-rollback' => 'Funkcija »Vrni« z enim klikom povrne vsa urejanja zadnjega urejevalca te strani',
+'tooltip-rollback' => 'Možnost »Vrni« z enim klikom povrne vsa urejanja zadnjega urejevalca te strani.',
'tooltip-undo' => '"Razveljavi" vrne to urejanje in odpre predogled v oknu za urejanje.
OmogoÄa vnos pojasnila v povzetku urejanja.',
'tooltip-preferences-save' => 'Shrani nastavitve',
@@ -3015,10 +3020,10 @@ OmogoÄa vnos pojasnila v povzetku urejanja.',
'pageinfo-authors' => 'Skupno Å¡tevilo razliÄnih avtorjev',
'pageinfo-recent-edits' => 'Nedavno Å¡tevilo urejanj (zadnjih $1)',
'pageinfo-recent-authors' => 'Nedavno Å¡tevilo razliÄnih avtorjev',
-'pageinfo-restriction' => 'ZaÅ¡Äita strani ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|Äarobna beseda|Äarobni besedi|Äarobne besede}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrita kategorija|Skriti kategoriji|Skrite kategorije}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|VkljuÄena predloga|VkljuÄeni predlogi|VkljuÄene predloge}} ($1)',
+'pageinfo-toolboxlink' => 'Podatki o strani',
# Patrolling
'markaspatrolleddiff' => 'OznaÄite kot nadzorovano',
@@ -3061,7 +3066,7 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
'file-info' => 'Velikost datoteke: $1, MIME-vrsta: $2
',
'file-info-size' => '$1 Ã $2 toÄk, velikost datoteke: $3, vrsta MIME: $4',
'file-info-size-pages' => '$1 Ã $2 toÄk, velikost datoteke: $3, vrsta MIME: $4, $5 {{PLURAL:$5|stran|strani}}',
-'file-nohires' => 'Slika viÅ¡je loÄljivosti ni na voljo.',
+'file-nohires' => 'ViÅ¡ja loÄljivost slike ni na voljo.',
'svg-long-desc' => 'datoteka SVG, v izvirniku $1 Ã $2 slikovnih toÄk, velikost datoteke: $3',
'svg-long-desc-animated' => 'animirana datoteka SVG, v izvirniku $1 Ã $2 slikovnih toÄk, velikost datoteke: $3',
'show-big-image' => 'Slika v viÅ¡ji loÄljivosti',
@@ -3599,6 +3604,7 @@ Potrditvena koda poteÄe $4.',
# Scary transclusion
'scarytranscludedisabled' => '[PrevkljuÄevanje med wikiji je onemogoÄeno]',
'scarytranscludefailed' => '[Pridobivanje predloge za $1 ni uspelo]',
+'scarytranscludefailed-httpstatus' => '[Pridobivanje predloge za $1 ni uspelo: HTTP $2]',
'scarytranscludetoolong' => '[Spletni naslov je predolg]',
# Delete conflict
@@ -3708,7 +3714,7 @@ Uporabite lahko tudi [[Special:EditWatchlist|standardni urejevalnik]].',
'version-hook-name' => 'Ime razširitve',
'version-hook-subscribedby' => 'NaroÄen s strani',
'version-version' => '(RazliÄica $1)',
-'version-license' => 'Dovoljenje',
+'version-license' => 'Licenca',
'version-poweredby-credits' => "Ta wiki poganja '''[//www.mediawiki.org/ MediaWiki]''', vse pravice pridržave © 2001-$1 $2.",
'version-poweredby-others' => 'drugi',
'version-license-info' => 'MediaWiki je prosto programje; lahko ga razÅ¡irjate in / ali spreminjate pod pogoji GNU General Public License, kot ga je objavila Free Software Foundation; bodisi License razliÄice 2 ali (po vaÅ¡i izbiri) katere koli poznejÅ¡e razliÄice.
diff --git a/languages/messages/MessagesSli.php b/languages/messages/MessagesSli.php
index 7be6f32a8d..55f3980a49 100644
--- a/languages/messages/MessagesSli.php
+++ b/languages/messages/MessagesSli.php
@@ -160,7 +160,6 @@ $messages = array(
'qbfind' => 'Fenda',
'qbedit' => 'Ãndern',
'qbpageoptions' => 'Seytaoptiona',
-'qbpageinfo' => 'Seytadata',
'qbmyoptions' => 'Menne Seyta',
'qbspecialpages' => 'Spezialseyta',
'faq' => 'FAQ',
@@ -363,7 +362,7 @@ De Sperre wurde durch [[User:$1|$1]] miet der Begrindung ''â$2â'' eigerichte
# Login and logout pages
'logouttext' => "'''Du best nun obgemeldet.'''
-Du koast {{SITENAME}} jitz anonym wetter nutzen, oder diech erneut under damm selba oder a'm andern Nutzernoama [[Special:UserLogin|oamelda]].
+Du koast {{SITENAME}} jitz anonym wetter nutzen, oder diech erneut under damm selba oder a'm andern Nutzernoama [$1 oamelda].
Beachte, doas einige Seyta noo oazeiga kinna, doas du oagemeldet best, sulange du ne denn Browsercache gelaart host.",
'welcomecreation' => '== Willkumma, $1! ==
diff --git a/languages/messages/MessagesSo.php b/languages/messages/MessagesSo.php
index 0e6a486cac..7aafdc90ff 100644
--- a/languages/messages/MessagesSo.php
+++ b/languages/messages/MessagesSo.php
@@ -154,7 +154,6 @@ $messages = array(
'qbbrowse' => 'Ka soo raadi',
'qbedit' => 'Wax ka bedel',
'qbpageoptions' => 'Boggaan',
-'qbpageinfo' => 'isku xiran',
'qbmyoptions' => 'Boggageyga',
'qbspecialpages' => 'Bogaga qaaska ah',
'faq' => 'SIL',
@@ -366,7 +365,7 @@ Sababta neh waxaa waaye "\'\'$2\'\'".',
# Login and logout pages
'logouttext' => "'''Hada waad ka baxday.'''
-Waad sii isticmaali kartaa {{SITENAME}} adoona lagu aqoon, ama [[Special:UserLogin|gudaha gal]] adiga oo isticmaalaya magacaagii hore ama mid ka duwan. OGEYSIIS waxaa lagayabaa bogyaasha qaarkood in ay yiraahdaan wali gudaha ayaad ku jirtaa, ilaa inta aad ka nadiifineesid browsahaaga Internetka.",
+Waad sii isticmaali kartaa {{SITENAME}} adoona lagu aqoon, ama [$1 gudaha gal] adiga oo isticmaalaya magacaagii hore ama mid ka duwan. OGEYSIIS waxaa lagayabaa bogyaasha qaarkood in ay yiraahdaan wali gudaha ayaad ku jirtaa, ilaa inta aad ka nadiifineesid browsahaaga Internetka.",
'welcomecreation' => "== Soo dhawoow, $1! ==
Akoon kaada waa la sameeyay.
Ha' hilmaamin in aad wax ka bedesho [[Special:Preferences|{{SITENAME}} dooqyadaada]].",
diff --git a/languages/messages/MessagesSq.php b/languages/messages/MessagesSq.php
index 1e57a4c967..efd1cb5b12 100644
--- a/languages/messages/MessagesSq.php
+++ b/languages/messages/MessagesSq.php
@@ -360,7 +360,6 @@ $messages = array(
'qbbrowse' => 'Shfletoni',
'qbedit' => 'Redaktoni',
'qbpageoptions' => 'Kjo faqe',
-'qbpageinfo' => 'Kontekst',
'qbmyoptions' => 'Faqet e mia',
'qbspecialpages' => 'Faqet speciale',
'faq' => 'Pyetje që bëhen shpesh',
@@ -626,7 +625,7 @@ Administratori i cili e mbylli atë e dha këtë shpjegim: "$3".',
# Login and logout pages
'logouttext' => "'''Ju keni dalë jashtë.'''
- Ju mund të vazhdoni të përdorni {{SITENAME}} në mënyrë anonime, ose mund të [[Special:UserLogin|identifikoheni përsëri]] si përdoruesi i mëparshëm ose si një përdorues tjetër.
+ Ju mund të vazhdoni të përdorni {{SITENAME}} në mënyrë anonime, ose mund të [$1 identifikoheni përsëri] si përdoruesi i mëparshëm ose si një përdorues tjetër.
Kini parasysh që disa faqe mund të shfaqen sikur të ishit i identifikuar derisa të fshini ''cache''-in e shfletuesit tuaj.",
'welcomecreation' => '== Mirësevini, $1! ==
Llogaria juaj është krijuar.
diff --git a/languages/messages/MessagesSr_ec.php b/languages/messages/MessagesSr_ec.php
index 35e75a118b..98501b2a42 100644
--- a/languages/messages/MessagesSr_ec.php
+++ b/languages/messages/MessagesSr_ec.php
@@ -541,7 +541,6 @@ $messages = array(
'qbbrowse' => 'ÐоÑÑажи',
'qbedit' => 'УÑеди',
'qbpageoptions' => 'ÐоÑÑавке ÑÑÑаниÑе',
-'qbpageinfo' => 'СадÑÐ¶Ð°Ñ ÑÑÑаниÑе',
'qbmyoptions' => 'ÐоÑе ÑÑÑаниÑе',
'qbspecialpages' => 'ÐоÑебне ÑÑÑаниÑе',
'faq' => 'ÐÐÐ',
@@ -554,7 +553,7 @@ $messages = array(
'vector-action-protect' => 'ÐаÑÑиÑи',
'vector-action-undelete' => 'ÐÑаÑи',
'vector-action-unprotect' => 'ÐÑомени заÑÑиÑÑ',
-'vector-simplesearch-preference' => 'ÐобоÑÑани пÑедлози пÑеÑÑаге (Ñамо за ÑÐµÐ¼Ñ âÐекÑоÑÑкоâ)',
+'vector-simplesearch-preference' => 'УпÑоÑÑено поÑе за пÑеÑÑÐ°Ð³Ñ (Ñамо за ÑÐµÐ¼Ñ âÐекÑоÑÑкоâ)',
'vector-view-create' => 'ÐапÑави',
'vector-view-edit' => 'УÑеди',
'vector-view-history' => 'ÐÑÑоÑиÑа',
@@ -813,7 +812,7 @@ $2',
# Login and logout pages
'logouttext' => "'''ÐдÑавÑени ÑÑе.'''
-ÐожеÑе да наÑÑавиÑе Ñ ÐºÐ¾ÑиÑÑеÑем овог викиÑа као гоÑÑ, или Ñе [[Special:UserLogin|поново пÑиÑавиÑе]] као дÑÑги коÑиÑник.
+ÐожеÑе да наÑÑавиÑе Ñ ÐºÐ¾ÑиÑÑеÑем овог викиÑа као гоÑÑ, или Ñе [$1 поново пÑиÑавиÑе] као дÑÑги коÑиÑник.
ÐмаÑÑе на ÑÐ¼Ñ Ð´Ð° неке ÑÑÑаниÑе Ð¼Ð¾Ð³Ñ Ð½Ð°ÑÑавиÑи да Ñе пÑиказÑÑÑ ÐºÐ°Ð¾ да ÑÑе ÑÐ¾Ñ Ð¿ÑиÑавÑени, Ñве док не оÑиÑÑиÑе пÑивÑÐµÐ¼ÐµÐ½Ñ Ð¼ÐµÐ¼Ð¾ÑиÑÑ Ñвог пÑегледаÑа.",
'welcomecreation' => '== ÐобÑо доÑли, $1! ==
@@ -1190,6 +1189,15 @@ $2
'edit-already-exists' => 'Ðе Ð¼Ð¾Ð³Ñ Ð´Ð° напÑавим ÑÑÑаниÑÑ.
Ðзгледа да она Ð²ÐµÑ Ð¿Ð¾ÑÑоÑи.',
'defaultmessagetext' => 'ÐодÑазÑмевани ÑекÑÑ Ð¿Ð¾ÑÑке',
+'content-failed-to-parse' => 'Ðе Ð¼Ð¾Ð³Ñ Ð´Ð° ÑаÑÑланим ÑадÑÐ¶Ð°Ñ Ñипа $2 за модел $1: $3',
+'invalid-content-data' => 'ÐеиÑпÑавни подаÑи ÑадÑжаÑа',
+'content-not-allowed-here' => 'СадÑÐ¶Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ð° â$1â ниÑе дозвоÑен на ÑÑÑаниÑи [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'викиÑекÑÑ',
+'content-model-text' => 'ÑиÑÑ ÑекÑÑ',
+'content-model-javascript' => 'ÑаваÑкÑипÑ',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''УпозоÑеÑе:''' ова ÑÑÑаниÑа ÑадÑжи пÑевиÑе позива за ÑаÑÑлаÑиваÑе.
@@ -2126,7 +2134,7 @@ $1',
'shared-repo' => 'заÑедниÑко ÑкладиÑÑе',
'shared-repo-name-wikimediacommons' => 'ÐикимедиÑина оÑÑава',
'filepage.css' => '/* CSS коÑи Ñе поÑÑавÑен овде Ñе налази на ÑÑÑаниÑама за Ð¾Ð¿Ð¸Ñ Ð´Ð°ÑоÑека, као и на ÑÑÑаним викиÑима */',
-'upload-disallowed-here' => 'ÐажалоÑÑ, не можеÑе да замениÑе Ð¾Ð²Ñ ÑликÑ.',
+'upload-disallowed-here' => 'Ðе можеÑе да замениÑе Ð¾Ð²Ñ Ð´Ð°ÑоÑекÑ.',
# File reversion
'filerevert' => 'ÐÑаÑи $1',
@@ -2683,7 +2691,8 @@ $UNWATCHURL
'undeletedrevisions' => '{{PLURAL:$1|Ðзмена Ñе вÑаÑена|$1 измене ÑÑ Ð²ÑаÑене|$1 измена Ñе вÑаÑено}}',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|даÑоÑека|даÑоÑеке|даÑоÑека}} Ñе вÑаÑено',
'undeletedfiles' => '{{PLURAL:$1|ÐаÑоÑека Ñе вÑаÑена|$1 даÑоÑеке ÑÑ Ð²ÑаÑене|$1 даÑоÑека Ñе вÑаÑено}}',
-'cannotundelete' => 'ÐеÑÑпеÑно вÑаÑаÑе. Ðеко дÑÑги Ñе Ñо ÑÑадио пÑе ваÑ.',
+'cannotundelete' => 'ÐÑаÑаÑе ниÑе ÑÑпело:
+$1',
'undeletedpage' => "'''СÑÑаниÑа $1 Ñе вÑаÑена'''
ÐогледаÑÑе [[Special:Log/delete|иÑÑоÑиÑÑ Ð±ÑиÑаÑа]] за запиÑе о ÑкоÑаÑÑим бÑиÑаÑима и вÑаÑаÑима.",
@@ -2994,6 +3003,7 @@ $1',
'immobile-target-namespace-iw' => 'ÐеÑÑвики веза ниÑе иÑпÑавно одÑедиÑÑе за пÑемеÑÑаÑе ÑÑÑаниÑе.',
'immobile-source-page' => 'Ðва ÑÑÑаниÑа Ñе не може пÑемеÑÑиÑи.',
'immobile-target-page' => 'Ðе Ð¼Ð¾Ð³Ñ Ð´Ð° пÑемеÑÑим на жеÑени наÑлов.',
+'bad-target-model' => 'ÐеÑено одÑедиÑÑе коÑиÑÑи дÑÑгаÑиÑи модел ÑадÑжаÑа. Ðе Ð¼Ð¾Ð³Ñ Ð´Ð° пÑеÑвоÑим из $1 Ñ $2.',
'imagenocrossnamespace' => 'ÐаÑоÑека Ñе не може пÑемеÑÑиÑи Ñ Ð¸Ð¼ÐµÐ½Ñки пÑоÑÑÐ¾Ñ ÐºÐ¾Ñи не пÑипада даÑоÑекама.',
'nonfile-cannot-move-to-file' => 'Ðе-даÑоÑеке не можеÑе пÑемеÑÑиÑи Ñ Ð¸Ð¼ÐµÐ½Ñки пÑоÑÑÐ¾Ñ Ð·Ð° даÑоÑеке',
'imagetypemismatch' => 'ÐкÑÑензиÑа нове даÑоÑеке Ñе не поклапа Ñ Ñеном вÑÑÑом',
@@ -3263,6 +3273,7 @@ $1',
# Info page
'pageinfo-title' => 'ÐодаÑи о â$1â',
+'pageinfo-not-current' => 'ÐодаÑи Ð¼Ð¾Ð³Ñ Ð±Ð¸Ñи пÑиказани Ñамо за ÑекÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñ.',
'pageinfo-header-basic' => 'ÐÑновни подаÑи',
'pageinfo-header-edits' => 'ÐÑÑоÑиÑа измена',
'pageinfo-header-restrictions' => 'ÐаÑÑиÑа ÑÑÑаниÑе',
@@ -3287,10 +3298,14 @@ $1',
'pageinfo-authors' => 'ÐÑÐ¾Ñ Ð·Ð°ÑебниÑ
аÑÑоÑа',
'pageinfo-recent-edits' => 'ÐÑÐ¾Ñ ÑкоÑаÑÑиÑ
измена (Ñ Ð¿Ð¾ÑледÑиÑ
$1)',
'pageinfo-recent-authors' => 'ÐÑÐ¾Ñ ÑкоÑаÑÑиÑ
заÑебниÑ
аÑÑоÑа',
-'pageinfo-restriction' => 'ÐаÑÑиÑа ÑÑÑаниÑе ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|ÐагиÑна ÑеÑ|ÐагиÑне ÑеÑи}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|СакÑивена каÑегоÑиÑа|СакÑивене каÑегоÑиÑе}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|УкÑÑÑени Ñаблон|УкÑÑÑени Ñаблони}} ($1)',
+'pageinfo-toolboxlink' => 'ÐодаÑи о ÑÑÑаниÑи',
+'pageinfo-redirectsto' => 'ÐÑеÑÑмеÑава на',
+'pageinfo-redirectsto-info' => 'подаÑи',
+'pageinfo-contentpage' => 'РаÑÑна Ñе као ÑÑÑаниÑа Ñа ÑадÑжаÑем',
+'pageinfo-contentpage-yes' => 'Ðа',
# Skin names
'skinname-standard' => 'ÐлаÑиÑно',
@@ -3972,6 +3987,7 @@ $5
# Scary transclusion
'scarytranscludedisabled' => '[ÐеÑÑвики ÑкÑÑÑиваÑе Ñаблона Ñе онемогÑÑено]',
'scarytranscludefailed' => '[ÐобавÑаÑе Ñаблона за $1 ниÑе ÑÑпело]',
+'scarytranscludefailed-httpstatus' => '[Ðе Ð¼Ð¾Ð³Ñ Ð´Ð° пÑеÑзмем Ñаблон $1: HTTP $2]',
'scarytranscludetoolong' => '[URL адÑеÑа Ñе пÑедÑгаÑка]',
# Delete conflict
diff --git a/languages/messages/MessagesSr_el.php b/languages/messages/MessagesSr_el.php
index d75d84280d..fd17f26386 100644
--- a/languages/messages/MessagesSr_el.php
+++ b/languages/messages/MessagesSr_el.php
@@ -450,7 +450,6 @@ $messages = array(
'qbbrowse' => 'Potraži',
'qbedit' => 'Uredi',
'qbpageoptions' => 'Postavke stranice',
-'qbpageinfo' => 'Sadržaj stranice',
'qbmyoptions' => 'Moje stranice',
'qbspecialpages' => 'Posebne stranice',
'faq' => 'NPP',
@@ -463,7 +462,7 @@ $messages = array(
'vector-action-protect' => 'Zaštiti',
'vector-action-undelete' => 'Vrati',
'vector-action-unprotect' => 'Promeni zaštitu',
-'vector-simplesearch-preference' => 'PoboljÅ¡ani predlozi pretrage (samo za temu âVektorskoâ)',
+'vector-simplesearch-preference' => 'UproÅ¡Äeno polje za pretragu (samo za temu âVektorskoâ)',
'vector-view-create' => 'Napravi',
'vector-view-edit' => 'Uredi',
'vector-view-history' => 'Istorija',
@@ -722,7 +721,7 @@ Administrator koji ju je zakljuÄao ponudio je sledeÄe objaÅ¡njenje: â$3â.'
# Login and logout pages
'logouttext' => "'''Odjavljeni ste.'''
-Možete da nastavite s koriÅ¡Äenjem ovog vikija kao gost, ili se [[Special:UserLogin|ponovo prijavite]] kao drugi korisnik.
+Možete da nastavite s koriÅ¡Äenjem ovog vikija kao gost, ili se [$1 ponovo prijavite] kao drugi korisnik.
Imajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste joÅ¡ prijavljeni, sve dok ne oÄistite privremenu memoriju svog pregledaÄa.",
'welcomecreation' => '== Dobro došli, $1! ==
@@ -1099,6 +1098,15 @@ Izgleda da je obrisana.',
'edit-already-exists' => 'Ne mogu da napravim stranicu.
Izgleda da ona veÄ postoji.',
'defaultmessagetext' => 'Podrazumevani tekst poruke',
+'content-failed-to-parse' => 'Ne mogu da raÅ¡Älanim sadržaj tipa $2 za model $1: $3',
+'invalid-content-data' => 'Neispravni podaci sadržaja',
+'content-not-allowed-here' => 'Sadržaj modela â$1â nije dozvoljen na stranici [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'vikitekst',
+'content-model-text' => 'Äist tekst',
+'content-model-javascript' => 'javaskript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Upozorenje:''' ova stranica sadrži previÅ¡e poziva za raÅ¡Älanjivanje.
@@ -2035,7 +2043,7 @@ Njen opis možete da izmenite na [$2 odgovarajuÄoj stranici].',
'shared-repo' => 'zajedniÄko skladiÅ¡te',
'shared-repo-name-wikimediacommons' => 'Vikimedijina ostava',
'filepage.css' => '/* CSS koji je postavljen ovde se nalazi na stranicama za opis datoteka, kao i na stranim vikijima */',
-'upload-disallowed-here' => 'Nažalost, ne možete da zamenite ovu sliku.',
+'upload-disallowed-here' => 'Ne možete da zamenite ovu datoteku.',
# File reversion
'filerevert' => 'Vrati $1',
@@ -2592,7 +2600,8 @@ Možda ste uneli pogreÅ¡nu vezu, ili je izmena vraÄena ili uklonjena iz arhive.
'undeletedrevisions' => '{{PLURAL:$1|Izmena je vraÄena|$1 izmene su vraÄene|$1 izmena je vraÄeno}}',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|izmena|izmene|izmena}} i $2 {{PLURAL:$2|datoteka|datoteke|datoteka}} je vraÄeno',
'undeletedfiles' => '{{PLURAL:$1|Datoteka je vraÄena|$1 datoteke su vraÄene|$1 datoteka je vraÄeno}}',
-'cannotundelete' => 'NeuspeÅ¡no vraÄanje. Neko drugi je to uradio pre vas.',
+'cannotundelete' => 'VraÄanje nije uspelo:
+$1',
'undeletedpage' => "'''Stranica $1 je vraÄena'''
Pogledajte [[Special:Log/delete|istoriju brisanja]] za zapise o skoraÅ¡njim brisanjima i vraÄanjima.",
@@ -2903,6 +2912,7 @@ ne mogu da premestim stranicu preko same sebe.',
'immobile-target-namespace-iw' => 'MeÄuviki veza nije ispravno odrediÅ¡te za premeÅ¡tanje stranice.',
'immobile-source-page' => 'Ova stranica se ne može premestiti.',
'immobile-target-page' => 'Ne mogu da premestim na željeni naslov.',
+'bad-target-model' => 'Željeno odrediÅ¡te koristi drugaÄiji model sadržaja. Ne mogu da pretvorim iz $1 u $2.',
'imagenocrossnamespace' => 'Datoteka se ne može premestiti u imenski prostor koji ne pripada datotekama.',
'nonfile-cannot-move-to-file' => 'Ne-datoteke ne možete premestiti u imenski prostor za datoteke',
'imagetypemismatch' => 'Ekstenzija nove datoteke se ne poklapa s njenom vrstom',
@@ -3172,6 +3182,7 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
# Info page
'pageinfo-title' => 'Podaci o â$1â',
+'pageinfo-not-current' => 'Podaci mogu biti prikazani samo za tekuÄu izmenu.',
'pageinfo-header-basic' => 'Osnovni podaci',
'pageinfo-header-edits' => 'Istorija izmena',
'pageinfo-header-restrictions' => 'Zaštita stranice',
@@ -3196,10 +3207,14 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
'pageinfo-authors' => 'Broj zasebnih autora',
'pageinfo-recent-edits' => 'Broj skorašnjih izmena (u poslednjih $1)',
'pageinfo-recent-authors' => 'Broj skorašnjih zasebnih autora',
-'pageinfo-restriction' => 'Zaštita stranice ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|MagiÄna reÄ|MagiÄne reÄi}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|UkljuÄeni Å¡ablon|UkljuÄeni Å¡abloni}} ($1)',
+'pageinfo-toolboxlink' => 'Podaci o stranici',
+'pageinfo-redirectsto' => 'Preusmerava na',
+'pageinfo-redirectsto-info' => 'podaci',
+'pageinfo-contentpage' => 'RaÄuna se kao stranica sa sadržajem',
+'pageinfo-contentpage-yes' => 'Da',
# Skin names
'skinname-standard' => 'KlasiÄno',
@@ -3881,6 +3896,7 @@ Ovaj potvrdni kod istiÄe $6 u $7.',
# Scary transclusion
'scarytranscludedisabled' => '[MeÄuviki ukljuÄivanje Å¡ablona je onemoguÄeno]',
'scarytranscludefailed' => '[Dobavljanje Å¡ablona za $1 nije uspelo]',
+'scarytranscludefailed-httpstatus' => '[Ne mogu da preuzmem Å¡ablon $1: HTTP $2]',
'scarytranscludetoolong' => '[URL adresa je predugaÄka]',
# Delete conflict
diff --git a/languages/messages/MessagesStq.php b/languages/messages/MessagesStq.php
index 199abb72db..59d01a1e2f 100644
--- a/languages/messages/MessagesStq.php
+++ b/languages/messages/MessagesStq.php
@@ -189,7 +189,6 @@ $messages = array(
'qbbrowse' => 'Bleederje',
'qbedit' => 'Annerje',
'qbpageoptions' => 'Disse Siede',
-'qbpageinfo' => 'Siedendoatäie',
'qbmyoptions' => 'Mien Sieden',
'qbspecialpages' => 'Spezialsieden',
'faq' => 'Oafte stoalde Froagen',
@@ -443,7 +442,7 @@ Die Administrator, die dän Skrieuwtougriep speerde, roate foulgjenden Gruund an
# Login and logout pages
'logouttext' => "'''Du bäst nu oumälded.'''
-Du koast {{SITENAME}} nu anonym fääre benutsje, of die fonnäien unner dänsälge of n uur Benutsernoome wier [[Special:UserLogin|anmäldje]].
+Du koast {{SITENAME}} nu anonym fääre benutsje, of die fonnäien unner dänsälge of n uur Benutsernoome wier [$1 anmäldje].
Beoachtje, dät eenige Sieden noch anwiese konnen, dät du oumälded bäst, soloange du nit din Browsercache loosmoaked hääst.",
'welcomecreation' => '== Wäilkuumen, $1 ==
diff --git a/languages/messages/MessagesSu.php b/languages/messages/MessagesSu.php
index eae53278e0..dd44a09ecf 100644
--- a/languages/messages/MessagesSu.php
+++ b/languages/messages/MessagesSu.php
@@ -274,7 +274,6 @@ $messages = array(
'qbbrowse' => 'Sungsi',
'qbedit' => 'Ãdit',
'qbpageoptions' => 'Kaca ieu',
-'qbpageinfo' => 'Kontéks',
'qbmyoptions' => 'Kaca kuring',
'qbspecialpages' => 'Kaca husus',
'faq' => 'NLD',
@@ -518,7 +517,7 @@ Pikeun alihbasa, mangga sumping ka [//translatewiki.net/wiki/Main_Page?setlang=e
# Login and logout pages
'logouttext' => "'''Anjeun ayeuna geus kaluar log.'''
-Anjeun bisa tetep migunakeun {{SITENAME}} bari anonim, atawa bisa [[Special:UserLogin|asup log deui]] salaku pamaké nu sarua atawa nu séjén deui.
+Anjeun bisa tetep migunakeun {{SITENAME}} bari anonim, atawa bisa [$1 asup log deui] salaku pamaké nu sarua atawa nu séjén deui.
Mangkahadé, sababaraha kaca bakal tetep némbongkeun saolah-olah anjeun asup log kénéh nepi ka anjeun ngosongkeun ''cache'' panyungsi anjeun.",
'welcomecreation' => '==Wilujeng sumping, $1!==
Rekening anjeun geus dijieun.
diff --git a/languages/messages/MessagesSv.php b/languages/messages/MessagesSv.php
index 7b9c4947b3..7a310a7524 100644
--- a/languages/messages/MessagesSv.php
+++ b/languages/messages/MessagesSv.php
@@ -40,6 +40,7 @@
* @author Rotsee
* @author S.Ãrvarr.S
* @author Sannab
+ * @author Sendelbach
* @author Sertion
* @author Skalman
* @author Stefan2
@@ -464,7 +465,6 @@ $messages = array(
'qbbrowse' => 'Bläddra igenom',
'qbedit' => 'Redigera',
'qbpageoptions' => 'Denna sida',
-'qbpageinfo' => 'Sidinformation',
'qbmyoptions' => 'Mina inställningar',
'qbspecialpages' => 'Specialsidor',
'faq' => 'FAQ',
@@ -726,7 +726,7 @@ Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
# Login and logout pages
'logouttext' => "'''Du är nu utloggad.'''
-Du kan fortsätta att använda {{SITENAME}} anonymt, eller så kan du [[Special:UserLogin|logga in igen]] som samma eller som en annan användare.
+Du kan fortsätta att använda {{SITENAME}} anonymt, eller så kan du [$1 logga in igen] som samma eller som en annan användare.
Observera att det, tills du tömmer din webbläsares cache, på vissa sidor kan se ut som att du fortfarande är inloggad.",
'welcomecreation' => '== Välkommen, $1! ==
Ditt konto har skapats.
@@ -1085,6 +1085,15 @@ Det verkar som att den har raderats.',
'edit-already-exists' => 'Sidan kunde inte skapas.
Den finns redan.',
'defaultmessagetext' => 'Standardtext för meddelande',
+'content-failed-to-parse' => 'Det gick inte att parsa $2 innehåll för $1 modell: $3',
+'invalid-content-data' => 'Ogiltig innehållsdata',
+'content-not-allowed-here' => 'innehåll av "$1" är inte tillåtet på sidan [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitext',
+'content-model-text' => 'oformaterad text',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Varning: Denna sida innehåller för många anrop av resurskrävande parserfunktioner.
@@ -2536,7 +2545,8 @@ I sådana fall måste du se till att den senaste raderade versionen inte är ikr
'undeletedrevisions' => '{{PLURAL:$1|en version återställd|$1 versioner återställda}}',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|version|versioner}} och $2 {{PLURAL:$2|fil|filer}} återställda',
'undeletedfiles' => '{{PLURAL:$1|en fil återställd|$1 filer återställda}}',
-'cannotundelete' => 'Ã
terställning misslyckades; kanske någon redan har återställt sidan.',
+'cannotundelete' => 'Ã
terställning misslyckades:
+$1',
'undeletedpage' => "'''$1 har återställts'''
Se [[Special:Log/delete|raderingsloggen]] för en förteckning över de senaste raderingarna och återställningarna.",
@@ -2838,6 +2848,7 @@ Den titel du vill flytta sidan till, "[[:$1]]", finns redan. Vill du radera den
'immobile-target-namespace-iw' => 'Interwikilänk är inte ett giltigt mål för sidflyttar.',
'immobile-source-page' => 'Denna sida är inte flyttbar.',
'immobile-target-page' => 'Kan inte flytta till det målnamnet.',
+'bad-target-model' => 'Den önskade destinationen använder en annan innehållsmodell. Kan inte konvertera från $1 till $2.',
'imagenocrossnamespace' => 'Kan inte flytta filer till andra namnrymder än filnamnrymden',
'nonfile-cannot-move-to-file' => 'Kan inte flytta icke-fil till filnamnrymden',
'imagetypemismatch' => 'Den nya filändelsen motsvarar inte filtypen',
@@ -3114,7 +3125,7 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
'pageinfo-default-sort' => 'Standardsorteringsnyckel',
'pageinfo-length' => 'Sidlängd (i byte)',
'pageinfo-article-id' => 'Sid-ID',
-'pageinfo-robot-policy' => 'Sökmotorns status',
+'pageinfo-robot-policy' => 'Sökmotordirektiv',
'pageinfo-robot-index' => 'Indexerbar',
'pageinfo-robot-noindex' => 'Inte indexerbar',
'pageinfo-views' => 'Antal visningar',
@@ -3130,10 +3141,10 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
'pageinfo-authors' => 'Totalt antal olika författare',
'pageinfo-recent-edits' => 'Antal nyliga redigeringar (inom de senaste $1)',
'pageinfo-recent-authors' => 'Antal nyliga olika författare',
-'pageinfo-restriction' => 'Sidskydd ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|Magiskt|Magiska}} ord ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Dold kategori|Dolda kategorier}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Inkluderad mall|Inkluderade mallar}} ($1)',
+'pageinfo-toolboxlink' => 'Sidinformation',
# Skin names
'skinname-standard' => 'Standard',
@@ -3713,6 +3724,7 @@ Denna bekräftelsekod kommer att sluta fungera efter $4.',
# Scary transclusion
'scarytranscludedisabled' => '[Interwiki-inklusion är inte aktiverad]',
'scarytranscludefailed' => '[Hämtning av mall för $1 misslyckades]',
+'scarytranscludefailed-httpstatus' => '[Hämtning av mall för $1 misslyckades: HTTP $2]',
'scarytranscludetoolong' => '[För lång URL]',
# Delete conflict
diff --git a/languages/messages/MessagesSw.php b/languages/messages/MessagesSw.php
index b64687ead5..ee81d3ac68 100644
--- a/languages/messages/MessagesSw.php
+++ b/languages/messages/MessagesSw.php
@@ -269,7 +269,6 @@ $messages = array(
'qbbrowse' => 'Vinjari',
'qbedit' => 'Hariri',
'qbpageoptions' => 'Ukurasa huu',
-'qbpageinfo' => 'Muktadha',
'qbmyoptions' => 'Kurasa zangu',
'qbspecialpages' => 'Kurasa za pekee',
'faq' => 'Maswali ya kawaida',
@@ -527,7 +526,7 @@ Sababu zilizotolewa ni "\'\'$2\'\'".',
# Login and logout pages
'logouttext' => "'''Umetoka kwenye akaunti yako.'''
-Unaweza kuendelea kutumia {{SITENAME}} bila kutaja jina lako, au unaweza [[Special:UserLogin|kuingia tena]] kwenye akaunti yako. Kumbuka kwamba kurasa nyingine zitaendelea kuonekana kana kwamba bado hujatoka kwenye akaunti yako, hadi utakaposafisha kache ya kivinjari.",
+Unaweza kuendelea kutumia {{SITENAME}} bila kutaja jina lako, au unaweza [$1 kuingia tena] kwenye akaunti yako. Kumbuka kwamba kurasa nyingine zitaendelea kuonekana kana kwamba bado hujatoka kwenye akaunti yako, hadi utakaposafisha kache ya kivinjari.",
'welcomecreation' => '== Karibu, $1! ==
Ushafunguliwa akaunti yako tayari.
Usisahau kubadilisha mapendekezo yako ya [[Special:Preferences|{{SITENAME}}]].',
diff --git a/languages/messages/MessagesSzl.php b/languages/messages/MessagesSzl.php
index f7b0f986e0..350ba982df 100644
--- a/languages/messages/MessagesSzl.php
+++ b/languages/messages/MessagesSzl.php
@@ -208,7 +208,6 @@ $messages = array(
'qbbrowse' => 'UoglůndaÅy',
'qbedit' => 'Sprowjej',
'qbpageoptions' => 'Ta zajta',
-'qbpageinfo' => 'Kontekst',
'qbmyoptions' => 'Moje zajty',
'qbspecialpages' => 'Szpecyjalne zajty',
'faq' => 'FAQ',
@@ -451,7 +450,7 @@ Administrator kery zawarÅ wÄepaÅ kůmyntorz: "$3".',
# Login and logout pages
'logouttext' => "'''Terozki ježeŠwylůgowany'''.
-MožeÅ¡ dali sam sprowjaÄ zajty we {{SITENAME}} kej Åyzalůgowany užytkowÅik, abo [[Special:UserLogin|zalůgowaÄ Åe nazod]] kej tyn som abo inkÅ¡y užytkowÅik.
+MožeÅ¡ dali sam sprowjaÄ zajty we {{SITENAME}} kej Åyzalůgowany užytkowÅik, abo [$1 zalůgowaÄ Åe nazod] kej tyn som abo inkÅ¡y užytkowÅik.
Dej pozůr, co na Åykerych zajtach pÅeglůndarka može dali pokozywaÄ co ježeÅ zalůgowany, a bydźe tak aže uodÅwjyžyÅ¡ jeij cache.",
'welcomecreation' => '== Witej, $1! ==
Uotwarli my sam lo Äebje kůnto.
diff --git a/languages/messages/MessagesTa.php b/languages/messages/MessagesTa.php
index 2b0c9d8bee..daf40e227e 100644
--- a/languages/messages/MessagesTa.php
+++ b/languages/messages/MessagesTa.php
@@ -225,7 +225,6 @@ $messages = array(
'qbbrowse' => 'à®à®²à®µà¯',
'qbedit' => 'தà¯à®à¯',
'qbpageoptions' => 'பà®à¯à® விரà¯à®ªà¯à®ªà®¤à¯ தà¯à®°à¯à®µà¯à®à®³à¯',
-'qbpageinfo' => 'பà®à¯à®à®¤à¯ தà®à®µà®²à¯à®à®³à¯',
'qbmyoptions' => 'à®à®©à¯ விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯à®°à¯à®µà¯à®à®³à¯',
'qbspecialpages' => 'à®à®¿à®±à®ªà¯à®ªà¯à®ªà¯ பà®à¯à®à®à¯à®à®³à¯',
'faq' => 'à®
à®à®¿à®à¯à®à®à®¿ à®à¯à®à¯à®à®ªà¯à®ªà®à¯à®®à¯ à®à¯à®³à¯à®µà®¿à®à®³à¯',
@@ -479,7 +478,7 @@ MySQL returned error "$3: $4".',
# Login and logout pages
'logouttext' => "'''நà¯à®à¯à®à®³à¯ à®à®ªà¯à®ªà¯à®´à¯à®¤à¯ விà®à¯à®ªà®¤à®¿à®à¯à®¯à®¿à®²à¯ à®à®³à¯à®³à¯à®°à¯à®à®³à¯.'''
-நà¯à®à¯à®à®³à¯ தà¯à®à®°à¯à®¨à¯à®¤à¯ {{SITENAME}} தளதà¯à®¤à¯ à®
னானியாà®à®ªà¯ பயனà¯à®ªà®à¯à®¤à¯à®¤à®²à®¾à®®à¯, à®
லà¯à®²à®¤à¯ à®
த௠பயனராà®à®µà¯ வà¯à®±à¯ பயனராà®à®µà¯ [[Special:UserLogin|à®®à¯à®£à¯à®à¯à®®à¯ பà¯à®à¯à®ªà®¤à®¿à®à¯]] à®à¯à®¯à¯à®¯à®²à®¾à®®à¯. à®à®à¯à®à®³à¯ à®à®²à®¾à®µà®¿à®¯à®¿à®©à¯ à®à®à¯à®®à®¾à®±à¯à®±à¯ நà¯à®à¯à®à®ªà¯à®ªà®à¯à®®à¯ வர௠à®à®¿à®² பà®à¯à®à®à¯à®à®³à¯ தà¯à®à®°à¯à®¨à¯à®¤à¯à®®à¯ பà¯à®à¯à®ªà®¤à®¿à®à¯à®¯à®¿à®²à¯ à®à®³à¯à®³à®¤à¯ பà¯à®©à¯à®±à¯ à®à®¾à®à¯à®à®¿ தரà¯à®®à¯ à®à®©à¯à®ªà®¤à¯à®à¯ à®à®µà®©à®¿à®à¯à®à®µà¯à®®à¯.",
+நà¯à®à¯à®à®³à¯ தà¯à®à®°à¯à®¨à¯à®¤à¯ {{SITENAME}} தளதà¯à®¤à¯ à®
னானியாà®à®ªà¯ பயனà¯à®ªà®à¯à®¤à¯à®¤à®²à®¾à®®à¯, à®
லà¯à®²à®¤à¯ à®
த௠பயனராà®à®µà¯ வà¯à®±à¯ பயனராà®à®µà¯ [$1 à®®à¯à®£à¯à®à¯à®®à¯ பà¯à®à¯à®ªà®¤à®¿à®à¯] à®à¯à®¯à¯à®¯à®²à®¾à®®à¯. à®à®à¯à®à®³à¯ à®à®²à®¾à®µà®¿à®¯à®¿à®©à¯ à®à®à¯à®®à®¾à®±à¯à®±à¯ நà¯à®à¯à®à®ªà¯à®ªà®à¯à®®à¯ வர௠à®à®¿à®² பà®à¯à®à®à¯à®à®³à¯ தà¯à®à®°à¯à®¨à¯à®¤à¯à®®à¯ பà¯à®à¯à®ªà®¤à®¿à®à¯à®¯à®¿à®²à¯ à®à®³à¯à®³à®¤à¯ பà¯à®©à¯à®±à¯ à®à®¾à®à¯à®à®¿ தரà¯à®®à¯ à®à®©à¯à®ªà®¤à¯à®à¯ à®à®µà®©à®¿à®à¯à®à®µà¯à®®à¯.",
'welcomecreation' => '==நலà¯à®µà®°à®µà¯, $1!==
à®à®à¯à®à®³à¯à®à¯à®à®¾à®© பயனர௠à®à®£à®à¯à®à¯ à®à®°à¯à®µà®¾à®à¯à®à®ªà¯à®ªà®à¯à®à¯à®³à¯à®³à®¤à¯. à®à®à¯à®à®³à¯à®à¯à®à¯à®±à¯à®±à®µà®¾à®±à¯ [[Special:Preferences|{{SITENAME}} விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯à®°à¯à®µà¯à®à®³à¯]] மாறà¯à®±à®¿à®à¯ à®à¯à®³à¯à®³ மறவாதà¯à®°à¯à®à®³à¯.',
'yourname' => 'பயனர௠பà¯à®¯à®°à¯:',
diff --git a/languages/messages/MessagesTe.php b/languages/messages/MessagesTe.php
index 42b45db96b..5bbccf2ec1 100644
--- a/languages/messages/MessagesTe.php
+++ b/languages/messages/MessagesTe.php
@@ -287,7 +287,6 @@ $messages = array(
'qbbrowse' => 'విహరిà°à°à±',
'qbedit' => 'సవరిà°à°à±',
'qbpageoptions' => 'à° à°ªà±à°à±',
-'qbpageinfo' => 'à°¸à°à°¦à°°à±à°à°',
'qbmyoptions' => 'నా à°ªà±à°à±à°²à±',
'qbspecialpages' => 'à°ªà±à°°à°¤à±à°¯à±à° à°ªà±à°à±à°²à±',
'faq' => 'తరà°à± à°
à°¡à°¿à°à± à°ªà±à°°à°¶à±à°¨à°²à±',
@@ -542,7 +541,7 @@ $2',
# Login and logout pages
'logouttext' => "'''à°à°ªà±à°ªà±à°¡à± à°®à±à°°à± నిషà±à°à±à°°à°®à°¿à°à°à°¾à°°à±.'''
-à°®à±à°°à± {{SITENAME}}ని à°
à°à±à°à°¾à°¤à°à°à°¾ వాడà±à°¤à±à°à°¡à±à°à±à°à±, à°²à±à°¦à°¾ à°à°¦à± వాడà±à°à°°à°¿à°à°¾ à°à°¾à°¨à± à°²à±à°¦à°¾ à°µà±à°°à± వాడà±à°à°°à°¿à°à°¾ à°à°¾à°¨à± [[Special:UserLogin|మళà±à°³à± à°ªà±à°°à°µà±à°¶à°¿à°à°à°µà°à±à°à±]].
+à°®à±à°°à± {{SITENAME}}ని à°
à°à±à°à°¾à°¤à°à°à°¾ వాడà±à°¤à±à°à°¡à±à°à±à°à±, à°²à±à°¦à°¾ à°à°¦à± వాడà±à°à°°à°¿à°à°¾ à°à°¾à°¨à± à°²à±à°¦à°¾ à°µà±à°°à± వాడà±à°à°°à°¿à°à°¾ à°à°¾à°¨à± [$1 మళà±à°³à± à°ªà±à°°à°µà±à°¶à°¿à°à°à°µà°à±à°à±].
à°
యితà±, మౠవిహారిణిలà±à°¨à°¿ à°à±à°¶à°¾à°¨à±à°¨à°¿ à°¶à±à°à±à°°à°ªà°°à°¿à°à± వరà°à± à°à±à°¨à±à°¨à°¿ à°ªà±à°à±à°²à± à°®à±à°°à°¿à°à°à°¾ à°ªà±à°°à°µà±à°¶à°¿à°à°à°¿ à°à°¨à±à°¨à°à±à°²à±à°à°¾à°¨à± à°à±à°ªà°¿à°à°à°µà°à±à°à°¨à°¿ à°à°®à°¨à°¿à°à°à°à°¡à°¿.",
'welcomecreation' => '== à°¸à±à°µà°¾à°à°¤à°, $1! ==
@@ -885,6 +884,11 @@ $2
à°
ది à°à°ªà±à°ªà°à°¿à°à± à°à°à°¦à°¿.',
'defaultmessagetext' => 'à°
à°ªà±à°°à°®à±à°¯ à°¸à°à°¦à±à°¶à°ªà± పాఠà±à°¯à°',
+# Content models
+'content-model-wikitext' => 'విà°à±à°ªà°¾à° à±à°¯à°',
+'content-model-text' => 'సాదా పాఠà±à°¯à°',
+'content-model-javascript' => 'à°à°¾à°µà°¾à°¸à±à°à±à°°à°¿à°ªà±à°à±',
+
# Parser/template warnings
'expensive-parserfunction-warning' => 'à°¹à±à°à±à°à°°à°¿à°: à° à°ªà±à°à±à°²à± à°à°°à±à°¦à±à°¨ పారà±à°¸à°°à± పిలà±à°ªà±à°²à± à°à°¾à°²à°¾ à°à°¨à±à°¨à°¾à°¯à°¿.
@@ -1984,6 +1988,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization à°à±à°¡à°à°¡à°¿.',
'mailnologin' => 'à°ªà°à°ªà°¿à°à°à°µà°²à°¸à°¿à°¨ à°à°¿à°°à±à°¨à°¾à°®à°¾ à°²à±à°¦à±',
'mailnologintext' => 'à°à°¤à°°à±à°²à°à± à°-à°®à±à°¯à°¿à°²à± à°ªà°à°ªà°¿à°à°à°¾à°²à°à°à±, à°®à±à°°à± [[Special:UserLogin|లాà°à°¿à°¨à±â]] à°
యి à°à°à°¡à°¾à°²à°¿, మరియౠమౠ[[Special:Preferences|à°
à°à°¿à°°à±à°à±à°²]]లౠసరà±à°¨ à°-à°®à±à°¯à°¿à°²à± à°à°¿à°°à±à°¨à°¾à°®à°¾ à°à°à±à°à°¿ à°à°à°¡à°¾à°²à°¿.',
'emailuser' => 'ఠవాడà±à°à°°à°¿à°à°¿ à°-à°®à±à°¯à°¿à°²à±à°¨à°¿ à°ªà°à°ªà°¿à°à°à°à°¡à°¿',
+'emailuser-title-target' => 'à° {{GENDER:$1|వాడà±à°à°°à°¿à°à°¿}} à°à°®à±à°¯à°¿à°²à± à°ªà°à°ªà°¿à°à°à°à°¡à°¿',
'emailpage' => 'వాడà±à°à°°à°¿à°à°¿ à°-à°®à±à°¯à°¿à°²à±à°¨à°¿ à°ªà°à°ªà°¿à°à°à±',
'emailpagetext' => 'వాడà±à°à°°à°¿à°à°¿ à°à°®à±à°¯à°¿à°²à± à°¸à°à°¦à±à°¶à°®à± à°ªà°à°ªà°¿à°à°à±à°à°à± à°à±à°°à°¿à°à°¦à°¿ ఫారà°à°¨à± à°à°ªà°¯à±à°à°¿à°à°à°µà°à±à°à±. [[Special:Preferences|మౠవాడà±à°à°°à°¿ à°
à°à°¿à°°à±à°à±à°²]]లౠమà±à°°à°¿à°à±à°à°¿à°¨ à°-à°®à±à°¯à°¿à°²à± à°à°¿à°°à±à°¨à°¾à°®à°¾ "à°¨à±à°à°¡à°¿" à° à°¸à°à°¦à±à°¶à° à°µà°à±à°à°¿à°¨à°à±à°²à±à°à°¾ à°à°à°à±à°à°¦à°¿, à°à°¨à±à° à°µà±à°à±à°¨à°¿ à°
à°à°¦à±à°à±à°¨à±à°µà°¾à°°à± à°¨à±à°°à±à°à°¾ à°®à±à°à± à°à°µà°¾à°¬à°¿à°µà±à°µà°à°²à±à°à±à°¤à°¾à°°à±.',
'usermailererror' => 'à°®à±à°¯à°¿à°²à± à°à°¬à±à°à±à°à±à°à± à° à°²à±à°ªà°¾à°¨à±à°¨à°¿ à°à±à°ªà°¿à°à°¦à°¿:',
@@ -2737,6 +2742,7 @@ $UNWATCHURL à°à°¿ à°µà±à°³à±à°³à°à°¡à°¿.
'pageinfo-views' => 'à°µà±à°à±à°·à°£à°² à°¸à°à°à±à°¯',
'pageinfo-watchers' => 'à°ªà±à°à± à°µà±à°à±à°·à°à±à°² à°¸à°à°à±à°¯',
'pageinfo-edits' => 'à°®à±à°¤à±à°¤à° మారà±à°ªà±à°² à°¸à°à°à±à°¯',
+'pageinfo-toolboxlink' => 'à°ªà±à°à± సమాà°à°¾à°°à°',
# Skin names
'skinname-standard' => 'à°¸à°à°ªà±à°°à°¦à°¾à°¯',
diff --git a/languages/messages/MessagesTg_cyrl.php b/languages/messages/MessagesTg_cyrl.php
index 0d18a83826..0cd2c9b40e 100644
--- a/languages/messages/MessagesTg_cyrl.php
+++ b/languages/messages/MessagesTg_cyrl.php
@@ -213,7 +213,6 @@ $messages = array(
'qbbrowse' => 'ÐÑÑÑÑ',
'qbedit' => 'ÐиÑоиÑ',
'qbpageoptions' => 'Ðн ÑаҳиÑа',
-'qbpageinfo' => 'ÐоÑÑ',
'qbmyoptions' => 'СаҳиÑаҳои ман',
'qbspecialpages' => 'СаҳиÑаҳои вижа',
'faq' => 'Саволҳои Ñез-Ñез пÑÑÑидаÑÑда',
@@ -444,7 +443,7 @@ $1',
# Login and logout pages
'logouttext' => "'''ÐкнÑн аз ÑиÑÑем Ñ
оÑиҷ ÑÑдаед.'''
-ШÑмо меÑавонед гÑмном аз {{SITENAME}} иÑÑиÑодабаÑиÑо идома диҳед, Ñ Ð¼ÐµÑавонед бо ҳамин номи коÑбаÑиаÑон ва Ñ Ð½Ð¾Ð¼Ð¸ коÑбаÑии дигаÑе [[Special:UserLogin|боз вÑÑÑд кÑнед]].
+ШÑмо меÑавонед гÑмном аз {{SITENAME}} иÑÑиÑодабаÑиÑо идома диҳед, Ñ Ð¼ÐµÑавонед бо ҳамин номи коÑбаÑиаÑон ва Ñ Ð½Ð¾Ð¼Ð¸ коÑбаÑии дигаÑе [$1 боз вÑÑÑд кÑнед].
Тавваҷӯҳ кÑнед, ки баÑзе аз ÑаҳиÑаҳо Òаблан Ñи ÑавÑе Ð½Ð°Ð¼Ð¾Ð¸Ñ ÑÑда бÑдан ҳамин ÑÐ°Ð²Ñ Ð½Ð°Ð¼Ð¾Ð¸Ñ Ð´Ð¾Ð´Ð° меÑаванд, Ñо даме ки ÑÑмо ҳоÑизаи мÑÑÑÑгаÑаÑонÑо пок кÑнед.",
'welcomecreation' => '== Ð¥ÑÑ Ð¾Ð¼Ð°Ð´ÐµÐ´, $1! ==
@@ -760,6 +759,7 @@ $1',
'revdelete-success' => "'''ТаÒйиÑи намоÑнии нÑÑÑ
а бо мÑваÑÑаÒиÑÑ Ð°Ð½Ò·Ð¾Ð¼ ÑÑд.'''",
'logdelete-success' => "'''ТаÒйиÑи намоÑнии мавÑид бо мÑваÑÑаÒиÑÑ Ð°Ð½Ò·Ð¾Ð¼ ÑÑд.'''",
'revdel-restore' => 'ТаÒйиÑи падидоÑÓ£',
+'revdel-restore-visible' => 'нÑÑÑ
аҳои намоÑн',
'pagehist' => 'ТаÑÑиÑ
и ÑаҳиÑа',
'deletedhist' => 'ТаÑÑиÑ
и ҳазÑÑÑда',
'revdelete-edit-reasonlist' => 'ÐиÑÐ¾Ð¸Ñ Ò³Ð°Ð·Ñ Ð´Ð°Ð»ÐµÐ»Ò³Ð¾',
@@ -1177,7 +1177,7 @@ $1',
'filehist-dimensions' => 'Ðндоза',
'filehist-filesize' => 'Ðндозаи паÑванда',
'filehist-comment' => 'Тавзеҳ',
-'imagelinks' => 'Ðайвандҳои паÑванда',
+'imagelinks' => 'ÐÑÑиÑодаи паÑванда',
'linkstoimage' => '{{PLURAL:$1|СаҳиÑаҳои|$1 СаҳиÑаи}} зеÑин ба ин Ð°ÐºÑ Ð¿Ð°Ð¹Ð²Ð°Ð½Ð´Ð°Ð½Ð´:',
'nolinkstoimage' => 'Ҳеҷ ÑаҳиÑае ба ин Ð°ÐºÑ Ð¿Ð°Ð¹Ð²Ð°Ð½Ð´ надоÑад.',
'sharedupload' => 'Ðн паÑванда аз $1 мебоÑад ва ÑоÑд аз ÑаÑаÑи Ð´Ð¸Ð³Ð°Ñ Ð»Ð¾Ð¸Ò³Ð°Ò³Ð¾ иÑÑиÑода Ñавад.',
diff --git a/languages/messages/MessagesTg_latn.php b/languages/messages/MessagesTg_latn.php
index c2228badde..bf09f816bb 100644
--- a/languages/messages/MessagesTg_latn.php
+++ b/languages/messages/MessagesTg_latn.php
@@ -155,7 +155,6 @@ $messages = array(
'qbbrowse' => 'Murur',
'qbedit' => 'ViroiÅ',
'qbpageoptions' => 'In sahifa',
-'qbpageinfo' => 'Boft',
'qbmyoptions' => 'Sahifahoi man',
'qbspecialpages' => 'Sahifahoi viƶa',
'faq' => 'Savolhoi tez-tez pursidaÅuda',
@@ -379,7 +378,7 @@ Daleli zikrÅuda az in qaror ast ''$2''.",
# Login and logout pages
'logouttext' => "'''Aknun az sistem xoriç Åudaed.'''
-Åumo metavoned gumnom az {{SITENAME}} istifodabariro idoma dihed, jo metavoned bo hamin nomi korbariaton va jo nomi korbariji digare [[Special:UserLogin|boz vurud kuned]].
+Åumo metavoned gumnom az {{SITENAME}} istifodabariro idoma dihed, jo metavoned bo hamin nomi korbariaton va jo nomi korbariji digare [$1 boz vurud kuned].
Tavvaçūh kuned, ki ba'ze az sahifaho qablan ci tavre namoiÅ Åuda budan hamin tavr namoiÅ doda meÅavand, to dame ki Åumo hofizai mururgaratonro pok kuned.",
'welcomecreation' => '== XuÅ omaded, $1! ==
diff --git a/languages/messages/MessagesTh.php b/languages/messages/MessagesTh.php
index 5025925c73..523fa4dec8 100644
--- a/languages/messages/MessagesTh.php
+++ b/languages/messages/MessagesTh.php
@@ -328,7 +328,6 @@ $messages = array(
'qbbrowse' => 'สืà¸à¸à¹à¸',
'qbedit' => 'à¹à¸à¹à¹à¸',
'qbpageoptions' => 'หà¸à¹à¸²à¸à¸µà¹',
-'qbpageinfo' => 'à¸à¸£à¸´à¸à¸',
'qbmyoptions' => 'หà¸à¹à¸²à¸à¸à¸à¸à¸±à¸',
'qbspecialpages' => 'หà¸à¹à¸²à¸à¸´à¹à¸¨à¸©',
'faq' => 'à¸à¸³à¸à¸²à¸¡à¸à¸²à¸¡à¸à¹à¸à¸¢',
@@ -574,7 +573,7 @@ $1',
# Login and logout pages
'logouttext' => "'''à¸à¸à¸°à¸à¸µà¹à¸à¸¸à¸à¹à¸à¹à¸¥à¹à¸à¸à¹à¸à¸²à¸à¹à¸à¸à¸à¸à¸²à¸à¸£à¸°à¸à¸'''
-à¸à¸¸à¸à¸ªà¸²à¸¡à¸²à¸£à¸à¹à¸à¹à¸à¸²à¸ {{SITENAME}} à¹à¸à¹à¸à¹à¸à¹à¸à¸à¸²à¸à¸°à¸à¸¹à¹à¹à¸à¹à¸à¸´à¸£à¸à¸²à¸¡ หรืà¸à¸à¸¸à¸à¸ªà¸²à¸¡à¸²à¸£à¸[[Special:UserLogin|ลà¹à¸à¸à¸à¸´à¸à¸à¸¥à¸±à¸à¹à¸à¹à¸²à¹à¸]]à¸à¹à¸§à¸¢à¸à¸·à¹à¸à¸à¸¹à¹à¹à¸à¹à¹à¸à¸´à¸¡à¸«à¸£à¸·à¸à¸à¸·à¹à¸à¸à¸¹à¹à¹à¸à¹à¸à¸·à¹à¸à¹
+à¸à¸¸à¸à¸ªà¸²à¸¡à¸²à¸£à¸à¹à¸à¹à¸à¸²à¸ {{SITENAME}} à¹à¸à¹à¸à¹à¸à¹à¸à¸à¸²à¸à¸°à¸à¸¹à¹à¹à¸à¹à¸à¸´à¸£à¸à¸²à¸¡ หรืà¸à¸à¸¸à¸à¸ªà¸²à¸¡à¸²à¸£à¸[$1 ลà¹à¸à¸à¸à¸´à¸à¸à¸¥à¸±à¸à¹à¸à¹à¸²à¹à¸]à¸à¹à¸§à¸¢à¸à¸·à¹à¸à¸à¸¹à¹à¹à¸à¹à¹à¸à¸´à¸¡à¸«à¸£à¸·à¸à¸à¸·à¹à¸à¸à¸¹à¹à¹à¸à¹à¸à¸·à¹à¸à¹
à¸à¸¢à¹à¸²à¸à¹à¸£à¸à¹à¸à¸²à¸¡à¸à¸²à¸à¸à¸°à¸¡à¸µà¸à¸²à¸à¸«à¸à¹à¸²à¸à¸µà¹à¸¢à¸±à¸à¹à¸ªà¸à¸à¸à¹à¸à¸à¸§à¸²à¸¡à¸§à¹à¸²à¸à¸¸à¸à¸à¸³à¸¥à¸±à¸à¸¥à¹à¸à¸à¸à¸´à¸à¸à¸¢à¸¹à¹ à¸à¸à¸à¸§à¹à¸²à¸à¸¸à¸à¸à¸°à¸¥à¹à¸²à¸à¹à¸à¸à¸à¸à¸à¸à¸²à¸à¹à¸§à¹à¸à¹à¸à¸£à¸²à¸§à¹à¹à¸à¸à¸£à¹",
'welcomecreation' => '== ยิà¸à¸à¸µà¸à¹à¸à¸à¸£à¸±à¸ $1! ==
diff --git a/languages/messages/MessagesTk.php b/languages/messages/MessagesTk.php
index 64b77eb6be..1ed97e941d 100644
--- a/languages/messages/MessagesTk.php
+++ b/languages/messages/MessagesTk.php
@@ -182,7 +182,6 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
'qbbrowse' => 'Göz aýla',
'qbedit' => 'Redaktirle',
'qbpageoptions' => 'Bu sahypa',
-'qbpageinfo' => 'Kontekst',
'qbmyoptions' => 'MeniÅ sahypalarym',
'qbspecialpages' => 'Ãörite sahypalar',
'faq' => 'KSS',
@@ -422,7 +421,7 @@ Görkezilen sebäp: ''$2''.",
# Login and logout pages
'logouttext' => "'''Sessiýany ýapdyÅyz.'''
-Indi anonim ýagdaýda {{SITENAME}} saýtyny ulanyp bilersiÅiz, ýa-da Åol bir ýa-da baÅga bir at bilen [[Special:UserLogin|sessiýany ýaÅadan]] açyp bilersiÅiz.
+Indi anonim ýagdaýda {{SITENAME}} saýtyny ulanyp bilersiÅiz, ýa-da Åol bir ýa-da baÅga bir at bilen [$1 sessiýany ýaÅadan] açyp bilersiÅiz.
Web brauzeriÅiziÅ keÅini arassalaýançaÅyz käbir sahypalar sessiýaÅyzyÅ açyk wagtkysy ýaly görünip biler.",
'welcomecreation' => '== HoÅ geldiÅiz, $1! ==
diff --git a/languages/messages/MessagesTl.php b/languages/messages/MessagesTl.php
index b370efe324..f4d5e2098c 100644
--- a/languages/messages/MessagesTl.php
+++ b/languages/messages/MessagesTl.php
@@ -295,7 +295,6 @@ $messages = array(
'qbbrowse' => 'Basa-basahin',
'qbedit' => 'Baguhin',
'qbpageoptions' => 'Itong pahina',
-'qbpageinfo' => 'Konteksto',
'qbmyoptions' => 'Mga pahina ko',
'qbspecialpages' => 'Mga natatanging pahina',
'faq' => "Mga karaniwang itinatanong (''FAQ'')",
@@ -567,7 +566,7 @@ Ang tagapangasiwang nagkandado nito ay nag-alok ng ganitong paliwanag: "$3".',
# Login and logout pages
'logouttext' => "'''Nakaalis ka na sa pagkakalagda.'''
-Maaari kang tumuloy sa paggamit ng {{SITENAME}} nang hindi nakikilala (anonimo), o maaaring kang [[Special:UserLogin|lumagda/tumala muli]] bilang kapareho o ibang tagagamit.
+Maaari kang tumuloy sa paggamit ng {{SITENAME}} nang hindi nakikilala (anonimo), o maaaring kang [$1 lumagda/tumala muli] bilang kapareho o ibang tagagamit.
Tandaan na may ilang pahinang maaaring magpatuloy na nagpapakitang parang nakalagda ka pa rin, hanggang sa linisin mo ang iyong baunang pambasa-basa (''browser cache'').",
'welcomecreation' => '== Maligayang pagdating, $1! ==
Nilikha na ang iyong kuwenta.
@@ -3011,7 +3010,6 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
'pageinfo-authors' => 'Kabuuang bilang ng magkakabukod na mga may-akda',
'pageinfo-recent-edits' => 'Kamakailang bilang ng mga pamamatnugot (sa loob ng huling $1)',
'pageinfo-recent-authors' => 'Kamakailang bilang ng magkakabukod na mga may-akda',
-'pageinfo-restriction' => 'Pruteksiyon ng pahina ({{lcfirst:$1}})',
'pageinfo-magic-words' => '{{PLURAL:$1|Salita|Mga salita}}ng mahiwaga ($1)',
'pageinfo-hidden-categories' => 'Nakatagong {{PLURAL:$1|kategorya|mga kategorya}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Suleras|Mga suleras}} ($1) na nasa transklusyon (kasama sa maraming mga lugar)',
diff --git a/languages/messages/MessagesTly.php b/languages/messages/MessagesTly.php
index e68c60b1a9..48da3354ed 100644
--- a/languages/messages/MessagesTly.php
+++ b/languages/messages/MessagesTly.php
@@ -946,6 +946,7 @@ $messages = array(
# Info page
'pageinfo-header-edits' => 'ÐÓÐ³Ð¸Ñ ÐºÐ°ÑÐ´Ó Ð±ÑÓ ÑиÑон ÑаÑÑÑ
',
+'pageinfo-redirects-value' => '$1',
# Browsing diffs
'previousdiff' => 'â ÐавÑнÓни дÓгиÑи',
diff --git a/languages/messages/MessagesTr.php b/languages/messages/MessagesTr.php
index da6c103606..8aac89337e 100644
--- a/languages/messages/MessagesTr.php
+++ b/languages/messages/MessagesTr.php
@@ -468,7 +468,6 @@ $messages = array(
'qbbrowse' => 'Tara',
'qbedit' => 'DeÄiÅtir',
'qbpageoptions' => 'Bu sayfa',
-'qbpageinfo' => 'BaÄlam',
'qbmyoptions' => 'Sayfalarım',
'qbspecialpages' => 'Ãzel sayfalar',
'faq' => 'SSS',
@@ -723,7 +722,7 @@ Verilen sebep: ''$2''.",
# Login and logout pages
'logouttext' => "'''Oturumu kapattınız.'''
-Åimdi anonim olarak {{SITENAME}} sitesini kullanmaya devam edebilirsiniz ya da aynı kullanıcı adıyla ya da ister baÅka bir kullanıcı adıyla [[Special:UserLogin|yeniden oturum açabilirsiniz]].
+Åimdi anonim olarak {{SITENAME}} sitesini kullanmaya devam edebilirsiniz ya da aynı kullanıcı adıyla ya da ister baÅka bir kullanıcı adıyla [$1 yeniden oturum açabilirsiniz].
Tarayıcınızın önbelleÄini temizleyene kadar bazı sayfalar sanki hâlâ oturumunuz açıkmıŠgibi görünebilir.",
'welcomecreation' => '== HoÅ geldin, $1! ==
@@ -1078,6 +1077,9 @@ SilinmiŠgörünüyor.',
Sayfa zaten mevcut.',
'defaultmessagetext' => 'Varsayılan mesaj metni',
+# Content models
+'content-model-javascript' => 'JavaScript',
+
# Parser/template warnings
'expensive-parserfunction-warning' => 'Uyarı: Bu sayfa çok fazla zengin derleyici fonksiyonu çaÄrısı içeriyor.
@@ -2975,6 +2977,7 @@ Geçici dosya kayıp.',
'pageinfo-header-edits' => 'DeÄiÅiklikler',
'pageinfo-views' => 'Görüntülenme sayısı',
'pageinfo-watchers' => 'İzleyen sayısı',
+'pageinfo-redirects-value' => '$1',
'pageinfo-edits' => 'DeÄiÅiklik sayısı',
# Skin names
diff --git a/languages/messages/MessagesTs.php b/languages/messages/MessagesTs.php
index 726ecbae15..45cecdad96 100644
--- a/languages/messages/MessagesTs.php
+++ b/languages/messages/MessagesTs.php
@@ -372,7 +372,7 @@ Hikwlaho ka xivangelo xa "\'\'$2\'\'".',
# Login and logout pages
'logouttext' => "'''Uhumile eka wiki leyi.'''
-Ungaya emahlweni utirhisa {{SITENAME}} handle ko tipaluxa, kumbe unga [[Special:UserLogin|pfula unghena nakambe]] tani hi mutirhisa un'wana kumbe kumbe hivuxokoxoko bya wena.
+Ungaya emahlweni utirhisa {{SITENAME}} handle ko tipaluxa, kumbe unga [$1 pfula unghena nakambe] tani hi mutirhisa un'wana kumbe kumbe hivuxokoxoko bya wena.
Tsundzuka leswaku matluka man'wana mangaha komba onge upfule unghena eka wiki, loko ungasi sula tluka rakhompuyuta leri tsundzukaka matluka lawa uma vhakeleke.",
'welcomecreation' => '== Hoyohoyo, eka Wena $1 ! ==
Akhawunti yawena yitumbuluxiwile.
diff --git a/languages/messages/MessagesTt_cyrl.php b/languages/messages/MessagesTt_cyrl.php
index 1f9fc5c03b..ea2fc3747e 100644
--- a/languages/messages/MessagesTt_cyrl.php
+++ b/languages/messages/MessagesTt_cyrl.php
@@ -606,7 +606,7 @@ $2',
# Login and logout pages
'logouttext' => "'''Сез Ñ
иÑап ÑзмагÑздан ÑÑкÑÑгÑз.'''
-Сез {{SITENAME}} пÑоекÑÑнда аноним ÑÓвеÑÑÓ ÐºÐ°Ð»Ð° ÑиÑÓ ÑÑл Ñк Ñки баÑка иÑем белÓн Ñңадан [[Special:UserLogin|кеÑÓ]] алаÑÑз.
+Сез {{SITENAME}} пÑоекÑÑнда аноним ÑÓвеÑÑÓ ÐºÐ°Ð»Ð° ÑиÑÓ ÑÑл Ñк Ñки баÑка иÑем белÓн Ñңадан [$1 кеÑÓ] алаÑÑз.
ÐÐ°Ð¹Ð±ÐµÑ Ð±Ð¸ÑлÓÑ Ð¡ÐµÐ· кеÑгÓн кебек күÑÑÓÑелеÑÐ³Ó Ð¼Ó©Ð¼ÐºÐ¸Ð½. ÐÐ¾Ð½Ñ Ð±ÐµÑеÑÒ¯ Ó©Ñен бÑаÑÐ·ÐµÑ ÐºÑÑÑн ÑиÑÑаÑÑÑгÑз.",
'welcomecreation' => '== Ð ÓÑ
им иÑегез, $1! ==
Сез ÑеÑкÓлдегез.
diff --git a/languages/messages/MessagesTt_latn.php b/languages/messages/MessagesTt_latn.php
index d3262c4094..57755f74ae 100644
--- a/languages/messages/MessagesTt_latn.php
+++ b/languages/messages/MessagesTt_latn.php
@@ -477,7 +477,7 @@ Ul kürsätkän säbäp: ''$2''.",
# Login and logout pages
'logouttext' => "'''Sez xisap yazmaÄızdan çıqtıÄız.'''
-Sez {{SITENAME}} proyektında anonim räweÅtä qala yäisä Åul uq yäki baÅqa isem belän yañadan [[Special:UserLogin|kerä]] alasız.
+Sez {{SITENAME}} proyektında anonim räweÅtä qala yäisä Åul uq yäki baÅqa isem belän yañadan [$1 kerä] alasız.
Qayber bitlär Sez kergän kebek kürsätelergä mömkin. Monı beterü öçen brauzer keÅın çistartıÄız.",
'welcomecreation' => '== Räxim itegez, $1! ==
Sez terkäldegez.
diff --git a/languages/messages/MessagesUg_arab.php b/languages/messages/MessagesUg_arab.php
index 32db00bed6..9cd4547330 100644
--- a/languages/messages/MessagesUg_arab.php
+++ b/languages/messages/MessagesUg_arab.php
@@ -8,6 +8,7 @@
* @file
*
* @author Alfredie
+ * @author Arlin
* @author Kaganer
* @author Reedy
* @author Sahran
@@ -108,45 +109,45 @@ $messages = array(
'thu' => 'Ù¾',
'fri' => 'ج',
'sat' => 'Ø´',
-'january' => 'ÙÛھرÙتاÙ',
-'february' => 'Ú¾Ûت',
-'march' => 'ÙÛÛرÛز',
-'april' => 'ئÛÙ
Ûت',
-'may_long' => 'باھار',
-'june' => 'سÛÙ¾Ûر',
-'july' => 'ÚÙÙÙÛ',
-'august' => 'تÙÙ
Ûز',
-'september' => 'Ù
ÙزاÙ',
-'october' => 'ئÙغÛز',
-'november' => 'ئÙغÙاÙ',
-'december' => 'ÙÛÙÛÙ',
-'january-gen' => 'ÙÛھرÙتاÙ',
-'february-gen' => 'Ú¾Ûت',
-'march-gen' => 'ÙÛÛرÛز',
-'april-gen' => 'ئÛÙ
Ûت',
-'may-gen' => 'باھار',
-'june-gen' => 'سÛÙ¾Ûر',
-'july-gen' => 'ÚÙÙÙÛ',
-'august-gen' => 'تÙÙ
Ûز',
-'september-gen' => 'Ù
ÙزاÙ',
-'october-gen' => 'ئÙغÛز',
-'november-gen' => 'ئÙغÙاÙ',
-'december-gen' => 'ÙÛÙÛÙ',
-'jan' => 'ÙÛھرÙتاÙ',
-'feb' => 'Ú¾Ûت',
-'mar' => 'ÙÛÛرÛز',
-'apr' => 'ئÛÙ
Ûت',
-'may' => 'باھار',
-'jun' => 'سÛÙ¾Ûر',
-'jul' => 'ÚÙÙÙÛ',
-'aug' => 'تÙÙ
Ûز',
-'sep' => 'Ù
ÙزاÙ',
-'oct' => 'ئÙغÛز',
-'nov' => 'ئÙغÙاÙ',
-'dec' => 'ÙÛÙÛÙ',
+'january' => 'ÙاÙÛار',
+'february' => 'ÙÛÛراÙ',
+'march' => 'Ù
ارت',
+'april' => 'ئاپرÛÙ',
+'may_long' => 'Ù
اÙ',
+'june' => 'ئÙÙÛÙ',
+'july' => 'ئÙÙÛÙ',
+'august' => 'ئاÛغÛست',
+'september' => 'سÙÙتÛبÙر',
+'october' => 'ئÛÙتÛبÙر',
+'november' => 'ÙÙÙابÙر',
+'december' => 'دÛÙابÙر',
+'january-gen' => 'ÙاÙÛار',
+'february-gen' => 'ÙÛÛراÙ',
+'march-gen' => 'Ù
ارت',
+'april-gen' => 'ئاپرÛÙ',
+'may-gen' => 'Ù
اÙ',
+'june-gen' => 'ئÙÙÛÙ',
+'july-gen' => 'ئÙÙÛÙ',
+'august-gen' => 'ئاÛغÛست',
+'september-gen' => 'سÙÙتÛبÙر',
+'october-gen' => 'ئÛÙتÛبÙر',
+'november-gen' => 'ÙÙÙابÙر',
+'december-gen' => 'دÛÙابÙر',
+'jan' => 'ÙاÙÛار',
+'feb' => 'ÙÛÛراÙ',
+'mar' => 'Ù
ارت',
+'apr' => 'ئاپرÛÙ',
+'may' => 'Ù
اÙ',
+'jun' => 'ئÙÙÛÙ',
+'jul' => 'ئÙÙÛÙ',
+'aug' => 'ئاÛغÛست',
+'sep' => 'سÙÙتÛبÙر',
+'oct' => 'ئÛÙتÛبÙر',
+'nov' => 'ÙÙÙابÙر',
+'dec' => 'دÛÙابÙر',
# Categories related messages
-'pagecategories' => '{{PLURAL:$1|تÛر|تÛر}}',
+'pagecategories' => '{{PLURAL:$1|تÛر|تÛرÙÛر}}',
'category_header' => '"$1" تÛردÙÙ٠بÛتÙÛر',
'subcategories' => 'تارÙ
ا٠تÛر',
'category-media-header' => '"$1" تÛردÙÙÙ ÛاسÙتÛ',
@@ -168,7 +169,7 @@ $messages = array(
'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
'about' => 'Ú¾ÛÙÙÙدÛ',
-'article' => 'Ù
ÛزÙ
Û٠بÛتÙ',
+'article' => 'Ù
ÛÙدÛرÙجÛ',
'newwindow' => '(ÙÛÚÙ ÙÛزÙÛÙØªÛ Ø¦Ø§Ú)',
'cancel' => 'Ûاز ÙÛÚ',
'moredotdotdot' => 'تÛپسÙÙÙÙâ¦',
@@ -183,7 +184,6 @@ $messages = array(
'qbbrowse' => 'ÙÛز ÙÛÚ¯Ûرت',
'qbedit' => 'تÛھرÙر',
'qbpageoptions' => 'Ø¨Û Ø¨Ûت',
-'qbpageinfo' => 'ÙÙÙتÛÙست',
'qbmyoptions' => 'بÛتÙÛرÙÙ
',
'qbspecialpages' => 'ئاÙاھÙØ¯Û Ø¨ÛتÙÛر',
'faq' => 'ÙÛÙ¾ ÙÛرÛÙÙدÙغا٠Ù
ÛسÙÙÙÙÛر',
@@ -196,7 +196,7 @@ $messages = array(
'vector-action-protect' => 'ÙÙغدا',
'vector-action-undelete' => 'ئÛسÙÙÚ¯Û ÙاÙتÛر',
'vector-action-unprotect' => 'ÙÙغداش ئÛزگÛرت',
-'vector-simplesearch-preference' => 'ئاÙÙ٠ئÙزدÛØ´ تÛÙÙÙÙ¾ÙÙÙ Ø¦Ø§Ú (Vector تÛرÙدÙÙا)',
+'vector-simplesearch-preference' => 'ئاددÙ٠ئÙزدÛØ´ ئÙستÙÙ Ø¦Ø§Ú (Ù¾ÛÙÛت ÛÛÙتÙر ÙÛÙÙÙ¾)',
'vector-view-create' => 'ÙÛر',
'vector-view-edit' => 'تÛھرÙر',
'vector-view-history' => 'تارÙØ® ÙÛرسÛت',
@@ -300,6 +300,7 @@ $1',
[[Special:Version|ÙÛشر بÛتÙ]] ÙÙ ÙÛرÛÚ.',
'ok' => 'Ù
اÙÛÙ',
+'pagetitle' => '$1 - {{SITENAME}}',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'backlinksubtitle' => 'â $1',
'retrievedfrom' => '"$1" دÙ٠ئÛرÙØ´ÙÛÙ',
@@ -333,7 +334,7 @@ $1',
'site-atom-feed' => '$1 ÙÙÚ Atom ÙاÙاÙÙ',
'page-rss-feed' => '"$1" ÙÙÚ RSS ÙاÙÙÙÙ',
'page-atom-feed' => '"$1" ÙÙÚ Atom ÙاÙÙÙÙ',
-'feed-atom' => 'ئاتÙÙ
',
+'feed-atom' => 'Atom',
'feed-rss' => 'RSS',
'red-link-title' => '$1 (بÛت Ù
ÛÛجÛد ئÛÙ
Ûس)',
'sort-descending' => 'ÙÛÙ
ÛÙÚ¯ÛÚ٠تÛرتÙÙ¾',
@@ -370,9 +371,9 @@ URL Ù٠خاتا ÙÙرگÛزÛÙ¾ ÙاÙدÙÚÙز ÙاÙ٠خاتا ئÛÙاÙ
'dberrortext' => 'ساÙدا٠سÛرÛشتÛرÛØ´ØªÛ Ú¯Ø±Ø§Ù
Ù
اتÙÙÙÙÙ٠خاتاÙÙÙ ÙÛز بÛردÙ.
ÙÛÙ
شا٠دÛتاÙÙÙÚ Ø¦ÛزÙدÙÙ٠خاتاÙÙÙتÙÙ ÙÛÙÙÙ¾ ÚÙÙÙا٠بÙÙÛØ´Ù Ù
ÛÙ
ÙÙÙ.
ئاخÙرÙÙ ÙÛتÙÙ
ÙÙ٠ساÙدا٠سÛرÛشتÛرÛØ´ بÛÙرÛÙÙ:
-$1- \\"$2\\"ÙÛÙÙسÙÙÙدÙÙ ÙÛÙÚ¯ÛÙ. -MySQL ÙاÙتÛرغا٠خاتاÙÙÙ \\"$3: $4\\".', +
$1
+ "$2
"ÙÛÙÙسÙÙÙدÙÙ ÙÛÙÚ¯ÛÙ.
+ساÙدا٠ÙاÙتÛرغا٠خاتاÙÙÙ "$3: $4".',
'dberrortextcl' => 'ساÙدا٠سÛرÛشتÛرÛØ´ØªÛ Ú¯Ø±Ø§Ù
Ù
اتÙÙÙÙÙ٠خاتاÙÙÙ ÙÛز بÛردÙ.
ئاخÙرÙÙ ÙÛتÙÙ
ÙÙ٠ساÙدا٠سÛرÛشتÛرÛØ´ بÛÙرÛÙÙ:
"$1"
@@ -435,7 +436,8 @@ MySQL ÙاÙتÛرغا٠خاتاÙÙÙÙ"$3: $4"',
'protectedpagetext' => 'Ø¨Û Ø¨Ûت تÛھرÙرÙÛØ´ÙÙÚ Ø¦Ø§ÙدÙÙ٠ئÛÙÙØ´ ئÛÚÛÙ ÙÛÙÛÙ¾ÙاÙغاÙ.',
'viewsourcetext' => 'سÙز Ø¨Û Ø¨ÛتÙ٠ئÛسÙÙ ÙÙدÙÙÙ ÙÛرÛÙÛÙسÙز ÛÛ ÙÛÚÛرÛÙÛÙسÙز:',
'viewyourtext' => "Ø¨Û Ø¨ÛتتÙÙÙ '''تÛھرÙرÙÙÚ¯ÛÙÙÙرÙÚÙز'''ÙÙÚ Ø¦ÛسÙÙ ÙÙدÙÙÙ ÙÛرÛÙ¾ ÙÛÚÛرÛÙÛÙسÙز.",
-'protectedinterface' => 'Ø¨Û Ø¨Ûت ÙÛÙ
شا٠دÛتاÙÙÙÚ ÙÛرÛÙÛØ´ تÛÙستÙÙ٠تÛÙ
ÙÙÙÙÚ¯ÛÙØ Ø®Ø§ÙÙغاÙÚÛ ØªÛھرÙرÙÛشتÙ٠ساÙÙÙÙÙØ´ ئÛÚÛÙ ÙÛÙÛÙ¾ÙاÙغاÙ.',
+'protectedinterface' => 'Ø¨Û Ø¨Ûت ÙÛÙ
شا٠دÛتاÙÙÙÚ ÙÛرÛÙÛØ´ تÛÙستÙÙ٠تÛÙ
ÙÙÙÙÚ¯ÛÙØ Ø®Ø§ÙÙغاÙÚÛ ØªÛھرÙرÙÛشتÙ٠ساÙÙÙÙÙØ´ ئÛÚÛÙ ÙÛÙÛÙ¾ÙاÙغاÙ.
+Ù
ÛسÙÙÛ٠ئÛÚ¯Ûر تÛرجÙÙ
Û ÙÙÙسÙÚÙز [//translatewiki.net/wiki/Main_Page?setlang=ug translatewiki.net] ئÛÙداÙتا MediaWiki ÙÛرÙÙÙÙÛشتÛرÛØ´ Ù¾ÙÙاÙÙÙ٠ئÙØ´ÙÙتÙØ´Ù٠ئÙÙÙÙØ´ÙÚ.',
'editinginterface' => "'''ئاگاھÙاÙدÛرÛØ´:''' سÙز تÛھرÙرÙÛÛاتÙا٠بÛت ÙÛÙ
شا٠دÛتاÙÙÙÚ ÙÛرÛÙÛØ´ تÛÙستÙÚ¯Û Ø¦ÙØ´ÙÙتÙÙÙدÛ.
Ø¨Û Ø¨Ûت ئÛزگÛرتÙÙØ³Û Ø¨Ø§Ø´Ùا ئÙØ´ÙÛتÙÛÚÙÙÛرÙÙÚ ÙÛرÛÙÛØ´ ئÛسÙÛبÙغا تÛسÙر ÙÛرسÙتÙدÛ.
@@ -468,7 +470,7 @@ $2',
# Login and logout pages
'logouttext' => "'''ھازÙر تÙزÙÙ
دÙÙ ÚÙÙتÙÚÙز.'''
-سÙز ÙاÙ
سÙز ھاÙÛØªØªÛ {{SITENAME}} Ù٠ئÙØ´ÙÙتÛÙÛÙسÙز ÙاÙ٠ئÙخشاش ÛÛ ÙاÙ٠ئÙخشاش بÙÙÙ
Ùغا٠ئÙØ´ÙÛتÙÛÚ٠ساÙاھÙÙÙتÙØ¯Û [[Special:UserLogin|تÙزÙÙ
غا ÙÙر]]ÛÙÛÙسÙز.
+سÙز ÙاÙ
سÙز ھاÙÛØªØªÛ {{SITENAME}} Ù٠ئÙØ´ÙÙتÛÙÛÙسÙز ÙاÙ٠ئÙخشاش ÛÛ ÙاÙ٠ئÙخشاش بÙÙÙ
Ùغا٠ئÙØ´ÙÛتÙÛÚ٠ساÙاھÙÙÙتÙØ¯Û [$1 تÙزÙÙ
غا ÙÙر]ÛÙÛÙسÙز.
دÙÙÙÛØªØ Ø¨Ûز٠بÛتÙÛر تÙرÙÛرگÛÙÙÚ ØºÛÙ
ÙÙÙ٠تازÙÙاÙÙ
ÙغÛÚÛ ÙÛÙÙÙا سÙزÙ٠تÙزÙÙ
غا ÙÙرگÛ٠ھاÙÛØªØªÛ ÙÛرسÙتÙØ´Ù Ù
ÛÙ
ÙÙÙ.",
'welcomecreation' => '== $1! Ø®ÛØ´ ÙÛپسÙز ==
@@ -745,7 +747,7 @@ $2
[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ù
ÛÙاسÙÛÛتÙÙ٠خاتÙرÙسÙÙ٠ئÙزدÙÙÛÙÛÙسÙزØ],
[{{fullurl:{{FULLPAGENAME}}|action=edit}} Ø¨Û Ø¨ÛتÙ٠تÛھرÙرÙÙÙÛÙÛÙسÙز]',
'noarticletext-nopermission' => 'Ø¨Û Ø¨ÛØªØªÛ Ú¾Ø§Ø²ÙرÚÛ Ù
ÛزÙ
ÛÙ ÙÙÙ.
- سÙز باشÙا بÛØªØªÛ [[Special:Search/{{PAGENAME}}|Ø¨Û Ø¨ÛتÙÙÚ Ù
اÛزÛسÙÙ٠ئÙزدÙÙÛÙÛÙسÙز]] ÙاÙÙ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}] Ù
ÛÙاسÙÛÛتÙÙ٠خاتÙرÙسÙÙ٠ئÙزدÙÙÛÙÛÙسÙزØ',
+ سÙز باشÙا بÛØªØªÛ [[Special:Search/{{PAGENAME}}|Ø¨Û Ø¨ÛتÙÙÚ Ù
اÛزÛسÙÙ٠ئÙزدÙÙÛÙÛÙسÙز]] ÙاÙÙ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}] Ù
ÛÙاسÙÛÛتÙÙ٠خاتÙرÙسÙÙ٠ئÙزدÙÙÛÙÛÙسÙزØÙÙÙÙ٠سزÙÙÚ Ø¨Ûت ÙÛرÛØ´ Ú¾ÙÙÙÙÙÚز ÙÙÙ.',
'missing-revision' => '"{{PAGENAME}}" ئاتÙÙ٠بÛتÙÙÚ ØªÛزÙتÙÙÚ¯ÛÙ ÙÛشر٠#$1 Ù
ÛÛجÛت ئÛÙ
Ûس.
ئادÛØªØªÛ Ø¨Û Ø¦ÛÚÛرÛÙÚ¯Û٠بÙر بÛتÙÙÚ Ø¦ÛÙاÙÙ
ÙسÙغا ÙÙرگÛÙÙÙ٠سÛÛÛبÙدÙ٠بÙÙÙدÛ.
@@ -759,7 +761,6 @@ $2
* '''Mozilla / Firefox / Safari:''' دا ''Shift'' ÙÛÙÛÙ¾ÙÙسÙÙ٠بÛسÙÙ¾ تÛرÛÙ¾ ''ÙاÙتا ÙÛÙÙÛ''ÙÙ ÙاÙÙ ''Ctrl-F5'' ÙاÙÙ ''Ctrl-R'' (''Mac تا Command-R'')Ø
* '''Google Chrome:''' دا ''Ctrl-Shift-R'' (''Command-Shift-R'' Mac)
*'''Internet Explorer:''' دا ''Ctrl'' Ù٠بÛسÙÙ¾ تÛرÛÙ¾ ''ÙÛÚÙÙا,'' ÙاÙÙ ''Ctrl-F5''Ø
-* '''Konqueror: دا ''' ''ÙاÙتا ÙÛÙÙÛ'' ÙاÙÙ ''F5''Ø
* '''Opera:''' دا ''ÙÙرا٠â Ù
اÙÙÙÙÙÙ''Ø Ù٠بÛسÙÙ¾ غÛÙ
ÙÛÙÙ٠تازÙÙاÚ.",
'usercssyoucanpreview' => "ئÛسÙÛرتÙØ´:''' ساÙÙاشتÙ٠ئÙÙÚ¯Ùر٠\"{{int:showpreview}}\" تÙÙ¾ÚÙÙ٠ئÙØ´ÙÙتÙÙ¾ ÙÛÚÙ CSS Ù٠سÙÙاÚ.",
'userjsyoucanpreview' => "ئÛسÙÛرتÙØ´:''' ساÙÙاشتÙ٠ئÙÙÚ¯Ùر٠\"{{int:showpreview}}\" تÙÙ¾ÚÙÙ٠ئÙØ´ÙÙتÙÙ¾ ÙÛÚÙ JS Ù٠سÙÙاÚ.",
@@ -862,6 +863,7 @@ $2
'edit-already-exists' => 'ÙÛÚ٠بÛت ÙÛراÙÙ
ÙدÙ
Ø¦Û Ù
ÛÛجÛد.',
'defaultmessagetext' => 'ÙÛÚÛÙدÙÙ٠ئÛÚÛر تÛÙستÙ',
+'content-failed-to-parse' => '$2 ÙÙ $1 Ú¯Û Ø¦Ø§ÙاÙÙز ÙÙØ´ Ù
ÛغÙÛÙ¾ بÙÙدÙ: $3',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''ئاگاھÙاÙدÛرÛØ´:''' Ø¨Û Ø¨Ûت ÙاھاÙÙت٠ÙÛÙ¾ ÙÛÙÙر٠سÛرپÙÙاتتÙÙÙ Ú¯ÙراÙ
Ù
اتÙÙÙÙÙ٠ئÙÙتÙدارÙÙ ÚاÙÙرغاÙ.\\n
@@ -1225,7 +1227,9 @@ $1",
'username' => 'ئÙØ´ÙÛتÙÛÚ٠ئÙسÙ
Ù:',
'uid' => 'ئÙØ´ÙÛتÙÛÚÙ ÙÙÙ
ÙÙÙ:',
'prefs-memberingroups' => '{{PLURAL:$1|بÙر|ÙÛÙ¾}} Ú¯ÛرÛپپا ئÛزاسÙ:',
+'prefs-memberingroups-type' => '$1',
'prefs-registration' => 'Ø®ÛتÙÛتÙÛÙ ÛاÙÙت:',
+'prefs-registration-date-time' => '$1',
'yourrealname' => 'ïºï»®ï»ï¯ï» ئÙسÙÙ
:',
'yourlanguage' => 'تÙÙ:',
'yourvariant' => 'Ù
ÛزÙ
Û٠تÙ٠شاÙغÛتÙ:',
@@ -1291,6 +1295,7 @@ HTML بÛÙÚ¯ÙسÙÙ٠تÛÙØ´ÛرÛÚ.',
'userrights-notallowed' => 'Ú¾ÛساباتÙÚÙزÙÙÚ Ø¦ÙØ´ÙÛتÙÛÚÙ Ú¾ÙÙÛÙÙÙÙ ÙÙØ´ÛØ´ ÙاÙ٠ئÛزگÛرتÙØ´ Ú¾ÙÙÛÙÙ ÙÙÙ.',
'userrights-changeable-col' => 'سÙز ئÛزگÛرتÛÙÛÙدÙغا٠گÛرÛپپا',
'userrights-unchangeable-col' => 'سÙز ئÛزگÛرتÛÙÙ
ÛÙدÙغا٠گÛرÛپپا',
+'userrights-irreversible-marker' => '$1*',
# Groups
'group' => 'Ú¯ÛرÛپپا:',
@@ -1445,9 +1450,11 @@ HTML بÛÙÚ¯ÙسÙÙ٠تÛÙØ´ÛرÛÚ.',
'minoreditletter' => 'ئازراÙÙا',
'newpageletter' => 'ÙÛÚÙ',
'boteditletter' => 'Ù
اشÙÙا ئادÛÙ
',
+'unpatrolledletter' => '!',
'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|ئÙØ´ÙÛتÙÛÚÙ|ئÙØ´ÙÛتÙÛÚÙ}}ÙÛزÙتÙÛاتÙدÛ]',
'rc_categories' => 'تÛر ÚÛگرÙس٠("|" بÙÙÛ٠ئاÙرÙÙÙØ¯Û )',
'rc_categories_any' => 'خاÙÙغاÙ',
+'rc-change-size' => '$1',
'newsectionsummary' => '* $1 * ÙÛÚ٠ئابزاس',
'rc-enhanced-expand' => 'تÛپسÙÙاتÙÙÙ ÙÛرسÛت (JavaScript ÙÙÙÙÙش٠زÛرÛر)',
'rc-enhanced-hide' => 'تÛپسÙÙاتÙÙÙ ÙÙØ´Ûر',
@@ -1885,6 +1892,7 @@ URL ÙÙÚ ØªÙغرÙÙÙÙÙ ÛÛ ØªÙر بÛÙÛتÙ٠زÙÙارÛت ÙÙÙÙ
# Book sources
'booksources' => 'ÙÙتاب Ù
ÛÙبÛسÙ',
'booksources-search-legend' => 'ÙÙتاب Ù
ÛÙبÛس٠ئÙزدÛ',
+'booksources-isbn' => 'ISBN:',
'booksources-go' => 'ÙÛتÙÛÙ',
'booksources-text' => 'تÛÛÛÙدÙÙÙس٠بÙر ÙÙسÙÙ
تÙر ÙÙتابخاÙÙÙÙرÙÙÙÚ ØªÙزÙÙ
ÙÙÙÙØ Ø¦ÙÚÙØ¯Û Ø³Ùز ئÙزدÙÙ
ÛÙÚ٠بÙÙغا٠ÙÙتابÙارÙÙÚ ØªÛØ®ÙÙ
Û ÙÛÙ¾ ئÛÚÛر٠بÙÙÛØ´Ù Ù
ÛÙ
ÙÙÙ:',
'booksources-invalid-isbn' => 'تÛÙ
ÙÙÙÙÚ¯ÛÙ ISBN ÙÙÙ
Ûر٠تÙغرا ئÛÙ
Ûس. ئÛسÙÙ ÙÛÚÛرگÛÙ Ù
ÛÙبÛدÙÙÙ ÙÙÙ
Ûردا خاتاÙÙ٠بار ÙÙÙÙÛÙÙÙ٠تÛÙØ´ÛرÛÚ.',
@@ -1970,6 +1978,7 @@ URL ÙÙÚ ØªÙغرÙÙÙÙÙ ÛÛ ØªÙر بÛÙÛتÙ٠زÙÙارÛت ÙÙÙÙ
'listgrouprights-rights' => 'Ú¾ÙÙÛÙ',
'listgrouprights-helppage' => 'Help: Ú¯ÛرÛپپا Ú¾ÙÙÛÙÙ',
'listgrouprights-members' => '(ئÛزاÙار تÙزÙÙ
ÙÙÙÙ)',
+'listgrouprights-right-revoked' => '$1 ($2)
',
'listgrouprights-addgroup' => ' {{PLURAL:$2|بÙر|بÙر ÙاÙÚÛ}} Ú¯ÛرÛپپÙغا ÙÙشاÙاÙدÛ: $1',
'listgrouprights-removegroup' => ' {{PLURAL:$2|بÙر|بÙر ÙاÙÚÛ}} Ú¯ÛرÛپپÙدÙÙ ÚÙÙÙرÙÛÛتÛÙÛÙدÛ: $1',
'listgrouprights-addgroup-all' => 'Ú¾ÛÙ
Ù
Û Ú¯ÛرÛپپÙغا ÙÙØ´',
@@ -2246,6 +2255,7 @@ $2 ÙÙÚ Ø¦Ø§Ø®ÙرÙ٠تÛزÙتÙÙÚ¯ÛÙ ÙÛشرÙÚ¯Û Ø¦ÛزگÛرتÙÙ
[[Special:Log/delete|ئÛÚÛرÛØ´ خاتÙرÙسÙ]]دÙ٠پاÙدÙÙÙÙÙÙ¾ ئÛÚÛر ÛÛ Ø¦ÛسÙÙÚ¯Û ÙÛÙتÛر خاتÙرÙسÙÙÙ ÙÛرÛÚ.",
'undelete-header' => 'ÙÛÙÙÙÙ٠خاتÙرÙÙ٠سÛرÛشتÛرÙ
ÛÙÚ٠بÙÙسÙÚÙز [[Special:Log/delete|ئÛÚÛرÛØ´ خاتÙرÙسÙ]]دÙ٠پاÙدÙÙÙÙÙÚ.',
+'undelete-search-title' => 'ئÛÚÛرÛئتÙÚ¯Û٠بÛتÙ٠ئزدÛØ´',
'undelete-search-box' => 'ئÛÚÛرÛÙÚ¯Û٠بÛتÙ٠ئÙزدÛ',
'undelete-search-prefix' => 'باشÙاÙغا٠بÛتÙÙ ÙÛرسÛت:',
'undelete-search-submit' => 'ئÙزدÛØ´',
@@ -2261,6 +2271,7 @@ $2 ÙÙÚ Ø¦Ø§Ø®ÙرÙ٠تÛزÙتÙÙÚ¯ÛÙ ÙÛشرÙÚ¯Û Ø¦ÛزگÛرتÙÙ
$1',
'undelete-show-file-confirm' => '$2 $3 دÙÙÙ \\"Su konto om valmis. Võit taa hindä perrä sisse säädäq.',
'yourname' => 'Pruukjanimi',
diff --git a/languages/messages/MessagesWa.php b/languages/messages/MessagesWa.php
index f17a18e2ff..9b1c15010b 100644
--- a/languages/messages/MessagesWa.php
+++ b/languages/messages/MessagesWa.php
@@ -220,7 +220,6 @@ $messages = array(
'qbbrowse' => 'Foyter',
'qbedit' => 'Candjî',
'qbpageoptions' => 'Cisse pådje ci',
-'qbpageinfo' => 'Contecse',
'qbmyoptions' => 'Mes pådjes',
'qbspecialpages' => 'Pådjes sipeciåles',
@@ -423,7 +422,7 @@ $2",
# Login and logout pages
'logouttext' => "'''Vos vs avoz dislodjî.'''
-Vos ploz continouwer a naivyî so {{SITENAME}} anonimmint, oudonbén [[Special:UserLogin|vos relodjî]], dizo l' minme uzeu ou dizo èn uzeu diferin.
+Vos ploz continouwer a naivyî so {{SITENAME}} anonimmint, oudonbén [$1 vos relodjî], dizo l' minme uzeu ou dizo èn uzeu diferin.
Notez ki des pådjes k' i gn a si pôrént continowuer a vey come si vos estîz elodjî, disk' a tant ki vos vudrîz l' muchete di vosse betchteu waibe.",
'welcomecreation' => '== Bénvnowe, $1! ==
diff --git a/languages/messages/MessagesWar.php b/languages/messages/MessagesWar.php
index 9675b935ab..74cc1a1440 100644
--- a/languages/messages/MessagesWar.php
+++ b/languages/messages/MessagesWar.php
@@ -209,7 +209,6 @@ $messages = array(
'qbbrowse' => 'Igdalikyat',
'qbedit' => 'Igliwat',
'qbpageoptions' => 'Ini nga pakli',
-'qbpageinfo' => 'Kontexto',
'qbmyoptions' => 'Akon mga pakli',
'qbspecialpages' => 'Mga pinaurog nga pakli',
'faq' => 'AGG',
@@ -291,6 +290,7 @@ Damo nga nagamit in gusto sinmulod hini nga pakli.
Alayon paghulat makadali san-o ka inmutro pagsulod hin nga pakli utro.
$1',
+'pool-timeout' => 'An pagpaundang-hin-oras in naghuhulat hin trangka',
'pool-queuefull' => 'Puno an katitirok nga pila',
'pool-errorunknown' => 'Waray kasabti nga kasaypanan',
@@ -328,6 +328,10 @@ $1',
'youhavenewmessages' => 'Mayda ka $1 ($2).',
'newmessageslink' => 'bag-o nga mga mensahe',
'newmessagesdifflink' => 'kataposan nga pagbag-o',
+'youhavenewmessagesfromusers' => 'May-ada ka $1 tikang ha {{PLURAL:$3|iba nga gumaramit|$3 mga gumaramit}} ($2).',
+'youhavenewmessagesmanyusers' => 'May-ada ka $1 tikang ha damo nga mga gumaramit ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|uska bag-o nga mensahe|bag-o nga mga mensahe}}',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|nga pagbag-o|nga mga pagbag-o}}',
'youhavenewmessagesmulti' => 'Mayda ka mga bag-o nga mensahe ha $1',
'editsection' => 'igliwat',
'editsection-brackets' => '[$1]',
@@ -350,6 +354,8 @@ $1',
'page-rss-feed' => '"$1" RSS nga feed',
'page-atom-feed' => '"$1" Atom nga feed',
'red-link-title' => '$1 (waray dida ini nga pakli)',
+'sort-descending' => 'Igpasunodsunod paubos',
+'sort-ascending' => 'Igpasunodsunod paigbaw',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Pakli',
@@ -409,10 +415,13 @@ Alayon la igsumat ini ha [[Special:ListUsers/sysop|administrator]], igsurat la a
'directorycreateerror' => 'Waray makahimo han direktoryo nga "$1".',
'filenotfound' => 'Diri nabibilngan an paypay nga "$1"',
'fileexistserror' => "Diri nasusuratan ha paypay nga ''$1'': Aada na an paypay.",
+'unexpected' => 'Diri ginlalauman nga balor: "$1"="$2".',
'formerror' => 'Sayop: Diri nasusumite an porma.',
'badarticleerror' => 'Ini nga pagbuhat diri mahihimo dinhi nga pakli',
'cannotdelete' => 'An pakli o an fayl nga "$1" diri napapara.
Bangin na ini ginpara hin iba.',
+'cannotdelete-title' => 'diri nakakapara han pakli "$1"',
+'delete-hook-aborted' => 'Pagpara ginpugngan han kawil. Waray eksplenasyon an ginhatag.',
'badtitle' => 'Maraot nga titulo',
'badtitletext' => 'An ginhangyo nga pakli diri puyde, waray sulod, o sayop nga nasumpay nga inter-pinunongan o inter-wiki nga titulo.
Bangin mayda usa o damo nga mga agi nga diri puyde magamit ha mga titulo.',
@@ -424,11 +433,27 @@ An data dini diri mahihimo nga bag-o.',
Funsyon: $1 etc.
+ } else {
+ // etc.
$collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
// If a collapsible-content is defined, collapse it
if ( $collapsibleContent.length ) {
- if ( instantHide ) {
+ if ( options.instantHide ) {
$collapsibleContent.hide();
} else {
$collapsibleContent.slideUp();
@@ -111,7 +128,7 @@ $.fn.makeCollapsible = function () {
// Exclude tablerow containing togglelink
$containers.not( $defaultToggle.parent().parent() ).stop(true, true).fadeIn();
} else {
- $containers.stop(true, true).fadeIn();
+ $containers.stop( true, true ).fadeIn();
}
} else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
@@ -123,7 +140,8 @@ $.fn.makeCollapsible = function () {
$containers.stop( true, true ).slideDown();
}
- } else { // etc.
+ } else {
+ // etc.
$collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
// If a collapsible-content is defined, collapse it
@@ -142,10 +160,15 @@ $.fn.makeCollapsible = function () {
}
}
},
- // Toggles collapsible and togglelink class and updates text label
- toggleLinkDefault = function ( that, e ) {
- var $that = $(that),
- $collapsible = $that.closest( '.mw-collapsible.mw-made-collapsible' ).toggleClass( 'mw-collapsed' );
+ /**
+ * Toggles collapsible and togglelink class and updates text label.
+ *
+ * @param {jQuery} $that
+ * @param {jQuery.Event} e
+ * @param {Object|undefined} options
+ */
+ toggleLinkDefault = function ( $that, e, options ) {
+ var $collapsible = $that.closest( '.mw-collapsible' ).toggleClass( 'mw-collapsed' );
e.preventDefault();
e.stopPropagation();
@@ -159,7 +182,7 @@ $.fn.makeCollapsible = function () {
$that.text( expandtext );
}
// Collapse element
- toggleElement( $collapsible, 'collapse', $that );
+ toggleElement( $collapsible, 'collapse', $that, options );
// It's collapsed right now
} else {
@@ -171,14 +194,20 @@ $.fn.makeCollapsible = function () {
$that.text( collapsetext );
}
// Expand element
- toggleElement( $collapsible, 'expand', $that );
+ toggleElement( $collapsible, 'expand', $that, options );
}
return;
},
- // Toggles collapsible and togglelink class
- toggleLinkPremade = function ( $that, e ) {
- var $collapsible = $that.eq(0).closest( '.mw-collapsible.mw-made-collapsible' ).toggleClass( 'mw-collapsed' );
- if ( $(e.target).is( 'a' ) ) {
+ /**
+ * Toggles collapsible and togglelink class.
+ *
+ * @param {jQuery} $that
+ * @param {jQuery.Event} e
+ * @param {Object|undefined} options
+ */
+ toggleLinkPremade = function ( $that, e, options ) {
+ var $collapsible = $that.eq( 0 ).closest( '.mw-collapsible' ).toggleClass( 'mw-collapsed' );
+ if ( $.nodeName( e.target, 'a' ) ) {
return true;
}
e.preventDefault();
@@ -189,31 +218,45 @@ $.fn.makeCollapsible = function () {
// Change toggle to collapsed
$that.removeClass( 'mw-collapsible-toggle-expanded' ).addClass( 'mw-collapsible-toggle-collapsed' );
// Collapse element
- toggleElement( $collapsible, 'collapse', $that );
+ toggleElement( $collapsible, 'collapse', $that, options );
// It's collapsed right now
} else {
// Change toggle to expanded
$that.removeClass( 'mw-collapsible-toggle-collapsed' ).addClass( 'mw-collapsible-toggle-expanded' );
// Expand element
- toggleElement( $collapsible, 'expand', $that );
+ toggleElement( $collapsible, 'expand', $that, options );
}
return;
},
- // Toggles customcollapsible
- toggleLinkCustom = function ( $that, e, $collapsible ) {
+ /**
+ * Toggles customcollapsible.
+ *
+ * @param {jQuery} $that
+ * @param {jQuery.Event} e
+ * @param {Object|undefined} options
+ * @param {jQuery} $collapsible
+ */
+ toggleLinkCustom = function ( $that, e, options, $collapsible ) {
// For the initial state call of customtogglers there is no event passed
- if (e) {
+ if ( e ) {
e.preventDefault();
e.stopPropagation();
}
// Get current state and toggle to the opposite
var action = $collapsible.hasClass( 'mw-collapsed' ) ? 'expand' : 'collapse';
$collapsible.toggleClass( 'mw-collapsed' );
- toggleElement( $collapsible, action, $that );
+ toggleElement( $collapsible, action, $that, options );
};
+ // Return if it has been enabled already.
+ if ( $collapsible.data( 'mw-made-collapsible' ) ) {
+ return;
+ } else {
+ $collapsible.data( 'mw-made-collapsible', true );
+ }
+
// Use custom text or default ?
if ( !collapsetext ) {
collapsetext = mw.msg( 'collapsible-collapse' );
@@ -223,46 +266,41 @@ $.fn.makeCollapsible = function () {
}
// Create toggle link with a space around the brackets ( [text] )
- var $toggleLink =
+ $toggleLink =
$( '' )
.text( collapsetext )
.wrap( '' )
- .parent()
- .prepend( ' [' )
- .append( '] ' )
- .on( 'click.mw-collapse', function ( e ) {
- toggleLinkDefault( this, e );
- } );
-
- // Return if it has been enabled already.
- if ( $that.hasClass( 'mw-made-collapsible' ) ) {
- return;
- } else {
- $that.addClass( 'mw-made-collapsible' );
- }
+ .parent()
+ .prepend( ' [' )
+ .append( '] ' )
+ .on( 'click.mw-collapse', function ( e, options ) {
+ toggleLinkDefault( $(this), e, options );
+ } );
// Check if this element has a custom position for the toggle link
// (ie. outside the container or deeper inside the tree)
// Then: Locate the custom toggle link(s) and bind them
- if ( ( $that.attr( 'id' ) || '' ).indexOf( 'mw-customcollapsible-' ) === 0 ) {
+ if ( ( $collapsible.attr( 'id' ) || '' ).indexOf( 'mw-customcollapsible-' ) === 0 ) {
- var thatId = $that.attr( 'id' ),
- $customTogglers = $( '.' + thatId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
- mw.log( lpx + 'Found custom collapsible: #' + thatId );
+ collapsibleId = $collapsible.attr( 'id' );
+ $customTogglers = $( '.' + collapsibleId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
+ mw.log( lpx + 'Found custom collapsible: #' + collapsibleId );
// Double check that there is actually a customtoggle link
if ( $customTogglers.length ) {
- $customTogglers.on( 'click.mw-collapse', function ( e ) {
- toggleLinkCustom( $(this), e, $that );
+ $customTogglers.on( 'click.mw-collapse', function ( e, options ) {
+ toggleLinkCustom( $(this), e, options, $collapsible );
} );
} else {
- mw.log( lpx + '#' + thatId + ': Missing toggler!' );
+ mw.log( lpx + '#' + collapsibleId + ': Missing toggler!' );
}
// Initial state
- if ( $that.hasClass( 'mw-collapsed' ) ) {
- $that.removeClass( 'mw-collapsed' );
- toggleLinkCustom( $customTogglers, null, $that );
+ if ( $collapsible.hasClass( 'mw-collapsed' ) ) {
+ // Remove here so that the toggler goes in the right direction,
+ // It re-adds the class.
+ $collapsible.removeClass( 'mw-collapsed' );
+ toggleLinkCustom( $customTogglers, null, { instantHide: true }, $collapsible );
}
// If this is not a custom case, do the default:
@@ -270,23 +308,23 @@ $.fn.makeCollapsible = function () {
} else {
// Elements are treated differently
- if ( $that.is( 'table' ) ) {
+ if ( $collapsible.is( 'table' ) ) {
// The toggle-link will be in one the the cells (td or th) of the first row
- var $firstRowCells = $that.find( 'tr:first th, tr:first td' );
- $toggle = $firstRowCells.find( '> .mw-collapsible-toggle' );
+ $firstItem = $collapsible.find( 'tr:first th, tr:first td' );
+ $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
// If theres no toggle link, add it to the last cell
if ( !$toggle.length ) {
- $firstRowCells.eq(-1).prepend( $toggleLink );
+ $firstItem.eq(-1).prepend( $toggleLink );
} else {
- $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e ) {
- toggleLinkPremade( $toggle, e );
+ $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
+ toggleLinkPremade( $toggle, e, options );
} );
}
- } else if ( $that.is( 'ul' ) || $that.is( 'ol' ) ) {
+ } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
// The toggle-link will be in the first list-item
- var $firstItem = $that.find( 'li:first' );
+ $firstItem = $collapsible.find( 'li:first' );
$toggle = $firstItem.find( '> .mw-collapsible-toggle' );
// If theres no toggle link, add it
@@ -294,46 +332,47 @@ $.fn.makeCollapsible = function () {
// Make sure the numeral order doesn't get messed up, force the first (soon to be second) item
// to be "1". Except if the value-attribute is already used.
// If no value was set WebKit returns "", Mozilla returns '-1', others return null or undefined.
- var firstval = $firstItem.attr( 'value' );
+ firstval = $firstItem.attr( 'value' );
if ( firstval === undefined || !firstval || firstval === '-1' || firstval === -1 ) {
$firstItem.attr( 'value', '1' );
}
- $that.prepend( $toggleLink.wrap( ' etc.
// The toggle-link will be the first child of the element
- $toggle = $that.find( '> .mw-collapsible-toggle' );
+ $toggle = $collapsible.find( '> .mw-collapsible-toggle' );
// If a direct child .content-wrapper does not exists, create it
- if ( !$that.find( '> .mw-collapsible-content' ).length ) {
- $that.wrapInner( '
Kweri: $2',
'viewsource' => 'Kitaa an ginkuhaan',
+'viewsource-title' => 'Kitaa an tinikangan para han $1',
+'actionthrottled' => 'Ginpahinay an ginbuhat',
+'actionthrottledtext' => 'Komo uska pangontra ha spam, ikaw in ginlilimitaran paghimo hini nga pagbuhat hin sobra kadamo ha sulod hin gutiay nga oras, ngan ikaw in naglapos hini nga katubtuban.
+Alayon pagutro kahuman hin pipira ka mga minuto.',
+'protectedpagetext' => 'Ini nga pakli in pinasaliporan para mapugngan an mga pagliwat.',
'viewsourcetext' => 'Puydi ka kinmita ngan kinmopya han gintikangan han pakli:',
+'viewyourtext' => "Puydi nim makit-an ngan makopya an tinikangan han '''imo mga pagliwat''' ha dinhi nga pakli:",
+'protectedinterface' => 'Ini nga pakli in nahatag hin teksto hit interface para han software han hin nga wiki, ngan in pinasasaliporan para makalikay hit pag-abuso.
+Para makadugang o makaliwat hin mga paghubad para han tanan nga mga wiki, alayon paggamit han [//translatewiki.net/ translatewiki.net], an kanan MediaWiki proyekto hin lokalisasyon.',
+'sqlhidden' => '(nakatago an SQL query)',
'namespaceprotected' => "Diri ka gintutugutan pagliwat han mga pakli ha ngaran-lat'ang nga '''$1'''.",
+'customcssprotected' => 'Diri ka gintutugotan pagliwat hini nga CSS nga pakli, tungod nga nagsusulod ini hin kanan iba nga tawo personal nga karuyagon.',
+'customjsprotected' => 'Diri ka gintutugotan pagliwat hini nga JavaScript nga pakli, tungod nga nagsusulod ini hin kanan iba nga tawo personal nga karuyagon.',
'ns-specialprotected' => 'Diri maliliwat an mga ispisyal nga pakli.',
'titleprotected' => 'Ini nga titulo pinasalipod ha paghimo ni [[User:$1|$1]].
An katadungan nga ginhatag amo in "\'\'$2\'\'".',
+'filereadonlyerror' => 'Diri maliliwat ini nga paypay "$1" tungod an ginsusudlan han paypay nga "$2" in aada la ha pagbasa-la nga kahimtang.
+
+An magdudurmara nga nagtrangka hini in naghatag hini nga eksplenasyon: "$3".',
+'exception-nologin' => 'Diri nakalog-in',
+'exception-nologin-text' => 'Ini nga pakli o pagbuhat in nagkikinahanglan nga ikaw in mag-log-in ha dinhi nga wiki.',
# Virus scanner
'virus-unknownscanner' => 'diri-nasasabtan nga antivirus:',
@@ -441,7 +466,9 @@ Ayaw paghingalimot hin pagbalyo han imo [[Special:Preferences|{{SITENAME}} mga g
'yourpassword' => 'Tigaman-pagsulod:',
'yourpasswordagain' => 'Utroha pagbutang an tigaman-han-pagsakob:',
'remembermypassword' => "Hinumdumi an akon pan-sakob dinhi nga panngaykay ''(browser)'' (para ha pinakamaiha $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
+'securelogin-stick-https' => 'Nagpapabilin nga masumpay ha HTTPS kahuman makalog-in',
'yourdomainname' => 'Imo dominyo:',
+'password-change-forbidden' => 'Diri ka makakabalyo hin pulong-pagsulod ha dinhi nga wiki.',
'login' => 'Sakob',
'nav-login-createaccount' => 'Magpalista nga masakob / paghimo hin bag-o nga akawnt',
'loginprompt' => "Kinahanglan mo hin mga kuki (''cookie'') para makapag log-in ha {{SITENAME}}.",
@@ -463,7 +490,13 @@ Ayaw paghingalimot hin pagbalyo han imo [[Special:Preferences|{{SITENAME}} mga g
Alayon pagpili hin lain nga ngaran.',
'loginerror' => 'Sayop hin pagsakob',
'createaccounterror' => 'Diri makakahimo hin akawnt: $1',
+'nocookieslogin' => '{{SITENAME}} in nagkikinahanglan hin mga kuki para makapagpalog-in hin mga gumaramit. An im mga kuki in diri nagana.
+Alayon paganaha hira ngan utro liwat.',
'loginsuccesstitle' => 'Malinamposon an pagsulod',
+'loginsuccess' => "'''Ikaw in nakalog-in ha {{SITENAME}} komo \"\$1\".'''",
+'nosuchuser' => 'Waray gumaramit an may-ada ngaran nga "$1".
+It mga agnay-hi-gumaramit in case sensitive.
+Panginano-a it imo pagbaybay, o [[Special:UserLogin/signup|paghimo hin bag-o nga akawnt]].',
'nosuchusershort' => 'Waray nagamit it may ngaran nga "$1".
Kitaa kun amo it im pagbaybay.',
'nouserspecified' => 'Dapat nim magbutang hin agnay hit gumaramit.',
@@ -474,6 +507,7 @@ Alayon pagutro pagbutang.',
Alayon pagutro pagbutang.',
'passwordtooshort' => 'An tigaman-pagsulod dapat diri maubos hit {{PLURAL:$1|1 nga agi|$1 nga agi}}.',
'password-name-match' => 'An imo tigaman-pagsulod in kinahanglan iba ha imo agnay-hiton-gumaramit.',
+'password-login-forbidden' => 'An paggamit hini nga agnay-hit-gumaramit ngan tigaman-pagsulod in diri gintutugotan.',
'mailmypassword' => 'Ig-e-mail an bag-o nga tigaman-pagsulod',
'passwordremindertitle' => 'Bag-o nga diri-pirmihan nga tigaman-pagsulod para han {{SITENAME}}',
'noemail' => 'Waray e-mail nga adres nga ginrekord para han nágámit "$1".',
@@ -481,9 +515,12 @@ Alayon pagutro pagbutang.',
'mailerror' => 'Sayop han pagpadangat hin surat: $1',
'emailauthenticated' => 'Ginpamatuod an imo e-mail adres han $2 ha $3.',
'emailconfirmlink' => 'Igkompirma an imo e-mail address',
+'emaildisabled' => 'Ini nga sityo in diri nakakapadangat hin mga e-mail.',
'accountcreated' => 'Nahimo an akawnt',
'accountcreatedtext' => 'An akwant han gumaramit para kan $1 in ginhimo.',
'createaccount-title' => 'Paghimo hin akawnt para han {{SITENAME}}',
+'usernamehasherror' => 'Agnay-hin-gumaramit in diri puydi magkamay-ada hin mga hash karakter',
+'login-abort-generic' => 'An imo paglog-in in diri malinamposon - Naundang',
'loginlanguagelabel' => 'Pinulongan: $1',
# Change password dialog
@@ -493,13 +530,17 @@ Alayon pagutro pagbutang.',
'newpassword' => 'Bag-o nga tigaman-pagsulod:',
'retypenew' => 'Utroha pagbutang an bag-o nga tigaman-pagsulod:',
'resetpass_forbidden' => 'Diri mababalyoan an mga tigaman-pagsulod',
+'resetpass-no-info' => 'Kinahanglan mo paglog-in para direkta ka makasakob dinhi nga pakli.',
'resetpass-submit-loggedin' => 'Igbal-iw an tigaman-pagsulod',
'resetpass-submit-cancel' => 'Pasagdi',
'resetpass-temp-password' => 'Temporaryo nga tigaman-pagsakob:',
# Special:PasswordReset
+'passwordreset' => 'igreset an tigaman-hit-pagsulod',
+'passwordreset-text' => 'Kompletoha ini nga porma para makakarawat hin email hin pahinumdom han detalye han akawnt.',
'passwordreset-username' => 'Agnay hiton gumaramit:',
'passwordreset-domain' => 'Dominyo:',
+'passwordreset-capture' => 'Kikitaon mo an resulta nga e-mail?',
'passwordreset-email' => 'E-mail adres:',
'passwordreset-emailtitle' => 'Mga detalye han akawnt ha {{SITENAME}}',
'passwordreset-emailelement' => 'Agnay han gumaramit: $1
@@ -507,6 +548,14 @@ Temporaryo nga tigaman han pagsakob: $2',
'passwordreset-emailsent' => 'Ginpadara hin usa ka pahinumdom nga e-mail.',
# Special:ChangeEmail
+'changeemail' => 'Igliwan an e-mail address',
+'changeemail-header' => 'Igliwan an e-mail address akawnt',
+'changeemail-text' => 'Igkompleto ini nga porma para makapagliwan han imo e-mail address. Kinahanglanon mo igbutang an imo tigaman-pagsulod para makompirma ini nga pagbag-o.',
+'changeemail-no-info' => 'Kinahanglanon mo mag-log-in para ka direkta makasakob hini nga pakli.',
+'changeemail-oldemail' => 'Yana nga e-mail address:',
+'changeemail-newemail' => 'Bag-o nga e-mail address:',
+'changeemail-none' => '(waray)',
+'changeemail-submit' => 'Igbalyo an e-mail',
'changeemail-cancel' => 'Pasagdi',
# Edit page toolbar
@@ -566,6 +615,7 @@ o [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
'note' => "'''Pahibaro:'''",
'previewnote' => "'''Hinumdumi nga pahiuna-nga-paggawas pa la ini.'''
¡Waray pa katipig an imo mga ginbag-o!",
+'continue-editing' => 'Padayon pagliwat',
'editing' => 'Ginliliwat an $1',
'creating' => 'Ginhihimo an $1',
'editingsection' => 'Ginliliwat an $1 (bahin)',
@@ -596,6 +646,13 @@ An taramdan han pagpara ngan pagbalhin para han pakli in ginhahatag ha ubos para
'edit-no-change' => 'Ginpabay-an an im pagliwat, mahitungod nga waray pagbalyo nga nabuhat ha nakasurat.',
'edit-already-exists' => 'Diri nakakahimo hin bag-o nga pakli.
Aada na ito.',
+'defaultmessagetext' => 'Aada-nga-daan nga teksto han mensahe',
+
+# Content models
+'content-model-wikitext' => 'wikiteksto',
+'content-model-text' => 'yano nga teksto',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'post-expand-template-inclusion-warning' => "'''Pahimatngon:''' An batakan nga ginlakip in sobra kadako.
@@ -610,6 +667,7 @@ Ini nga mga argumento in ginlaktawan.",
# History pages
'viewpagelogs' => 'Kitaa an mga log para hini nga pakli',
+'nohistory' => 'Waray kaagi hin pagliwat hin nga pakli.',
'currentrev' => 'Giurhii nga pagliwat',
'currentrev-asof' => 'Giuurhii nga pagliwat han $1',
'revisionasof' => 'Pagbabag-o han $1',
@@ -628,6 +686,7 @@ Leyenda: '''({{int:cur}})''' = kaibhan ha giuurhii nga pag-bag-o, '''({{int:last
'history-show-deleted' => 'Ginpara la',
'histfirst' => 'Giunhani',
'histlast' => 'Giurhii',
+'historysize' => '({{PLURAL:$1|1 nga byte|$1 ka mga byte}})',
'historyempty' => '(waray sulod)',
# Revision feed
@@ -636,7 +695,11 @@ Leyenda: '''({{int:cur}})''' = kaibhan ha giuurhii nga pag-bag-o, '''({{int:last
'history-feed-item-nocomment' => '$1 ha $2',
# Revision deletion
+'rev-deleted-comment' => '(gintanggal an kaagi han dalikyat nga sumat)',
'rev-deleted-user' => '(gintanggal an agnay hiton gumaramit)',
+'rev-deleted-event' => '(gintanggal an talaan han mga buhat)',
+'rev-deleted-user-contribs' => '[gintanggal an agnay-hit-gumaramit o IP address - an pagliwat in gintago tikang han mga amot]',
+'rev-suppressed-no-diff' => "Diri mo makikita ini nga kaibhan tungod nga usa ha mga rebisyon in '''ginpara'''.",
'rev-delundel' => 'igpakita/igtago',
'rev-showdeleted' => 'igpakita',
'revdelete-show-file-confirm' => 'Sigurado ka nga gusto mo makita an ginpara nga pagliwat han file "" : "" ) + selector.replace( rtrim, "$1" ),
- cached = tokenCache[ expando ][ key ];
+function tokenize( selector, parseOnly ) {
+ var matched, match, tokens, type, soFar, groups, preFilters,
+ cached = tokenCache[ expando ][ selector ];
if ( cached ) {
- return parseOnly ? 0 : slice.call( cached, 0 );
+ return parseOnly ? 0 : cached.slice( 0 );
}
soFar = selector;
groups = [];
- i = 0;
preFilters = Expr.preFilter;
- filters = Expr.filter;
while ( soFar ) {
@@ -4667,45 +4697,31 @@ function tokenize( selector, context, xml, parseOnly ) {
if ( !matched || (match = rcomma.exec( soFar )) ) {
if ( match ) {
soFar = soFar.slice( match[0].length );
- tokens.selector = group;
}
groups.push( tokens = [] );
- group = "";
-
- // Need to make sure we're within a narrower context if necessary
- // Adding a descendant combinator will generate what is needed
- if ( checkContext ) {
- soFar = " " + soFar;
- }
}
matched = false;
// Combinators
if ( (match = rcombinators.exec( soFar )) ) {
- group += match[0];
- soFar = soFar.slice( match[0].length );
+ tokens.push( matched = new Token( match.shift() ) );
+ soFar = soFar.slice( matched.length );
// Cast descendant combinators to space
- matched = tokens.push({
- part: match.pop().replace( rtrim, " " ),
- string: match[0],
- captures: match
- });
+ matched.type = match[0].replace( rtrim, " " );
}
// Filters
- for ( type in filters ) {
+ for ( type in Expr.filter ) {
if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- ( match = preFilters[ type ](match, context, xml) )) ) {
+ // The last two arguments here are (context, xml) for backCompat
+ (match = preFilters[ type ]( match, document, true ))) ) {
- group += match[0];
- soFar = soFar.slice( match[0].length );
- matched = tokens.push({
- part: type,
- string: match.shift(),
- captures: match
- });
+ tokens.push( matched = new Token( match.shift() ) );
+ soFar = soFar.slice( matched.length );
+ matched.type = type;
+ matched.matches = match;
}
}
@@ -4714,11 +4730,6 @@ function tokenize( selector, context, xml, parseOnly ) {
}
}
- // Attach the full group as a selector
- if ( group ) {
- tokens.selector = group;
- }
-
// Return the length of the invalid excess
// if we're just parsing
// Otherwise, throw an error or return tokens
@@ -4727,43 +4738,33 @@ function tokenize( selector, context, xml, parseOnly ) {
soFar ?
Sizzle.error( selector ) :
// Cache the tokens
- slice.call( tokenCache(key, groups), 0 );
+ tokenCache( selector, groups ).slice( 0 );
}
-function addCombinator( matcher, combinator, context, xml ) {
+function addCombinator( matcher, combinator, base ) {
var dir = combinator.dir,
+ checkNonElements = base && combinator.dir === "parentNode",
doneName = done++;
- if ( !matcher ) {
- // If there is no matcher to check, check against the context
- matcher = function( elem ) {
- return elem === context;
- };
- }
return combinator.first ?
- function( elem ) {
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 ) {
- return matcher( elem ) && elem;
+ if ( checkNonElements || elem.nodeType === 1 ) {
+ return matcher( elem, context, xml );
}
}
} :
- xml ?
- function( elem ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 ) {
- if ( matcher( elem ) ) {
- return elem;
- }
- }
- }
- } :
- function( elem ) {
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if ( !xml ) {
var cache,
- dirkey = doneName + "." + dirruns,
- cachedkey = dirkey + "." + cachedruns;
+ dirkey = dirruns + " " + doneName + " ",
+ cachedkey = dirkey + cachedruns;
while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 ) {
+ if ( checkNonElements || elem.nodeType === 1 ) {
if ( (cache = elem[ expando ]) === cachedkey ) {
return elem.sizset;
} else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {
@@ -4772,7 +4773,7 @@ function addCombinator( matcher, combinator, context, xml ) {
}
} else {
elem[ expando ] = cachedkey;
- if ( matcher( elem ) ) {
+ if ( matcher( elem, context, xml ) ) {
elem.sizset = true;
return elem;
}
@@ -4780,254 +4781,382 @@ function addCombinator( matcher, combinator, context, xml ) {
}
}
}
- };
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( checkNonElements || elem.nodeType === 1 ) {
+ if ( matcher( elem, context, xml ) ) {
+ return elem;
+ }
+ }
+ }
+ }
+ };
}
-function addMatcher( higher, deeper ) {
- return higher ?
- function( elem ) {
- var result = deeper( elem );
- return result && higher( result === true ? elem : result );
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[i]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
} :
- deeper;
+ matchers[0];
}
-// ["TAG", ">", "ID", " ", "CLASS"]
-function matcherFromTokens( tokens, context, xml ) {
- var token, matcher,
- i = 0;
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
- for ( ; (token = tokens[i]); i++ ) {
- if ( Expr.relative[ token.part ] ) {
- matcher = addCombinator( matcher, Expr.relative[ token.part ], context, xml );
- } else {
- matcher = addMatcher( matcher, Expr.filter[ token.part ].apply(null, token.captures.concat( context, xml )) );
+ for ( ; i < len; i++ ) {
+ if ( (elem = unmatched[i]) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
}
}
- return matcher;
+ return newUnmatched;
}
-function matcherFromGroupMatchers( matchers ) {
- return function( elem ) {
- var matcher,
- j = 0;
- for ( ; (matcher = matchers[j]); j++ ) {
- if ( matcher(elem) ) {
- return true;
- }
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction(function( seed, results, context, xml ) {
+ // Positional selectors apply to seed elements, so it is invalid to follow them with relative ones
+ if ( seed && postFinder ) {
+ return;
}
- return false;
- };
-}
-compile = Sizzle.compile = function( selector, context, xml ) {
- var group, i, len,
- cached = compilerCache[ expando ][ selector ];
+ var i, elem, postFilterIn,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
- // Return a cached group function if already generated (context dependent)
- if ( cached && cached.context === context ) {
- return cached;
- }
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [], seed ),
- // Generate a function of recursive functions that can be used to check each element
- group = tokenize( selector, context, xml );
- for ( i = 0, len = group.length; i < len; i++ ) {
- group[i] = matcherFromTokens(group[i], context, xml);
- }
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers(group) );
- cached.context = context;
- cached.runs = cached.dirruns = 0;
- return cached;
-};
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-function multipleContexts( selector, contexts, results, seed ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results, seed );
- }
-}
+ // ...intermediate processing is necessary
+ [] :
-function handlePOSGroup( selector, posfilter, argument, contexts, seed, not ) {
- var results,
- fn = Expr.setFilters[ posfilter.toLowerCase() ];
+ // ...otherwise use results directly
+ results :
+ matcherIn;
- if ( !fn ) {
- Sizzle.error( posfilter );
- }
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
- if ( selector || !(results = seed) ) {
- multipleContexts( selector || "*", contexts, (results = []), seed );
- }
+ // Apply postFilter
+ if ( postFilter ) {
+ postFilterIn = condense( matcherOut, postMap );
+ postFilter( postFilterIn, [], context, xml );
- return results.length > 0 ? fn( results, argument, not ) : [];
-}
+ // Un-match failing elements by moving them back to matcherIn
+ i = postFilterIn.length;
+ while ( i-- ) {
+ if ( (elem = postFilterIn[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
-function handlePOS( groups, context, results, seed ) {
- var group, part, j, groupLen, token, selector,
- anchor, elements, match, matched,
- lastIndex, currentContexts, not,
- i = 0,
- len = groups.length,
- rpos = matchExpr["POS"],
- // This is generated here in case matchExpr["POS"] is extended
- rposgroups = new RegExp( "^" + rpos.source + "(?!" + whitespace + ")", "i" ),
- // This is for making sure non-participating
- // matching groups are represented cross-browser (IE6-8)
- setUndefined = function() {
- var i = 1,
- len = arguments.length - 2;
- for ( ; i < len; i++ ) {
- if ( arguments[i] === undefined ) {
- match[i] = undefined;
+ // Keep seed and results synchronized
+ if ( seed ) {
+ // Ignore postFinder because it can't coexist with seed
+ i = preFilter && matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ seed[ preMap[i] ] = !(results[ preMap[i] ] = elem);
}
}
- };
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ });
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[0].type ],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf.call( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ } ];
for ( ; i < len; i++ ) {
- group = groups[i];
- part = "";
- elements = seed;
- for ( j = 0, groupLen = group.length; j < groupLen; j++ ) {
- token = group[j];
- selector = token.string;
- if ( token.part === "PSEUDO" ) {
- // Reset regex index to 0
- rpos.exec("");
- anchor = 0;
- while ( (match = rpos.exec( selector )) ) {
- matched = true;
- lastIndex = rpos.lastIndex = match.index + match[0].length;
- if ( lastIndex > anchor ) {
- part += selector.slice( anchor, match.index );
- anchor = lastIndex;
- currentContexts = [ context ];
-
- if ( rcombinators.test(part) ) {
- if ( elements ) {
- currentContexts = elements;
- }
- elements = seed;
- }
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+ } else {
+ // The concatenated values are (context, xml) for backCompat
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && tokens.join("")
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
- if ( (not = rendsWithNot.test( part )) ) {
- part = part.slice( 0, -5 ).replace( rcombinators, "$&*" );
- anchor++;
- }
+ return elementMatcher( matchers );
+}
- if ( match.length > 1 ) {
- match[0].replace( rposgroups, setUndefined );
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, expandContext ) {
+ var elem, j, matcher,
+ setMatched = [],
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ outermost = expandContext != null,
+ contextBackup = outermostContext,
+ // We must always have either seed elements or context
+ elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+ // Nested matchers should use non-integer dirruns
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
+
+ if ( outermost ) {
+ outermostContext = context !== document && context;
+ cachedruns = superMatcher.el;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ for ( ; (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
+ if ( matcher( elem, context, xml ) ) {
+ results.push( elem );
+ break;
}
- elements = handlePOSGroup( part, match[1], match[2], currentContexts, elements, not );
}
- part = "";
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ cachedruns = ++superMatcher.el;
+ }
}
- }
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+ // They will have gone through all possible matchers
+ if ( (elem = !matcher && elem) ) {
+ matchedCount--;
+ }
- if ( !matched ) {
- part += selector;
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
}
- matched = false;
- }
- if ( part ) {
- if ( rcombinators.test(part) ) {
- multipleContexts( part, elements || [ context ], results, seed );
- } else {
- Sizzle( part, context, results, seed ? seed.concat(elements) : elements );
- }
- } else {
- push.apply( results, elements );
- }
- }
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if ( bySet && i !== matchedCount ) {
+ for ( j = 0; (matcher = setMatchers[j]); j++ ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
- // Do not sort if this is a single filter
- return len === 1 ? results : Sizzle.uniqueSort( results );
-}
+ if ( seed ) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !(unmatched[i] || setMatched[i]) ) {
+ setMatched[i] = pop.call( results );
+ }
+ }
+ }
-function select( selector, context, results, seed, xml ) {
- // Remove excessive whitespace
- selector = selector.replace( rtrim, "$1" );
- var elements, matcher, cached, elem,
- i, tokens, token, lastToken, findContext, type,
- match = tokenize( selector, context, xml ),
- contextNodeType = context.nodeType;
-
- // POS handling
- if ( matchExpr["POS"].test(selector) ) {
- return handlePOS( match, context, results, seed );
- }
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
- if ( seed ) {
- elements = slice.call( seed, 0 );
+ // Add matches to results
+ push.apply( results, setMatched );
- // To maintain document order, only narrow the
- // set if there is one group
- } else if ( match.length === 1 ) {
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
- // Take a shortcut and set the context if the root selector is an ID
- if ( (tokens = slice.call( match[0], 0 )).length > 2 &&
- (token = tokens[0]).part === "ID" &&
- contextNodeType === 9 && !xml &&
- Expr.relative[ tokens[1].part ] ) {
+ Sizzle.uniqueSort( results );
+ }
+ }
- context = Expr.find["ID"]( token.captures[0].replace( rbackslash, "" ), context, xml )[0];
- if ( !context ) {
- return results;
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
}
- selector = selector.slice( tokens.shift().string.length );
- }
+ return unmatched;
+ };
+
+ superMatcher.el = 0;
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
- findContext = ( (match = rsibling.exec( tokens[0].string )) && !match.index && context.parentNode ) || context;
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ expando ][ selector ];
- // Reduce the set if possible
- lastToken = "";
- for ( i = tokens.length - 1; i >= 0; i-- ) {
- token = tokens[i];
- type = token.part;
- lastToken = token.string + lastToken;
- if ( Expr.relative[ type ] ) {
- break;
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !group ) {
+ group = tokenize( selector );
+ }
+ i = group.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( group[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
}
- if ( Expr.order.test(type) ) {
- elements = Expr.find[ type ]( token.captures[0].replace( rbackslash, "" ), findContext, xml );
- if ( elements == null ) {
- continue;
- } else {
- selector = selector.slice( 0, selector.length - lastToken.length ) +
- lastToken.replace( matchExpr[ type ], "" );
+ }
- if ( !selector ) {
- push.apply( results, slice.call(elements, 0) );
- }
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+ }
+ return cached;
+};
- break;
+function multipleContexts( selector, contexts, results, seed ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results, seed );
+ }
+ return results;
+}
+
+function select( selector, context, results, seed, xml ) {
+ var i, tokens, token, type, find,
+ match = tokenize( selector ),
+ j = match.length;
+
+ if ( !seed ) {
+ // Try to minimize operations if there is only one group
+ if ( match.length === 1 ) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ context.nodeType === 9 && !xml &&
+ Expr.relative[ tokens[1].type ] ) {
+
+ context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0];
+ if ( !context ) {
+ return results;
}
+
+ selector = selector.slice( tokens.shift().length );
}
- }
- }
- // Only loop over the given elements once
- if ( selector ) {
- matcher = compile( selector, context, xml );
- dirruns = matcher.dirruns++;
- if ( elements == null ) {
- elements = Expr.find["TAG"]( "*", (rsibling.test( selector ) && context.parentNode) || context );
- }
+ // Fetch a seed set for right-to-left matching
+ for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ (type = token.type) ] ) {
+ break;
+ }
+ if ( (find = Expr.find[ type ]) ) {
+ // Search, expanding context for leading sibling combinators
+ if ( (seed = find(
+ token.matches[0].replace( rbackslash, "" ),
+ rsibling.test( tokens[0].type ) && context.parentNode || context,
+ xml
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && tokens.join("");
+ if ( !selector ) {
+ push.apply( results, slice.call( seed, 0 ) );
+ return results;
+ }
- for ( i = 0; (elem = elements[i]); i++ ) {
- cachedruns = matcher.runs++;
- if ( matcher(elem) ) {
- results.push( elem );
+ break;
+ }
+ }
}
}
}
+ // Compile and execute a filtering function
+ // Provide `match` to avoid retokenization if we modified the selector above
+ compile( selector, match )(
+ seed,
+ context,
+ xml,
+ results,
+ rsibling.test( selector )
+ );
return results;
}
@@ -5037,11 +5166,16 @@ if ( document.querySelectorAll ) {
oldSelect = select,
rescape = /'|\\/g,
rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
- rbuggyQSA = [],
+
+ // qSa(:focus) reports false when true (Chrome 21),
+ // A support test would require too much code (would include document ready)
+ rbuggyQSA = [":focus"],
+
+ // matchesSelector(:focus) reports false when true (Chrome 21),
// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
// A support test would require too much code (would include document ready)
// just skip matchesSelector for :active
- rbuggyMatches = [":active"],
+ rbuggyMatches = [ ":active", ":focus" ],
matches = docElem.matchesSelector ||
docElem.mozMatchesSelector ||
docElem.webkitMatchesSelector ||
@@ -5088,44 +5222,46 @@ if ( document.querySelectorAll ) {
}
});
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+ // rbuggyQSA always contains :focus, so no need for a length check
+ rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") );
select = function( selector, context, results, seed, xml ) {
// Only use querySelectorAll when not filtering,
// when this is not xml,
// and when no QSA bugs apply
if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
- if ( context.nodeType === 9 ) {
- try {
- push.apply( results, slice.call(context.querySelectorAll( selector ), 0) );
- return results;
- } catch(qsaError) {}
+ var groups, i,
+ old = true,
+ nid = expando,
+ newContext = context,
+ newSelector = context.nodeType === 9 && selector;
+
// qSA works strangely on Element-rooted queries
// We can work around this by specifying an extra ID on the root
// and working up from there (Thanks to Andrew Dupont for the technique)
// IE 8 doesn't work on object elements
- } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var groups, i, len,
- old = context.getAttribute("id"),
- nid = old || expando,
- newContext = rsibling.test( selector ) && context.parentNode || context;
-
- if ( old ) {
- nid = nid.replace( rescape, "\\$&" );
+ if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ groups = tokenize( selector );
+
+ if ( (old = context.getAttribute("id")) ) {
+ nid = old.replace( rescape, "\\$&" );
} else {
context.setAttribute( "id", nid );
}
+ nid = "[id='" + nid + "'] ";
- groups = tokenize(selector, context, xml);
- // Trailing space is unnecessary
- // There is always a context check
- nid = "[id='" + nid + "']";
- for ( i = 0, len = groups.length; i < len; i++ ) {
- groups[i] = nid + groups[i].selector;
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = nid + groups[i].join("");
}
+ newContext = rsibling.test( selector ) && context.parentNode || context;
+ newSelector = groups.join(",");
+ }
+
+ if ( newSelector ) {
try {
push.apply( results, slice.call( newContext.querySelectorAll(
- groups.join(",")
+ newSelector
), 0 ) );
return results;
} catch(qsaError) {
@@ -5150,11 +5286,11 @@ if ( document.querySelectorAll ) {
// Gecko does not error, returns false instead
try {
matches.call( div, "[test!='']:sizzle" );
- rbuggyMatches.push( matchExpr["PSEUDO"].source, matchExpr["POS"].source, "!=" );
+ rbuggyMatches.push( "!=", pseudos );
} catch ( e ) {}
});
- // rbuggyMatches always contains :active, so no need for a length check
+ // rbuggyMatches always contains :active and :focus, so no need for a length check
rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );
Sizzle.matchesSelector = function( elem, expr ) {
@@ -5183,10 +5319,12 @@ if ( document.querySelectorAll ) {
}
// Deprecated
-Expr.setFilters["nth"] = Expr.setFilters["eq"];
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
// Back-compat
-Expr.filters = Expr.pseudos;
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
// Override sizzle attribute retrieval
Sizzle.attr = jQuery.attr;
@@ -7123,10 +7261,10 @@ function buildParams( prefix, obj, traditional, add ) {
add( prefix, obj );
}
}
-var // Document location
- ajaxLocation,
- // Document location segments
+var
+ // Document location
ajaxLocParts,
+ ajaxLocation,
rhash = /#.*$/,
rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
@@ -7643,7 +7781,7 @@ jQuery.extend({
// Set data for the fake xhr object
jqXHR.status = status;
- jqXHR.statusText = "" + ( nativeStatusText || statusText );
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
// Success/Error
if ( isSuccess ) {
@@ -7703,14 +7841,11 @@ jQuery.extend({
// Extract dataTypes list
s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace );
- // Determine if a cross-domain request is in order
+ // A cross-domain request is in order when we have a protocol:host:port mismatch
if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
+ parts = rurl.exec( s.url.toLowerCase() ) || false;
+ s.crossDomain = parts && ( parts.join(":") + ( parts[ 3 ] ? "" : parts[ 1 ] === "http:" ? 80 : 443 ) ) !==
+ ( ajaxLocParts.join(":") + ( ajaxLocParts[ 3 ] ? "" : ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) );
}
// Convert data if not already a string
@@ -8405,12 +8540,13 @@ var fxNow, timerId,
animationPrefilters = [ defaultPrefilter ],
tweeners = {
"*": [function( prop, value ) {
- var end, unit, prevScale,
+ var end, unit,
tween = this.createTween( prop, value ),
parts = rfxnum.exec( value ),
target = tween.cur(),
start = +target || 0,
- scale = 1;
+ scale = 1,
+ maxIterations = 20;
if ( parts ) {
end = +parts[2];
@@ -8426,17 +8562,15 @@ var fxNow, timerId,
do {
// If previous iteration zeroed out, double until we get *something*
// Use a string for doubling factor so we don't accidentally see scale as unchanged below
- prevScale = scale = scale || ".5";
+ scale = scale || ".5";
// Adjust and apply
start = start / scale;
jQuery.style( tween.elem, prop, start + unit );
- // Update scale, tolerating zeroes from tween.cur()
- scale = tween.cur() / target;
-
- // Stop looping if we've hit the mark or scale is unchanged
- } while ( scale !== 1 && scale !== prevScale );
+ // Update scale, tolerating zero or NaN from tween.cur()
+ // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+ } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
}
tween.unit = unit;
@@ -9069,7 +9203,8 @@ jQuery.fn.offset = function( options ) {
});
}
- var box, docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, top, left,
+ var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,
+ box = { top: 0, left: 0 },
elem = this[ 0 ],
doc = elem && elem.ownerDocument;
@@ -9083,21 +9218,25 @@ jQuery.fn.offset = function( options ) {
docElem = doc.documentElement;
- // Make sure we're not dealing with a disconnected DOM node
+ // Make sure it's not a disconnected DOM node
if ( !jQuery.contains( docElem, elem ) ) {
- return { top: 0, left: 0 };
+ return box;
}
- box = elem.getBoundingClientRect();
+ // If we don't have gBCR, just use 0,0 rather than error
+ // BlackBerry 5, iOS 3 (original iPhone)
+ if ( typeof elem.getBoundingClientRect !== "undefined" ) {
+ box = elem.getBoundingClientRect();
+ }
win = getWindow( doc );
clientTop = docElem.clientTop || body.clientTop || 0;
clientLeft = docElem.clientLeft || body.clientLeft || 0;
scrollTop = win.pageYOffset || docElem.scrollTop;
scrollLeft = win.pageXOffset || docElem.scrollLeft;
- top = box.top + scrollTop - clientTop;
- left = box.left + scrollLeft - clientLeft;
-
- return { top: top, left: left };
+ return {
+ top: box.top + scrollTop - clientTop,
+ left: box.left + scrollLeft - clientLeft
+ };
};
jQuery.offset = {
diff --git a/resources/jquery/jquery.makeCollapsible.js b/resources/jquery/jquery.makeCollapsible.js
index 0a4d3645b9..ad156070dd 100644
--- a/resources/jquery/jquery.makeCollapsible.js
+++ b/resources/jquery/jquery.makeCollapsible.js
@@ -2,13 +2,13 @@
* jQuery makeCollapsible
*
* This will enable collapsible-functionality on all passed elements.
- * Will prevent binding twice to the same element.
- * Initial state is expanded by default, this can be overriden by adding class
- * "mw-collapsed" to the "mw-collapsible" element.
- * Elements made collapsible have class "mw-made-collapsible".
- * Except for tables and lists, the inner content is wrapped in "mw-collapsible-content".
+ * - Will prevent binding twice to the same element.
+ * - Initial state is expanded by default, this can be overriden by adding class
+ * "mw-collapsed" to the "mw-collapsible" element.
+ * - Elements made collapsible have jQuery data "mw-made-collapsible" set to true.
+ * - The inner content is wrapped in a "div.mw-collapsible-content" (except for tables and lists).
*
- * @author Krinkle
+ var $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
+ if ( $sortbottoms.length ) {
+ var $tfoot = $table.children( 'tfoot' );
+ if ( $tfoot.length ) {
+ $tfoot.eq(0).prepend( $sortbottoms );
+ } else {
+ $table.append( $( '' ).append( $sortbottoms ) );
+ }
+ }
+
+ explodeRowspans( $table );
+
+ // try to auto detect column type, and store in tables config
+ table.config.parsers = buildParserCache( table, $headers );
+
+ // initially build the cache for the tbody cells (to be able to sort initially)
+ cache = buildCache( table );
+
// Apply event handling to headers
// this is too big, perhaps break it out?
- $headers.click( function ( e ) {
+ $headers.filter( ':not(.unsortable)' ).click( function ( e ) {
if ( e.target.nodeName.toLowerCase() === 'a' ) {
// The user clicked on a link inside a table header
// Do nothing and let the default link click action continue
return true;
}
- if ( firstTime ) {
- firstTime = false;
-
- // Legacy fix of .sortbottoms
- // Wrap them inside inside a tfoot (because that's what they actually want to be) &
- // and put the at the end of the
- var $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
- if ( $sortbottoms.length ) {
- var $tfoot = $table.children( 'tfoot' );
- if ( $tfoot.length ) {
- $tfoot.eq(0).prepend( $sortbottoms );
- } else {
- $table.append( $( '' ).append( $sortbottoms ) );
- }
- }
-
- explodeRowspans( $table );
- // try to auto detect column type, and store in tables config
- table.config.parsers = buildParserCache( table, $headers );
- }
-
// Build the cache for the tbody cells
// to share between calculations for this sort action.
// Re-calculated each time a sort action is performed due to possiblity
@@ -655,6 +686,40 @@
return false;
}
} );
+
+ /**
+ * Sorts the table. If no sorting is specified by passing a list of sort
+ * objects, the table is sorted according to the initial sorting order.
+ * Passing an empty array will reset sorting (basically just reset the headers
+ * making the table appear unsorted).
+ *
+ * @param sortList {Array} (optional) List of sort objects.
+ */
+ $table.data( 'tablesorter' ).sort = function( sortList ) {
+
+ if ( sortList === undefined ) {
+ sortList = config.sortList;
+ } else if ( sortList.length > 0 ) {
+ sortList = convertSortList( sortList );
+ }
+
+ // re-build the cache for the tbody cells
+ cache = buildCache( table );
+
+ // set css for headers
+ setHeadersCss( table, $headers, sortList, sortCSS, sortMsg );
+
+ // sort the table and append it to the dom
+ appendToTable( table, multisort( table, sortList, cache ) );
+ };
+
+ // sort initially
+ if ( config.sortList.length > 0 ) {
+ explodeRowspans( $table );
+ config.sortList = convertSortList( config.sortList );
+ $table.data( 'tablesorter' ).sort();
+ }
+
} );
},
diff --git a/resources/mediawiki/mediawiki.hidpi.js b/resources/mediawiki/mediawiki.hidpi.js
new file mode 100644
index 0000000000..1979573047
--- /dev/null
+++ b/resources/mediawiki/mediawiki.hidpi.js
@@ -0,0 +1,5 @@
+$( function() {
+ // Apply hidpi images on DOM-ready
+ // Some may have already partly preloaded at low resolution.
+ $( 'body' ).hidpi();
+} );
\ No newline at end of file
diff --git a/resources/mediawiki/mediawiki.js b/resources/mediawiki/mediawiki.js
index b48462965f..1a72ed138f 100644
--- a/resources/mediawiki/mediawiki.js
+++ b/resources/mediawiki/mediawiki.js
@@ -828,7 +828,7 @@ var mw = ( function ( $, undefined ) {
* @param module string module name to execute
*/
function execute( module ) {
- var key, value, media, i, script, markModuleReady, nestedAddScript;
+ var key, value, media, i, urls, script, markModuleReady, nestedAddScript;
if ( registry[module] === undefined ) {
throw new Error( 'Module has not been registered yet: ' + module );
@@ -896,7 +896,12 @@ var mw = ( function ( $, undefined ) {
// Array of urls inside media-type key
} else if ( typeof value === 'object' ) {
// { "url": {